mneme-ai 2.138.0 โ 2.139.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/pce.d.ts +15 -0
- package/dist/commands/pce.d.ts.map +1 -0
- package/dist/commands/pce.js +97 -0
- package/dist/commands/pce.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 +5 -5
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme pce` (v2.139.0) โ Proof-Carrying Edit (๐2). Attach a SIGNED certificate
|
|
3
|
+
* to an AI's diff that statically proves what it touches + introduces, so a
|
|
4
|
+
* reviewer/CI trusts the analysis offline without re-running it or trusting the
|
|
5
|
+
* author. Tampering with the diff OR the cert is caught.
|
|
6
|
+
*
|
|
7
|
+
* git diff | mneme pce --scope "src/**" --forbid network,childProcess
|
|
8
|
+
* mneme pce --diff change.patch --json > passport.json
|
|
9
|
+
* git diff | mneme pce verify --passport passport.json --scope "src/**"
|
|
10
|
+
*
|
|
11
|
+
* Exit 2 on BLOCK (out-of-scope ยท secret added ยท forbidden primitive) โ CI-gate.
|
|
12
|
+
*/
|
|
13
|
+
import type { Command } from "commander";
|
|
14
|
+
export declare function registerPceCommands(program: Command): void;
|
|
15
|
+
//# sourceMappingURL=pce.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pce.d.ts","sourceRoot":"","sources":["../../src/commands/pce.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAazC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA0C1D"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme pce` (v2.139.0) โ Proof-Carrying Edit (๐2). Attach a SIGNED certificate
|
|
3
|
+
* to an AI's diff that statically proves what it touches + introduces, so a
|
|
4
|
+
* reviewer/CI trusts the analysis offline without re-running it or trusting the
|
|
5
|
+
* author. Tampering with the diff OR the cert is caught.
|
|
6
|
+
*
|
|
7
|
+
* git diff | mneme pce --scope "src/**" --forbid network,childProcess
|
|
8
|
+
* mneme pce --diff change.patch --json > passport.json
|
|
9
|
+
* git diff | mneme pce verify --passport passport.json --scope "src/**"
|
|
10
|
+
*
|
|
11
|
+
* Exit 2 on BLOCK (out-of-scope ยท secret added ยท forbidden primitive) โ CI-gate.
|
|
12
|
+
*/
|
|
13
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
14
|
+
import { pce, notary } from "@mneme-ai/core";
|
|
15
|
+
function out(s) { process.stdout.write(s + "\n"); }
|
|
16
|
+
function readDiff(file) {
|
|
17
|
+
try {
|
|
18
|
+
if (file && file !== "-" && existsSync(file))
|
|
19
|
+
return readFileSync(file, "utf8");
|
|
20
|
+
return readFileSync(0, "utf8"); // stdin
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
return "";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
function splitList(v) { return typeof v === "string" && v.trim() ? v.split(",").map((s) => s.trim()).filter(Boolean) : []; }
|
|
27
|
+
export function registerPceCommands(program) {
|
|
28
|
+
const cmd = program
|
|
29
|
+
.command("pce")
|
|
30
|
+
.description("๐ PCE โ Proof-Carrying Edit. Attach a SIGNED certificate to an AI's diff that statically PROVES what it does/doesn't do โ which paths it touches, whether it stays inside a declared --scope, the dangerous primitives it introduces (eval/childProcess/fsDelete/network/dynamicImport), add/delete balance, and secret literals. A reviewer/CI verifies it OFFLINE (trusts the analysis, not the author); tampering with the diff OR the cert is caught. Exit 2 on BLOCK. HONEST: static lexical+structural analysis โ proves declared checkable properties, NOT total runtime safety.")
|
|
31
|
+
.argument("[action]", "omit to certify; 'verify' to check a passport")
|
|
32
|
+
.option("--diff <file>", "unified diff file (default: stdin)")
|
|
33
|
+
.option("--scope <globs>", "comma-separated allowed path globs (e.g. \"src/**,test/**\")")
|
|
34
|
+
.option("--forbid <names>", "comma-separated primitives to BLOCK: eval,childProcess,fsDelete,network,dynamicImport")
|
|
35
|
+
.option("--passport <file>", "(verify) the passport JSON to check against the diff")
|
|
36
|
+
.option("--json", "JSON output")
|
|
37
|
+
.action((action, opts) => {
|
|
38
|
+
const diff = readDiff(opts.diff);
|
|
39
|
+
const analysisOpts = { declaredScope: splitList(opts.scope), forbidPrimitives: splitList(opts.forbid) };
|
|
40
|
+
if (action === "verify") {
|
|
41
|
+
if (!opts.passport || !existsSync(opts.passport)) {
|
|
42
|
+
out("โ --passport <file> required for verify");
|
|
43
|
+
process.exitCode = 2;
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
let passport;
|
|
47
|
+
try {
|
|
48
|
+
const j = JSON.parse(readFileSync(opts.passport, "utf8"));
|
|
49
|
+
passport = (j.passport ?? j);
|
|
50
|
+
}
|
|
51
|
+
catch {
|
|
52
|
+
out("โ could not parse passport JSON");
|
|
53
|
+
process.exitCode = 2;
|
|
54
|
+
return;
|
|
55
|
+
}
|
|
56
|
+
const v = pce.verifyPassport(diff, passport, analysisOpts);
|
|
57
|
+
if (opts.json) {
|
|
58
|
+
out(JSON.stringify(v, null, 2));
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
out(`${v.ok ? "โ VERIFIED" : "๐ INVALID"} โ ${v.reason}`);
|
|
62
|
+
}
|
|
63
|
+
process.exitCode = v.ok ? 0 : 2;
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
const passport = pce.buildPassport(diff, analysisOpts);
|
|
67
|
+
const cwd = process.cwd();
|
|
68
|
+
let receipt = null;
|
|
69
|
+
try {
|
|
70
|
+
receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: `pce:${passport.verdict}:${passport.diffHash.slice(0, 12)}`, payload: { diffHash: passport.diffHash, verdict: passport.verdict, propsHash: undefined }, includePayload: true });
|
|
71
|
+
}
|
|
72
|
+
catch { /* */ }
|
|
73
|
+
if (opts.json) {
|
|
74
|
+
out(JSON.stringify({ passport, signed: receipt }, null, 2));
|
|
75
|
+
process.exitCode = passport.verdict === "BLOCK" ? 2 : 0;
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const icon = passport.verdict === "PASS" ? "๐ข" : passport.verdict === "REVIEW" ? "๐ก" : "๐";
|
|
79
|
+
const p = passport.properties;
|
|
80
|
+
out(`${icon} PCE ${passport.verdict} โ ${p.touchedPaths.length} file(s), net ${p.netLines >= 0 ? "+" : ""}${p.netLines} lines`);
|
|
81
|
+
for (const path of p.touchedPaths.slice(0, 20))
|
|
82
|
+
out(` โข ${path}`);
|
|
83
|
+
const intro = Object.entries(p.introducedPrimitives).filter(([, v]) => v).map(([k]) => k);
|
|
84
|
+
if (intro.length)
|
|
85
|
+
out(` primitives introduced: ${intro.join(", ")}`);
|
|
86
|
+
if (p.secretsAdded)
|
|
87
|
+
out(` โ secret-looking literal added`);
|
|
88
|
+
if (!p.inScope)
|
|
89
|
+
out(` โ out of scope: ${p.outOfScopePaths.join(", ")}`);
|
|
90
|
+
for (const r of passport.reasons)
|
|
91
|
+
out(` โ ${r}`);
|
|
92
|
+
out(` diffHash ${passport.diffHash.slice(0, 16)}โฆ ${receipt ? "ยท signed (verify offline with the NOTARY public key)" : ""}`);
|
|
93
|
+
process.exitCode = passport.verdict === "BLOCK" ? 2 : 0;
|
|
94
|
+
});
|
|
95
|
+
void cmd;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=pce.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pce.js","sourceRoot":"","sources":["../../src/commands/pce.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":"AAiKA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAuhNvD"}
|
package/dist/index.js
CHANGED
|
@@ -93,6 +93,7 @@ import { registerBootCommands } from "./commands/boot.js";
|
|
|
93
93
|
import { registerElleipsisCommands } from "./commands/elleipsis.js";
|
|
94
94
|
import { registerSteleCommands } from "./commands/stele.js";
|
|
95
95
|
import { registerAxiaCommands } from "./commands/axia.js";
|
|
96
|
+
import { registerPceCommands } from "./commands/pce.js";
|
|
96
97
|
import { registerTrustCommands } from "./commands/trust.js";
|
|
97
98
|
import { registerNuclearCommands } from "./commands/nuclear-cli.js";
|
|
98
99
|
import { registerOvernightCommand } from "./commands/overnight.js";
|
|
@@ -4735,6 +4736,7 @@ export async function run(argv) {
|
|
|
4735
4736
|
registerElleipsisCommands(program);
|
|
4736
4737
|
registerSteleCommands(program);
|
|
4737
4738
|
registerAxiaCommands(program);
|
|
4739
|
+
registerPceCommands(program);
|
|
4738
4740
|
// โโโ Trust calibrator (v1.31.0) -- per-subsystem precision/recall/band
|
|
4739
4741
|
registerTrustCommands(program);
|
|
4740
4742
|
// โโโ Wisdom reactor (v1.33.0) -- five nuclear-physics formulas as Mneme metrics
|