mneme-ai 2.139.0 → 2.141.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/haunt.d.ts +16 -0
- package/dist/commands/haunt.d.ts.map +1 -0
- package/dist/commands/haunt.js +128 -0
- package/dist/commands/haunt.js.map +1 -0
- package/dist/commands/regret.d.ts +24 -0
- package/dist/commands/regret.d.ts.map +1 -0
- package/dist/commands/regret.js +155 -0
- package/dist/commands/regret.js.map +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -5
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme haunt <file>` (v2.141.0) — "Code Haunting" / Git Telepathy. Surface the
|
|
3
|
+
* ghost of the commit that last touched a region: who changed it, when, the
|
|
4
|
+
* intent they recorded ("temporary fix" / "แก้ขัดไปก่อน"), the safeguards it
|
|
5
|
+
* lacks for the symptom you gave, and the team knowledge already shared about it.
|
|
6
|
+
*
|
|
7
|
+
* mneme haunt src/payment.ts --line 40-92 --symptom "slow under traffic peak"
|
|
8
|
+
* mneme haunt src/auth.ts # whole-file haunting
|
|
9
|
+
* mneme haunt src/payment.ts --json
|
|
10
|
+
*
|
|
11
|
+
* HONEST: surfaces + correlates REAL git facts + recorded intent — a candidate to
|
|
12
|
+
* look at, never a proven cause; UNKNOWN when there is no history.
|
|
13
|
+
*/
|
|
14
|
+
import type { Command } from "commander";
|
|
15
|
+
export declare function registerHauntCommands(program: Command): void;
|
|
16
|
+
//# sourceMappingURL=haunt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haunt.d.ts","sourceRoot":"","sources":["../../src/commands/haunt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA8C5D"}
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme haunt <file>` (v2.141.0) — "Code Haunting" / Git Telepathy. Surface the
|
|
3
|
+
* ghost of the commit that last touched a region: who changed it, when, the
|
|
4
|
+
* intent they recorded ("temporary fix" / "แก้ขัดไปก่อน"), the safeguards it
|
|
5
|
+
* lacks for the symptom you gave, and the team knowledge already shared about it.
|
|
6
|
+
*
|
|
7
|
+
* mneme haunt src/payment.ts --line 40-92 --symptom "slow under traffic peak"
|
|
8
|
+
* mneme haunt src/auth.ts # whole-file haunting
|
|
9
|
+
* mneme haunt src/payment.ts --json
|
|
10
|
+
*
|
|
11
|
+
* HONEST: surfaces + correlates REAL git facts + recorded intent — a candidate to
|
|
12
|
+
* look at, never a proven cause; UNKNOWN when there is no history.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync } from "node:fs";
|
|
15
|
+
import { join } from "node:path";
|
|
16
|
+
import { haunt, git, cortex, notary } from "@mneme-ai/core";
|
|
17
|
+
function out(s) { process.stdout.write(s + "\n"); }
|
|
18
|
+
function parseRange(s) {
|
|
19
|
+
if (!s)
|
|
20
|
+
return undefined;
|
|
21
|
+
const m = s.match(/^(\d+)\s*[-:,]\s*(\d+)$/);
|
|
22
|
+
if (m)
|
|
23
|
+
return { start: parseInt(m[1], 10), end: parseInt(m[2], 10) };
|
|
24
|
+
const one = s.match(/^(\d+)$/);
|
|
25
|
+
if (one) {
|
|
26
|
+
const n = parseInt(one[1], 10);
|
|
27
|
+
return { start: n, end: n };
|
|
28
|
+
}
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
function snippet(cwd, file, region) {
|
|
32
|
+
try {
|
|
33
|
+
const p = join(cwd, file);
|
|
34
|
+
if (!existsSync(p))
|
|
35
|
+
return "";
|
|
36
|
+
const lines = readFileSync(p, "utf8").split("\n");
|
|
37
|
+
if (region)
|
|
38
|
+
return lines.slice(Math.max(0, region.start - 1), region.end).join("\n");
|
|
39
|
+
return lines.slice(0, 160).join("\n");
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return "";
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
/** Best-effort JIT knowledge pull from the Cortex (#2 Knowledge Osmosis). Total. */
|
|
46
|
+
function relatedKnowledge(cwd, file, symptom) {
|
|
47
|
+
try {
|
|
48
|
+
const p = join(cwd, ".mneme", "cortex", "store.json");
|
|
49
|
+
if (!existsSync(p))
|
|
50
|
+
return [];
|
|
51
|
+
const store = JSON.parse(readFileSync(p, "utf8"));
|
|
52
|
+
const base = file.split("/").pop()?.replace(/\.[a-z]+$/i, "") ?? file;
|
|
53
|
+
const query = `${base} ${file} ${symptom ?? ""}`.trim();
|
|
54
|
+
const hits = cortex.recall(store, query, 3) ?? [];
|
|
55
|
+
return hits.map((h) => ({ source: h.entry?.agent, value: h.entry?.value })).filter((k) => typeof k.value === "string" && k.value.length > 0);
|
|
56
|
+
}
|
|
57
|
+
catch {
|
|
58
|
+
return [];
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
export function registerHauntCommands(program) {
|
|
62
|
+
program
|
|
63
|
+
.command("haunt")
|
|
64
|
+
.description("👻 CODE HAUNTING (Git Telepathy) — when a region acts up, surface the ghost of the commit that last touched it: who changed it, when, the intent they recorded ('temporary fix' / 'แก้ขัดไปก่อน'), the safeguards it lacks for your symptom, and the team knowledge already shared about it — one plain-language report instead of a manual git-blame dig. Detects intent in EN + TH. HONEST: surfaces + correlates REAL git facts — a candidate to look at, never a proven cause; UNKNOWN when there's no history.")
|
|
65
|
+
.argument("<file>", "the file to investigate (repo-relative)")
|
|
66
|
+
.option("--line <a-b>", "line range to focus on (e.g. 40-92)")
|
|
67
|
+
.option("--symptom <text>", "the symptom from the alert (e.g. \"slow under traffic peak\")")
|
|
68
|
+
.option("--json", "JSON output (signed)")
|
|
69
|
+
.action(async (file, opts) => {
|
|
70
|
+
const cwd = process.cwd();
|
|
71
|
+
const region = parseRange(opts.line);
|
|
72
|
+
let blameLines = [];
|
|
73
|
+
let commits = [];
|
|
74
|
+
try {
|
|
75
|
+
const bl = await git.blame(cwd, file, region?.start, region?.end);
|
|
76
|
+
blameLines = bl.map((b) => ({ commitHash: b.commitHash, authorName: b.authorName, authorTime: b.authorTime, lineNumber: b.lineNumber, content: b.content }));
|
|
77
|
+
}
|
|
78
|
+
catch { /* */ }
|
|
79
|
+
try {
|
|
80
|
+
const cs = await git.readCommits({ cwd, paths: [file], maxCount: 10 });
|
|
81
|
+
commits = cs.map((c) => ({ hash: c.hash, authorName: c.authorName, authorDate: c.authorDate, subject: c.subject, body: c.body }));
|
|
82
|
+
}
|
|
83
|
+
catch { /* */ }
|
|
84
|
+
const report = haunt.buildHauntReport({
|
|
85
|
+
file, region, blame: blameLines, commits,
|
|
86
|
+
codeSnippet: snippet(cwd, file, region),
|
|
87
|
+
symptom: opts.symptom,
|
|
88
|
+
knowledge: relatedKnowledge(cwd, file, opts.symptom),
|
|
89
|
+
nowMs: Date.now(),
|
|
90
|
+
});
|
|
91
|
+
let receipt = null;
|
|
92
|
+
try {
|
|
93
|
+
receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: `haunt:${report.verdict}:${file}`, payload: { verdict: report.verdict, temporaryFix: report.intent.temporaryFix, risks: report.riskFlags.length }, includePayload: true });
|
|
94
|
+
}
|
|
95
|
+
catch { /* */ }
|
|
96
|
+
if (opts.json) {
|
|
97
|
+
out(JSON.stringify({ ...report, signed: receipt }, null, 2));
|
|
98
|
+
process.exitCode = report.verdict === "HAUNTED" ? 2 : 0;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const icon = report.verdict === "HAUNTED" ? "👻" : report.verdict === "CLEAR" ? "🟢" : "❔";
|
|
102
|
+
out(`${icon} CODE HAUNTING — ${report.verdict}`);
|
|
103
|
+
out("");
|
|
104
|
+
out(report.narrative);
|
|
105
|
+
if (report.intent.signals.length) {
|
|
106
|
+
out("");
|
|
107
|
+
out("Recorded intent:");
|
|
108
|
+
for (const s of report.intent.signals)
|
|
109
|
+
out(` • [${s.label}] ${s.quote}`);
|
|
110
|
+
}
|
|
111
|
+
if (report.riskFlags.length) {
|
|
112
|
+
out("");
|
|
113
|
+
out("Missing safeguards (lexical signals — look, don't assume):");
|
|
114
|
+
for (const f of report.riskFlags)
|
|
115
|
+
out(` • ${f}`);
|
|
116
|
+
}
|
|
117
|
+
if (report.relatedKnowledge.length) {
|
|
118
|
+
out("");
|
|
119
|
+
out("💡 Team knowledge for this area:");
|
|
120
|
+
for (const k of report.relatedKnowledge)
|
|
121
|
+
out(` • ${k.source ? k.source + ": " : ""}${k.value}`);
|
|
122
|
+
}
|
|
123
|
+
out("");
|
|
124
|
+
out(` ${receipt ? "✓ signed (verify offline with the NOTARY public key) · " : ""}surfaced from real git history — a candidate, not a proven cause.`);
|
|
125
|
+
process.exitCode = report.verdict === "HAUNTED" ? 2 : 0;
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
//# sourceMappingURL=haunt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"haunt.js","sourceRoot":"","sources":["../../src/commands/haunt.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme regret` (v2.140.0) — the REGRET ORACLE (💎3). A signed, cross-vendor
|
|
3
|
+
* calibration of how often an edit carrying a given signal was ACTUALLY
|
|
4
|
+
* regretted later (reverted / test failed). Backward-looking, not fortune-telling.
|
|
5
|
+
*
|
|
6
|
+
* mneme regret record --features "primitive:network,area:auth,vendor:grok" --regretted
|
|
7
|
+
* git diff | mneme regret record --diff - --vendor grok --regretted # auto-derive signals
|
|
8
|
+
* git diff | mneme regret score --diff - --vendor grok
|
|
9
|
+
* mneme regret vendors
|
|
10
|
+
*
|
|
11
|
+
* `score` exit 2 on band HIGH (CI-gate). Honest: a historical base rate with a
|
|
12
|
+
* Wilson interval + UNKNOWN when support is thin — never a prediction.
|
|
13
|
+
*/
|
|
14
|
+
import type { Command } from "commander";
|
|
15
|
+
/**
|
|
16
|
+
* Attach the REGRET ORACLE calibration as subcommands of the EXISTING `regret`
|
|
17
|
+
* command (which lists reverted commits — the raw outcome source). So:
|
|
18
|
+
* mneme regret → the git revert/hotfix lister (unchanged)
|
|
19
|
+
* mneme regret score → calibrated regret base rate for an edit's signals
|
|
20
|
+
* mneme regret record → record an outcome into the calibration ledger
|
|
21
|
+
* mneme regret vendors → cross-vendor regret comparison
|
|
22
|
+
*/
|
|
23
|
+
export declare function attachRegretOracle(regretCmd: Command): void;
|
|
24
|
+
//# sourceMappingURL=regret.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regret.d.ts","sourceRoot":"","sources":["../../src/commands/regret.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuCzC;;;;;;;GAOG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,OAAO,GAAG,IAAI,CAoD3D"}
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `mneme regret` (v2.140.0) — the REGRET ORACLE (💎3). A signed, cross-vendor
|
|
3
|
+
* calibration of how often an edit carrying a given signal was ACTUALLY
|
|
4
|
+
* regretted later (reverted / test failed). Backward-looking, not fortune-telling.
|
|
5
|
+
*
|
|
6
|
+
* mneme regret record --features "primitive:network,area:auth,vendor:grok" --regretted
|
|
7
|
+
* git diff | mneme regret record --diff - --vendor grok --regretted # auto-derive signals
|
|
8
|
+
* git diff | mneme regret score --diff - --vendor grok
|
|
9
|
+
* mneme regret vendors
|
|
10
|
+
*
|
|
11
|
+
* `score` exit 2 on band HIGH (CI-gate). Honest: a historical base rate with a
|
|
12
|
+
* Wilson interval + UNKNOWN when support is thin — never a prediction.
|
|
13
|
+
*/
|
|
14
|
+
import { existsSync, readFileSync, mkdirSync, appendFileSync } from "node:fs";
|
|
15
|
+
import { join, dirname } from "node:path";
|
|
16
|
+
import { regret, pce, notary } from "@mneme-ai/core";
|
|
17
|
+
function out(s) { process.stdout.write(s + "\n"); }
|
|
18
|
+
const LEDGER = ".mneme/regret/outcomes.jsonl";
|
|
19
|
+
function splitList(v) { return typeof v === "string" && v.trim() ? v.split(",").map((s) => s.trim()).filter(Boolean) : []; }
|
|
20
|
+
function readDiff(file) { try {
|
|
21
|
+
if (file && file !== "-" && existsSync(file))
|
|
22
|
+
return readFileSync(file, "utf8");
|
|
23
|
+
if (file === "-")
|
|
24
|
+
return readFileSync(0, "utf8");
|
|
25
|
+
}
|
|
26
|
+
catch { /* */ } return ""; }
|
|
27
|
+
/** Derive observable signals from a diff (via PCE's static analysis) + a vendor. */
|
|
28
|
+
function deriveFeatures(diff, vendor) {
|
|
29
|
+
const f = [];
|
|
30
|
+
try {
|
|
31
|
+
const props = pce.analyzeDiff(diff);
|
|
32
|
+
for (const [k, v] of Object.entries(props.introducedPrimitives))
|
|
33
|
+
if (v)
|
|
34
|
+
f.push(`primitive:${k.toLowerCase()}`);
|
|
35
|
+
if (props.massDeletion)
|
|
36
|
+
f.push("mass-deletion");
|
|
37
|
+
if (props.touchedPaths.some((p) => /delete/.test(p))) { /* noop */ }
|
|
38
|
+
// top-level dir as "area:*"
|
|
39
|
+
for (const p of props.touchedPaths) {
|
|
40
|
+
const top = p.split("/")[0];
|
|
41
|
+
if (top)
|
|
42
|
+
f.push(`area:${top.toLowerCase()}`);
|
|
43
|
+
}
|
|
44
|
+
f.push(props.touchedPaths.length > 5 ? "breadth:wide" : "breadth:narrow");
|
|
45
|
+
}
|
|
46
|
+
catch { /* */ }
|
|
47
|
+
if (vendor)
|
|
48
|
+
f.push(`vendor:${vendor.toLowerCase()}`);
|
|
49
|
+
return Array.from(new Set(f));
|
|
50
|
+
}
|
|
51
|
+
function loadModel(cwd) {
|
|
52
|
+
const p = join(cwd, LEDGER);
|
|
53
|
+
const events = [];
|
|
54
|
+
if (existsSync(p)) {
|
|
55
|
+
for (const line of readFileSync(p, "utf8").split("\n")) {
|
|
56
|
+
if (!line.trim())
|
|
57
|
+
continue;
|
|
58
|
+
try {
|
|
59
|
+
const j = JSON.parse(line);
|
|
60
|
+
if (Array.isArray(j.features))
|
|
61
|
+
events.push({ features: j.features, regretted: j.regretted === true });
|
|
62
|
+
}
|
|
63
|
+
catch { /* */ }
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return regret.buildRegretModel(events);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Attach the REGRET ORACLE calibration as subcommands of the EXISTING `regret`
|
|
70
|
+
* command (which lists reverted commits — the raw outcome source). So:
|
|
71
|
+
* mneme regret → the git revert/hotfix lister (unchanged)
|
|
72
|
+
* mneme regret score → calibrated regret base rate for an edit's signals
|
|
73
|
+
* mneme regret record → record an outcome into the calibration ledger
|
|
74
|
+
* mneme regret vendors → cross-vendor regret comparison
|
|
75
|
+
*/
|
|
76
|
+
export function attachRegretOracle(regretCmd) {
|
|
77
|
+
regretCmd
|
|
78
|
+
.command("score")
|
|
79
|
+
.description("💎 REGRET ORACLE — calibrated regret base rate for an edit's signals (Wilson 95% LOWER bound of the riskiest signal, UNKNOWN when support is thin). Pass --diff - to derive signals via PCE. Exit 2 on HIGH. HONEST: a backward-looking historical base rate, not a prediction.")
|
|
80
|
+
.option("--features <list>", "comma-separated signals (e.g. \"primitive:network,area:auth,vendor:grok\")")
|
|
81
|
+
.option("--diff <file>", "derive signals from a unified diff (PCE static analysis); '-' = stdin")
|
|
82
|
+
.option("--vendor <name>", "tag the vendor (adds vendor:<name>)")
|
|
83
|
+
.option("--min-support <n>", "min samples before a signal counts (default 5)", (v) => parseInt(v, 10))
|
|
84
|
+
.option("--json", "JSON output")
|
|
85
|
+
.action((opts) => {
|
|
86
|
+
const cwd = process.cwd();
|
|
87
|
+
const features = opts.diff !== undefined ? deriveFeatures(readDiff(opts.diff), opts.vendor) : (() => { const f = splitList(opts.features); if (opts.vendor)
|
|
88
|
+
f.push(`vendor:${opts.vendor.toLowerCase()}`); return f; })();
|
|
89
|
+
const model = loadModel(cwd);
|
|
90
|
+
const s = regret.scoreRegret(model, features, opts.minSupport !== undefined ? { minSupport: opts.minSupport } : undefined);
|
|
91
|
+
let receipt = null;
|
|
92
|
+
try {
|
|
93
|
+
receipt = notary.issueReceipt(cwd, { kind: "claim-verdict", subject: `regret:${s.band}`, payload: { band: s.band, lb: s.regretRateLowerBound, support: s.support }, includePayload: true });
|
|
94
|
+
}
|
|
95
|
+
catch { /* */ }
|
|
96
|
+
if (opts.json) {
|
|
97
|
+
out(JSON.stringify({ ...s, signed: receipt }, null, 2));
|
|
98
|
+
process.exitCode = s.band === "HIGH" ? 2 : 0;
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const icon = s.band === "HIGH" ? "🛑" : s.band === "ELEVATED" ? "🟡" : s.band === "LOW" ? "🟢" : "❔";
|
|
102
|
+
out(`${icon} REGRET ${s.band}${s.band !== "UNKNOWN" ? ` — ≥${(s.regretRateLowerBound * 100).toFixed(1)}% of similar edits were regretted (Wilson LB · ${(s.observedRate * 100).toFixed(0)}% observed · n=${s.support})` : " — not enough recorded outcomes for these signals"}`);
|
|
103
|
+
for (const d of s.drivers)
|
|
104
|
+
out(` • ${d.feature}: ${(d.wilsonLow * 100).toFixed(1)}% LB (n=${d.n})`);
|
|
105
|
+
out(` ${s.note}`);
|
|
106
|
+
if (receipt)
|
|
107
|
+
out(` ✓ signed (verify offline with the NOTARY public key)`);
|
|
108
|
+
process.exitCode = s.band === "HIGH" ? 2 : 0;
|
|
109
|
+
});
|
|
110
|
+
regretCmd
|
|
111
|
+
.command("record")
|
|
112
|
+
.description("💎 REGRET ORACLE — record one real outcome (signals + --regretted) into the signed calibration ledger.")
|
|
113
|
+
.option("--features <list>", "comma-separated signals")
|
|
114
|
+
.option("--diff <file>", "derive signals from a unified diff; '-' = stdin")
|
|
115
|
+
.option("--vendor <name>", "tag the vendor")
|
|
116
|
+
.option("--regretted", "this outcome WAS regretted (reverted / test failed)")
|
|
117
|
+
.action((opts) => {
|
|
118
|
+
const cwd = process.cwd();
|
|
119
|
+
const features = opts.diff !== undefined ? deriveFeatures(readDiff(opts.diff), opts.vendor) : (() => { const f = splitList(opts.features); if (opts.vendor)
|
|
120
|
+
f.push(`vendor:${opts.vendor.toLowerCase()}`); return f; })();
|
|
121
|
+
if (!features.length) {
|
|
122
|
+
out("✗ no signals — pass --features or --diff");
|
|
123
|
+
process.exitCode = 2;
|
|
124
|
+
return;
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
const p = join(cwd, LEDGER);
|
|
128
|
+
if (!existsSync(dirname(p)))
|
|
129
|
+
mkdirSync(dirname(p), { recursive: true });
|
|
130
|
+
appendFileSync(p, JSON.stringify({ features, regretted: opts.regretted === true, at: Date.now() }) + "\n");
|
|
131
|
+
}
|
|
132
|
+
catch { /* */ }
|
|
133
|
+
out(`✓ recorded outcome (${opts.regretted ? "REGRETTED" : "stable"}): ${features.join(", ")}`);
|
|
134
|
+
});
|
|
135
|
+
regretCmd
|
|
136
|
+
.command("vendors")
|
|
137
|
+
.description("💎 REGRET ORACLE — cross-vendor regret comparison (Wilson LB, riskiest first).")
|
|
138
|
+
.option("--json", "JSON output")
|
|
139
|
+
.action((opts) => {
|
|
140
|
+
const vr = regret.vendorRegret(loadModel(process.cwd()));
|
|
141
|
+
if (opts.json) {
|
|
142
|
+
out(JSON.stringify(vr, null, 2));
|
|
143
|
+
return;
|
|
144
|
+
}
|
|
145
|
+
if (!vr.length) {
|
|
146
|
+
out("💎 Regret Oracle — no vendor-tagged outcomes recorded yet.");
|
|
147
|
+
return;
|
|
148
|
+
}
|
|
149
|
+
out("💎 Regret Oracle — cross-vendor regret (riskiest first, Wilson 95% LB):");
|
|
150
|
+
for (const v of vr)
|
|
151
|
+
out(` ${v.feature.replace("vendor:", "").padEnd(10)} ${(v.wilsonLow * 100).toFixed(1)}% LB · ${(v.rate * 100).toFixed(0)}% observed · n=${v.n}`);
|
|
152
|
+
out(" (historical base rate from your own revert/test outcomes — not a prediction.)");
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=regret.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regret.js","sourceRoot":"","sources":["../../src/commands/regret.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":"AAmKA,wBAAsB,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA2hNvD"}
|
package/dist/index.js
CHANGED
|
@@ -94,6 +94,8 @@ import { registerElleipsisCommands } from "./commands/elleipsis.js";
|
|
|
94
94
|
import { registerSteleCommands } from "./commands/stele.js";
|
|
95
95
|
import { registerAxiaCommands } from "./commands/axia.js";
|
|
96
96
|
import { registerPceCommands } from "./commands/pce.js";
|
|
97
|
+
import { registerHauntCommands } from "./commands/haunt.js";
|
|
98
|
+
import { attachRegretOracle } from "./commands/regret.js";
|
|
97
99
|
import { registerTrustCommands } from "./commands/trust.js";
|
|
98
100
|
import { registerNuclearCommands } from "./commands/nuclear-cli.js";
|
|
99
101
|
import { registerOvernightCommand } from "./commands/overnight.js";
|
|
@@ -1752,7 +1754,7 @@ export async function run(argv) {
|
|
|
1752
1754
|
process.exit(await chatCommand({ cwd: process.cwd(), noLlm: opts.llm === false }));
|
|
1753
1755
|
});
|
|
1754
1756
|
// ─── Sprint 4 killer commands ────────────────────────────────────────
|
|
1755
|
-
program
|
|
1757
|
+
const regretCmd = program
|
|
1756
1758
|
.command("regret", { hidden: true })
|
|
1757
1759
|
.description("Surface commits that were shipped and immediately fixed/reverted")
|
|
1758
1760
|
.option("--window-days <n>", "follow-up window", (v) => Number(v), 7)
|
|
@@ -1764,6 +1766,9 @@ export async function run(argv) {
|
|
|
1764
1766
|
json: opts.json,
|
|
1765
1767
|
}));
|
|
1766
1768
|
});
|
|
1769
|
+
// 💎 v2.140.0 — attach the REGRET ORACLE calibration as subcommands
|
|
1770
|
+
// (`regret score|record|vendors`); bare `regret` stays the git revert lister.
|
|
1771
|
+
attachRegretOracle(regretCmd);
|
|
1767
1772
|
program
|
|
1768
1773
|
.command("bus-factor", { hidden: true })
|
|
1769
1774
|
.description("Identify single-source-of-truth knowledge holders + pairing recommendations")
|
|
@@ -4737,6 +4742,7 @@ export async function run(argv) {
|
|
|
4737
4742
|
registerSteleCommands(program);
|
|
4738
4743
|
registerAxiaCommands(program);
|
|
4739
4744
|
registerPceCommands(program);
|
|
4745
|
+
registerHauntCommands(program);
|
|
4740
4746
|
// ─── Trust calibrator (v1.31.0) -- per-subsystem precision/recall/band
|
|
4741
4747
|
registerTrustCommands(program);
|
|
4742
4748
|
// ─── Wisdom reactor (v1.33.0) -- five nuclear-physics formulas as Mneme metrics
|