@mmnto/cli 1.75.0 → 1.75.2

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.
Files changed (33) hide show
  1. package/dist/adapters/github-cli-pr.d.ts +12 -1
  2. package/dist/adapters/github-cli-pr.d.ts.map +1 -1
  3. package/dist/adapters/github-cli-pr.js +33 -0
  4. package/dist/adapters/github-cli-pr.js.map +1 -1
  5. package/dist/adapters/github-cli-pr.test.js +58 -0
  6. package/dist/adapters/github-cli-pr.test.js.map +1 -1
  7. package/dist/adapters/pr-adapter.d.ts +28 -0
  8. package/dist/adapters/pr-adapter.d.ts.map +1 -1
  9. package/dist/commands/recurrence-stats.d.ts.map +1 -1
  10. package/dist/commands/recurrence-stats.js +3 -40
  11. package/dist/commands/recurrence-stats.js.map +1 -1
  12. package/dist/commands/retrospect.d.ts.map +1 -1
  13. package/dist/commands/retrospect.js +11 -7
  14. package/dist/commands/retrospect.js.map +1 -1
  15. package/dist/commands/triage-pr.d.ts +31 -0
  16. package/dist/commands/triage-pr.d.ts.map +1 -1
  17. package/dist/commands/triage-pr.js +137 -30
  18. package/dist/commands/triage-pr.js.map +1 -1
  19. package/dist/commands/triage-pr.test.js +64 -1
  20. package/dist/commands/triage-pr.test.js.map +1 -1
  21. package/dist/parse-nits.d.ts +24 -0
  22. package/dist/parse-nits.d.ts.map +1 -1
  23. package/dist/parse-nits.js +74 -0
  24. package/dist/parse-nits.js.map +1 -1
  25. package/dist/parse-nits.test.js +117 -1
  26. package/dist/parse-nits.test.js.map +1 -1
  27. package/dist/parsers/bot-review-parser.d.ts +50 -4
  28. package/dist/parsers/bot-review-parser.d.ts.map +1 -1
  29. package/dist/parsers/bot-review-parser.js +85 -15
  30. package/dist/parsers/bot-review-parser.js.map +1 -1
  31. package/dist/parsers/bot-review-parser.test.js +126 -1
  32. package/dist/parsers/bot-review-parser.test.js.map +1 -1
  33. package/package.json +2 -2
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { parseCodeRabbitNits, parseCodeRabbitOutsideDiff, parseCodeRabbitReviewFindings, } from './parse-nits.js';
2
+ import { parseCodeRabbitNits, parseCodeRabbitOutsideDiff, parseCodeRabbitReviewFindings, parseGreptileOutsideDiff, parseGreptileReviewFindings, } from './parse-nits.js';
3
3
  // ─── Sample CodeRabbit nit block ─────────────────────────
4
4
  const SAMPLE_NIT_BLOCK = `<details>
5
5
  <summary>🧹 Nitpick comments (2)</summary><blockquote>
@@ -277,4 +277,120 @@ ${SAMPLE_OUTSIDE_DIFF_BLOCK}`;
277
277
  expect(findings).toHaveLength(1);
278
278
  });
279
279
  });
280
+ // ─── Greptile summary parser (marker-anchored — mmnto-ai/totem#2192) ──────────
281
+ //
282
+ // Anchored on the canonical `<!-- greptile_other_comments_section -->` marker
283
+ // (mmnto-ai/totem-strategy#690), NOT a sampled <details> shape — greptile edits
284
+ // its summary in place, so a closed PR shows the marker with content removed
285
+ // post-resolution. The marker placement (below the flowchart, above the
286
+ // `<sub>Reviews>` footer) mirrors the real strategy#689 structure; the exact
287
+ // rendering of findings UNDER the marker is validated against a live out-of-diff
288
+ // sample (this fix's own PR or the next one).
289
+ const GREPTILE_WITH_OUTSIDE_DIFF = `<h3>Greptile Summary</h3>
290
+
291
+ Some prose summary.
292
+
293
+ <h3>Flowchart</h3>
294
+
295
+ \`\`\`mermaid
296
+ flowchart TD
297
+ A --> B
298
+ \`\`\`
299
+
300
+ <!-- greptile_other_comments_section -->
301
+
302
+ \`src/scorer.ts\`: the exposure floor is accepted but never checked in Step 2.
303
+
304
+ <sub>Reviews (2): Last reviewed commit … | Re-trigger Greptile</sub>`;
305
+ const GREPTILE_RESOLVED = `<h3>Greptile Summary</h3>
306
+
307
+ Confidence Score: 5/5 — safe to merge.
308
+
309
+ <!-- greptile_other_comments_section -->
310
+
311
+ <sub>Reviews (3): Last reviewed commit … | Re-trigger Greptile</sub>`;
312
+ describe('parseGreptileOutsideDiff (marker-anchored)', () => {
313
+ it('extracts the section under the greptile_other_comments_section marker', () => {
314
+ const results = parseGreptileOutsideDiff(GREPTILE_WITH_OUTSIDE_DIFF);
315
+ expect(results).toHaveLength(1);
316
+ expect(results[0]).toContain('exposure floor');
317
+ });
318
+ it('drops the trailing <sub>Reviews</sub> footer from the extracted section', () => {
319
+ const results = parseGreptileOutsideDiff(GREPTILE_WITH_OUTSIDE_DIFF);
320
+ expect(results[0]).not.toMatch(/Re-trigger Greptile/);
321
+ expect(results[0]).not.toMatch(/<sub\b/i);
322
+ });
323
+ it('returns empty when the marker is present but the section is resolved/empty', () => {
324
+ // The post-resolution state: marker remains, content edited away.
325
+ expect(parseGreptileOutsideDiff(GREPTILE_RESOLVED)).toEqual([]);
326
+ });
327
+ it('returns empty when the marker is absent', () => {
328
+ const body = `<h3>Greptile Summary</h3>\n\nConfidence Score: 5/5\n\nSafe to merge.`;
329
+ expect(parseGreptileOutsideDiff(body)).toEqual([]);
330
+ });
331
+ it('returns empty array for empty string', () => {
332
+ expect(parseGreptileOutsideDiff('')).toEqual([]);
333
+ });
334
+ it('splits multiple findings on `---` rules outside code fences (CR #2246)', () => {
335
+ const body = [
336
+ '<!-- greptile_other_comments_section -->',
337
+ '',
338
+ '`src/a.ts`: first finding.',
339
+ '',
340
+ '---',
341
+ '',
342
+ '`src/b.ts`: second finding.',
343
+ '',
344
+ '<sub>Reviews (2): Last reviewed commit … | Re-trigger Greptile</sub>',
345
+ ].join('\n');
346
+ expect(parseGreptileOutsideDiff(body)).toEqual([
347
+ '`src/a.ts`: first finding.',
348
+ '`src/b.ts`: second finding.',
349
+ ]);
350
+ });
351
+ it('preserves fenced code blocks and does NOT split on an in-fence `---` (gemini #2246)', () => {
352
+ const fence = '```';
353
+ const body = [
354
+ '<!-- greptile_other_comments_section -->',
355
+ '',
356
+ 'Suggested fix:',
357
+ `${fence}ts`,
358
+ 'const x = 1;',
359
+ '---', // a rule-looking line INSIDE the fence must not split
360
+ 'const y = 2;',
361
+ fence,
362
+ '',
363
+ '<sub>Reviews (1): … | Re-trigger Greptile</sub>',
364
+ ].join('\n');
365
+ const results = parseGreptileOutsideDiff(body);
366
+ expect(results).toHaveLength(1); // not split by the in-fence `---`
367
+ expect(results[0]).toContain('const x = 1;'); // code preserved, not stripped
368
+ expect(results[0]).toContain('const y = 2;');
369
+ expect(results[0]).toContain(fence);
370
+ });
371
+ it('anchors footer removal to the Reviews footer, preserving an inner <sub> (CR #2246)', () => {
372
+ const body = [
373
+ '<!-- greptile_other_comments_section -->',
374
+ '',
375
+ 'Finding with an inline <sub>subscript</sub> that must survive.',
376
+ '',
377
+ '<sub>Reviews (1): … | Re-trigger Greptile</sub>',
378
+ ].join('\n');
379
+ const results = parseGreptileOutsideDiff(body);
380
+ expect(results).toHaveLength(1);
381
+ expect(results[0]).toContain('subscript');
382
+ expect(results[0]).not.toMatch(/Re-trigger Greptile/);
383
+ });
384
+ });
385
+ describe('parseGreptileReviewFindings (marker-anchored)', () => {
386
+ it('types the extracted section as outside-diff findings', () => {
387
+ const findings = parseGreptileReviewFindings(GREPTILE_WITH_OUTSIDE_DIFF);
388
+ expect(findings).toHaveLength(1);
389
+ expect(findings[0].type).toBe('outside-diff');
390
+ expect(findings[0].content).toContain('exposure floor');
391
+ });
392
+ it('returns empty array when the marker section is absent', () => {
393
+ expect(parseGreptileReviewFindings('## Just a normal summary.')).toEqual([]);
394
+ });
395
+ });
280
396
  //# sourceMappingURL=parse-nits.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"parse-nits.test.js","sourceRoot":"","sources":["../src/parse-nits.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parse-nits.test.js","sourceRoot":"","sources":["../src/parse-nits.test.ts"],"names":[],"mappings":"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"}
@@ -6,8 +6,22 @@
6
6
  * so that `review-learn` extracts lessons only from findings the
7
7
  * developer actually fixed.
8
8
  */
9
+ /**
10
+ * The review bots whose comment formats triage-pr knows how to parse, plus
11
+ * `unknown` for an unrecognized author. Adding a bot is a single-place change
12
+ * here + its severity parser in {@link parseSeverityForTool}.
13
+ *
14
+ * NOTE: `gca` is triage's local id for `gemini-code-assist` — it intentionally
15
+ * diverges from the core actor-id scheme in `@mmnto/totem`'s `resolveActorId`
16
+ * (which uses `gemini-code-assist` and EXACT-login matching for hit-rate
17
+ * attribution). Triage's goal is broad recognition (surface every finding) with
18
+ * a compact display id; it matches coderabbit/gca by substring and greptile by
19
+ * its bot-login shape (see `GREPTILE_BOT_LOGIN`). The two schemes serve
20
+ * different purposes and are deliberately not coupled.
21
+ */
22
+ export type BotTool = 'coderabbit' | 'gca' | 'greptile' | 'unknown';
9
23
  export interface NormalizedBotFinding {
10
- tool: 'coderabbit' | 'gca' | 'unknown';
24
+ tool: BotTool;
11
25
  severity: string;
12
26
  file: string;
13
27
  line?: number;
@@ -38,7 +52,7 @@ export interface CommentThread {
38
52
  }>;
39
53
  }
40
54
  export declare function isBotComment(author: string): boolean;
41
- export declare function detectBot(author: string): 'coderabbit' | 'gca' | 'unknown';
55
+ export declare function detectBot(author: string): BotTool;
42
56
  /** Extract severity from CR comment body (red circle Critical, orange circle Major, yellow circle Minor) */
43
57
  export declare function parseCRSeverity(body: string): string;
44
58
  /** Strip HTML wrapper tags but keep content. Unwraps <details>, <summary>, <blockquote>. */
@@ -47,6 +61,33 @@ export declare function stripHtmlWrappers(html: string): string;
47
61
  export declare function extractSuggestion(body: string): string | undefined;
48
62
  /** Extract severity from GCA comment body (SVG priority images) */
49
63
  export declare function parseGCASeverity(body: string): string;
64
+ /**
65
+ * Extract severity from a greptile inline comment body via its P1/P2/P3
66
+ * priority label (greptile's severity vocabulary), mapped onto the shared
67
+ * high/medium/low scale that {@link mapToTriageCategory} consumes.
68
+ *
69
+ * Best-effort: greptile's inline format is less structured than CR's emoji or
70
+ * GCA's SVG marker, so when no explicit priority token is present this returns
71
+ * `info` and the body-keyword categorizer does the real bucketing. Word-bounded
72
+ * so `P1`/`p1` matches but a mid-token `GP1X` does not. P0 is greptile's
73
+ * critical/blocking level (greptile review on mmnto-ai/totem#2244) — without it,
74
+ * a `P0` finding would silently fall through to `info`, the opposite of safe.
75
+ */
76
+ export declare function parseGreptileSeverity(body: string): string;
77
+ /**
78
+ * Extract greptile's documented merge-readiness Confidence Score (`N/5`, integer
79
+ * 0–5) from its summary comment — 5 production-ready … 0–1 critical problems
80
+ * (greptile docs: code-review/first-pr-review). A status signal surfaced as
81
+ * triage context (NOT a finding); returns `undefined` when no score is present.
82
+ * Parsed as `N/5`, never a percentage.
83
+ */
84
+ export declare function parseGreptileConfidence(body: string): number | undefined;
85
+ /**
86
+ * Single source of truth for "which severity parser applies to which bot".
87
+ * Keeps the per-tool dispatch in one place so adding a bot does not require
88
+ * touching every finding-normalizer (triage-pr, extractResolved, extractPushback).
89
+ */
90
+ export declare function parseSeverityForTool(tool: BotTool, body: string): string;
50
91
  /** Patterns indicating human pushback (false positive signal). */
51
92
  export declare const PUSHBACK_PATTERNS: RegExp[];
52
93
  /**
@@ -59,8 +100,13 @@ export declare function isThreadResolved(thread: CommentThread): boolean;
59
100
  * Only returns findings from threads that were resolved positively.
60
101
  */
61
102
  /**
62
- * Extract findings from CodeRabbit review bodies (outside-diff + nits).
63
- * Shared by triage-pr and review-learn to avoid duplication.
103
+ * Extract findings from review-bot SUMMARY bodies (CodeRabbit outside-diff + nits,
104
+ * greptile "Comments Outside Diff"). Surface-agnostic: callers pass review
105
+ * submission bodies (`fetchReviews`/`pr.reviews`) AND PR issue comments
106
+ * (`fetchIssueComments`) — bots post these standing summaries on different
107
+ * surfaces (CR in the review body, greptile in the issue-comment summary) and
108
+ * edit them in place across rounds. Overlap between surfaces is collapsed
109
+ * downstream by `deduplicateFindings`. Shared by triage-pr and review-learn.
64
110
  */
65
111
  export declare function extractReviewBodyFindings(reviews: Array<{
66
112
  author: string;
@@ -1 +1 @@
1
- {"version":3,"file":"bot-review-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/bot-review-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,YAAY,GAAG,KAAK,GAAG,SAAS,CAAC;IACvC,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAC;IACxD,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,uIAAuI;IACvI,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAID,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGpD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,YAAY,GAAG,KAAK,GAAG,SAAS,CAK1E;AAID,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAID,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAID,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,UAmB7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAiC/D;AAED;;;GAGG;AACH;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,oBAAoB,EAAE,CA6BxB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CA0CxF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAoC3F"}
1
+ {"version":3,"file":"bot-review-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/bot-review-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH;;;;;;;;;;;;GAYG;AACH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,SAAS,CAAC;AAEpE,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,GAAG,iBAAiB,GAAG,MAAM,CAAC;IACxD,qEAAqE;IACrE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;OAKG;IACH,WAAW,CAAC,EAAE,UAAU,GAAG,UAAU,CAAC;IACtC,uIAAuI;IACvI,oBAAoB,CAAC,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,KAAK,CAAC;QAAE,EAAE,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChE;AAgBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOpD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAMjD;AAID,4GAA4G;AAC5G,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKpD;AAED,4FAA4F;AAC5F,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED,qDAAqD;AACrD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGlE;AAID,mEAAmE;AACnE,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAMrD;AAID;;;;;;;;;;;GAWG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAM1D;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAKxE;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAWxE;AAID,kEAAkE;AAClE,eAAO,MAAM,iBAAiB,UAmB7B,CAAC;AAEF;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAiC/D;AAED;;;GAGG;AACH;;;;;;;;GAQG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/C,oBAAoB,EAAE,CAgCxB;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CAqCxF;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,aAAa,EAAE,GAAG,oBAAoB,EAAE,CA+B3F"}
@@ -6,11 +6,24 @@
6
6
  * so that `review-learn` extracts lessons only from findings the
7
7
  * developer actually fixed.
8
8
  */
9
- import { parseCodeRabbitReviewFindings } from '../parse-nits.js';
9
+ import { parseCodeRabbitReviewFindings, parseGreptileReviewFindings } from '../parse-nits.js';
10
10
  // ─── Bot Detection ──────────────────────────────────
11
+ // greptile is matched by its bot-login SHAPE — `greptile[bot]`,
12
+ // `greptile-apps[bot]`, `greptile-enterprise[bot]` — rather than a bare
13
+ // `greptile` substring, so a human account like `alice-greptile` is NOT
14
+ // misclassified as a bot (which would hide real human replies in
15
+ // `isThreadResolved` and ingest human comments as bot findings — CR Major on
16
+ // mmnto-ai/totem#2244), while future bot variants are still surfaced. The
17
+ // reviewer's suggested regex carried a trailing `\b` that fails right after the
18
+ // closing `]` (non-word char at end-of-string), so it is dropped here.
19
+ // coderabbit / gca keep their established bare-substring match (canonical
20
+ // exact-login map lives in `@mmnto/totem`'s `review-catch.ts`).
21
+ const GREPTILE_BOT_LOGIN = /\bgreptile(?:-[^[]+)?\[bot\]/i;
11
22
  export function isBotComment(author) {
12
23
  const lower = author.toLowerCase();
13
- return lower.includes('coderabbit') || lower.includes('gemini-code-assist');
24
+ return (lower.includes('coderabbit') ||
25
+ lower.includes('gemini-code-assist') ||
26
+ GREPTILE_BOT_LOGIN.test(author));
14
27
  }
15
28
  export function detectBot(author) {
16
29
  const lower = author.toLowerCase();
@@ -18,6 +31,8 @@ export function detectBot(author) {
18
31
  return 'coderabbit';
19
32
  if (lower.includes('gemini-code-assist'))
20
33
  return 'gca';
34
+ if (GREPTILE_BOT_LOGIN.test(author))
35
+ return 'greptile';
21
36
  return 'unknown';
22
37
  }
23
38
  // ─── CodeRabbit Parser ──────────────────────────────
@@ -57,6 +72,60 @@ export function parseGCASeverity(body) {
57
72
  return 'low';
58
73
  return 'info';
59
74
  }
75
+ // ─── Greptile Parser ────────────────────────────────
76
+ /**
77
+ * Extract severity from a greptile inline comment body via its P1/P2/P3
78
+ * priority label (greptile's severity vocabulary), mapped onto the shared
79
+ * high/medium/low scale that {@link mapToTriageCategory} consumes.
80
+ *
81
+ * Best-effort: greptile's inline format is less structured than CR's emoji or
82
+ * GCA's SVG marker, so when no explicit priority token is present this returns
83
+ * `info` and the body-keyword categorizer does the real bucketing. Word-bounded
84
+ * so `P1`/`p1` matches but a mid-token `GP1X` does not. P0 is greptile's
85
+ * critical/blocking level (greptile review on mmnto-ai/totem#2244) — without it,
86
+ * a `P0` finding would silently fall through to `info`, the opposite of safe.
87
+ */
88
+ export function parseGreptileSeverity(body) {
89
+ if (/\bP0\b/i.test(body))
90
+ return 'critical';
91
+ if (/\bP1\b/i.test(body))
92
+ return 'high';
93
+ if (/\bP2\b/i.test(body))
94
+ return 'medium';
95
+ if (/\bP3\b/i.test(body))
96
+ return 'low';
97
+ return 'info';
98
+ }
99
+ /**
100
+ * Extract greptile's documented merge-readiness Confidence Score (`N/5`, integer
101
+ * 0–5) from its summary comment — 5 production-ready … 0–1 critical problems
102
+ * (greptile docs: code-review/first-pr-review). A status signal surfaced as
103
+ * triage context (NOT a finding); returns `undefined` when no score is present.
104
+ * Parsed as `N/5`, never a percentage.
105
+ */
106
+ export function parseGreptileConfidence(body) {
107
+ // `(?!\d)` bounds the denominator so `Confidence Score: 5/50` is not misread
108
+ // as `5/5` (a false merge-readiness signal) — CR review on #2246.
109
+ const m = body.match(/Confidence Score:\s*([0-5])\s*\/\s*5(?!\d)/i);
110
+ return m ? Number(m[1]) : undefined;
111
+ }
112
+ /**
113
+ * Single source of truth for "which severity parser applies to which bot".
114
+ * Keeps the per-tool dispatch in one place so adding a bot does not require
115
+ * touching every finding-normalizer (triage-pr, extractResolved, extractPushback).
116
+ */
117
+ export function parseSeverityForTool(tool, body) {
118
+ switch (tool) {
119
+ case 'coderabbit':
120
+ return parseCRSeverity(body);
121
+ case 'gca':
122
+ return parseGCASeverity(body);
123
+ case 'greptile':
124
+ return parseGreptileSeverity(body);
125
+ default:
126
+ return 'info';
127
+ }
128
+ }
60
129
  // ─── Resolution Filter ──────────────────────────────
61
130
  /** Patterns indicating human pushback (false positive signal). */
62
131
  export const PUSHBACK_PATTERNS = [
@@ -120,8 +189,13 @@ export function isThreadResolved(thread) {
120
189
  * Only returns findings from threads that were resolved positively.
121
190
  */
122
191
  /**
123
- * Extract findings from CodeRabbit review bodies (outside-diff + nits).
124
- * Shared by triage-pr and review-learn to avoid duplication.
192
+ * Extract findings from review-bot SUMMARY bodies (CodeRabbit outside-diff + nits,
193
+ * greptile "Comments Outside Diff"). Surface-agnostic: callers pass review
194
+ * submission bodies (`fetchReviews`/`pr.reviews`) AND PR issue comments
195
+ * (`fetchIssueComments`) — bots post these standing summaries on different
196
+ * surfaces (CR in the review body, greptile in the issue-comment summary) and
197
+ * edit them in place across rounds. Overlap between surfaces is collapsed
198
+ * downstream by `deduplicateFindings`. Shared by triage-pr and review-learn.
125
199
  */
126
200
  export function extractReviewBodyFindings(reviews) {
127
201
  const findings = [];
@@ -130,10 +204,14 @@ export function extractReviewBodyFindings(reviews) {
130
204
  continue;
131
205
  const tool = detectBot(review.author);
132
206
  let parsed = [];
133
- // Only CodeRabbit parser is implemented for now
134
207
  if (tool === 'coderabbit') {
135
208
  parsed = parseCodeRabbitReviewFindings(review.body);
136
209
  }
210
+ else if (tool === 'greptile') {
211
+ // PROVISIONAL greptile summary parser (mmnto-ai/totem#2192) — see
212
+ // `parseGreptileOutsideDiff`. Refine against a captured live sample.
213
+ parsed = parseGreptileReviewFindings(review.body);
214
+ }
137
215
  for (const finding of parsed) {
138
216
  findings.push({
139
217
  tool,
@@ -168,11 +246,7 @@ export function extractPushbackFindings(threads) {
168
246
  if (!pushbackReply)
169
247
  continue;
170
248
  const tool = detectBot(botComment.author);
171
- const severity = tool === 'coderabbit'
172
- ? parseCRSeverity(botComment.body)
173
- : tool === 'gca'
174
- ? parseGCASeverity(botComment.body)
175
- : 'info';
249
+ const severity = parseSeverityForTool(tool, botComment.body);
176
250
  const body = stripHtmlWrappers(botComment.body);
177
251
  const hunkMatch = thread.diffHunk.match(/@@ .+?\+(\d+)/);
178
252
  const line = hunkMatch ? parseInt(hunkMatch[1], 10) : undefined;
@@ -198,11 +272,7 @@ export function extractResolvedBotFindings(threads) {
198
272
  continue;
199
273
  const botComment = thread.comments[0];
200
274
  const tool = detectBot(botComment.author);
201
- const severity = tool === 'coderabbit'
202
- ? parseCRSeverity(botComment.body)
203
- : tool === 'gca'
204
- ? parseGCASeverity(botComment.body)
205
- : 'info';
275
+ const severity = parseSeverityForTool(tool, botComment.body);
206
276
  const body = stripHtmlWrappers(botComment.body);
207
277
  const suggestion = extractSuggestion(botComment.body);
208
278
  // Extract line number from diff hunk header (@@ -a,b +c,d @@)
@@ -1 +1 @@
1
- {"version":3,"file":"bot-review-parser.js","sourceRoot":"","sources":["../../src/parsers/bot-review-parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"bot-review-parser.js","sourceRoot":"","sources":["../../src/parsers/bot-review-parser.ts"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { describe, expect, it } from 'vitest';
2
- import { detectBot, extractPushbackFindings, extractResolvedBotFindings, extractReviewBodyFindings, extractSuggestion, isBotComment, isThreadResolved, parseCRSeverity, parseGCASeverity, stripHtmlWrappers, } from './bot-review-parser.js';
2
+ import { detectBot, extractPushbackFindings, extractResolvedBotFindings, extractReviewBodyFindings, extractSuggestion, isBotComment, isThreadResolved, parseCRSeverity, parseGCASeverity, parseGreptileConfidence, parseGreptileSeverity, parseSeverityForTool, stripHtmlWrappers, } from './bot-review-parser.js';
3
3
  // ─── detectBot ──────────────────────────────────────────
4
4
  describe('detectBot', () => {
5
5
  it('identifies coderabbitai[bot]', () => {
@@ -8,6 +8,9 @@ describe('detectBot', () => {
8
8
  it('identifies gemini-code-assist[bot]', () => {
9
9
  expect(detectBot('gemini-code-assist[bot]')).toBe('gca');
10
10
  });
11
+ it('identifies greptile-apps[bot] (mmnto-ai/totem#2192)', () => {
12
+ expect(detectBot('greptile-apps[bot]')).toBe('greptile');
13
+ });
11
14
  it('returns unknown for human authors', () => {
12
15
  expect(detectBot('octocat')).toBe('unknown');
13
16
  expect(detectBot('jmatt')).toBe('unknown');
@@ -21,6 +24,18 @@ describe('isBotComment', () => {
21
24
  it('returns true for GCA bot', () => {
22
25
  expect(isBotComment('gemini-code-assist[bot]')).toBe(true);
23
26
  });
27
+ it('returns true for greptile bot (mmnto-ai/totem#2192)', () => {
28
+ expect(isBotComment('greptile-apps[bot]')).toBe(true);
29
+ });
30
+ it('matches greptile bot variants by login shape, not a bare substring (CR Major #2244)', () => {
31
+ // A future bot variant is still surfaced …
32
+ expect(isBotComment('greptile-enterprise[bot]')).toBe(true);
33
+ expect(detectBot('greptile-enterprise[bot]')).toBe('greptile');
34
+ // … but a human whose login merely contains 'greptile' is NOT a bot
35
+ // (a bare-substring match would hide their replies / ingest them as findings).
36
+ expect(isBotComment('alice-greptile')).toBe(false);
37
+ expect(detectBot('alice-greptile')).toBe('unknown');
38
+ });
24
39
  it('returns false for human authors', () => {
25
40
  expect(isBotComment('octocat')).toBe(false);
26
41
  });
@@ -61,6 +76,43 @@ describe('parseGCASeverity', () => {
61
76
  expect(parseGCASeverity('Plain comment without severity')).toBe('info');
62
77
  });
63
78
  });
79
+ // ─── parseGreptileSeverity (mmnto-ai/totem#2192) ────────
80
+ describe('parseGreptileSeverity', () => {
81
+ it('maps P0 → critical (greptile P0 = blocking; mmnto-ai/totem#2244)', () => {
82
+ expect(parseGreptileSeverity('**P0** SQL injection')).toBe('critical');
83
+ });
84
+ it('maps P1 → high', () => {
85
+ expect(parseGreptileSeverity('**P1** This dereferences a possibly-null value')).toBe('high');
86
+ });
87
+ it('maps P2 → medium', () => {
88
+ expect(parseGreptileSeverity('P2: schema gap — missing field')).toBe('medium');
89
+ });
90
+ it('maps P3 → low', () => {
91
+ expect(parseGreptileSeverity('p3 nit: rename for clarity')).toBe('low');
92
+ });
93
+ it('returns info when no priority token is present', () => {
94
+ expect(parseGreptileSeverity('Consider extracting this into a helper')).toBe('info');
95
+ });
96
+ it('does not match a priority token embedded mid-identifier', () => {
97
+ expect(parseGreptileSeverity('the GP1X register is set here')).toBe('info');
98
+ });
99
+ });
100
+ // ─── parseSeverityForTool (single per-tool dispatch) ────
101
+ describe('parseSeverityForTool', () => {
102
+ it('dispatches coderabbit to the CR parser', () => {
103
+ expect(parseSeverityForTool('coderabbit', '\u{1F534} Critical: overflow')).toBe('critical');
104
+ });
105
+ it('dispatches gca to the GCA parser', () => {
106
+ expect(parseSeverityForTool('gca', '![](https://img/medium-priority.svg)')).toBe('medium');
107
+ });
108
+ it('dispatches greptile to the greptile parser', () => {
109
+ expect(parseSeverityForTool('greptile', '**P1** null deref')).toBe('high');
110
+ expect(parseSeverityForTool('greptile', '**P0** rce')).toBe('critical');
111
+ });
112
+ it('returns info for an unknown tool', () => {
113
+ expect(parseSeverityForTool('unknown', 'anything')).toBe('info');
114
+ });
115
+ });
64
116
  // ─── stripHtmlWrappers ──────────────────────────────────
65
117
  describe('stripHtmlWrappers', () => {
66
118
  it('removes details/summary/blockquote tags', () => {
@@ -236,6 +288,23 @@ describe('extractResolvedBotFindings', () => {
236
288
  expect(findings[1].severity).toBe('medium');
237
289
  expect(findings[1].suggestion).toBeUndefined();
238
290
  });
291
+ it('normalizes a resolved greptile finding (mmnto-ai/totem#2192)', () => {
292
+ const threads = [
293
+ {
294
+ path: 'src/windtunnel-scorer.ts',
295
+ diffHunk: '@@ -1,3 +1,5 @@',
296
+ comments: [
297
+ { author: 'greptile-apps[bot]', body: '**P1** Possible null dereference on `cfg`' },
298
+ { author: 'dev', body: 'Fixed in abc1234' },
299
+ ],
300
+ },
301
+ ];
302
+ const findings = extractResolvedBotFindings(threads);
303
+ expect(findings).toHaveLength(1);
304
+ expect(findings[0].tool).toBe('greptile');
305
+ expect(findings[0].severity).toBe('high');
306
+ expect(findings[0].disposition).toBe('accepted');
307
+ });
239
308
  });
240
309
  // ─── extractPushbackFindings ──────────────────────────
241
310
  describe('extractPushbackFindings', () => {
@@ -343,6 +412,23 @@ describe('extractPushbackFindings', () => {
343
412
  expect(findings[0].tool).toBe('gca');
344
413
  expect(findings[0].severity).toBe('high');
345
414
  });
415
+ it('handles greptile bot findings (mmnto-ai/totem#2192)', () => {
416
+ const threads = [
417
+ {
418
+ path: 'src/windtunnel-lock.ts',
419
+ diffHunk: '@@ -10,3 +20,5 @@',
420
+ comments: [
421
+ { author: 'greptile-apps[bot]', body: '**P2** Schema gap on the lock digest' },
422
+ { author: 'dev', body: 'Intentional — validated upstream' },
423
+ ],
424
+ },
425
+ ];
426
+ const findings = extractPushbackFindings(threads);
427
+ expect(findings).toHaveLength(1);
428
+ expect(findings[0].tool).toBe('greptile');
429
+ expect(findings[0].severity).toBe('medium');
430
+ expect(findings[0].line).toBe(20);
431
+ });
346
432
  });
347
433
  // ─── decline taxonomy / disposition (mmnto-ai/totem#2124, doctrine bot-protocols.md §8.1) ───
348
434
  describe('decline taxonomy (mmnto-ai/totem#2124)', () => {
@@ -409,5 +495,44 @@ describe('decline taxonomy (mmnto-ai/totem#2124)', () => {
409
495
  expect(findings).toHaveLength(1);
410
496
  expect(findings[0].disposition).toBeUndefined();
411
497
  });
498
+ it('extractReviewBodyFindings: dispatches the greptile branch via the outside-diff marker (mmnto-ai/totem#2192)', () => {
499
+ // Sourced via gh api → author keeps the [bot] suffix the greptile regex needs.
500
+ // Marker-anchored (strategy#690), mirroring the real greptile summary shape.
501
+ const body = [
502
+ '<h3>Greptile Summary</h3>',
503
+ '',
504
+ '<!-- greptile_other_comments_section -->',
505
+ '',
506
+ '`src/scorer.ts`: exposure floor accepted but never checked.',
507
+ '',
508
+ '<sub>Reviews (1): Last reviewed commit … | Re-trigger Greptile</sub>',
509
+ ].join('\n');
510
+ const findings = extractReviewBodyFindings([{ author: 'greptile-apps[bot]', body }]);
511
+ expect(findings).toHaveLength(1);
512
+ expect(findings[0].tool).toBe('greptile');
513
+ expect(findings[0].body).toContain('exposure floor');
514
+ expect(findings[0].file).toBe('(review body)');
515
+ });
516
+ it('extractReviewBodyFindings: ignores a greptile summary with no outside-diff block', () => {
517
+ const findings = extractReviewBodyFindings([
518
+ { author: 'greptile-apps[bot]', body: '<h3>Greptile Summary</h3>\n\nConfidence Score: 5/5' },
519
+ ]);
520
+ expect(findings).toEqual([]);
521
+ });
522
+ it('parseGreptileConfidence: extracts the N/5 score (mmnto-ai/totem#2192)', () => {
523
+ expect(parseGreptileConfidence('<h3>Confidence Score: 4/5</h3>\n\nMinor polish.')).toBe(4);
524
+ expect(parseGreptileConfidence('Confidence Score: 5 / 5')).toBe(5);
525
+ expect(parseGreptileConfidence('Confidence Score: 0/5')).toBe(0);
526
+ });
527
+ it('parseGreptileConfidence: returns undefined when no score is present', () => {
528
+ expect(parseGreptileConfidence('<h3>Greptile Summary</h3>\n\nSafe to merge.')).toBeUndefined();
529
+ // Not a percentage — must be N/5.
530
+ expect(parseGreptileConfidence('Confidence: 90%')).toBeUndefined();
531
+ });
532
+ it('parseGreptileConfidence: does not misread `5/50` as `5/5` (CR #2246)', () => {
533
+ // The `(?!\d)` denominator boundary prevents a false merge-readiness signal.
534
+ expect(parseGreptileConfidence('Confidence Score: 5/50')).toBeUndefined();
535
+ expect(parseGreptileConfidence('Confidence Score: 4/55')).toBeUndefined();
536
+ });
412
537
  });
413
538
  //# sourceMappingURL=bot-review-parser.test.js.map