@mmnto/cli 2.2.1 → 2.4.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.
Files changed (60) hide show
  1. package/dist/commands/config-drift.test.js +4 -1
  2. package/dist/commands/config-drift.test.js.map +1 -1
  3. package/dist/commands/gate-install.d.ts +17 -0
  4. package/dist/commands/gate-install.d.ts.map +1 -1
  5. package/dist/commands/gate-install.js +23 -0
  6. package/dist/commands/gate-install.js.map +1 -1
  7. package/dist/commands/gate-install.test.js +467 -0
  8. package/dist/commands/gate-install.test.js.map +1 -1
  9. package/dist/commands/gate.d.ts +9 -0
  10. package/dist/commands/gate.d.ts.map +1 -1
  11. package/dist/commands/gate.js +24 -2
  12. package/dist/commands/gate.js.map +1 -1
  13. package/dist/commands/gate.test.js +42 -1
  14. package/dist/commands/gate.test.js.map +1 -1
  15. package/dist/commands/init-templates.d.ts +5 -5
  16. package/dist/commands/init-templates.d.ts.map +1 -1
  17. package/dist/commands/init-templates.js +758 -79
  18. package/dist/commands/init-templates.js.map +1 -1
  19. package/dist/commands/init.d.ts.map +1 -1
  20. package/dist/commands/init.js +8 -1
  21. package/dist/commands/init.js.map +1 -1
  22. package/dist/commands/init.test.js +122 -0
  23. package/dist/commands/init.test.js.map +1 -1
  24. package/dist/commands/mail-cli-wiring.test.js +58 -2
  25. package/dist/commands/mail-cli-wiring.test.js.map +1 -1
  26. package/dist/commands/mail-derive-seat.test.d.ts +28 -0
  27. package/dist/commands/mail-derive-seat.test.d.ts.map +1 -0
  28. package/dist/commands/mail-derive-seat.test.js +557 -0
  29. package/dist/commands/mail-derive-seat.test.js.map +1 -0
  30. package/dist/commands/mail.d.ts +112 -0
  31. package/dist/commands/mail.d.ts.map +1 -1
  32. package/dist/commands/mail.js +189 -0
  33. package/dist/commands/mail.js.map +1 -1
  34. package/dist/commands/resolve-threads-cli-wiring.test.d.ts +19 -0
  35. package/dist/commands/resolve-threads-cli-wiring.test.d.ts.map +1 -0
  36. package/dist/commands/resolve-threads-cli-wiring.test.js +103 -0
  37. package/dist/commands/resolve-threads-cli-wiring.test.js.map +1 -0
  38. package/dist/commands/resolve-threads.d.ts +472 -0
  39. package/dist/commands/resolve-threads.d.ts.map +1 -0
  40. package/dist/commands/resolve-threads.js +793 -0
  41. package/dist/commands/resolve-threads.js.map +1 -0
  42. package/dist/commands/resolve-threads.test.d.ts +2 -0
  43. package/dist/commands/resolve-threads.test.d.ts.map +1 -0
  44. package/dist/commands/resolve-threads.test.js +1123 -0
  45. package/dist/commands/resolve-threads.test.js.map +1 -0
  46. package/dist/commands/sync-labels-forms.test.d.ts +7 -4
  47. package/dist/commands/sync-labels-forms.test.d.ts.map +1 -1
  48. package/dist/commands/sync-labels-forms.test.js +266 -18
  49. package/dist/commands/sync-labels-forms.test.js.map +1 -1
  50. package/dist/index.js +74 -5
  51. package/dist/index.js.map +1 -1
  52. package/dist/parsers/bot-identity-parity.test.d.ts +2 -0
  53. package/dist/parsers/bot-identity-parity.test.d.ts.map +1 -0
  54. package/dist/parsers/bot-identity-parity.test.js +229 -0
  55. package/dist/parsers/bot-identity-parity.test.js.map +1 -0
  56. package/dist/parsers/bot-review-parser.d.ts +8 -5
  57. package/dist/parsers/bot-review-parser.d.ts.map +1 -1
  58. package/dist/parsers/bot-review-parser.js +12 -34
  59. package/dist/parsers/bot-review-parser.js.map +1 -1
  60. package/package.json +2 -2
@@ -0,0 +1,229 @@
1
+ /**
2
+ * Parity sensor for the ONE bot-reviewer identity definition
3
+ * (mmnto-ai/totem#2800): `@mmnto/totem`'s `bot-identity.ts`.
4
+ *
5
+ * This test FAILS if any consumer grows a list of its own —
6
+ * `packages/cli/src/parsers/bot-review-parser.ts` (triage's loose recognition),
7
+ * `packages/core/src/capability/review-catch.ts` (the Layer-B actor-id map),
8
+ * `packages/core/src/merge-ready.ts` (the gate's predicate reads) or
9
+ * `packages/cli/src/commands/resolve-threads.ts` (the human-reply test) — four
10
+ * consumers; the last two joined the scan with the mmnto-ai/totem#2841 fold,
11
+ * which also moved the App-suffix rule into the identity module and gave this
12
+ * sensor the arm that reads an ESCAPED suffix (`\[bot\]` in a regex or string
13
+ * source — the spelling the literal scan never saw). A second copy is exactly
14
+ * the failure the module removes: the lists drift, the stale one reads a real
15
+ * bot as "not a bot", and a finding disappears silently.
16
+ *
17
+ * It lives in the CLI package because that is the layer that can read every
18
+ * source (cli depends on core, never the reverse).
19
+ */
20
+ import * as fs from 'node:fs';
21
+ import * as path from 'node:path';
22
+ import { fileURLToPath } from 'node:url';
23
+ import { describe, expect, it } from 'vitest';
24
+ import { BOT_REVIEWER_IDENTITIES, isBotReviewerLoginExact, resolveActorId } from '@mmnto/totem';
25
+ import { detectBot, isBotComment } from './bot-review-parser.js';
26
+ const HERE = path.dirname(fileURLToPath(import.meta.url));
27
+ const PARSER_SRC = path.join(HERE, 'bot-review-parser.ts');
28
+ const REVIEW_CATCH_SRC = path.resolve(HERE, '../../../core/src/capability/review-catch.ts');
29
+ const RESOLVE_THREADS_SRC = path.resolve(HERE, '../commands/resolve-threads.ts');
30
+ const MERGE_READY_SRC = path.resolve(HERE, '../../../core/src/merge-ready.ts');
31
+ const IDENTITY_SRC = path.resolve(HERE, '../../../core/src/bot-identity.ts');
32
+ /**
33
+ * Strip line and block comments so the scan reads CODE only — every consumer is
34
+ * free to NAME a bot in prose (and both do, explaining where the list went).
35
+ */
36
+ function codeOnly(source) {
37
+ // Lowercased: the regex arms below are case-insensitive, so a case-SENSITIVE
38
+ // literal scan beside them let a display-cased re-declaration
39
+ // (`new Set(['CodeRabbitAI[bot]'])`) through — the sensor's own asymmetry
40
+ // (mmnto-ai/totem#2800 round 2, F9).
41
+ return source
42
+ .replace(/\/\*[\s\S]*?\*\//g, ' ')
43
+ .replace(/(^|[^:])\/\/[^\n]*/g, '$1')
44
+ .toLowerCase();
45
+ }
46
+ /** The login spellings that only a re-declared list would need to name in code. */
47
+ const LOGIN_SPELLINGS = [
48
+ 'coderabbitai',
49
+ 'gemini-code-assist',
50
+ 'greptile-apps',
51
+ 'github-code-quality',
52
+ '[bot]',
53
+ ];
54
+ /** A local regex over a bot name — the first re-declaration shape. */
55
+ const LOCAL_BOT_REGEX = /\/[^\n/]*(?:greptile|coderabbit|gemini|github-code-quality)[^\n]*\/[gimsuy]*/i;
56
+ /**
57
+ * A local SUBSTRING test over a bot name — the second shape. `includes` was the
58
+ * only member until fold F8: `indexOf`, `startsWith` and a bare comparison
59
+ * against a concatenated name are the same re-declaration wearing another
60
+ * method, and the sensor missed all three (mmnto-ai/totem#2800).
61
+ */
62
+ const LOCAL_BOT_SUBSTRING = /(?:includes|indexOf|startsWith|endsWith|search|match)\(\s*['"`](?:coderabbit|greptile|gemini|github-code-quality)/i;
63
+ /** A bot name assembled from pieces to dodge a literal scan — the third shape. */
64
+ const LOCAL_BOT_CONCAT = /['"`](?:coderabbit|greptile|gemini|github-code-quality)[^'"`\n]*['"`]\s*\+/i;
65
+ /**
66
+ * The App suffix spelled ESCAPED — `\[bot\]` inside a regex literal or a
67
+ * RegExp source string — the fourth shape, and the one the arms above never
68
+ * caught: the literal scan looks for `[bot]`, while a regex source spells the
69
+ * brackets escaped, so `const BOT_LOGIN_SUFFIX = /\[bot\]$/i;` passed this
70
+ * sensor for as long as resolve-threads carried it (the pilot-install leg's
71
+ * F1 on the mmnto-ai/totem#2841 fold). The suffix rule has one home,
72
+ * `hasBotAppLoginSuffix` in bot-identity.ts.
73
+ */
74
+ const LOCAL_BOT_SUFFIX = /\\+\[bot\\+\]/i; // one backslash in a regex literal, two in a RegExp source string
75
+ describe('bot identity — exactly one definition', () => {
76
+ it('the single source declares the three review bots the charter names', () => {
77
+ const tools = BOT_REVIEWER_IDENTITIES.map((i) => i.tool);
78
+ expect(tools).toContain('coderabbit');
79
+ expect(tools).toContain('gca');
80
+ expect(tools).toContain('greptile');
81
+ // No duplicate tool ids — a duplicate would make `detectBot` order-dependent.
82
+ expect(new Set(tools).size).toBe(tools.length);
83
+ });
84
+ for (const [label, file] of [
85
+ ['bot-review-parser.ts', PARSER_SRC],
86
+ ['review-catch.ts', REVIEW_CATCH_SRC],
87
+ ['merge-ready.ts', MERGE_READY_SRC],
88
+ ['resolve-threads.ts', RESOLVE_THREADS_SRC],
89
+ ]) {
90
+ it(`${label} declares NO bot-login list of its own`, () => {
91
+ const code = codeOnly(fs.readFileSync(file, 'utf-8'));
92
+ for (const spelling of LOGIN_SPELLINGS) {
93
+ expect(code.includes(spelling), `${label} names the login spelling "${spelling}" in code — the identity list lives in bot-identity.ts`).toBe(false);
94
+ }
95
+ // No local regex over a bot name, no local substring test in ANY of the
96
+ // methods that spell one, no name assembled by concatenation, and no
97
+ // escaped App suffix of its own.
98
+ expect(code).not.toMatch(LOCAL_BOT_REGEX);
99
+ expect(code).not.toMatch(LOCAL_BOT_SUBSTRING);
100
+ expect(code).not.toMatch(LOCAL_BOT_CONCAT);
101
+ expect(code).not.toMatch(LOCAL_BOT_SUFFIX);
102
+ });
103
+ }
104
+ it('the sensor catches every re-declaration shape it claims to (mutant rows)', () => {
105
+ // The sensor is only worth its line if it FAILS on a re-declaration. Each
106
+ // mutant below is a plausible way a consumer could grow its own list back;
107
+ // a sensor that misses one would pass this file while the drift is real.
108
+ const mutants = [
109
+ ['a local regex', 'const GREPTILE = /\\bgreptile(?:-[^[]+)?\\[bot\\]/i;'],
110
+ ['includes()', "if (lower.includes('coderabbit')) return 'coderabbit';"],
111
+ ['indexOf()', "if (lower.indexOf('greptile') !== -1) return 'greptile';"],
112
+ ['startsWith()', "if (lower.startsWith('gemini-code-assist')) return 'gca';"],
113
+ ['concatenation', "const login = 'greptile' + '-apps' + '[bot]';"],
114
+ // Display-cased, `[Bot]` INCLUDED: the earlier version of this row spelled
115
+ // `[bot]` in lowercase, so the pre-fold sensor already caught it on that
116
+ // spelling alone and the row proved nothing (round 3, F3). Every letter a
117
+ // consumer could case differently is cased here.
118
+ ['a display-cased Set', "const BOTS = new Set(['CodeRabbitAI[Bot]', 'GREPTILE-APPS[BOT]']);"],
119
+ // The escaped-suffix spellings — a regex literal and a RegExp source
120
+ // string. The verbatim line resolve-threads carried until the
121
+ // mmnto-ai/totem#2841 fold; the pre-fold sensor passed it.
122
+ ['an escaped-suffix regex', 'const BOT_LOGIN_SUFFIX = /\\[bot\\]$/i;'],
123
+ ['an escaped-suffix RegExp string', "const SUFFIX = new RegExp('\\\\[bot\\\\]$', 'i');"],
124
+ ];
125
+ for (const [label, mutant] of mutants) {
126
+ const scanned = codeOnly(mutant);
127
+ const caught = LOCAL_BOT_REGEX.test(scanned) ||
128
+ LOCAL_BOT_SUBSTRING.test(scanned) ||
129
+ LOCAL_BOT_CONCAT.test(scanned) ||
130
+ LOCAL_BOT_SUFFIX.test(scanned) ||
131
+ LOGIN_SPELLINGS.some((s) => scanned.includes(s));
132
+ expect(caught, `the parity sensor missed the ${label} re-declaration`).toBe(true);
133
+ }
134
+ });
135
+ it('the escaped-suffix arm is what catches the escaped spellings (the literal scan alone does not)', () => {
136
+ // Pins the arm's reason to exist: without it, the two escaped mutants pass
137
+ // every other arm — which is how the removed declaration lived unscanned.
138
+ for (const mutant of [
139
+ 'const BOT_LOGIN_SUFFIX = /\\[bot\\]$/i;',
140
+ "const SUFFIX = new RegExp('\\\\[bot\\\\]$', 'i');",
141
+ ]) {
142
+ const scanned = codeOnly(mutant);
143
+ expect(LOGIN_SPELLINGS.some((s) => scanned.includes(s))).toBe(false);
144
+ expect(scanned).not.toMatch(LOCAL_BOT_REGEX);
145
+ expect(scanned).toMatch(LOCAL_BOT_SUFFIX);
146
+ }
147
+ });
148
+ it('every consumer imports the identity module', () => {
149
+ const parser = fs.readFileSync(PARSER_SRC, 'utf-8');
150
+ expect(parser).toMatch(/import\s*{[^}]*detectBotReviewer[^}]*}\s*from\s*'@mmnto\/totem'/s);
151
+ expect(parser).toMatch(/isBotReviewerLogin/);
152
+ const reviewCatch = fs.readFileSync(REVIEW_CATCH_SRC, 'utf-8');
153
+ expect(reviewCatch).toMatch(/from '\.\.\/bot-identity\.js'/);
154
+ expect(reviewCatch).toMatch(/botReviewerActorIds\(\)/);
155
+ // The gate reads the exact list straight from the module.
156
+ const mergeReady = fs.readFileSync(MERGE_READY_SRC, 'utf-8');
157
+ expect(mergeReady).toMatch(/import\s*{[^}]*isBotReviewerLoginExact[^}]*}\s*from\s*'\.\/bot-identity\.js'/s);
158
+ // The fourth consumer loads the barrel lazily inside the command
159
+ // (mmnto-ai/totem#2339) and injects all three predicates — the exact list,
160
+ // the loose pattern and the App suffix — into its pure selector. Each
161
+ // symbol is asserted on its own, so the destructure's order is free.
162
+ const resolveThreads = fs.readFileSync(RESOLVE_THREADS_SRC, 'utf-8');
163
+ // The file lazy-loads the barrel more than once (safeExec rides its own
164
+ // import); the identity import is the one that carries all three symbols.
165
+ const lazyImports = Array.from(resolveThreads.matchAll(/const\s*{([^}]*)}\s*=\s*await import\('@mmnto\/totem'\)/gs), (m) => m[1]);
166
+ const symbols = ['hasBotAppLoginSuffix', 'isBotReviewerLogin', 'isBotReviewerLoginExact'];
167
+ expect(lazyImports.some((names) => symbols.every((s) => names.includes(s))), `one lazy import of @mmnto/totem carries ${symbols.join(', ')}; saw ${JSON.stringify(lazyImports)}`).toBe(true);
168
+ expect(resolveThreads).toMatch(/hasAppSuffix:\s*hasBotAppLoginSuffix/);
169
+ });
170
+ it('the greptile login is recorded WITH its observation, not guessed', () => {
171
+ const identity = fs.readFileSync(IDENTITY_SRC, 'utf-8');
172
+ // The observed login string and the PRs it was read from (2026-09-07).
173
+ expect(identity).toContain('greptile-apps[bot]');
174
+ expect(identity).toMatch(/Observed 2026-09-07/);
175
+ expect(identity).toMatch(/mmnto-ai\/totem#2834/);
176
+ });
177
+ });
178
+ describe('bot identity — behaviour the consumers had before the move', () => {
179
+ it('isBotComment / detectBot classify the REST-shaped logins unchanged', () => {
180
+ expect(isBotComment('coderabbitai[bot]')).toBe(true);
181
+ expect(isBotComment('gemini-code-assist[bot]')).toBe(true);
182
+ expect(isBotComment('greptile-apps[bot]')).toBe(true);
183
+ expect(isBotComment('github-code-quality[bot]')).toBe(true);
184
+ // A human account that merely CONTAINS a bot name is not a bot — the
185
+ // regression that hid human replies (CR Major on mmnto-ai/totem#2244).
186
+ expect(isBotComment('alice-greptile')).toBe(false);
187
+ expect(isBotComment('alice-github-code-quality')).toBe(false);
188
+ expect(isBotComment('satur8d')).toBe(false);
189
+ expect(detectBot('coderabbitai[bot]')).toBe('coderabbit');
190
+ expect(detectBot('gemini-code-assist[bot]')).toBe('gca');
191
+ expect(detectBot('greptile-apps[bot]')).toBe('greptile');
192
+ expect(detectBot('github-code-quality[bot]')).toBe('ghcq');
193
+ expect(detectBot('satur8d')).toBe('unknown');
194
+ });
195
+ it('resolveActorId keeps EXACT-login attribution, ghcq included (no new actor id)', () => {
196
+ expect(resolveActorId('coderabbitai[bot]')).toBe('coderabbit');
197
+ expect(resolveActorId('gemini-code-assist[bot]')).toBe('gemini-code-assist');
198
+ expect(resolveActorId('greptile-apps[bot]')).toBe('greptile');
199
+ // Not one of the three paid bots the ledger attributes to: it stays itself.
200
+ expect(resolveActorId('github-code-quality[bot]')).toBe('github-code-quality[bot]');
201
+ // A variant is NOT collapsed into the parent's hit-rate.
202
+ expect(resolveActorId('greptile-enterprise[bot]')).toBe('greptile-enterprise[bot]');
203
+ expect(resolveActorId('totem-claude')).toBe('totem-claude');
204
+ });
205
+ it('the GraphQL spelling (no [bot] suffix) is a bot on the exact-login read only', () => {
206
+ expect(isBotReviewerLoginExact('gemini-code-assist')).toBe(true);
207
+ expect(isBotReviewerLoginExact('greptile-apps')).toBe(true);
208
+ expect(isBotReviewerLoginExact('greptile-apps[bot]')).toBe(true);
209
+ expect(isBotReviewerLoginExact('coderabbitai')).toBe(true);
210
+ expect(isBotReviewerLoginExact('alice-greptile')).toBe(false);
211
+ expect(isBotReviewerLoginExact('satur8d')).toBe(false);
212
+ expect(isBotReviewerLoginExact('')).toBe(false);
213
+ });
214
+ it('a HUMAN login that merely shares a bot prefix is not a bot (fold F5)', () => {
215
+ // The pre-fold wildcard arm (`greptile-<anything>`) admitted every one of
216
+ // these, which would let a human comment gate a merge.
217
+ for (const human of [
218
+ 'greptile-fan',
219
+ 'greptile-fan[bot]',
220
+ 'greptile',
221
+ 'github-code-quality-fan',
222
+ 'coderabbitai-mirror',
223
+ 'gemini-code-assist-community',
224
+ ]) {
225
+ expect(isBotReviewerLoginExact(human), `${human} must not read as a bot`).toBe(false);
226
+ }
227
+ });
228
+ });
229
+ //# sourceMappingURL=bot-identity-parity.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bot-identity-parity.test.js","sourceRoot":"","sources":["../../src/parsers/bot-identity-parity.test.ts"],"names":[],"mappings":"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"}
@@ -6,18 +6,21 @@
6
6
  * so that `review-learn` extracts lessons only from findings the
7
7
  * developer actually fixed.
8
8
  */
9
+ import { type BotReviewerTool } from '@mmnto/totem';
9
10
  /**
10
11
  * 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}.
12
+ * `unknown` for an unrecognized author. The bot members come from
13
+ * `@mmnto/totem`'s `BOT_REVIEWER_IDENTITIES` (mmnto-ai/totem#2800), so adding a
14
+ * bot is a single-place change THERE plus its severity parser in
15
+ * {@link parseSeverityForTool}.
13
16
  *
14
17
  * NOTE: `gca` is triage's local id for `gemini-code-assist` — it intentionally
15
18
  * diverges from the core actor-id scheme in `@mmnto/totem`'s `resolveActorId`
16
19
  * (which uses `gemini-code-assist` and EXACT-login matching for hit-rate
17
20
  * attribution). Triage's goal is broad recognition (surface every finding) with
18
21
  * 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.
22
+ * its bot-login shape (`loginPattern` on each identity). Both ids now hang off
23
+ * the ONE identity array, so they cannot drift apart.
21
24
  *
22
25
  * `ghcq` is GitHub's own `github-code-quality[bot]` (mmnto-ai/totem#2626;
23
26
  * observed corpus n=7 inline comments: mmnto-ai/totem #1897/#2224/#2434/#2457
@@ -26,7 +29,7 @@
26
29
  * for it (attested: no tag has ever been attempted in-org and none is
27
30
  * documented) — treat disposition comments as audit-trail-only.
28
31
  */
29
- export type BotTool = 'coderabbit' | 'gca' | 'greptile' | 'ghcq' | 'unknown';
32
+ export type BotTool = BotReviewerTool | 'unknown';
30
33
  export interface NormalizedBotFinding {
31
34
  tool: BotTool;
32
35
  severity: 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;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,MAAM,OAAO,GAAG,YAAY,GAAG,KAAK,GAAG,UAAU,GAAG,MAAM,GAAG,SAAS,CAAC;AAE7E,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;AAyBD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAQpD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAOjD;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,CAoBxE;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,CA+CxB;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"}
1
+ {"version":3,"file":"bot-review-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/bot-review-parser.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,KAAK,eAAe,EAAyC,MAAM,cAAc,CAAC;AAM3F;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,MAAM,MAAM,OAAO,GAAG,eAAe,GAAG,SAAS,CAAC;AAElD,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;AAcD,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAEjD;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,CAoBxE;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,CA+CxB;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,45 +6,23 @@
6
6
  * so that `review-learn` extracts lessons only from findings the
7
7
  * developer actually fixed.
8
8
  */
9
+ import { detectBotReviewer, isBotReviewerLogin } from '@mmnto/totem';
9
10
  import { parseCodeRabbitReviewFindings, parseGreptileReviewFindings } from '../parse-nits.js';
10
11
  // ─── 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;
22
- // ghcq follows the greptile bot-login-shape precedent (mmnto-ai/totem#2626):
23
- // every observed login across both repos is exactly `github-code-quality[bot]`,
24
- // the `[bot]` suffix requirement keeps a human account like
25
- // `alice-github-code-quality` out of the bot classes, and the optional
26
- // `(?:-[^[]+)?` variant arm mirrors greptile's ("future bot variants are still
27
- // surfaced") so a renamed/tiered variant never re-enters the invisible-drop
28
- // state this normalization removes.
29
- const GHCQ_BOT_LOGIN = /\bgithub-code-quality(?:-[^[]+)?\[bot\]/i;
12
+ // The login patterns are NOT declared here: `@mmnto/totem`'s `bot-identity.ts`
13
+ // is the ONE definition the cohort reads (mmnto-ai/totem#2800), and
14
+ // `bot-identity-parity.test.ts` fails if this module grows a copy. What lived
15
+ // here coderabbit/gca by bare substring, greptile and ghcq by bot-login SHAPE
16
+ // (the `[bot]` suffix required, so a human `alice-greptile` is not
17
+ // misclassified and real human replies are not hidden in `isThreadResolved` —
18
+ // CR Major on mmnto-ai/totem#2244) is that module's `loginPattern`, moved
19
+ // verbatim. Triage's compact ids (`gca`) still differ from the Layer-B actor
20
+ // ids (`gemini-code-assist`) by design; both now hang off the same array.
30
21
  export function isBotComment(author) {
31
- const lower = author.toLowerCase();
32
- return (lower.includes('coderabbit') ||
33
- lower.includes('gemini-code-assist') ||
34
- GREPTILE_BOT_LOGIN.test(author) ||
35
- GHCQ_BOT_LOGIN.test(author));
22
+ return isBotReviewerLogin(author);
36
23
  }
37
24
  export function detectBot(author) {
38
- const lower = author.toLowerCase();
39
- if (lower.includes('coderabbit'))
40
- return 'coderabbit';
41
- if (lower.includes('gemini-code-assist'))
42
- return 'gca';
43
- if (GREPTILE_BOT_LOGIN.test(author))
44
- return 'greptile';
45
- if (GHCQ_BOT_LOGIN.test(author))
46
- return 'ghcq';
47
- return 'unknown';
25
+ return detectBotReviewer(author) ?? 'unknown';
48
26
  }
49
27
  // ─── CodeRabbit Parser ──────────────────────────────
50
28
  /** Extract severity from CR comment body (red circle Critical, orange circle Major, yellow circle Minor) */
@@ -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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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/cli",
3
- "version": "2.2.1",
3
+ "version": "2.4.0",
4
4
  "description": "Totem: local-first toolkit that keeps AI-agent work queryable, enforceable, and derivable as plain files in your codebase",
5
5
  "type": "module",
6
6
  "engines": {
@@ -28,7 +28,7 @@
28
28
  "smol-toml": "^1.6.1",
29
29
  "yaml": "^2.4.0",
30
30
  "zod": "^3.24.0",
31
- "@mmnto/totem": "2.2.1"
31
+ "@mmnto/totem": "2.4.0"
32
32
  },
33
33
  "devDependencies": {
34
34
  "@anthropic-ai/sdk": "^0.98.0",