@mmnto/totem 1.15.10 → 1.16.1

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/index.d.ts CHANGED
@@ -86,4 +86,6 @@ export { formatSharedHelpers, getSharedHelpers } from './sys/helpers.js';
86
86
  export { codeToPattern, escapeRegex } from './regex-utils.js';
87
87
  export type { ObservationInput } from './pipeline-observation.js';
88
88
  export { deduplicateObservations, generateObservationRule } from './pipeline-observation.js';
89
+ export type { RecurrencePattern, RecurrenceSeverityBucket, RecurrenceStats, RecurrenceTool, } from './recurrence-stats.js';
90
+ export { computeSignature, jaccard, normalizeFindingBody, RecurrencePatternSchema, RecurrenceSeverityBucketSchema, RecurrenceStatsSchema, RecurrenceToolSchema, tokenizeForJaccard, } from './recurrence-stats.js';
89
91
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -60,4 +60,5 @@ export { formatSharedHelpers, getSharedHelpers } from './sys/helpers.js';
60
60
  // Regex utilities (centralized escape + Pipeline 5 pattern builder)
61
61
  export { codeToPattern, escapeRegex } from './regex-utils.js';
62
62
  export { deduplicateObservations, generateObservationRule } from './pipeline-observation.js';
63
+ export { computeSignature, jaccard, normalizeFindingBody, RecurrencePatternSchema, RecurrenceSeverityBucketSchema, RecurrenceStatsSchema, RecurrenceToolSchema, tokenizeForJaccard, } from './recurrence-stats.js';
63
64
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,266 @@
1
+ /**
2
+ * Recurrence-stats schemas + pure helpers for `totem stats --pattern-recurrence`
3
+ * (mmnto-ai/totem#1715).
4
+ *
5
+ * Substrate of the four-honest-signals "signal 2" instrumentation
6
+ * (same-class-mistake frequency). The data model is consumed by the
7
+ * recurrence-stats command and downstream by the bot-tax circuit
8
+ * breaker (mmnto-ai/totem#1713) and the pre-flight estimator
9
+ * (mmnto-ai/totem#1714).
10
+ *
11
+ * Everything in this file is pure: Zod schemas + deterministic string
12
+ * helpers. No I/O, no command logic — that lives in the cli package.
13
+ */
14
+ import { z } from 'zod';
15
+ /** Source classification of a clustered pattern. */
16
+ export declare const RecurrenceToolSchema: z.ZodEnum<["coderabbit", "gca", "sarif", "override", "mixed", "unknown"]>;
17
+ export type RecurrenceTool = z.infer<typeof RecurrenceToolSchema>;
18
+ /** Normalized severity bucket across CR/GCA/override sources. */
19
+ export declare const RecurrenceSeverityBucketSchema: z.ZodEnum<["critical", "high", "medium", "low", "nit"]>;
20
+ export type RecurrenceSeverityBucket = z.infer<typeof RecurrenceSeverityBucketSchema>;
21
+ /** A single cross-PR cluster of bot/override findings sharing one signature. */
22
+ export declare const RecurrencePatternSchema: z.ZodObject<{
23
+ /** Stable hash of the normalized pattern body — used as cluster key */
24
+ signature: z.ZodString;
25
+ /** Source classification (`mixed` when one signature spans bots/overrides) */
26
+ tool: z.ZodEnum<["coderabbit", "gca", "sarif", "override", "mixed", "unknown"]>;
27
+ /** Normalized severity across CR/GCA's different severity vocabularies */
28
+ severityBucket: z.ZodEnum<["critical", "high", "medium", "low", "nit"]>;
29
+ /** Total finding count for this signature (>= 1) */
30
+ occurrences: z.ZodNumber;
31
+ /** PR numbers where this pattern fired (deduped, sorted ascending numerically) */
32
+ prs: z.ZodArray<z.ZodString, "many">;
33
+ /** First 3 raw bodies seen — for human triage */
34
+ sampleBodies: z.ZodArray<z.ZodString, "many">;
35
+ /** Earliest finding timestamp (ISO 8601) */
36
+ firstSeen: z.ZodString;
37
+ /** Latest finding timestamp (ISO 8601) */
38
+ lastSeen: z.ZodString;
39
+ /** File paths where the pattern fired (deduped, ≤ 10) */
40
+ paths: z.ZodArray<z.ZodString, "many">;
41
+ /** True if signature heuristically maps to an existing compiled rule */
42
+ coveredByRule: z.ZodBoolean;
43
+ }, "strip", z.ZodTypeAny, {
44
+ paths: string[];
45
+ signature: string;
46
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
47
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
48
+ occurrences: number;
49
+ prs: string[];
50
+ sampleBodies: string[];
51
+ firstSeen: string;
52
+ lastSeen: string;
53
+ coveredByRule: boolean;
54
+ }, {
55
+ paths: string[];
56
+ signature: string;
57
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
58
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
59
+ occurrences: number;
60
+ prs: string[];
61
+ sampleBodies: string[];
62
+ firstSeen: string;
63
+ lastSeen: string;
64
+ coveredByRule: boolean;
65
+ }>;
66
+ export type RecurrencePattern = z.infer<typeof RecurrencePatternSchema>;
67
+ /** Top-level shape persisted at `.totem/recurrence-stats.json`. */
68
+ export declare const RecurrenceStatsSchema: z.ZodObject<{
69
+ /** Schema version for forward-compat */
70
+ version: z.ZodLiteral<1>;
71
+ /** When this run wrote the file (ISO 8601) */
72
+ lastUpdated: z.ZodString;
73
+ /** The `--threshold` value used; informs reproducibility */
74
+ thresholdApplied: z.ZodNumber;
75
+ /** Number of PRs requested via `--history-depth` */
76
+ historyDepth: z.ZodNumber;
77
+ /** PR numbers actually fetched (post-filter) */
78
+ prsScanned: z.ZodArray<z.ZodString, "many">;
79
+ /** Patterns at-or-above threshold; sorted by occurrences descending */
80
+ patterns: z.ZodArray<z.ZodObject<{
81
+ /** Stable hash of the normalized pattern body — used as cluster key */
82
+ signature: z.ZodString;
83
+ /** Source classification (`mixed` when one signature spans bots/overrides) */
84
+ tool: z.ZodEnum<["coderabbit", "gca", "sarif", "override", "mixed", "unknown"]>;
85
+ /** Normalized severity across CR/GCA's different severity vocabularies */
86
+ severityBucket: z.ZodEnum<["critical", "high", "medium", "low", "nit"]>;
87
+ /** Total finding count for this signature (>= 1) */
88
+ occurrences: z.ZodNumber;
89
+ /** PR numbers where this pattern fired (deduped, sorted ascending numerically) */
90
+ prs: z.ZodArray<z.ZodString, "many">;
91
+ /** First 3 raw bodies seen — for human triage */
92
+ sampleBodies: z.ZodArray<z.ZodString, "many">;
93
+ /** Earliest finding timestamp (ISO 8601) */
94
+ firstSeen: z.ZodString;
95
+ /** Latest finding timestamp (ISO 8601) */
96
+ lastSeen: z.ZodString;
97
+ /** File paths where the pattern fired (deduped, ≤ 10) */
98
+ paths: z.ZodArray<z.ZodString, "many">;
99
+ /** True if signature heuristically maps to an existing compiled rule */
100
+ coveredByRule: z.ZodBoolean;
101
+ }, "strip", z.ZodTypeAny, {
102
+ paths: string[];
103
+ signature: string;
104
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
105
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
106
+ occurrences: number;
107
+ prs: string[];
108
+ sampleBodies: string[];
109
+ firstSeen: string;
110
+ lastSeen: string;
111
+ coveredByRule: boolean;
112
+ }, {
113
+ paths: string[];
114
+ signature: string;
115
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
116
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
117
+ occurrences: number;
118
+ prs: string[];
119
+ sampleBodies: string[];
120
+ firstSeen: string;
121
+ lastSeen: string;
122
+ coveredByRule: boolean;
123
+ }>, "many">;
124
+ /** Patterns that hit existing rules — separate so coverage rate is observable */
125
+ coveredPatterns: z.ZodArray<z.ZodObject<{
126
+ /** Stable hash of the normalized pattern body — used as cluster key */
127
+ signature: z.ZodString;
128
+ /** Source classification (`mixed` when one signature spans bots/overrides) */
129
+ tool: z.ZodEnum<["coderabbit", "gca", "sarif", "override", "mixed", "unknown"]>;
130
+ /** Normalized severity across CR/GCA's different severity vocabularies */
131
+ severityBucket: z.ZodEnum<["critical", "high", "medium", "low", "nit"]>;
132
+ /** Total finding count for this signature (>= 1) */
133
+ occurrences: z.ZodNumber;
134
+ /** PR numbers where this pattern fired (deduped, sorted ascending numerically) */
135
+ prs: z.ZodArray<z.ZodString, "many">;
136
+ /** First 3 raw bodies seen — for human triage */
137
+ sampleBodies: z.ZodArray<z.ZodString, "many">;
138
+ /** Earliest finding timestamp (ISO 8601) */
139
+ firstSeen: z.ZodString;
140
+ /** Latest finding timestamp (ISO 8601) */
141
+ lastSeen: z.ZodString;
142
+ /** File paths where the pattern fired (deduped, ≤ 10) */
143
+ paths: z.ZodArray<z.ZodString, "many">;
144
+ /** True if signature heuristically maps to an existing compiled rule */
145
+ coveredByRule: z.ZodBoolean;
146
+ }, "strip", z.ZodTypeAny, {
147
+ paths: string[];
148
+ signature: string;
149
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
150
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
151
+ occurrences: number;
152
+ prs: string[];
153
+ sampleBodies: string[];
154
+ firstSeen: string;
155
+ lastSeen: string;
156
+ coveredByRule: boolean;
157
+ }, {
158
+ paths: string[];
159
+ signature: string;
160
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
161
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
162
+ occurrences: number;
163
+ prs: string[];
164
+ sampleBodies: string[];
165
+ firstSeen: string;
166
+ lastSeen: string;
167
+ coveredByRule: boolean;
168
+ }>, "many">;
169
+ }, "strip", z.ZodTypeAny, {
170
+ version: 1;
171
+ patterns: {
172
+ paths: string[];
173
+ signature: string;
174
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
175
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
176
+ occurrences: number;
177
+ prs: string[];
178
+ sampleBodies: string[];
179
+ firstSeen: string;
180
+ lastSeen: string;
181
+ coveredByRule: boolean;
182
+ }[];
183
+ lastUpdated: string;
184
+ thresholdApplied: number;
185
+ historyDepth: number;
186
+ prsScanned: string[];
187
+ coveredPatterns: {
188
+ paths: string[];
189
+ signature: string;
190
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
191
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
192
+ occurrences: number;
193
+ prs: string[];
194
+ sampleBodies: string[];
195
+ firstSeen: string;
196
+ lastSeen: string;
197
+ coveredByRule: boolean;
198
+ }[];
199
+ }, {
200
+ version: 1;
201
+ patterns: {
202
+ paths: string[];
203
+ signature: string;
204
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
205
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
206
+ occurrences: number;
207
+ prs: string[];
208
+ sampleBodies: string[];
209
+ firstSeen: string;
210
+ lastSeen: string;
211
+ coveredByRule: boolean;
212
+ }[];
213
+ lastUpdated: string;
214
+ thresholdApplied: number;
215
+ historyDepth: number;
216
+ prsScanned: string[];
217
+ coveredPatterns: {
218
+ paths: string[];
219
+ signature: string;
220
+ tool: "unknown" | "override" | "coderabbit" | "gca" | "sarif" | "mixed";
221
+ severityBucket: "critical" | "high" | "medium" | "low" | "nit";
222
+ occurrences: number;
223
+ prs: string[];
224
+ sampleBodies: string[];
225
+ firstSeen: string;
226
+ lastSeen: string;
227
+ coveredByRule: boolean;
228
+ }[];
229
+ }>;
230
+ export type RecurrenceStats = z.infer<typeof RecurrenceStatsSchema>;
231
+ /**
232
+ * Q5 normalization pipeline for finding bodies before signature hashing.
233
+ *
234
+ * Strips, in order:
235
+ * - Triple-backtick code fences (```…```)
236
+ * - URLs (http(s)://…)
237
+ * - Backtick-spans (`code`)
238
+ * - File paths with optional :line / :line:col suffix
239
+ * (e.g. `packages/cli/src/foo.ts:42`, `src/x.ts:42:7`)
240
+ * - Standalone line references (`line 42`, `line: 42`, ` :42`)
241
+ * - Leading severity prefixes (`CRITICAL: `, `**Critical**`, etc.)
242
+ *
243
+ * Then lowercases and collapses internal whitespace.
244
+ */
245
+ export declare function normalizeFindingBody(body: string): string;
246
+ /**
247
+ * Compute a 16-char hex SHA-256 prefix of the normalized text.
248
+ * Stable + deterministic; collision probability negligible at this
249
+ * input scale (per-repo PR history).
250
+ */
251
+ export declare function computeSignature(normalized: string): string;
252
+ /**
253
+ * Tokenize text for Jaccard similarity:
254
+ * - Split on whitespace + non-alphanumerics
255
+ * - Lowercase
256
+ * - Drop tokens of length ≤ 2
257
+ * - Drop a small stopword list
258
+ */
259
+ export declare function tokenizeForJaccard(text: string): Set<string>;
260
+ /**
261
+ * Jaccard similarity |A ∩ B| / |A ∪ B|. Returns 1.0 on identical sets,
262
+ * 0.0 on disjoint sets, undefined-protected against the empty/empty case
263
+ * (treated as 0 — they're not "the same pattern", they're both empty).
264
+ */
265
+ export declare function jaccard(a: Set<string>, b: Set<string>): number;
266
+ //# sourceMappingURL=recurrence-stats.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence-stats.d.ts","sourceRoot":"","sources":["../src/recurrence-stats.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,oDAAoD;AACpD,eAAO,MAAM,oBAAoB,2EAO/B,CAAC;AAEH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAElE,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,yDAAuD,CAAC;AAEnG,MAAM,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,8BAA8B,CAAC,CAAC;AAEtF,gFAAgF;AAChF,eAAO,MAAM,uBAAuB;IAClC,uEAAuE;;IAEvE,8EAA8E;;IAE9E,0EAA0E;;IAE1E,oDAAoD;;IAEpD,kFAAkF;;IAElF,iDAAiD;;IAEjD,4CAA4C;;IAE5C,0CAA0C;;IAE1C,yDAAyD;;IAEzD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;EAExE,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAExE,mEAAmE;AACnE,eAAO,MAAM,qBAAqB;IAChC,wCAAwC;;IAExC,8CAA8C;;IAE9C,4DAA4D;;IAE5D,oDAAoD;;IAEpD,gDAAgD;;IAEhD,uEAAuE;;QApCvE,uEAAuE;;QAEvE,8EAA8E;;QAE9E,0EAA0E;;QAE1E,oDAAoD;;QAEpD,kFAAkF;;QAElF,iDAAiD;;QAEjD,4CAA4C;;QAE5C,0CAA0C;;QAE1C,yDAAyD;;QAEzD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;IAoBxE,iFAAiF;;QAtCjF,uEAAuE;;QAEvE,8EAA8E;;QAE9E,0EAA0E;;QAE1E,oDAAoD;;QAEpD,kFAAkF;;QAElF,iDAAiD;;QAEjD,4CAA4C;;QAE5C,0CAA0C;;QAE1C,yDAAyD;;QAEzD,wEAAwE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAsBxE,CAAC;AAEH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAIpE;;;;;;;;;;;;;GAaG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CA2CzD;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE3D;AA8BD;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,CAU5D;AAED;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,MAAM,CAS9D"}
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Recurrence-stats schemas + pure helpers for `totem stats --pattern-recurrence`
3
+ * (mmnto-ai/totem#1715).
4
+ *
5
+ * Substrate of the four-honest-signals "signal 2" instrumentation
6
+ * (same-class-mistake frequency). The data model is consumed by the
7
+ * recurrence-stats command and downstream by the bot-tax circuit
8
+ * breaker (mmnto-ai/totem#1713) and the pre-flight estimator
9
+ * (mmnto-ai/totem#1714).
10
+ *
11
+ * Everything in this file is pure: Zod schemas + deterministic string
12
+ * helpers. No I/O, no command logic — that lives in the cli package.
13
+ */
14
+ import { createHash } from 'node:crypto';
15
+ import { z } from 'zod';
16
+ // ─── Zod schemas ────────────────────────────────────
17
+ /** Source classification of a clustered pattern. */
18
+ export const RecurrenceToolSchema = z.enum([
19
+ 'coderabbit',
20
+ 'gca',
21
+ 'sarif',
22
+ 'override',
23
+ 'mixed',
24
+ 'unknown',
25
+ ]);
26
+ /** Normalized severity bucket across CR/GCA/override sources. */
27
+ export const RecurrenceSeverityBucketSchema = z.enum(['critical', 'high', 'medium', 'low', 'nit']);
28
+ /** A single cross-PR cluster of bot/override findings sharing one signature. */
29
+ export const RecurrencePatternSchema = z.object({
30
+ /** Stable hash of the normalized pattern body — used as cluster key */
31
+ signature: z.string().min(1),
32
+ /** Source classification (`mixed` when one signature spans bots/overrides) */
33
+ tool: RecurrenceToolSchema,
34
+ /** Normalized severity across CR/GCA's different severity vocabularies */
35
+ severityBucket: RecurrenceSeverityBucketSchema,
36
+ /** Total finding count for this signature (>= 1) */
37
+ occurrences: z.number().int().min(1),
38
+ /** PR numbers where this pattern fired (deduped, sorted ascending numerically) */
39
+ prs: z.array(z.string()),
40
+ /** First 3 raw bodies seen — for human triage */
41
+ sampleBodies: z.array(z.string()).max(3),
42
+ /** Earliest finding timestamp (ISO 8601) */
43
+ firstSeen: z.string(),
44
+ /** Latest finding timestamp (ISO 8601) */
45
+ lastSeen: z.string(),
46
+ /** File paths where the pattern fired (deduped, ≤ 10) */
47
+ paths: z.array(z.string()).max(10),
48
+ /** True if signature heuristically maps to an existing compiled rule */
49
+ coveredByRule: z.boolean(),
50
+ });
51
+ /** Top-level shape persisted at `.totem/recurrence-stats.json`. */
52
+ export const RecurrenceStatsSchema = z.object({
53
+ /** Schema version for forward-compat */
54
+ version: z.literal(1),
55
+ /** When this run wrote the file (ISO 8601) */
56
+ lastUpdated: z.string(),
57
+ /** The `--threshold` value used; informs reproducibility */
58
+ thresholdApplied: z.number().int().min(1),
59
+ /** Number of PRs requested via `--history-depth` */
60
+ historyDepth: z.number().int().min(0),
61
+ /** PR numbers actually fetched (post-filter) */
62
+ prsScanned: z.array(z.string()),
63
+ /** Patterns at-or-above threshold; sorted by occurrences descending */
64
+ patterns: z.array(RecurrencePatternSchema),
65
+ /** Patterns that hit existing rules — separate so coverage rate is observable */
66
+ coveredPatterns: z.array(RecurrencePatternSchema),
67
+ });
68
+ // ─── Pure helpers — signature normalization ─────────
69
+ /**
70
+ * Q5 normalization pipeline for finding bodies before signature hashing.
71
+ *
72
+ * Strips, in order:
73
+ * - Triple-backtick code fences (```…```)
74
+ * - URLs (http(s)://…)
75
+ * - Backtick-spans (`code`)
76
+ * - File paths with optional :line / :line:col suffix
77
+ * (e.g. `packages/cli/src/foo.ts:42`, `src/x.ts:42:7`)
78
+ * - Standalone line references (`line 42`, `line: 42`, ` :42`)
79
+ * - Leading severity prefixes (`CRITICAL: `, `**Critical**`, etc.)
80
+ *
81
+ * Then lowercases and collapses internal whitespace.
82
+ */
83
+ export function normalizeFindingBody(body) {
84
+ let out = body;
85
+ // 1. Strip triple-backtick fenced blocks (with or without language hint).
86
+ out = out.replace(/```[\s\S]*?```/g, ' ');
87
+ // 2. Strip URLs.
88
+ out = out.replace(/https?:\/\/\S+/g, ' ');
89
+ // 3. Strip leading severity prefixes — `**Critical**`, `CRITICAL: `, etc.
90
+ // Run BEFORE backtick-span stripping so wrapped severity tokens are
91
+ // captured by the bracket-aware patterns.
92
+ out = out.replace(/^\s*(?:\*\*|`)?\s*(?:critical|high|major|medium|minor|low|nit|nitpick|info|warning|error)\s*(?:\*\*|`)?\s*[:.\-—]\s*/i, '');
93
+ // Also handle a leading "**Critical**" with no trailing punctuation.
94
+ out = out.replace(/^\s*\*\*\s*(?:critical|high|major|medium|minor|low|nit|nitpick|info|warning|error)\s*\*\*\s*/i, '');
95
+ // 4. Strip backtick spans, keeping surrounding whitespace.
96
+ out = out.replace(/`[^`]*`/g, ' ');
97
+ // 5. Strip file paths with optional :line / :line:col suffix.
98
+ // Matches things like `packages/cli/src/foo.ts:42`, `src/x.ts:42:7`,
99
+ // `./foo.ts`, `../bar/baz.tsx`. A path here is a sequence of
100
+ // non-space, non-quote tokens containing at least one `/` or `\`
101
+ // AND ending in a recognized code/text extension.
102
+ out = out.replace(/(?:[A-Za-z]:[\\/])?(?:\.{0,2}[\\/])?(?:[\w.\-]+[\\/])+[\w.\-]+\.[A-Za-z0-9]{1,8}(?::\d+(?::\d+)?)?/g, ' ');
103
+ // 6. Strip standalone line references — `line 42`, `line: 42`, ` :42`.
104
+ out = out.replace(/\bline\s*[:\-]?\s*\d+\b/gi, ' ');
105
+ out = out.replace(/(?<=\s):\d+\b/g, ' ');
106
+ // 7. Lowercase + collapse whitespace.
107
+ out = out.toLowerCase().replace(/\s+/g, ' ').trim();
108
+ return out;
109
+ }
110
+ /**
111
+ * Compute a 16-char hex SHA-256 prefix of the normalized text.
112
+ * Stable + deterministic; collision probability negligible at this
113
+ * input scale (per-repo PR history).
114
+ */
115
+ export function computeSignature(normalized) {
116
+ return createHash('sha256').update(normalized, 'utf-8').digest('hex').slice(0, 16);
117
+ }
118
+ // ─── Pure helpers — Jaccard coverage heuristic ──────
119
+ const STOPWORDS = new Set([
120
+ 'the',
121
+ 'a',
122
+ 'an',
123
+ 'is',
124
+ 'of',
125
+ 'to',
126
+ 'in',
127
+ 'and',
128
+ 'or',
129
+ 'for',
130
+ 'on',
131
+ 'this',
132
+ 'that',
133
+ 'it',
134
+ 'be',
135
+ 'as',
136
+ 'at',
137
+ 'by',
138
+ 'if',
139
+ 'not',
140
+ 'but',
141
+ 'use',
142
+ 'using',
143
+ ]);
144
+ /**
145
+ * Tokenize text for Jaccard similarity:
146
+ * - Split on whitespace + non-alphanumerics
147
+ * - Lowercase
148
+ * - Drop tokens of length ≤ 2
149
+ * - Drop a small stopword list
150
+ */
151
+ export function tokenizeForJaccard(text) {
152
+ const lowered = text.toLowerCase();
153
+ const raw = lowered.split(/[^a-z0-9]+/);
154
+ const out = new Set();
155
+ for (const tok of raw) {
156
+ if (tok.length <= 2)
157
+ continue;
158
+ if (STOPWORDS.has(tok))
159
+ continue;
160
+ out.add(tok);
161
+ }
162
+ return out;
163
+ }
164
+ /**
165
+ * Jaccard similarity |A ∩ B| / |A ∪ B|. Returns 1.0 on identical sets,
166
+ * 0.0 on disjoint sets, undefined-protected against the empty/empty case
167
+ * (treated as 0 — they're not "the same pattern", they're both empty).
168
+ */
169
+ export function jaccard(a, b) {
170
+ if (a.size === 0 && b.size === 0)
171
+ return 0;
172
+ let intersection = 0;
173
+ for (const tok of a) {
174
+ if (b.has(tok))
175
+ intersection += 1;
176
+ }
177
+ const union = a.size + b.size - intersection;
178
+ if (union === 0)
179
+ return 0;
180
+ return intersection / union;
181
+ }
182
+ //# sourceMappingURL=recurrence-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence-stats.js","sourceRoot":"","sources":["../src/recurrence-stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=recurrence-stats.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence-stats.test.d.ts","sourceRoot":"","sources":["../src/recurrence-stats.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,215 @@
1
+ import { describe, expect, it } from 'vitest';
2
+ import { computeSignature, jaccard, normalizeFindingBody, RecurrencePatternSchema, RecurrenceStatsSchema, tokenizeForJaccard, } from './recurrence-stats.js';
3
+ // ─── RecurrencePatternSchema ───────────────────────────
4
+ describe('RecurrencePatternSchema', () => {
5
+ it('parses a well-formed pattern', () => {
6
+ const result = RecurrencePatternSchema.safeParse({
7
+ signature: 'abc123def4567890',
8
+ tool: 'coderabbit',
9
+ severityBucket: 'medium',
10
+ occurrences: 7,
11
+ prs: ['101', '102'],
12
+ sampleBodies: ['avoid using any type here', 'avoid using any type'],
13
+ firstSeen: '2026-01-01T00:00:00.000Z',
14
+ lastSeen: '2026-01-15T00:00:00.000Z',
15
+ paths: ['src/a.ts', 'src/b.ts'],
16
+ coveredByRule: false,
17
+ });
18
+ expect(result.success).toBe(true);
19
+ });
20
+ it('rejects malformed pattern (missing fields)', () => {
21
+ const result = RecurrencePatternSchema.safeParse({
22
+ signature: 'abc',
23
+ tool: 'coderabbit',
24
+ // missing other fields
25
+ });
26
+ expect(result.success).toBe(false);
27
+ });
28
+ it('rejects unknown tool', () => {
29
+ const result = RecurrencePatternSchema.safeParse({
30
+ signature: 'abc',
31
+ tool: 'sonarqube',
32
+ severityBucket: 'low',
33
+ occurrences: 1,
34
+ prs: [],
35
+ sampleBodies: [],
36
+ firstSeen: 'x',
37
+ lastSeen: 'y',
38
+ paths: [],
39
+ coveredByRule: false,
40
+ });
41
+ expect(result.success).toBe(false);
42
+ });
43
+ it('rejects sampleBodies > 3', () => {
44
+ const result = RecurrencePatternSchema.safeParse({
45
+ signature: 'abc',
46
+ tool: 'gca',
47
+ severityBucket: 'low',
48
+ occurrences: 4,
49
+ prs: ['1'],
50
+ sampleBodies: ['a', 'b', 'c', 'd'],
51
+ firstSeen: 'x',
52
+ lastSeen: 'y',
53
+ paths: [],
54
+ coveredByRule: false,
55
+ });
56
+ expect(result.success).toBe(false);
57
+ });
58
+ });
59
+ describe('RecurrenceStatsSchema', () => {
60
+ it('parses an empty stats document', () => {
61
+ const result = RecurrenceStatsSchema.safeParse({
62
+ version: 1,
63
+ lastUpdated: '2026-04-28T00:00:00.000Z',
64
+ thresholdApplied: 5,
65
+ historyDepth: 50,
66
+ prsScanned: [],
67
+ patterns: [],
68
+ coveredPatterns: [],
69
+ });
70
+ expect(result.success).toBe(true);
71
+ });
72
+ it('rejects non-1 version', () => {
73
+ const result = RecurrenceStatsSchema.safeParse({
74
+ version: 2,
75
+ lastUpdated: 'x',
76
+ thresholdApplied: 5,
77
+ historyDepth: 50,
78
+ prsScanned: [],
79
+ patterns: [],
80
+ coveredPatterns: [],
81
+ });
82
+ expect(result.success).toBe(false);
83
+ });
84
+ });
85
+ // ─── normalizeFindingBody ──────────────────────────────
86
+ describe('normalizeFindingBody', () => {
87
+ it('strips file paths with line:col suffix', () => {
88
+ const body = 'Avoid using `any` in packages/cli/src/foo.ts:42:7 and src/bar.ts:10';
89
+ const out = normalizeFindingBody(body);
90
+ expect(out).not.toContain('packages/cli/src/foo.ts');
91
+ expect(out).not.toContain('src/bar.ts');
92
+ expect(out).not.toMatch(/:42/);
93
+ expect(out).not.toMatch(/:10\b/);
94
+ });
95
+ it('strips standalone line references', () => {
96
+ const out = normalizeFindingBody('See line 42 and Line: 100 below');
97
+ expect(out).not.toContain('line 42');
98
+ expect(out).not.toContain('line: 100');
99
+ expect(out).not.toMatch(/\bline\b/);
100
+ });
101
+ it('strips triple-backtick fenced code', () => {
102
+ const body = 'Wrap this:\n```ts\nconst x: any = 1;\n```\nUse a real type.';
103
+ const out = normalizeFindingBody(body);
104
+ expect(out).not.toContain('const x');
105
+ expect(out).not.toContain('```');
106
+ expect(out).toContain('use a real type');
107
+ });
108
+ it('strips backtick-spans', () => {
109
+ const out = normalizeFindingBody('Avoid `any` here, prefer `unknown`.');
110
+ expect(out).not.toContain('`');
111
+ expect(out).toContain('avoid');
112
+ expect(out).toContain('prefer');
113
+ });
114
+ it('strips URLs', () => {
115
+ const out = normalizeFindingBody('See https://github.com/mmnto-ai/totem/issues/1715 for context.');
116
+ expect(out).not.toContain('https://');
117
+ expect(out).not.toContain('github.com');
118
+ });
119
+ it('strips leading severity prefix `CRITICAL: `', () => {
120
+ const out = normalizeFindingBody('CRITICAL: shell injection risk in handler.');
121
+ expect(out.startsWith('shell')).toBe(true);
122
+ });
123
+ it('strips leading bold severity prefix `**Critical**`', () => {
124
+ const out = normalizeFindingBody('**Critical** shell injection risk.');
125
+ expect(out.startsWith('shell')).toBe(true);
126
+ });
127
+ it('lowercases and collapses internal whitespace', () => {
128
+ const out = normalizeFindingBody('Avoid USING\n\n ANY TYPE');
129
+ expect(out).toBe('avoid using any type');
130
+ });
131
+ it('produces the same normalized output for path/line variants', () => {
132
+ const a = normalizeFindingBody('Avoid using `any` in packages/cli/src/foo.ts:42 — prefer unknown.');
133
+ const b = normalizeFindingBody('Avoid using `any` in packages/core/src/bar.ts:99 — prefer unknown.');
134
+ expect(a).toBe(b);
135
+ });
136
+ });
137
+ // ─── computeSignature ──────────────────────────────────
138
+ describe('computeSignature', () => {
139
+ it('is deterministic for the same input', () => {
140
+ const sig1 = computeSignature('avoid using any type');
141
+ const sig2 = computeSignature('avoid using any type');
142
+ expect(sig1).toBe(sig2);
143
+ });
144
+ it('produces a 16-char hex string', () => {
145
+ const sig = computeSignature('hello world');
146
+ expect(sig).toMatch(/^[0-9a-f]{16}$/);
147
+ });
148
+ it('differs for distinct inputs', () => {
149
+ const a = computeSignature('avoid using any type');
150
+ const b = computeSignature('avoid using let');
151
+ expect(a).not.toBe(b);
152
+ });
153
+ });
154
+ // ─── tokenizeForJaccard ────────────────────────────────
155
+ describe('tokenizeForJaccard', () => {
156
+ it('drops tokens of length <= 2', () => {
157
+ const toks = tokenizeForJaccard('a bb ccc dddd');
158
+ expect(toks.has('a')).toBe(false);
159
+ expect(toks.has('bb')).toBe(false);
160
+ expect(toks.has('ccc')).toBe(true);
161
+ expect(toks.has('dddd')).toBe(true);
162
+ });
163
+ it('drops stopwords', () => {
164
+ const toks = tokenizeForJaccard('the use of any using');
165
+ expect(toks.has('the')).toBe(false);
166
+ expect(toks.has('use')).toBe(false);
167
+ expect(toks.has('using')).toBe(false);
168
+ expect(toks.has('any')).toBe(true);
169
+ });
170
+ it('lowercases tokens', () => {
171
+ const toks = tokenizeForJaccard('Avoid USING ANY TYPE');
172
+ expect(toks.has('avoid')).toBe(true);
173
+ expect(toks.has('any')).toBe(true);
174
+ expect(toks.has('type')).toBe(true);
175
+ });
176
+ it('splits on non-alphanumeric characters', () => {
177
+ const toks = tokenizeForJaccard('avoid-using/any.type');
178
+ expect(toks.has('avoid')).toBe(true);
179
+ expect(toks.has('any')).toBe(true);
180
+ expect(toks.has('type')).toBe(true);
181
+ });
182
+ });
183
+ // ─── jaccard ───────────────────────────────────────────
184
+ describe('jaccard', () => {
185
+ it('returns 1.0 for identical non-empty sets', () => {
186
+ const a = new Set(['avoid', 'any', 'type']);
187
+ const b = new Set(['avoid', 'any', 'type']);
188
+ expect(jaccard(a, b)).toBe(1);
189
+ });
190
+ it('returns 0.0 for disjoint sets', () => {
191
+ const a = new Set(['foo', 'bar']);
192
+ const b = new Set(['baz', 'qux']);
193
+ expect(jaccard(a, b)).toBe(0);
194
+ });
195
+ it('returns 0.0 for two empty sets', () => {
196
+ const a = new Set();
197
+ const b = new Set();
198
+ expect(jaccard(a, b)).toBe(0);
199
+ });
200
+ it('is symmetric', () => {
201
+ const a = new Set(['avoid', 'any', 'type', 'unknown']);
202
+ const b = new Set(['avoid', 'any', 'prefer']);
203
+ expect(jaccard(a, b)).toBe(jaccard(b, a));
204
+ });
205
+ it('returns a value strictly between 0 and 1 for partial overlap', () => {
206
+ const a = new Set(['avoid', 'any', 'type']);
207
+ const b = new Set(['avoid', 'any', 'prefer']);
208
+ const v = jaccard(a, b);
209
+ expect(v).toBeGreaterThan(0);
210
+ expect(v).toBeLessThan(1);
211
+ // |intersection| = 2, |union| = 4 → 0.5
212
+ expect(v).toBeCloseTo(0.5, 5);
213
+ });
214
+ });
215
+ //# sourceMappingURL=recurrence-stats.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recurrence-stats.test.js","sourceRoot":"","sources":["../src/recurrence-stats.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mmnto/totem",
3
- "version": "1.15.10",
3
+ "version": "1.16.1",
4
4
  "description": "Persistent memory and context layer for AI agents",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",