mneme-ai 0.25.0 → 0.26.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.
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4FAA4F;IAC5F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAqOzE"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"AAWA,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,4FAA4F;IAC5F,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uDAAuD;IACvD,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,qEAAqE;IACrE,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB;;;;;OAKG;IACH,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,6DAA6D;IAC7D,UAAU,CAAC,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxC;AAED,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,MAAM,CAAC,CAwQzE"}
@@ -6,6 +6,7 @@ import { ui } from "../ui.js";
6
6
  import { Spinner } from "../spinner.js";
7
7
  import { renderAnswer } from "../render-answer.js";
8
8
  import { isNoLlm } from "../no-llm.js";
9
+ import { generateHeadline, recordCommandRun } from "../iris/index.js";
9
10
  import kleur from "kleur";
10
11
  export async function askCommand(opts) {
11
12
  if (!(await git.isGitRepo(opts.cwd))) {
@@ -189,13 +190,39 @@ export async function askCommand(opts) {
189
190
  return 0;
190
191
  }
191
192
  ui.banner();
193
+ // Iris pillar #2: AI-summarized headline. The LLM call has a hard 800ms
194
+ // timeout and silently falls back to an extractive headline — never blocks
195
+ // the user. Reuses the same enricher chain we already built for synthesis.
196
+ const headlineEnricher = enricher
197
+ ? {
198
+ name: "ask-enricher",
199
+ async enrich(input) {
200
+ return enricher.enrich(input);
201
+ },
202
+ }
203
+ : undefined;
204
+ const headline = await generateHeadline({
205
+ commandType: "ask",
206
+ data: {
207
+ question: opts.question,
208
+ confidence: synthesized.confidence,
209
+ citationCount: synthesized.evidenceCommitHashes.length,
210
+ trustScore: synthesized.trustScore,
211
+ evidenceCount: synthesized.evidenceCommitHashes.length,
212
+ },
213
+ enricher: headlineEnricher,
214
+ timeoutMs: 800,
215
+ repoRoot: meta.rootPath,
216
+ });
192
217
  process.stdout.write(renderAnswer({
193
218
  question: opts.question,
194
219
  synthesized,
195
220
  results,
196
221
  repo: meta,
197
222
  feedbackId,
223
+ headline,
198
224
  }));
225
+ process.stdout.write("\n");
199
226
  // If we fell back to retrieval-only because no LLM was available, tell
200
227
  // the user how to upgrade for free. Once-per-run friendly nudge — never
201
228
  // a hard error.
@@ -203,6 +230,13 @@ export async function askCommand(opts) {
203
230
  process.stdout.write(`\n ${kleur.yellow("ℹ")} ${kleur.gray("This was retrieval-only. For full Q&A synthesis, set up a free LLM:")}\n`);
204
231
  process.stdout.write(` ${kleur.cyan().bold("mneme setup-free")} ${kleur.gray("(30-second guided wizard — Ollama / Groq / OpenRouter — all free)")}\n\n`);
205
232
  }
233
+ // Iris pillar #4: adaptive verbosity — track that the user ran `ask`.
234
+ try {
235
+ recordCommandRun(meta.rootPath, "ask");
236
+ }
237
+ catch {
238
+ // best-effort; never breaks the command
239
+ }
206
240
  return 0;
207
241
  }
208
242
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../../src/commands/ask.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"AA8BA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,KAAK,EAAE,KAAK,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,sDAAsD;QACtD,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAoHD,mEAAmE;AACnE,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAYnE;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAK5C;AAED,0EAA0E;AAC1E,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAkHhE;AAED,gFAAgF;AAChF,eAAO,MAAM,WAAW;;;;;CAAgD,CAAC"}
1
+ {"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"AAoCA,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,UAAU,IAAI;IACZ,EAAE,EAAE,MAAM,CAAC;IACX,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,4DAA4D;IAC5D,WAAW,EAAE,MAAM,CAAC;IACpB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,gDAAgD;IAChD,KAAK,EAAE,KAAK,CAAC;QACX,GAAG,EAAE,MAAM,CAAC;QACZ,sDAAsD;QACtD,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;CACJ;AAoHD,mEAAmE;AACnE,iBAAS,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,CAYnE;AAED,iBAAS,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,GAAG,IAAI,CAK5C;AAED,0EAA0E;AAC1E,iBAAS,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAKtD;AAED,wBAAsB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC,CAqLhE;AAED,gFAAgF;AAChF,eAAO,MAAM,WAAW;;;;;CAAgD,CAAC"}
@@ -19,7 +19,8 @@
19
19
  * orchestration over the existing engines.
20
20
  */
21
21
  import kleur from "kleur";
22
- import { ui, header, section, pill, emptyState, nextSteps, } from "../ui.js";
22
+ import { ui, header, section, pill, emptyState, } from "../ui.js";
23
+ import { iris, generateHeadline, recordCommandRun, flash, } from "../iris/index.js";
23
24
  /**
24
25
  * Catalog of intent → flow mappings.
25
26
  *
@@ -186,14 +187,52 @@ export async function doCommand(opts) {
186
187
  ]));
187
188
  return 1;
188
189
  }
189
- process.stdout.write(header("🧠", `do ${flow.label}`, `query: ${kleur.italic(opts.query)} · flow: ${flow.id}`, flow.description) + "\n\n");
190
- process.stdout.write(section(`◆ Plan`, `${flow.steps.length} step(s) Mneme will run these for you`) + "\n\n");
191
- for (let i = 0; i < flow.steps.length; i++) {
192
- const s = flow.steps[i];
193
- const rendered = expandStep(s.cmd, opts.query);
194
- process.stdout.write(` ${pill(`step ${i + 1}`, "low")} ${kleur.cyan(`mneme ${rendered}`)}\n`);
195
- process.stdout.write(` ${kleur.gray(s.rationale)}\n\n`);
190
+ // ── Iris pillar #2: AI-summarized headline. Always finishes (extractive
191
+ // fallback if no LLM is configured). Hard 800ms ceiling.
192
+ const expandedSteps = flow.steps.map((s) => ({
193
+ cmd: expandStep(s.cmd, opts.query),
194
+ rationale: s.rationale,
195
+ }));
196
+ const headline = await generateHeadline({
197
+ commandType: "do",
198
+ data: {
199
+ action: flow.label,
200
+ query: opts.query,
201
+ flowId: flow.id,
202
+ stepCount: flow.steps.length,
203
+ result: `${flow.steps.length} step${flow.steps.length === 1 ? "" : "s"} planned`,
204
+ },
205
+ timeoutMs: 800,
206
+ repoRoot: opts.cwd,
207
+ });
208
+ // ── Build the upfront pyramid: lede (what + why), key-facts (the plan),
209
+ // sources (alternative phrasings the user can try later).
210
+ const ledeLines = [
211
+ ` ${kleur.gray("query:")} ${kleur.italic(opts.query)}`,
212
+ ` ${kleur.gray("flow:")} ${kleur.bold(flow.id)} — ${flow.label}`,
213
+ "",
214
+ ` ${flow.description}`,
215
+ ];
216
+ const planLines = [];
217
+ for (let i = 0; i < expandedSteps.length; i++) {
218
+ const s = expandedSteps[i];
219
+ planLines.push(` ${pill(`step ${i + 1}`, "low")} ${kleur.cyan(`mneme ${s.cmd}`)}`);
220
+ planLines.push(` ${kleur.gray(s.rationale)}`);
196
221
  }
222
+ const upfrontSections = [
223
+ { tier: "lede", title: "🧠 Plan", lines: ledeLines },
224
+ {
225
+ tier: "key-facts",
226
+ title: `◆ Steps ${kleur.gray(`(${flow.steps.length})`)}`,
227
+ lines: planLines,
228
+ },
229
+ ];
230
+ process.stdout.write(iris.render({
231
+ headline,
232
+ sections: upfrontSections,
233
+ whyShown: `Routed to "${flow.id}" because the query matched ${flow.label.toLowerCase()} patterns`,
234
+ }));
235
+ process.stdout.write("\n\n");
197
236
  // Execution: spawn each as a child process — keeps the engines independent
198
237
  // and respects flag validation at each layer. We could short-circuit by
199
238
  // calling the engine functions directly, but spawning preserves the exact
@@ -201,6 +240,7 @@ export async function doCommand(opts) {
201
240
  const { spawn } = await import("node:child_process");
202
241
  const cliPath = (await import("node:url")).fileURLToPath(new URL("../../bin/mneme.js", import.meta.url));
203
242
  process.stdout.write(section(`▶ Executing`, `live output below`) + "\n\n");
243
+ const stepStatuses = [];
204
244
  for (let i = 0; i < flow.steps.length; i++) {
205
245
  const s = flow.steps[i];
206
246
  const rendered = expandStep(s.cmd, opts.query);
@@ -208,25 +248,63 @@ export async function doCommand(opts) {
208
248
  process.stdout.write(` ${kleur.gray("─".repeat(64))}\n`);
209
249
  process.stdout.write(` ${kleur.bold().magenta(`Step ${i + 1}/${flow.steps.length}:`)} ${kleur.cyan(`mneme ${rendered}`)}\n`);
210
250
  process.stdout.write(` ${kleur.gray("─".repeat(64))}\n\n`);
211
- await new Promise((resolve) => {
251
+ const exitCode = await new Promise((resolve) => {
212
252
  const proc = spawn("node", [cliPath, ...args], {
213
253
  cwd: opts.cwd,
214
254
  stdio: "inherit",
215
255
  });
216
- proc.on("exit", () => resolve());
217
- proc.on("error", () => resolve());
256
+ proc.on("exit", (code) => resolve(typeof code === "number" ? code : 0));
257
+ proc.on("error", () => resolve(1));
218
258
  });
259
+ stepStatuses.push({ cmd: rendered, ok: exitCode === 0 });
260
+ }
261
+ // ── Iris roll-up: lede flash + key-facts (per-step verdict) + sources.
262
+ const okCount = stepStatuses.filter((s) => s.ok).length;
263
+ const flashLines = flash({
264
+ type: "verdict",
265
+ data: {
266
+ headline: `${flow.label} complete`,
267
+ severity: okCount === stepStatuses.length ? "ok" : "warn",
268
+ next: `Read each section above; re-run any step solo if you want detail`,
269
+ },
270
+ });
271
+ const stepLines = [];
272
+ for (const s of stepStatuses) {
273
+ const mark = s.ok ? kleur.green("✓") : kleur.red("✗");
274
+ stepLines.push(` ${mark} ${kleur.cyan(`mneme ${s.cmd}`)}`);
219
275
  }
220
- // Roll-up summary
221
- process.stdout.write("\n" + section(`✦ Synthesis`) + "\n\n");
222
- process.stdout.write(` ${kleur.green("")} Ran ${flow.steps.length} sub-commands. Read each section above.\n`);
223
- process.stdout.write(` ${kleur.gray("This was a")} ${kleur.bold(flow.label)}${kleur.gray(" — ")}${flow.description}\n\n`);
224
- process.stdout.write(nextSteps([
276
+ const synthSections = [
277
+ {
278
+ tier: "lede",
279
+ title: " Synthesis",
280
+ lines: flashLines.map((l) => ` ${l}`),
281
+ },
225
282
  {
226
- cmd: `mneme do "<another question>"`,
227
- why: `Same dispatcher, different intent. Try "blast radius of <hash>" or "should we ship today".`,
283
+ tier: "key-facts",
284
+ title: `◆ Steps run ${kleur.gray(`(${okCount}/${stepStatuses.length} ok)`)}`,
285
+ lines: stepLines,
228
286
  },
229
- ]) + "\n\n");
287
+ {
288
+ tier: "sources",
289
+ title: "→ Try next",
290
+ lines: [
291
+ ` ${kleur.cyan("$")} ${kleur.bold('mneme do "<another question>"')}`,
292
+ ` ${kleur.gray('Try "blast radius of <hash>" or "should we ship today".')}`,
293
+ ],
294
+ },
295
+ ];
296
+ process.stdout.write(iris.render({
297
+ headline: `${flow.label} — ${okCount}/${stepStatuses.length} steps ok`,
298
+ sections: synthSections,
299
+ }));
300
+ process.stdout.write("\n");
301
+ // Iris pillar #4: adaptive verbosity — record this run.
302
+ try {
303
+ recordCommandRun(opts.cwd, "do");
304
+ }
305
+ catch {
306
+ // best-effort
307
+ }
230
308
  return 0;
231
309
  }
232
310
  /** Exposed for tests so we can assert routing without spawning subprocesses. */
@@ -1 +1 @@
1
- {"version":3,"file":"do.js","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"do.js","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"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"}
@@ -24,6 +24,7 @@ export interface ForensicsAnomalyOptions {
24
24
  threshold?: number;
25
25
  topN?: number;
26
26
  json?: boolean;
27
+ verbose?: boolean;
27
28
  }
28
29
  export declare function forensicsAnomalyCommand(opts: ForensicsAnomalyOptions): Promise<number>;
29
30
  //# sourceMappingURL=forensics.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"forensics.d.ts","sourceRoot":"","sources":["../../src/commands/forensics.ts"],"names":[],"mappings":"AAyEA,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsHxF;AAID,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA+HjB;AAID,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgKxF;AAID,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAoHjB"}
1
+ {"version":3,"file":"forensics.d.ts","sourceRoot":"","sources":["../../src/commands/forensics.ts"],"names":[],"mappings":"AAkFA,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAsHxF;AAID,MAAM,WAAW,yBAAyB;IACxC,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,yBAAyB,CAC7C,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA+HjB;AAID,MAAM,WAAW,qBAAqB;IACpC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,qBAAqB,CAAC,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,MAAM,CAAC,CAgKxF;AAID,MAAM,WAAW,uBAAuB;IACtC,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,uBAAuB,GAC5B,OAAO,CAAC,MAAM,CAAC,CAgPjB"}
@@ -12,9 +12,11 @@
12
12
  */
13
13
  import kleur from "kleur";
14
14
  import { git, store, forensics, util, } from "@mneme-ai/core";
15
+ import { resolveAllEnrichers, ResilientEnricher } from "@mneme-ai/embeddings";
15
16
  import { dbPath } from "../paths.js";
16
17
  import { resolveCommitRef, commitNotFoundMessage } from "../utils/args.js";
17
18
  import { ui, header, section, severityBadge, logMeter, meter, emptyState, nextSteps, verdictBadge, kv, pill, } from "../ui.js";
19
+ import { iris, generateHeadline, readIrisState, recordCommandRun, shouldShowVerboseGuide, } from "../iris/index.js";
18
20
  // Shared withStore wrapper inline (mirrors insights-cli pattern)
19
21
  async function withStore(cwd, f) {
20
22
  if (!(await git.isGitRepo(cwd))) {
@@ -398,6 +400,7 @@ export async function forensicsVulnsCommand(opts) {
398
400
  return 0;
399
401
  }
400
402
  export async function forensicsAnomalyCommand(opts) {
403
+ const meta = await git.getRepoMeta(opts.cwd).catch(() => null);
401
404
  const result = await withStore(opts.cwd, (s) => {
402
405
  const allCommits = util.loadAllCommits(s);
403
406
  const fileChanges = util.loadAllFileChanges(s);
@@ -408,86 +411,188 @@ export async function forensicsAnomalyCommand(opts) {
408
411
  if (typeof result === "number")
409
412
  return result;
410
413
  if (opts.json) {
414
+ // JSON byte-stable contract — must not change.
411
415
  process.stdout.write(JSON.stringify(result, null, 2) + "\n");
412
416
  return 0;
413
417
  }
414
- ui.banner();
415
- process.stdout.write(header("🕵", "Anomaly Detection", "is anyone behaving differently from their normal pattern?", "Catches commits that look 'off' for the author — wrong hour, new files, unusual vocabulary, or unusual size.") + "\n\n");
416
418
  const counts = countBySeverity(result.findings);
417
- const topLine = (() => {
418
- if (result.findings.length === 0) {
419
- return `${kleur.green("✓")} All commits look normal for their authors. (${kleur.bold(String(result.scanned))} commits scanned, ${kleur.bold(String(result.baselines))} authors profiled)`;
420
- }
421
- if (counts.critical > 0) {
422
- return `${kleur.red("⚠")} ${kleur.red().bold(String(counts.critical))} commits look VERY different from how that author normally commits — verify the author manually.`;
423
- }
424
- return `${kleur.yellow("!")} ${kleur.bold(String(result.findings.length))} commit(s) look unusual for their author — review before merging.`;
425
- })();
426
- process.stdout.write(` ${topLine}\n\n`);
427
- // ─── Plain-English reading guide ────────────────────────────────
428
- process.stdout.write(section("📘 How to read this report") + "\n");
429
- process.stdout.write(` ${kleur.gray("• Each commit gets a")} ${kleur.bold("risk score")} ${kleur.gray("(0–4) based on 4 signals:")}\n`);
430
- process.stdout.write(` ${kleur.cyan("time")} ${kleur.gray("— did they commit at an unusual hour?")}\n`);
431
- process.stdout.write(` ${kleur.cyan("files")} ${kleur.gray("— did they touch files they normally don't?")}\n`);
432
- process.stdout.write(` ${kleur.cyan("style")} ${kleur.gray("— did they use words they never use?")}\n`);
433
- process.stdout.write(` ${kleur.cyan("size")} ${kleur.gray("— is the commit much bigger/smaller than usual?")}\n`);
434
- process.stdout.write(` ${kleur.gray("• Severity: ≥2.5 critical · ≥1.7 high · ≥0.9 medium · else ignored")}\n\n`);
435
- // ─── Single-author repo warning ────────────────────────────────
436
- if (result.baselines === 1) {
437
- process.stdout.write(` ${pill("HEADS UP", "warn")} ${kleur.yellow("Single-author repo")} ${kleur.gray("— anomaly detection is most useful when you have multiple authors to compare. Findings here just mean 'unusual vs your own past commits' (e.g. a 1000-line commit when you usually do 50-line commits).")}\n\n`);
419
+ const threshold = opts.threshold ?? 0.9;
420
+ // ─── Headline: try LLM (800ms timeout), fall back to extractive ───────
421
+ const topFinding = result.findings[0];
422
+ const topAuthor = topFinding?.commit.authorName ?? topFinding?.commit.authorEmail ?? "";
423
+ const headlineData = {
424
+ criticalCount: counts.critical,
425
+ highCount: counts.high,
426
+ totalCount: result.findings.length,
427
+ threshold,
428
+ topSubject: topAuthor ? `verify ${topAuthor} identity` : undefined,
429
+ };
430
+ // Try to resolve an LLM enricher for the headline (best-effort, never blocks).
431
+ let enricher;
432
+ try {
433
+ const chain = await resolveAllEnrichers({});
434
+ if (chain.length > 0)
435
+ enricher = new ResilientEnricher(chain);
438
436
  }
437
+ catch {
438
+ // No LLM available — extractive fallback below is fine.
439
+ }
440
+ let headlineText;
439
441
  if (result.findings.length === 0) {
440
- process.stdout.write(emptyState("Clean — no commits look unusual.", [
441
- `Lower the threshold to see borderline cases: --threshold 0.5`,
442
- `Run after every push as part of CI for continuous oversight.`,
443
- ]));
444
- return 0;
442
+ headlineText = `🕵 Clean — no commits look unusual at threshold ${threshold}`;
443
+ }
444
+ else {
445
+ const hl = await generateHeadline({
446
+ commandType: "forensics",
447
+ data: headlineData,
448
+ enricher,
449
+ timeoutMs: 800,
450
+ repoRoot: meta?.rootPath,
451
+ });
452
+ // Iris headlines come back without our icon — prepend it.
453
+ headlineText = `🕵 ${hl}`;
445
454
  }
446
- // Severity tally
447
- process.stdout.write(section("✦ By risk level") + "\n");
448
- const sevs = [
449
- { key: "critical", level: "critical", label: "CRITICAL verify author identity out-of-band" },
450
- { key: "high", level: "high", label: "HIGH — needs a second-engineer approval" },
451
- { key: "medium", level: "medium", label: "MEDIUM — flag during normal review" },
452
- { key: "low", level: "low", label: "LOW — informational" },
453
- ];
454
- const maxC = Math.max(counts.critical, counts.high, counts.medium, counts.low, 1);
455
- for (const { key, level, label } of sevs) {
456
- const n = counts[key];
457
- if (n === 0)
458
- continue;
459
- process.stdout.write(` ${meter(n / maxC, { width: 10, level })} ${kleur.bold(String(n).padStart(3))} ${kleur.gray(label)}\n`);
455
+ // ─── Lede: top 3 anomalies (one line each) ────────────────────────────
456
+ const ledeLines = [];
457
+ if (result.findings.length === 0) {
458
+ ledeLines.push(`${kleur.green("✓")} ${kleur.bold(String(result.scanned))} ${kleur.gray("commits scanned across")} ${kleur.bold(String(result.baselines))} ${kleur.gray("author profile" + (result.baselines === 1 ? "" : "s") + " nothing flagged.")}`);
459
+ ledeLines.push(` ${kleur.gray("Lower the threshold to see borderline cases: --threshold 0.5")}`);
460
460
  }
461
- process.stdout.write("\n");
462
- process.stdout.write(section("⚠ Unusual commits", `(top ${Math.min(result.findings.length, opts.topN ?? 10)} by risk score)`) + "\n\n");
463
- for (const f of result.findings.slice(0, opts.topN ?? 10)) {
461
+ else {
462
+ if (counts.critical > 0) {
463
+ ledeLines.push(`${kleur.red("⚠")} ${kleur.red().bold(String(counts.critical))} ${kleur.gray("commit" + (counts.critical === 1 ? "" : "s") + " look VERY different from how that author normally commits — verify out-of-band.")}`);
464
+ }
465
+ else {
466
+ ledeLines.push(`${kleur.yellow("!")} ${kleur.bold(String(result.findings.length))} ${kleur.gray("commit" + (result.findings.length === 1 ? "" : "s") + " look unusual for their author — review before merging.")}`);
467
+ }
468
+ for (const f of result.findings.slice(0, 3)) {
469
+ const sevLevel = sevToLevel[f.severity] ?? "info";
470
+ ledeLines.push(` ${severityBadge(sevLevel)} ${kleur.bold(f.commit.shortHash)} ${kleur.gray(f.commit.authorDate.slice(0, 10) + " · " + f.commit.authorName)} — ${kleur.white(truncateOneLine(f.commit.subject, 60))}`);
471
+ }
472
+ }
473
+ // ─── Key facts: severity tally with meters + warnings ─────────────────
474
+ const keyFactLines = [];
475
+ if (result.findings.length > 0) {
476
+ const sevs = [
477
+ {
478
+ key: "critical",
479
+ level: "critical",
480
+ label: "CRITICAL — verify author identity out-of-band",
481
+ },
482
+ { key: "high", level: "high", label: "HIGH — needs a second-engineer approval" },
483
+ { key: "medium", level: "medium", label: "MEDIUM — flag during normal review" },
484
+ { key: "low", level: "low", label: "LOW — informational" },
485
+ ];
486
+ const maxC = Math.max(counts.critical, counts.high, counts.medium, counts.low, 1);
487
+ for (const { key, level, label } of sevs) {
488
+ const n = counts[key];
489
+ if (n === 0)
490
+ continue;
491
+ keyFactLines.push(`${meter(n / maxC, { width: 10, level })} ${kleur.bold(String(n).padStart(3))} ${kleur.gray(label)}`);
492
+ }
493
+ }
494
+ if (result.baselines === 1) {
495
+ keyFactLines.push(`${pill("HEADS UP", "warn")} ${kleur.yellow("Single-author repo")} ${kleur.gray("— findings just mean 'unusual vs your own past commits'.")}`);
496
+ }
497
+ // ─── Body: per-finding axis breakdown (preserve humanized notes) ──────
498
+ const bodyLines = [];
499
+ const detailLines = [];
500
+ const showN = opts.topN ?? 10;
501
+ // Bucket: top showN go in "body"; the rest (lower severity) go to "details".
502
+ const findingsToShow = result.findings.slice(0, showN);
503
+ const findingsHidden = result.findings.slice(showN);
504
+ for (const f of findingsToShow) {
464
505
  const c = f.commit;
465
506
  const sevLevel = sevToLevel[f.severity] ?? "info";
466
- process.stdout.write(` ${severityBadge(sevLevel)} ${kleur.bold(c.shortHash)} ${kleur.gray(c.authorDate.slice(0, 16) + " UTC · " + c.authorName)}\n`);
467
- process.stdout.write(` ${kleur.bold(`risk score: ${f.totalDeviation.toFixed(2)}`)} ${kleur.gray(`/ 4.0 max`)}\n`);
468
- process.stdout.write(` ${kleur.white(c.subject)}\n`);
507
+ bodyLines.push(`${severityBadge(sevLevel)} ${kleur.bold(c.shortHash)} ${kleur.gray(c.authorDate.slice(0, 16) + " UTC · " + c.authorName)}`);
508
+ bodyLines.push(` ${kleur.bold(`risk score: ${f.totalDeviation.toFixed(2)}`)} ${kleur.gray("/ 4.0 max")}`);
509
+ bodyLines.push(` ${kleur.white(c.subject)}`);
469
510
  for (const a of f.axes) {
470
511
  if (a.score < 0.1)
471
512
  continue;
472
513
  const axisLevel = a.score >= 0.8 ? "critical" : a.score >= 0.5 ? "high" : a.score >= 0.3 ? "medium" : "low";
473
- // Translate the technical note into plain English
474
514
  const friendly = humanizeAxisNote(a.axis, a.note, c.authorDate);
475
- process.stdout.write(` ${meter(a.score, { width: 10, level: axisLevel })} ${kleur.cyan(a.axis.padEnd(6))} ${kleur.gray(friendly)}\n`);
515
+ bodyLines.push(` ${meter(a.score, { width: 10, level: axisLevel })} ${kleur.cyan(a.axis.padEnd(6))} ${kleur.gray(friendly)}`);
516
+ }
517
+ bodyLines.push(` ${kleur.yellow("→ " + f.recommendation)}`);
518
+ bodyLines.push("");
519
+ }
520
+ for (const f of findingsHidden) {
521
+ const c = f.commit;
522
+ const sevLevel = sevToLevel[f.severity] ?? "info";
523
+ detailLines.push(`${severityBadge(sevLevel)} ${kleur.bold(c.shortHash)} ${kleur.gray(c.authorDate.slice(0, 10) + " · " + c.authorName)} — ${kleur.gray(truncateOneLine(c.subject, 60))} ${kleur.gray(`(risk ${f.totalDeviation.toFixed(2)})`)}`);
524
+ }
525
+ // ─── Sources (try-next + adaptive how-to-read) ────────────────────────
526
+ const sourceLines = [];
527
+ if (topFinding) {
528
+ sourceLines.push(`${kleur.cyan("$")} ${kleur.bold(`mneme forensics match ${topFinding.commit.shortHash} ${topFinding.commit.authorEmail}`)}`);
529
+ sourceLines.push(` ${kleur.gray("Verify the top anomaly's author with STR-loci LR matching.")}`);
530
+ sourceLines.push(`${kleur.cyan("$")} ${kleur.bold(`mneme forensics vulns --since ${topFinding.commit.authorDate.slice(0, 10)}`)}`);
531
+ sourceLines.push(` ${kleur.gray("Cross-reference vulnerabilities introduced around the anomalous window.")}`);
532
+ }
533
+ else {
534
+ sourceLines.push(`${kleur.cyan("$")} ${kleur.bold("mneme forensics anomaly --threshold 0.5")}`);
535
+ sourceLines.push(` ${kleur.gray("Lower the threshold to see borderline cases.")}`);
536
+ }
537
+ // Adaptive how-to-read: only show on first ~5 runs.
538
+ const irisState = (() => {
539
+ try {
540
+ return meta?.rootPath ? readIrisState(meta.rootPath) : null;
541
+ }
542
+ catch {
543
+ return null;
544
+ }
545
+ })();
546
+ const showGuide = irisState ? shouldShowVerboseGuide(irisState, "forensics-anomaly") : true;
547
+ if (showGuide) {
548
+ sourceLines.push("");
549
+ sourceLines.push(`${kleur.gray("📘 How to read:")} ${kleur.bold("risk score")} ${kleur.gray("(0–4) combines 4 signals:")} ${kleur.cyan("time")} ${kleur.gray("/")} ${kleur.cyan("files")} ${kleur.gray("/")} ${kleur.cyan("style")} ${kleur.gray("/")} ${kleur.cyan("size")}${kleur.gray(".")}`);
550
+ sourceLines.push(` ${kleur.gray("Severity: ≥2.5 critical · ≥1.7 high · ≥0.9 medium · else ignored.")}`);
551
+ }
552
+ // ─── Compose pyramid ──────────────────────────────────────────────────
553
+ const sections = [{ tier: "lede", lines: ledeLines }];
554
+ if (keyFactLines.length > 0) {
555
+ sections.push({
556
+ tier: "key-facts",
557
+ title: "✦ By risk level",
558
+ lines: keyFactLines,
559
+ });
560
+ }
561
+ if (bodyLines.length > 0) {
562
+ sections.push({
563
+ tier: "body",
564
+ title: `⚠ Unusual commits (top ${findingsToShow.length} by risk score)`,
565
+ lines: bodyLines,
566
+ });
567
+ }
568
+ if (detailLines.length > 0) {
569
+ sections.push({
570
+ tier: "details",
571
+ title: `◇ Lower-severity findings (${detailLines.length})`,
572
+ lines: detailLines,
573
+ });
574
+ }
575
+ if (sourceLines.length > 0) {
576
+ sections.push({
577
+ tier: "sources",
578
+ title: "→ Try next",
579
+ lines: sourceLines,
580
+ });
581
+ }
582
+ ui.banner();
583
+ process.stdout.write(iris.render({
584
+ headline: headlineText,
585
+ sections,
586
+ verbose: opts.verbose,
587
+ }) + "\n");
588
+ if (meta?.rootPath) {
589
+ try {
590
+ recordCommandRun(meta.rootPath, "forensics-anomaly");
591
+ }
592
+ catch {
593
+ // best-effort
476
594
  }
477
- process.stdout.write(` ${kleur.yellow("→ " + f.recommendation)}\n\n`);
478
595
  }
479
- // Smart next steps based on top finding
480
- const topFinding = result.findings[0];
481
- process.stdout.write(nextSteps([
482
- {
483
- cmd: `mneme forensics match ${topFinding.commit.shortHash} ${topFinding.commit.authorEmail}`,
484
- why: `Verify the top anomaly's author with STR-loci LR matching.`,
485
- },
486
- {
487
- cmd: `mneme forensics vulns --since ${topFinding.commit.authorDate.slice(0, 10)}`,
488
- why: `Cross-reference vulnerabilities introduced around the anomalous window.`,
489
- },
490
- ]) + "\n\n");
491
596
  return 0;
492
597
  }
493
598
  // ─── helpers ──────────────────────────────────────────────────────────