mneme-ai 2.116.0 → 2.118.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/egress.d.ts +17 -0
- package/dist/commands/egress.d.ts.map +1 -0
- package/dist/commands/egress.js +133 -0
- package/dist/commands/egress.js.map +1 -0
- package/dist/commands/map.d.ts.map +1 -1
- package/dist/commands/map.js +68 -6
- package/dist/commands/map.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme egress` (v2.118.0) — SOVEREIGN EGRESS GUARD. Scan an outbound AI
|
|
3
|
+
* payload at the boundary: pattern-redact known secrets, trip on honeytoken
|
|
4
|
+
* canaries (exfiltration), catch registered secrets via a Bloom filter — and
|
|
5
|
+
* emit a SIGNED certificate a risk officer can audit offline. "Our code/secrets
|
|
6
|
+
* never leak to the model — with proof."
|
|
7
|
+
*
|
|
8
|
+
* mycmd-context | mneme egress scan # scan stdin
|
|
9
|
+
* mneme egress scan --file out.txt --json # structured + signed
|
|
10
|
+
* mneme egress seed-canary # plant a tripwire token
|
|
11
|
+
*
|
|
12
|
+
* Zero config: canaries from .mneme/egress/canaries.txt, secret fingerprints
|
|
13
|
+
* from .mneme/egress/secrets.txt (gitignored; never stored in the cert).
|
|
14
|
+
*/
|
|
15
|
+
import type { Command } from "commander";
|
|
16
|
+
export declare function registerEgressCommands(program: Command): void;
|
|
17
|
+
//# sourceMappingURL=egress.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.d.ts","sourceRoot":"","sources":["../../src/commands/egress.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4BzC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+C7D"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme egress` (v2.118.0) — SOVEREIGN EGRESS GUARD. Scan an outbound AI
|
|
3
|
+
* payload at the boundary: pattern-redact known secrets, trip on honeytoken
|
|
4
|
+
* canaries (exfiltration), catch registered secrets via a Bloom filter — and
|
|
5
|
+
* emit a SIGNED certificate a risk officer can audit offline. "Our code/secrets
|
|
6
|
+
* never leak to the model — with proof."
|
|
7
|
+
*
|
|
8
|
+
* mycmd-context | mneme egress scan # scan stdin
|
|
9
|
+
* mneme egress scan --file out.txt --json # structured + signed
|
|
10
|
+
* mneme egress seed-canary # plant a tripwire token
|
|
11
|
+
*
|
|
12
|
+
* Zero config: canaries from .mneme/egress/canaries.txt, secret fingerprints
|
|
13
|
+
* from .mneme/egress/secrets.txt (gitignored; never stored in the cert).
|
|
14
|
+
*/
|
|
15
|
+
import { existsSync, readFileSync, mkdirSync, appendFileSync, writeFileSync } from "node:fs";
|
|
16
|
+
import { join, dirname } from "node:path";
|
|
17
|
+
import { randomBytes } from "node:crypto";
|
|
18
|
+
function writeJson(p) { process.stdout.write(JSON.stringify(p, null, 2) + "\n"); }
|
|
19
|
+
function writeText(l) { process.stdout.write(l + "\n"); }
|
|
20
|
+
async function core() {
|
|
21
|
+
try {
|
|
22
|
+
const c = (await import("@mneme-ai/core"));
|
|
23
|
+
if (c.egress)
|
|
24
|
+
return c;
|
|
25
|
+
}
|
|
26
|
+
catch { /* */ }
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
const CANARY_FILE = ".mneme/egress/canaries.txt";
|
|
30
|
+
const SECRETS_FILE = ".mneme/egress/secrets.txt";
|
|
31
|
+
function readLines(p) { try {
|
|
32
|
+
return existsSync(p) ? readFileSync(p, "utf8").split(/\r?\n/).map((l) => l.trim()).filter(Boolean) : [];
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
return [];
|
|
36
|
+
} }
|
|
37
|
+
function readStdin() {
|
|
38
|
+
return new Promise((resolve) => {
|
|
39
|
+
if (process.stdin.isTTY)
|
|
40
|
+
return resolve("");
|
|
41
|
+
let d = "";
|
|
42
|
+
let done = false;
|
|
43
|
+
const fin = () => { if (!done) {
|
|
44
|
+
done = true;
|
|
45
|
+
resolve(d);
|
|
46
|
+
} };
|
|
47
|
+
process.stdin.setEncoding("utf8");
|
|
48
|
+
process.stdin.on("data", (c) => { d += c; if (d.length > 8_000_000)
|
|
49
|
+
fin(); });
|
|
50
|
+
process.stdin.on("end", fin);
|
|
51
|
+
process.stdin.on("error", fin);
|
|
52
|
+
setTimeout(fin, 4000);
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
export function registerEgressCommands(program) {
|
|
56
|
+
const eg = program.command("egress").description("🛡 SOVEREIGN EGRESS GUARD — scan outbound AI payloads at the boundary (pattern-redact secrets + honeytoken tripwire + Bloom secret-membership), emit a SIGNED certificate. 'Code/secrets never leak — with proof.'");
|
|
57
|
+
eg.command("scan")
|
|
58
|
+
.description("Scan an outbound payload (stdin / --file / --text). Verdict ALLOW | REDACT | BLOCK + signed cert. Exit 2 on BLOCK (CI-gate).")
|
|
59
|
+
.option("--text <t>", "payload inline (else stdin).")
|
|
60
|
+
.option("--file <p>", "read payload from a file.")
|
|
61
|
+
.option("--json", "JSON output (redacted payload + signed cert).")
|
|
62
|
+
.action(async (opts) => {
|
|
63
|
+
const m = await core();
|
|
64
|
+
if (!m) {
|
|
65
|
+
writeText("✗ core unavailable");
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
return;
|
|
68
|
+
}
|
|
69
|
+
const cwd = process.cwd();
|
|
70
|
+
let payload = typeof opts.text === "string" ? opts.text : "";
|
|
71
|
+
if (!payload && opts.file) {
|
|
72
|
+
try {
|
|
73
|
+
if (existsSync(opts.file))
|
|
74
|
+
payload = readFileSync(opts.file, "utf8");
|
|
75
|
+
}
|
|
76
|
+
catch { /* */ }
|
|
77
|
+
}
|
|
78
|
+
if (!payload)
|
|
79
|
+
payload = await readStdin();
|
|
80
|
+
const canaries = readLines(join(cwd, CANARY_FILE));
|
|
81
|
+
const secrets = readLines(join(cwd, SECRETS_FILE));
|
|
82
|
+
const secretBloom = secrets.length > 0 ? m.egress.buildSecretBloom(secrets, { m: 1 << 16, k: 5 }) : undefined;
|
|
83
|
+
const r = m.egress.scanEgress({ payload, canaries, secretBloom });
|
|
84
|
+
let receipt = null;
|
|
85
|
+
try {
|
|
86
|
+
receipt = m.notary?.issueReceipt(cwd, { kind: "claim-verdict", subject: `egress:${r.verdict}`, payload: { verdict: r.verdict, contentHash: r.contentHash, secretsRedacted: r.secretsRedacted, canariesTripped: r.canariesTripped.length, bloomHits: r.bloomHits, residualRisk: r.residualRisk }, includePayload: true });
|
|
87
|
+
}
|
|
88
|
+
catch { /* */ }
|
|
89
|
+
if (opts.json) {
|
|
90
|
+
writeJson({ verdict: r.verdict, secretsRedacted: r.secretsRedacted, canariesTripped: r.canariesTripped.length, bloomHits: r.bloomHits, residualRisk: r.residualRisk, findings: r.findings, contentHash: r.contentHash, redactedPayload: r.redactedPayload, signed: receipt, note: r.note });
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
const icon = r.verdict === "BLOCK" ? "🛑" : r.verdict === "REDACT" ? "✂️" : "✓";
|
|
94
|
+
writeText(`${icon} EGRESS ${r.verdict} — ${r.secretsRedacted} secret(s) redacted · ${r.canariesTripped.length} canary tripwire(s) · ${r.bloomHits} registered-secret hit(s) · residual risk ${r.residualRisk}`);
|
|
95
|
+
for (const f of r.findings)
|
|
96
|
+
writeText(` • ${f.kind}: ${f.count}`);
|
|
97
|
+
if (r.verdict === "BLOCK")
|
|
98
|
+
writeText(` 🛑 HONEYTOKEN TRIPPED — an org canary appeared in an outbound payload. This is an exfiltration signal; DO NOT send.`);
|
|
99
|
+
if (receipt)
|
|
100
|
+
writeText(` ✓ signed egress certificate (binds payload hash ${r.contentHash.slice(0, 12)}… — verify offline with the NOTARY public key)`);
|
|
101
|
+
}
|
|
102
|
+
if (r.verdict === "BLOCK")
|
|
103
|
+
process.exitCode = 2;
|
|
104
|
+
});
|
|
105
|
+
eg.command("seed-canary")
|
|
106
|
+
.description("Plant a deterministic honeytoken canary into .mneme/egress/canaries.txt — if it ever appears in an outbound payload, the guard BLOCKs (exfiltration tripwire).")
|
|
107
|
+
.option("--label <l>", "human label for the canary", "default")
|
|
108
|
+
.action(async (opts) => {
|
|
109
|
+
const cwd = process.cwd();
|
|
110
|
+
const token = `mneme-canary-${(opts.label ?? "default").replace(/[^a-z0-9_-]/gi, "")}-${randomBytes(6).toString("hex")}`;
|
|
111
|
+
try {
|
|
112
|
+
const p = join(cwd, CANARY_FILE);
|
|
113
|
+
if (!existsSync(dirname(p)))
|
|
114
|
+
mkdirSync(dirname(p), { recursive: true });
|
|
115
|
+
appendFileSync(p, token + "\n");
|
|
116
|
+
// best-effort: keep canaries out of git
|
|
117
|
+
try {
|
|
118
|
+
const gi = join(cwd, ".gitignore");
|
|
119
|
+
const cur = existsSync(gi) ? readFileSync(gi, "utf8") : "";
|
|
120
|
+
if (!cur.includes(".mneme/egress/"))
|
|
121
|
+
writeFileSync(gi, cur + (cur.endsWith("\n") || cur === "" ? "" : "\n") + ".mneme/egress/\n");
|
|
122
|
+
}
|
|
123
|
+
catch { /* */ }
|
|
124
|
+
writeText(`🪤 canary planted: ${token}`);
|
|
125
|
+
writeText(` Place it in a decoy config/secret. If it ever crosses egress, the guard BLOCKs + signs an alert.`);
|
|
126
|
+
}
|
|
127
|
+
catch (e) {
|
|
128
|
+
writeText(`✗ ${e.message}`);
|
|
129
|
+
process.exitCode = 1;
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=egress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"egress.js","sourceRoot":"","sources":["../../src/commands/egress.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"map.d.ts","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwFzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAwC1D"}
|
package/dist/commands/map.js
CHANGED
|
@@ -12,6 +12,7 @@
|
|
|
12
12
|
*/
|
|
13
13
|
import { existsSync, readFileSync } from "node:fs";
|
|
14
14
|
import { join } from "node:path";
|
|
15
|
+
import { getVersion } from "../version.js";
|
|
15
16
|
function writeText(l) { process.stdout.write(l + "\n"); }
|
|
16
17
|
function writeJson(p) { process.stdout.write(JSON.stringify(p, null, 2) + "\n"); }
|
|
17
18
|
async function core() {
|
|
@@ -24,7 +25,7 @@ async function core() {
|
|
|
24
25
|
return null;
|
|
25
26
|
}
|
|
26
27
|
function readVersion() { try {
|
|
27
|
-
return
|
|
28
|
+
return getVersion();
|
|
28
29
|
}
|
|
29
30
|
catch {
|
|
30
31
|
return "";
|
|
@@ -85,6 +86,35 @@ function gatherState(m, cwd) {
|
|
|
85
86
|
catch {
|
|
86
87
|
nodes.push({ label: "CORTEX", status: "idle" });
|
|
87
88
|
}
|
|
89
|
+
// HYDRA — signed context codebook
|
|
90
|
+
try {
|
|
91
|
+
const p = join(cwd, ".mneme", "hydra", "codebook.json");
|
|
92
|
+
if (existsSync(p)) {
|
|
93
|
+
const cb = JSON.parse(readFileSync(p, "utf8"));
|
|
94
|
+
const entries = cb.codebook && typeof cb.codebook === "object" ? Object.keys(cb.codebook).length : 0;
|
|
95
|
+
nodes.push({ label: "HYDRA", status: entries > 0 ? "ok" : "idle" });
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
nodes.push({ label: "HYDRA", status: "idle" });
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
nodes.push({ label: "HYDRA", status: "idle" });
|
|
103
|
+
}
|
|
104
|
+
// GEPHYRA — truth-customs bridge (real status reader)
|
|
105
|
+
try {
|
|
106
|
+
if (m.gephyra) {
|
|
107
|
+
const g = m.gephyra.bridgeStatus(cwd);
|
|
108
|
+
const status = g.quarantined > 0 ? "warn" : g.crossings > 0 && g.chainValid ? "ok" : "idle";
|
|
109
|
+
nodes.push({ label: "GEPHYRA", status });
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
nodes.push({ label: "GEPHYRA", status: "idle" });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
nodes.push({ label: "GEPHYRA", status: "idle" });
|
|
117
|
+
}
|
|
88
118
|
// TRUTH — always present (the savant identity)
|
|
89
119
|
nodes.unshift({ label: "TRUTH", status: "ok" });
|
|
90
120
|
return { state: { version: readVersion(), nodes, savingsSpark, headline: headline || undefined, signed: true } };
|
|
@@ -96,6 +126,8 @@ export function registerMapCommands(program) {
|
|
|
96
126
|
.description("🗺️ VISUAL KNOWLEDGE MAP — render Mneme's live signed state as a gorgeous terminal constellation (savings / loop / cortex / truth). Auto-adapts: truecolor gradients → 256-color → plain ASCII on a pipe/CI. Zero config.")
|
|
97
127
|
.option("--json", "emit the underlying state instead of the rendered frame.")
|
|
98
128
|
.option("--ascii", "force pure-ASCII output (no color, no Unicode).")
|
|
129
|
+
.option("--watch", "live-refresh the map until Ctrl-C (TTY only; on a pipe it renders once).")
|
|
130
|
+
.option("--interval <ms>", "watch refresh interval in ms (default 1500)", (v) => parseInt(v, 10))
|
|
99
131
|
.action(async (opts) => {
|
|
100
132
|
const m = await core();
|
|
101
133
|
if (!m) {
|
|
@@ -104,14 +136,44 @@ export function registerMapCommands(program) {
|
|
|
104
136
|
return;
|
|
105
137
|
}
|
|
106
138
|
const cwd = process.cwd();
|
|
107
|
-
const {
|
|
139
|
+
const env = opts.ascii ? { ...process.env, MNEME_NO_COLOR: "1", MNEME_ASCII: "1" } : process.env;
|
|
140
|
+
const caps = () => m.visual.detectCaps(env, Boolean(process.stdout.isTTY), process.stdout.columns);
|
|
141
|
+
const renderNow = () => m.visual.renderKnowledgeMap(gatherState(m, cwd).state, caps());
|
|
108
142
|
if (opts.json) {
|
|
109
|
-
writeJson(state);
|
|
143
|
+
writeJson(gatherState(m, cwd).state);
|
|
110
144
|
return;
|
|
111
145
|
}
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
146
|
+
// ── one-shot (default, and the SAFE path on a pipe / CI / non-TTY) ──
|
|
147
|
+
if (!opts.watch || !process.stdout.isTTY) {
|
|
148
|
+
writeText(renderNow());
|
|
149
|
+
return;
|
|
150
|
+
}
|
|
151
|
+
// ── live refresh (TTY only). Alt-screen + hidden cursor; flicker-free
|
|
152
|
+
// redraw (home + clear-below, not a full clear). Ctrl-C restores. ──
|
|
153
|
+
const interval = Math.max(500, Math.min(10_000, Number.isFinite(opts.interval) ? opts.interval : 1500));
|
|
154
|
+
const ALT_ON = "\x1b[?1049h", ALT_OFF = "\x1b[?1049l", CUR_HIDE = "\x1b[?25l", CUR_SHOW = "\x1b[?25h", HOME = "\x1b[H", CLEAR_BELOW = "\x1b[0J";
|
|
155
|
+
let stopped = false;
|
|
156
|
+
const restore = () => { if (stopped)
|
|
157
|
+
return; stopped = true; try {
|
|
158
|
+
process.stdout.write(CUR_SHOW + ALT_OFF);
|
|
159
|
+
}
|
|
160
|
+
catch { /* */ } };
|
|
161
|
+
const footer = "\n\n ctrl-c to exit · live\n";
|
|
162
|
+
const tick = () => { if (stopped)
|
|
163
|
+
return; try {
|
|
164
|
+
process.stdout.write(HOME + renderNow() + footer + CLEAR_BELOW);
|
|
165
|
+
}
|
|
166
|
+
catch { /* */ } };
|
|
167
|
+
try {
|
|
168
|
+
process.stdout.write(ALT_ON + CUR_HIDE);
|
|
169
|
+
}
|
|
170
|
+
catch { /* */ }
|
|
171
|
+
tick(); // first frame immediately
|
|
172
|
+
const timer = setInterval(tick, interval);
|
|
173
|
+
const onExit = () => { clearInterval(timer); restore(); process.exit(0); };
|
|
174
|
+
process.on("SIGINT", onExit);
|
|
175
|
+
process.on("SIGTERM", onExit);
|
|
176
|
+
// keep the process alive on the timer; never throw
|
|
115
177
|
});
|
|
116
178
|
}
|
|
117
179
|
//# sourceMappingURL=map.js.map
|
package/dist/commands/map.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/commands/map.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAGH,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"map.js","sourceRoot":"","sources":["../../src/commands/map.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":"AAmJA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAqgNvD"}
|
package/dist/index.js
CHANGED
|
@@ -79,6 +79,7 @@ import { registerLoopguardCommands } from "./commands/loopguard.js";
|
|
|
79
79
|
import { registerDistillCommands } from "./commands/distill.js";
|
|
80
80
|
import { registerSavingsCommands } from "./commands/savings.js";
|
|
81
81
|
import { registerMapCommands } from "./commands/map.js";
|
|
82
|
+
import { registerEgressCommands } from "./commands/egress.js";
|
|
82
83
|
import { registerTrustCommands } from "./commands/trust.js";
|
|
83
84
|
import { registerNuclearCommands } from "./commands/nuclear-cli.js";
|
|
84
85
|
import { registerOvernightCommand } from "./commands/overnight.js";
|
|
@@ -4703,6 +4704,7 @@ export async function run(argv) {
|
|
|
4703
4704
|
registerDistillCommands(program);
|
|
4704
4705
|
registerSavingsCommands(program);
|
|
4705
4706
|
registerMapCommands(program);
|
|
4707
|
+
registerEgressCommands(program);
|
|
4706
4708
|
// ─── Trust calibrator (v1.31.0) -- per-subsystem precision/recall/band
|
|
4707
4709
|
registerTrustCommands(program);
|
|
4708
4710
|
// ─── Wisdom reactor (v1.33.0) -- five nuclear-physics formulas as Mneme metrics
|