mneme-ai 2.78.0 → 2.80.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/flight.d.ts +22 -0
- package/dist/commands/flight.d.ts.map +1 -0
- package/dist/commands/flight.js +83 -0
- package/dist/commands/flight.js.map +1 -0
- package/dist/commands/notary.d.ts +23 -0
- package/dist/commands/notary.d.ts.map +1 -0
- package/dist/commands/notary.js +89 -0
- package/dist/commands/notary.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +57 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.80.0 — `mneme flight <action>` · the AI black box.
|
|
3
|
+
*
|
|
4
|
+
* mneme flight record --agent A --action "..." [--kind K] [--reasoning R] [--claim C] [--reality O] [--delta MATCH|CONTRADICT|UNVERIFIED]
|
|
5
|
+
* mneme flight replay — causal-order narrative + the incident moment
|
|
6
|
+
* mneme flight verify — verify the whole recorder offline (public-key)
|
|
7
|
+
* mneme flight seal — emit ONE court-admissible signed receipt
|
|
8
|
+
*/
|
|
9
|
+
export interface FlightOpts {
|
|
10
|
+
cwd: string;
|
|
11
|
+
action: string;
|
|
12
|
+
agent?: string;
|
|
13
|
+
frameKind?: string;
|
|
14
|
+
actionText?: string;
|
|
15
|
+
reasoning?: string;
|
|
16
|
+
claim?: string;
|
|
17
|
+
reality?: string;
|
|
18
|
+
delta?: string;
|
|
19
|
+
json?: boolean;
|
|
20
|
+
}
|
|
21
|
+
export declare function flightCommand(o: FlightOpts): Promise<number>;
|
|
22
|
+
//# sourceMappingURL=flight.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flight.d.ts","sourceRoot":"","sources":["../../src/commands/flight.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAYH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,aAAa,CAAC,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAiDlE"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.80.0 — `mneme flight <action>` · the AI black box.
|
|
3
|
+
*
|
|
4
|
+
* mneme flight record --agent A --action "..." [--kind K] [--reasoning R] [--claim C] [--reality O] [--delta MATCH|CONTRADICT|UNVERIFIED]
|
|
5
|
+
* mneme flight replay — causal-order narrative + the incident moment
|
|
6
|
+
* mneme flight verify — verify the whole recorder offline (public-key)
|
|
7
|
+
* mneme flight seal — emit ONE court-admissible signed receipt
|
|
8
|
+
*/
|
|
9
|
+
import { writeSync } from "node:fs";
|
|
10
|
+
import * as core from "@mneme-ai/core";
|
|
11
|
+
function out(s) {
|
|
12
|
+
try {
|
|
13
|
+
writeSync(1, s);
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
process.stdout.write(s);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
const KINDS = new Set(["action", "decision", "claim", "tool-call", "payment", "observation"]);
|
|
20
|
+
const DELTAS = new Set(["MATCH", "CONTRADICT", "UNVERIFIED"]);
|
|
21
|
+
export async function flightCommand(o) {
|
|
22
|
+
const fr = core.flightRecorder;
|
|
23
|
+
if (o.action === "record") {
|
|
24
|
+
if (!o.agent || !o.actionText) {
|
|
25
|
+
out("✗ record requires --agent and --action\n");
|
|
26
|
+
return 2;
|
|
27
|
+
}
|
|
28
|
+
const f = fr.record(o.cwd, {
|
|
29
|
+
agent: o.agent,
|
|
30
|
+
kind: o.frameKind && KINDS.has(o.frameKind) ? o.frameKind : "action",
|
|
31
|
+
action: o.actionText,
|
|
32
|
+
reasoning: o.reasoning,
|
|
33
|
+
claim: o.claim,
|
|
34
|
+
observedReality: o.reality,
|
|
35
|
+
truthDelta: o.delta && DELTAS.has(o.delta) ? o.delta : undefined,
|
|
36
|
+
});
|
|
37
|
+
if (o.json) {
|
|
38
|
+
out(JSON.stringify(f, null, 2) + "\n");
|
|
39
|
+
return 0;
|
|
40
|
+
}
|
|
41
|
+
const mark = f.truthDelta === "CONTRADICT" ? "🔴" : f.truthDelta === "MATCH" ? "🟢" : "⚪";
|
|
42
|
+
out(`🛫 recorded frame #${f.seq} ${mark} (${f.truthDelta}) — receipt ${f.receiptId.slice(0, 12)}…\n`);
|
|
43
|
+
return 0;
|
|
44
|
+
}
|
|
45
|
+
if (o.action === "verify") {
|
|
46
|
+
const v = fr.verifyCdr(o.cwd, { sameIssuer: true });
|
|
47
|
+
if (o.json) {
|
|
48
|
+
out(JSON.stringify(v, null, 2) + "\n");
|
|
49
|
+
return v.valid ? 0 : 1;
|
|
50
|
+
}
|
|
51
|
+
out(v.valid ? `🟢 BLACK BOX INTACT — ${v.frames} frame(s) verify offline (signed + chained).\n` : `🔴 TAMPERED — ${v.reason} (at frame ${v.brokenAt}).\n`);
|
|
52
|
+
return v.valid ? 0 : 1;
|
|
53
|
+
}
|
|
54
|
+
if (o.action === "replay") {
|
|
55
|
+
const r = fr.replay(o.cwd);
|
|
56
|
+
if (o.json) {
|
|
57
|
+
out(JSON.stringify(r, null, 2) + "\n");
|
|
58
|
+
return 0;
|
|
59
|
+
}
|
|
60
|
+
const lines = [];
|
|
61
|
+
lines.push(`🎞 FLIGHT REPLAY — ${r.frames} frame(s) · chain ${r.chainValid ? "VALID ✓" : "BROKEN ✗"}`);
|
|
62
|
+
lines.push(` match=${r.counts.match} contradict=${r.counts.contradict} unverified=${r.counts.unverified}`);
|
|
63
|
+
if (r.incidentSeq !== null)
|
|
64
|
+
lines.push(` 🔴 INCIDENT at frame #${r.incidentSeq} (first claim≠reality)`);
|
|
65
|
+
lines.push("");
|
|
66
|
+
for (const n of r.narrative)
|
|
67
|
+
lines.push(` ${n}`);
|
|
68
|
+
out(lines.join("\n") + "\n");
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
if (o.action === "seal") {
|
|
72
|
+
const s = fr.seal(o.cwd);
|
|
73
|
+
if (o.json) {
|
|
74
|
+
out(JSON.stringify(s, null, 2) + "\n");
|
|
75
|
+
return 0;
|
|
76
|
+
}
|
|
77
|
+
out(`🔏 SEALED — ${s.frames} frame(s), ${s.contradictions} contradiction(s)${s.incidentSeq !== null ? ` (incident #${s.incidentSeq})` : ""}.\n head: ${s.head ?? "(empty)"}\n receipt: ${s.receipt.receiptId}\n issuer: ${s.receipt.issuerFingerprint}\n\n Hand the receipt to an auditor — it verifies offline (mneme notary verify).\n`);
|
|
78
|
+
return 0;
|
|
79
|
+
}
|
|
80
|
+
out(`✗ Unknown flight action "${o.action}". Try: record | replay | verify | seal\n`);
|
|
81
|
+
return 2;
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=flight.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flight.js","sourceRoot":"","sources":["../../src/commands/flight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.79.0 — `mneme notary <action>`
|
|
3
|
+
*
|
|
4
|
+
* Portable proof-of-provenance receipts (Ed25519). Verify with a public key
|
|
5
|
+
* alone — no Mneme, no network, no shared secret.
|
|
6
|
+
*
|
|
7
|
+
* mneme notary pubkey — show this repo's issuer public key + fingerprint
|
|
8
|
+
* mneme notary issue --subject S [--kind K] [--payload JSON] [--no-payload] [--prev ID]
|
|
9
|
+
* mneme notary verify <file|-> — verify a receipt OFFLINE (exit 0 valid, 1 invalid)
|
|
10
|
+
*/
|
|
11
|
+
export interface NotaryOpts {
|
|
12
|
+
cwd: string;
|
|
13
|
+
action: string;
|
|
14
|
+
subject?: string;
|
|
15
|
+
kind?: string;
|
|
16
|
+
payload?: string;
|
|
17
|
+
noPayload?: boolean;
|
|
18
|
+
prev?: string;
|
|
19
|
+
file?: string;
|
|
20
|
+
json?: boolean;
|
|
21
|
+
}
|
|
22
|
+
export declare function notaryCommand(opts: NotaryOpts): Promise<number>;
|
|
23
|
+
//# sourceMappingURL=notary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notary.d.ts","sourceRoot":"","sources":["../../src/commands/notary.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAUH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAID,wBAAsB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CrE"}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* v2.79.0 — `mneme notary <action>`
|
|
3
|
+
*
|
|
4
|
+
* Portable proof-of-provenance receipts (Ed25519). Verify with a public key
|
|
5
|
+
* alone — no Mneme, no network, no shared secret.
|
|
6
|
+
*
|
|
7
|
+
* mneme notary pubkey — show this repo's issuer public key + fingerprint
|
|
8
|
+
* mneme notary issue --subject S [--kind K] [--payload JSON] [--no-payload] [--prev ID]
|
|
9
|
+
* mneme notary verify <file|-> — verify a receipt OFFLINE (exit 0 valid, 1 invalid)
|
|
10
|
+
*/
|
|
11
|
+
import { writeSync, readFileSync } from "node:fs";
|
|
12
|
+
import * as core from "@mneme-ai/core";
|
|
13
|
+
import { parseJsonArg } from "../util/json_arg.js";
|
|
14
|
+
function out(s) {
|
|
15
|
+
try {
|
|
16
|
+
writeSync(1, s);
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
process.stdout.write(s);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
const KINDS = new Set(["claim-verdict", "protocol-hop", "memory-capsule", "reasoning-trace", "generic"]);
|
|
23
|
+
export async function notaryCommand(opts) {
|
|
24
|
+
const { getIssuerKeyPair, issueReceipt, verifyReceipt } = core.notary;
|
|
25
|
+
if (opts.action === "pubkey" || opts.action === "keygen") {
|
|
26
|
+
const kp = getIssuerKeyPair(opts.cwd);
|
|
27
|
+
if (opts.json) {
|
|
28
|
+
out(JSON.stringify({ alg: "ed25519", fingerprint: kp.fingerprint, publicKeyB64: kp.publicKeyB64 }, null, 2) + "\n");
|
|
29
|
+
return 0;
|
|
30
|
+
}
|
|
31
|
+
out(`🪪 MNEME NOTARY — issuer public key (this repo)\n\n alg: ed25519\n fingerprint: ${kp.fingerprint}\n publicKey: ${kp.publicKeyB64}\n\n Share the public key. Anyone can verify your receipts offline with it.\n The private key stays in .mneme/notary/issuer.key (never shared).\n`);
|
|
32
|
+
return 0;
|
|
33
|
+
}
|
|
34
|
+
if (opts.action === "issue") {
|
|
35
|
+
if (!opts.subject) {
|
|
36
|
+
out("✗ issue requires --subject\n");
|
|
37
|
+
return 2;
|
|
38
|
+
}
|
|
39
|
+
const kind = opts.kind && KINDS.has(opts.kind) ? opts.kind : "generic";
|
|
40
|
+
let payload = undefined;
|
|
41
|
+
if (opts.payload) {
|
|
42
|
+
try {
|
|
43
|
+
payload = parseJsonArg(opts.payload);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
out("✗ --payload is not valid JSON\n");
|
|
47
|
+
return 2;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const r = issueReceipt(opts.cwd, {
|
|
51
|
+
kind, subject: opts.subject, payload,
|
|
52
|
+
includePayload: !opts.noPayload, prev: opts.prev ?? null,
|
|
53
|
+
});
|
|
54
|
+
out(JSON.stringify(r, null, 2) + "\n");
|
|
55
|
+
return 0;
|
|
56
|
+
}
|
|
57
|
+
if (opts.action === "verify") {
|
|
58
|
+
let raw;
|
|
59
|
+
try {
|
|
60
|
+
raw = opts.file && opts.file !== "-" ? readFileSync(opts.file, "utf8") : readFileSync(0, "utf8");
|
|
61
|
+
}
|
|
62
|
+
catch (e) {
|
|
63
|
+
out(`✗ cannot read receipt: ${e.message}\n`);
|
|
64
|
+
return 2;
|
|
65
|
+
}
|
|
66
|
+
let receipt;
|
|
67
|
+
try {
|
|
68
|
+
receipt = JSON.parse(raw);
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
out("✗ receipt is not valid JSON\n");
|
|
72
|
+
return 2;
|
|
73
|
+
}
|
|
74
|
+
const v = verifyReceipt(receipt);
|
|
75
|
+
if (opts.json) {
|
|
76
|
+
out(JSON.stringify(v, null, 2) + "\n");
|
|
77
|
+
return v.valid ? 0 : 1;
|
|
78
|
+
}
|
|
79
|
+
if (v.valid) {
|
|
80
|
+
out(`🟢 VALID — signature verifies offline against the embedded public key.\n issuer: ${v.issuerFingerprint}\n kind: ${v.kind}\n subject: ${v.subject}\n`);
|
|
81
|
+
return 0;
|
|
82
|
+
}
|
|
83
|
+
out(`🔴 INVALID — ${v.reason}\n`);
|
|
84
|
+
return 1;
|
|
85
|
+
}
|
|
86
|
+
out(`✗ Unknown notary action "${opts.action}". Try: pubkey | issue | verify\n`);
|
|
87
|
+
return 2;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=notary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notary.js","sourceRoot":"","sources":["../../src/commands/notary.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":"AAuIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAuIA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAm3MvD"}
|
package/dist/index.js
CHANGED
|
@@ -4181,6 +4181,63 @@ export async function run(argv) {
|
|
|
4181
4181
|
const { immuneCommand } = await import("./commands/immune.js");
|
|
4182
4182
|
process.exit(await immuneCommand({ cwd: process.cwd(), json: !!opts.json }));
|
|
4183
4183
|
});
|
|
4184
|
+
// v2.79.0 — NOTARY. Portable, offline-verifiable proof-of-provenance receipts
|
|
4185
|
+
// (Ed25519). Verify with a public key alone — no Mneme, no network, no secret.
|
|
4186
|
+
// The TRUST FABRIC spine for cross-protocol routing, portable memory, and the
|
|
4187
|
+
// AI flight recorder.
|
|
4188
|
+
program
|
|
4189
|
+
.command("notary <action>")
|
|
4190
|
+
.description("🪪 NOTARY — Ed25519-signed proof receipts anyone verifies OFFLINE with a public key (no Mneme, no network, no shared secret). actions: pubkey | issue | verify <file|->. Mneme's first asymmetric-crypto primitive.")
|
|
4191
|
+
.option("--subject <s>", "what the receipt attests (issue)")
|
|
4192
|
+
.option("--kind <k>", "claim-verdict | protocol-hop | memory-capsule | reasoning-trace | generic", "generic")
|
|
4193
|
+
.option("--payload <json>", "JSON payload to attest (issue)")
|
|
4194
|
+
.option("--hash-only", "privacy: omit the inline payload, attest only its hash (issue)", false)
|
|
4195
|
+
.option("--prev <id>", "previous receiptId to chain onto (issue)")
|
|
4196
|
+
.option("--file <path>", "receipt file to verify (use '-' for stdin)")
|
|
4197
|
+
.option("--json", "machine-readable output", false)
|
|
4198
|
+
.action(async (action, o) => {
|
|
4199
|
+
const { notaryCommand } = await import("./commands/notary.js");
|
|
4200
|
+
process.exit(await notaryCommand({
|
|
4201
|
+
cwd: process.cwd(),
|
|
4202
|
+
action,
|
|
4203
|
+
subject: o.subject,
|
|
4204
|
+
kind: o.kind,
|
|
4205
|
+
payload: o.payload,
|
|
4206
|
+
noPayload: !!o.hashOnly,
|
|
4207
|
+
prev: o.prev,
|
|
4208
|
+
file: o.file,
|
|
4209
|
+
json: !!o.json,
|
|
4210
|
+
}));
|
|
4211
|
+
});
|
|
4212
|
+
// v2.80.0 — FLIGHT RECORDER (💎3). The tamper-evident, replayable AI black box,
|
|
4213
|
+
// built on the NOTARY spine — every frame is a signed, chained receipt the
|
|
4214
|
+
// whole recorder verifies offline; seal = one court-admissible artifact.
|
|
4215
|
+
program
|
|
4216
|
+
.command("flight <action>")
|
|
4217
|
+
.description("🛫 FLIGHT RECORDER — the AI black box. record/replay/verify/seal an agent's actions+reasoning+claim-vs-reality as signed, chained receipts (built on NOTARY). actions: record | replay | verify | seal.")
|
|
4218
|
+
.option("--agent <a>", "agent id (record)")
|
|
4219
|
+
.option("--action <text>", "what the agent did (record)")
|
|
4220
|
+
.option("--kind <k>", "action | decision | claim | tool-call | payment | observation", "action")
|
|
4221
|
+
.option("--reasoning <r>", "why — reasoning trace (record)")
|
|
4222
|
+
.option("--claim <c>", "a checkable claim the agent asserted (record)")
|
|
4223
|
+
.option("--reality <o>", "what was actually observed/true (record)")
|
|
4224
|
+
.option("--delta <d>", "explicit MATCH | CONTRADICT | UNVERIFIED (overrides heuristic)")
|
|
4225
|
+
.option("--json", "machine-readable output", false)
|
|
4226
|
+
.action(async (action, o) => {
|
|
4227
|
+
const { flightCommand } = await import("./commands/flight.js");
|
|
4228
|
+
process.exit(await flightCommand({
|
|
4229
|
+
cwd: process.cwd(),
|
|
4230
|
+
action,
|
|
4231
|
+
agent: o.agent,
|
|
4232
|
+
actionText: o.action,
|
|
4233
|
+
frameKind: o.kind,
|
|
4234
|
+
reasoning: o.reasoning,
|
|
4235
|
+
claim: o.claim,
|
|
4236
|
+
reality: o.reality,
|
|
4237
|
+
delta: o.delta,
|
|
4238
|
+
json: !!o.json,
|
|
4239
|
+
}));
|
|
4240
|
+
});
|
|
4184
4241
|
program
|
|
4185
4242
|
.command("atlas")
|
|
4186
4243
|
.description("🗺 ATLAS HELP — six-layer discovery (TASTE · BLOOM · HOT · TAGS · INTENT · FULL). AI agents read 200 bytes here instead of 14 KB from --help.")
|