mneme-ai 2.130.0 → 2.132.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,14 @@
1
+ /**
2
+ * `mneme rail` + `mneme policy` (v2.131.0) — THE CONTEXT RAIL.
3
+ * The single governed pipe every payload crosses between a local workspace and a
4
+ * hosted model — the "Visa rail" of AI context. Composes policy · firewall ·
5
+ * blind (ingress) and egress · settlement (egress) into one signed receipt.
6
+ *
7
+ * cat src/billing.ts | mneme rail ingress --path src/billing.ts # safe-to-send form + local map
8
+ * echo "$MODEL_OUTPUT" | mneme rail egress # leak-screened + metered to the ledger
9
+ * mneme policy check --path config/.env # ALLOW | DENY (deterministic gate)
10
+ * mneme policy init # write a default mneme.policy.json
11
+ */
12
+ import type { Command } from "commander";
13
+ export declare function registerRailCommands(program: Command): void;
14
+ //# sourceMappingURL=rail.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rail.d.ts","sourceRoot":"","sources":["../../src/commands/rail.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyEzC,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAqI3D"}
@@ -0,0 +1,293 @@
1
+ /**
2
+ * `mneme rail` + `mneme policy` (v2.131.0) — THE CONTEXT RAIL.
3
+ * The single governed pipe every payload crosses between a local workspace and a
4
+ * hosted model — the "Visa rail" of AI context. Composes policy · firewall ·
5
+ * blind (ingress) and egress · settlement (egress) into one signed receipt.
6
+ *
7
+ * cat src/billing.ts | mneme rail ingress --path src/billing.ts # safe-to-send form + local map
8
+ * echo "$MODEL_OUTPUT" | mneme rail egress # leak-screened + metered to the ledger
9
+ * mneme policy check --path config/.env # ALLOW | DENY (deterministic gate)
10
+ * mneme policy init # write a default mneme.policy.json
11
+ */
12
+ import { existsSync, readFileSync, writeFileSync, appendFileSync, mkdirSync, rmdirSync, statSync } from "node:fs";
13
+ import { resolve, join, dirname } from "node:path";
14
+ import { rail, policy, settlement, notary } from "@mneme-ai/core";
15
+ const SETTLEMENT_LEDGER = ".mneme/settlement/ledger.jsonl";
16
+ const GENESIS = "0".repeat(64);
17
+ function readSettlementLedger(cwd) {
18
+ try {
19
+ const p = join(cwd, SETTLEMENT_LEDGER);
20
+ if (!existsSync(p))
21
+ return [];
22
+ return readFileSync(p, "utf8").split(/\r?\n/).filter(Boolean).map((l) => JSON.parse(l));
23
+ }
24
+ catch {
25
+ return [];
26
+ }
27
+ }
28
+ function appendSettlementLedger(cwd, rec) {
29
+ const p = join(cwd, SETTLEMENT_LEDGER);
30
+ if (!existsSync(dirname(p)))
31
+ mkdirSync(dirname(p), { recursive: true });
32
+ appendFileSync(p, JSON.stringify(rec) + "\n");
33
+ }
34
+ /**
35
+ * Run a critical section under a best-effort atomic mutex (mkdir is atomic on
36
+ * every OS). Closes the read-then-append race between two concurrent
37
+ * `rail egress` processes that would otherwise fork the chain. Total: a stale
38
+ * lock (>10s) is reclaimed, and any failure falls back to running unlocked
39
+ * rather than hanging (metering is never allowed to block the verdict).
40
+ */
41
+ function withLedgerLock(cwd, fn) {
42
+ const lockDir = join(cwd, ".mneme/settlement/.ledger.lock");
43
+ try {
44
+ if (!existsSync(dirname(lockDir)))
45
+ mkdirSync(dirname(lockDir), { recursive: true });
46
+ }
47
+ catch { /* */ }
48
+ let held = false;
49
+ for (let i = 0; i < 100; i++) {
50
+ try {
51
+ mkdirSync(lockDir);
52
+ held = true;
53
+ break;
54
+ }
55
+ catch {
56
+ try {
57
+ const age = Date.now() - statSync(lockDir).mtimeMs;
58
+ if (age > 10_000) {
59
+ rmdirSync(lockDir);
60
+ continue;
61
+ }
62
+ }
63
+ catch { /* */ }
64
+ // brief synchronous spin (≤~50ms total); never blocks indefinitely.
65
+ const until = Date.now() + 5;
66
+ while (Date.now() < until) { /* spin */ }
67
+ }
68
+ }
69
+ try {
70
+ return fn();
71
+ }
72
+ finally {
73
+ if (held) {
74
+ try {
75
+ rmdirSync(lockDir);
76
+ }
77
+ catch { /* */ }
78
+ }
79
+ }
80
+ }
81
+ function out(s) { process.stdout.write(s + "\n"); }
82
+ function err(s) { process.stderr.write(s + "\n"); }
83
+ const STDIN_CAP = 64_000_000; // 64MB — a security scan must not silently drop the tail.
84
+ function readStdin() {
85
+ return new Promise((res) => {
86
+ if (process.stdin.isTTY)
87
+ return res("");
88
+ let d = "";
89
+ let done = false;
90
+ let truncated = false;
91
+ const fin = () => {
92
+ if (done)
93
+ return;
94
+ done = true;
95
+ if (truncated)
96
+ err(`⚠️ rail: stdin exceeded ${STDIN_CAP / 1_000_000}MB and was truncated — the scan is PARTIAL; pass --file for a complete scan of large inputs.`);
97
+ res(d);
98
+ };
99
+ process.stdin.setEncoding("utf8");
100
+ process.stdin.on("data", (c) => { d += c; if (d.length > STDIN_CAP) {
101
+ truncated = true;
102
+ fin();
103
+ } });
104
+ process.stdin.on("end", fin);
105
+ process.stdin.on("error", fin);
106
+ setTimeout(fin, 4000);
107
+ });
108
+ }
109
+ async function getPayload(opts) {
110
+ if (typeof opts.text === "string")
111
+ return opts.text;
112
+ if (opts.file && existsSync(opts.file)) {
113
+ try {
114
+ return readFileSync(opts.file, "utf8");
115
+ }
116
+ catch { /* */ }
117
+ }
118
+ return readStdin();
119
+ }
120
+ function loadPolicy(cwd) {
121
+ try {
122
+ const p = resolve(cwd, "mneme.policy.json");
123
+ if (existsSync(p))
124
+ return policy.normalizePolicy(JSON.parse(readFileSync(p, "utf8")));
125
+ }
126
+ catch { /* fall through to default */ }
127
+ return policy.defaultPolicy();
128
+ }
129
+ export function registerRailCommands(program) {
130
+ // ───────────────────────────── mneme rail ─────────────────────────────
131
+ const r = program.command("rail").description("🛤 THE CONTEXT RAIL — the single governed pipe between your workspace and a model (the 'Visa rail' of AI context). ingress = policy→firewall→blind before sending; egress = leak-guard→settlement before writing. Each crossing leaves a signed receipt.");
132
+ r.command("ingress")
133
+ .description("Local context → wire. Policy-gate, neutralize injection + wrap as untrusted data, blind names/secrets. Prints the safe-to-send payload; the reverse map stays local. Exit 2 if the policy gate BLOCKs.")
134
+ .option("--text <t>", "inline content.")
135
+ .option("--file <p>", "read from a file.")
136
+ .option("--path <p>", "logical path for the policy gate (e.g. src/billing.ts).")
137
+ .option("--agent <id>", "agent id (for an allow-list policy).")
138
+ .option("--aggressive", "mask ALL user identifiers (default: sensitive only).")
139
+ .option("--map <p>", "write the local reverse map to this file (NEVER send it).")
140
+ .option("--json", "JSON output (full receipt).")
141
+ .action(async (opts) => {
142
+ const cwd = process.cwd();
143
+ const payload = await getPayload(opts);
144
+ const rec = rail.traverseIngress(payload, {
145
+ ...(opts.path ? { path: opts.path } : {}),
146
+ ...(opts.agent ? { agent: opts.agent } : {}),
147
+ policy: loadPolicy(cwd),
148
+ blindMode: opts.aggressive ? "aggressive" : "sensitive",
149
+ });
150
+ const receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: "rail.ingress", payload: { contentHash: rec.contentHash, safeHash: rec.safeHash, verdict: rec.verdict }, includePayload: true });
151
+ if (opts.map && rec.map) {
152
+ try {
153
+ writeFileSync(resolve(cwd, opts.map), JSON.stringify(rec.map, null, 2));
154
+ }
155
+ catch { /* */ }
156
+ }
157
+ if (opts.json) {
158
+ out(JSON.stringify({ ...rec, receipt }, null, 2));
159
+ }
160
+ else {
161
+ if (rec.allowed)
162
+ out(rec.safePayload);
163
+ const icon = rec.verdict === "BLOCK" ? "🛑" : rec.verdict === "REDACT" ? "🛡" : "✓";
164
+ err(`${icon} rail ingress: ${rec.verdict} — ${rec.layers.map((l) => `${l.layer}${l.ok ? "✓" : "✗"}`).join(" · ")}`);
165
+ err(` ${rec.note}`);
166
+ if (rec.map && Object.keys(rec.map).length)
167
+ err(` ${Object.keys(rec.map).length} name(s) masked${opts.map ? ` → map written to ${opts.map}` : " (use --map to save the reverse map)"}`);
168
+ err(` receipt ${receipt.receiptId ?? "(signed)"}`);
169
+ }
170
+ if (rec.verdict === "BLOCK")
171
+ process.exitCode = 2;
172
+ });
173
+ r.command("egress")
174
+ .description("Model output → local disk. Screen for secret leakage (canary/bloom/pattern/entropy), then meter the transaction into the signed settlement ledger. Exit 2 if a leak BLOCKs the write.")
175
+ .option("--text <t>", "inline content.")
176
+ .option("--file <p>", "read from a file.")
177
+ .option("--agent <id>", "agent id.")
178
+ .option("--canary <list>", "comma-separated honeytoken canaries to trip on.")
179
+ .option("--verified", "mark that a LOCAL verify (compile/test) passed.")
180
+ .option("--json", "JSON output (full receipt).")
181
+ .action(async (opts) => {
182
+ const cwd = process.cwd();
183
+ const payload = await getPayload(opts);
184
+ const canaries = (opts.canary ?? "").split(",").map((s) => s.trim()).filter(Boolean);
185
+ const rec = rail.traverseEgress(payload, {
186
+ ...(canaries.length ? { canaries } : {}),
187
+ ...(opts.agent ? { agent: opts.agent } : {}),
188
+ localVerified: opts.verified === true,
189
+ });
190
+ // settle the transaction into the signed hash-chained ledger (side-effect).
191
+ let settled = null;
192
+ if (rec.allowed && rec.txDraft) {
193
+ try {
194
+ const draft = rec.txDraft;
195
+ settled = withLedgerLock(cwd, () => {
196
+ const records = readSettlementLedger(cwd);
197
+ const prev = records.length ? records[records.length - 1].chainHash : GENESIS;
198
+ // seq = records.length + 1 to match settlement's own convention
199
+ // (settlement CLI + buildLedger start at 1) so the SHARED ledger chain
200
+ // verifies. map localVerified: boolean → "pass"/"na" (never "fail" —
201
+ // an unverified op is not a known failure).
202
+ const r2 = settlement.recordTx(prev, {
203
+ kind: draft.kind,
204
+ sentHash: draft.sentHash,
205
+ namesHidden: draft.namesHidden,
206
+ secretsRemoved: draft.secretsRemoved,
207
+ localVerified: draft.localVerified ? "pass" : "na",
208
+ tokensSent: draft.tokensSent,
209
+ tokensSaved: draft.tokensSaved,
210
+ }, records.length + 1);
211
+ appendSettlementLedger(cwd, r2);
212
+ return { seq: records.length + 1, chainHash: r2.chainHash };
213
+ });
214
+ }
215
+ catch { /* metering is best-effort; never block the verdict */ }
216
+ }
217
+ const receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: "rail.egress", payload: { contentHash: rec.contentHash, verdict: rec.verdict, settledSeq: settled?.seq ?? -1 }, includePayload: true });
218
+ if (opts.json) {
219
+ out(JSON.stringify({ ...rec, settled, receipt }, null, 2));
220
+ }
221
+ else {
222
+ if (rec.allowed)
223
+ out(rec.safePayload);
224
+ const icon = rec.verdict === "BLOCK" ? "🛑" : rec.verdict === "REDACT" ? "🛡" : "✓";
225
+ err(`${icon} rail egress: ${rec.verdict} — ${rec.layers.map((l) => `${l.layer}${l.ok ? "✓" : "✗"}`).join(" · ")}`);
226
+ err(` ${rec.note}`);
227
+ if (settled)
228
+ err(` settled → ledger seq ${settled.seq} (${settled.chainHash.slice(0, 12)}…)`);
229
+ err(` receipt ${receipt.receiptId ?? "(signed)"}`);
230
+ }
231
+ if (rec.verdict === "BLOCK")
232
+ process.exitCode = 2;
233
+ });
234
+ // ──────────────────────────── mneme policy ────────────────────────────
235
+ const p = program.command("policy").description("📜 DYNAMIC POLICY ENFORCEMENT — the deterministic access gate the rail consults before any context crosses. Configured via mneme.policy.json (deny-path globs, deny-content patterns, agent allow-list, byte cap). Fail-closed.");
236
+ p.command("check")
237
+ .description("Check a path/content/agent against the active policy. Verdict ALLOW | DENY + violations. Exit 2 on DENY.")
238
+ .option("--path <p>", "path to test.")
239
+ .option("--text <t>", "inline content to test.")
240
+ .option("--file <p>", "file whose path AND content to test.")
241
+ .option("--agent <id>", "agent id to test against the allow-list.")
242
+ .option("--json", "JSON output.")
243
+ .action(async (opts) => {
244
+ const cwd = process.cwd();
245
+ let content = typeof opts.text === "string" ? opts.text : "";
246
+ let path = opts.path;
247
+ if (opts.file) {
248
+ path = path ?? opts.file;
249
+ if (existsSync(opts.file)) {
250
+ try {
251
+ content = readFileSync(opts.file, "utf8");
252
+ }
253
+ catch { /* */ }
254
+ }
255
+ }
256
+ const d = policy.checkPolicy({ ...(path ? { path } : {}), ...(content ? { content } : {}), ...(opts.agent ? { agent: opts.agent } : {}) }, loadPolicy(cwd));
257
+ if (opts.json) {
258
+ out(JSON.stringify(d, null, 2));
259
+ }
260
+ else {
261
+ out(`${d.verdict === "ALLOW" ? "✓ ALLOW" : "🛑 DENY"} — ${d.reason}`);
262
+ for (const v of d.violations)
263
+ out(` • [${v.kind}] ${v.detail} (rule: ${v.rule})`);
264
+ }
265
+ if (!d.allowed)
266
+ process.exitCode = 2;
267
+ });
268
+ p.command("init")
269
+ .description("Write a default mneme.policy.json to the repo root (denies .env / secrets / keys / PII content). Edit to taste.")
270
+ .option("--force", "overwrite an existing policy file.")
271
+ .action((opts) => {
272
+ const cwd = process.cwd();
273
+ const dest = resolve(cwd, "mneme.policy.json");
274
+ if (existsSync(dest) && !opts.force) {
275
+ err(`mneme.policy.json already exists — pass --force to overwrite.`);
276
+ process.exitCode = 1;
277
+ return;
278
+ }
279
+ try {
280
+ writeFileSync(dest, JSON.stringify(policy.defaultPolicy(), null, 2) + "\n");
281
+ out(`✓ wrote ${dest}`);
282
+ err(` the rail will consult this on every ingress crossing. Add agent allow-lists / size caps as needed.`);
283
+ }
284
+ catch (e) {
285
+ err(`failed to write policy: ${e.message}`);
286
+ process.exitCode = 1;
287
+ }
288
+ });
289
+ p.command("show")
290
+ .description("Print the active policy (the loaded mneme.policy.json, or the built-in default).")
291
+ .action(() => { out(JSON.stringify(loadPolicy(process.cwd()), null, 2)); });
292
+ }
293
+ //# sourceMappingURL=rail.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rail.js","sourceRoot":"","sources":["../../src/commands/rail.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA2JA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA6gNvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA4JA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA8gNvD"}
package/dist/index.js CHANGED
@@ -88,6 +88,7 @@ import { registerBlindCommands } from "./commands/blind.js";
88
88
  import { registerChannelCommands } from "./commands/channel.js";
89
89
  import { registerSettlementCommands } from "./commands/settlement.js";
90
90
  import { registerFirewallCommands } from "./commands/firewall.js";
91
+ import { registerRailCommands } from "./commands/rail.js";
91
92
  import { registerTrustCommands } from "./commands/trust.js";
92
93
  import { registerNuclearCommands } from "./commands/nuclear-cli.js";
93
94
  import { registerOvernightCommand } from "./commands/overnight.js";
@@ -4721,6 +4722,7 @@ export async function run(argv) {
4721
4722
  registerChannelCommands(program);
4722
4723
  registerSettlementCommands(program);
4723
4724
  registerFirewallCommands(program);
4725
+ registerRailCommands(program);
4724
4726
  // ─── Trust calibrator (v1.31.0) -- per-subsystem precision/recall/band
4725
4727
  registerTrustCommands(program);
4726
4728
  // ─── Wisdom reactor (v1.33.0) -- five nuclear-physics formulas as Mneme metrics