mneme-ai 2.135.0 → 2.136.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,10 @@
1
+ /**
2
+ * `mneme elleipsis` (v2.136.0) — the omission / completeness gate.
3
+ * Did the AI silently drop part of what you asked for?
4
+ *
5
+ * mneme elleipsis --request "add X and a test, don't touch auth" --output "<AI reply or diff>"
6
+ * mneme elleipsis --request-file ask.txt --output-file reply.txt --json
7
+ */
8
+ import type { Command } from "commander";
9
+ export declare function registerElleipsisCommands(program: Command): void;
10
+ //# sourceMappingURL=elleipsis.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elleipsis.d.ts","sourceRoot":"","sources":["../../src/commands/elleipsis.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAWzC,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkChE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * `mneme elleipsis` (v2.136.0) — the omission / completeness gate.
3
+ * Did the AI silently drop part of what you asked for?
4
+ *
5
+ * mneme elleipsis --request "add X and a test, don't touch auth" --output "<AI reply or diff>"
6
+ * mneme elleipsis --request-file ask.txt --output-file reply.txt --json
7
+ */
8
+ import { existsSync, readFileSync } from "node:fs";
9
+ import { elleipsis, notary } from "@mneme-ai/core";
10
+ function out(s) { process.stdout.write(s + "\n"); }
11
+ function readMaybe(inline, file) {
12
+ if (typeof inline === "string")
13
+ return inline;
14
+ if (file && existsSync(file)) {
15
+ try {
16
+ return readFileSync(file, "utf8");
17
+ }
18
+ catch { /* */ }
19
+ }
20
+ return "";
21
+ }
22
+ export function registerElleipsisCommands(program) {
23
+ program
24
+ .command("elleipsis")
25
+ .alias("omission")
26
+ .description("🕳 ELLEIPSIS — the completeness gate: extract the checkable asks from YOUR request and report which the AI's output COVERED / left UNADDRESSED / VIOLATED (a 'don't do X' it did). Catches the lie of omission — what the AI silently left out. Heuristic + prove-or-unknown (abstains to UNKNOWN; never fabricates a gap).")
27
+ .option("--request <t>", "your original request (what you asked the AI to do).")
28
+ .option("--request-file <p>", "read the request from a file.")
29
+ .option("--output <t>", "the AI's reply or diff to check for coverage.")
30
+ .option("--output-file <p>", "read the AI output from a file.")
31
+ .option("--json", "JSON output (full signed report).")
32
+ .action((opts) => {
33
+ const cwd = process.cwd();
34
+ const request = readMaybe(opts.request, opts.requestFile);
35
+ const output = readMaybe(opts.output, opts.outputFile);
36
+ if (!request) {
37
+ process.stderr.write("✗ requires --request \"...\" (or --request-file). What did you ask the AI to do?\n");
38
+ process.exitCode = 2;
39
+ return;
40
+ }
41
+ const r = elleipsis.elleipsisReport(request, output);
42
+ const receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: "elleipsis", payload: { atoms: r.atoms.length, unaddressed: r.unaddressed, violated: r.violated, completeness: Number(r.completenessScore.toFixed(3)) }, includePayload: true });
43
+ if (opts.json) {
44
+ out(JSON.stringify({ ...r, receipt }, null, 2));
45
+ process.exitCode = (r.unaddressed + r.violated) > 0 ? 2 : 0;
46
+ return;
47
+ }
48
+ const pct = Math.round(r.completenessScore * 100);
49
+ const icon = r.violated > 0 ? "🛑" : r.unaddressed > 0 ? "⚠️" : "✓";
50
+ out(`${icon} ELLEIPSIS — completeness ${pct}% · ${r.covered} covered · ${r.unaddressed} unaddressed · ${r.violated} violated · ${r.unknown} unknown (of ${r.atoms.length} ask(s))`);
51
+ for (const g of r.gaps.slice(0, 12)) {
52
+ const tag = g.coverage === "VIOLATED" ? "🛑 VIOLATED" : "⚠️ UNADDRESSED";
53
+ out(` ${tag}: "${g.atom.text}"\n ${g.reason}`);
54
+ }
55
+ if (r.unknown > 0) {
56
+ const unk = r.verdicts.filter((v) => v.coverage === "UNKNOWN").slice(0, 6);
57
+ if (unk.length)
58
+ out(` · ${r.unknown} UNKNOWN (worth a glance): ${unk.map((v) => `"${v.atom.text.slice(0, 32)}"`).join(" · ")}`);
59
+ }
60
+ out(` # ${r.note}`);
61
+ process.exitCode = (r.unaddressed + r.violated) > 0 ? 2 : 0;
62
+ });
63
+ }
64
+ //# sourceMappingURL=elleipsis.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"elleipsis.js","sourceRoot":"","sources":["../../src/commands/elleipsis.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA6JA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAmhNvD"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AA8JA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAohNvD"}
package/dist/index.js CHANGED
@@ -90,6 +90,7 @@ import { registerSettlementCommands } from "./commands/settlement.js";
90
90
  import { registerFirewallCommands } from "./commands/firewall.js";
91
91
  import { registerRailCommands } from "./commands/rail.js";
92
92
  import { registerBootCommands } from "./commands/boot.js";
93
+ import { registerElleipsisCommands } from "./commands/elleipsis.js";
93
94
  import { registerTrustCommands } from "./commands/trust.js";
94
95
  import { registerNuclearCommands } from "./commands/nuclear-cli.js";
95
96
  import { registerOvernightCommand } from "./commands/overnight.js";
@@ -4729,6 +4730,7 @@ export async function run(argv) {
4729
4730
  registerFirewallCommands(program);
4730
4731
  registerRailCommands(program);
4731
4732
  registerBootCommands(program);
4733
+ registerElleipsisCommands(program);
4732
4734
  // ─── Trust calibrator (v1.31.0) -- per-subsystem precision/recall/band
4733
4735
  registerTrustCommands(program);
4734
4736
  // ─── Wisdom reactor (v1.33.0) -- five nuclear-physics formulas as Mneme metrics