greenbump 0.5.0 → 0.7.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 (74) hide show
  1. package/README.md +696 -66
  2. package/README.zh-CN.md +539 -100
  3. package/dist/agent/fixer.js +165 -12
  4. package/dist/agent/fixer.js.map +1 -1
  5. package/dist/agent/fixer.test.js +410 -0
  6. package/dist/agent/fixer.test.js.map +1 -0
  7. package/dist/cli/interactive.js +81 -0
  8. package/dist/cli/interactive.js.map +1 -0
  9. package/dist/cli.js +59 -0
  10. package/dist/cli.js.map +1 -1
  11. package/dist/engine/analyzers/changelog-parser.js +121 -0
  12. package/dist/engine/analyzers/changelog-parser.js.map +1 -0
  13. package/dist/engine/batch.js +24 -0
  14. package/dist/engine/batch.js.map +1 -1
  15. package/dist/engine/batch.test.js +59 -0
  16. package/dist/engine/batch.test.js.map +1 -0
  17. package/dist/engine/cache/manager.js +165 -0
  18. package/dist/engine/cache/manager.js.map +1 -0
  19. package/dist/engine/cache/manager.test.js +75 -0
  20. package/dist/engine/cache/manager.test.js.map +1 -0
  21. package/dist/engine/checks.test.js +92 -0
  22. package/dist/engine/checks.test.js.map +1 -0
  23. package/dist/engine/context/optimizer.js +189 -0
  24. package/dist/engine/context/optimizer.js.map +1 -0
  25. package/dist/engine/context/optimizer.test.js +81 -0
  26. package/dist/engine/context/optimizer.test.js.map +1 -0
  27. package/dist/engine/ecosystems/parsers.test.js +255 -0
  28. package/dist/engine/ecosystems/parsers.test.js.map +1 -0
  29. package/dist/engine/fixer/patterns.js +597 -0
  30. package/dist/engine/fixer/patterns.js.map +1 -0
  31. package/dist/engine/fixer/patterns.test.js +316 -0
  32. package/dist/engine/fixer/patterns.test.js.map +1 -0
  33. package/dist/engine/git.test.js +111 -0
  34. package/dist/engine/git.test.js.map +1 -0
  35. package/dist/engine/run.js +66 -1
  36. package/dist/engine/run.js.map +1 -1
  37. package/dist/engine/run.test.js +47 -0
  38. package/dist/engine/run.test.js.map +1 -0
  39. package/dist/engine/stats/recorder.js +48 -0
  40. package/dist/engine/stats/recorder.js.map +1 -0
  41. package/dist/engine/stats/recorder.test.js +71 -0
  42. package/dist/engine/stats/recorder.test.js.map +1 -0
  43. package/dist/engine/stats/report.js +157 -0
  44. package/dist/engine/stats/report.js.map +1 -0
  45. package/dist/engine/stats/report.test.js +83 -0
  46. package/dist/engine/stats/report.test.js.map +1 -0
  47. package/dist/engine/verifiers/ast-analyzer.js +212 -0
  48. package/dist/engine/verifiers/ast-analyzer.js.map +1 -0
  49. package/dist/engine/verifiers/ast-analyzer.test.js +96 -0
  50. package/dist/engine/verifiers/ast-analyzer.test.js.map +1 -0
  51. package/dist/engine/workspace.test.js +95 -0
  52. package/dist/engine/workspace.test.js.map +1 -0
  53. package/dist/exitcode.test.js +62 -0
  54. package/dist/exitcode.test.js.map +1 -0
  55. package/dist/format.js +15 -0
  56. package/dist/format.js.map +1 -1
  57. package/dist/report.test.js +56 -0
  58. package/dist/report.test.js.map +1 -0
  59. package/package.json +7 -4
  60. package/CHANGELOG.md +0 -136
  61. package/CONTRIBUTING.md +0 -52
  62. package/SECURITY.md +0 -38
  63. package/action-dist/index.cjs +0 -20730
  64. package/action.yml +0 -76
  65. package/competitive-analysis.md +0 -304
  66. package/examples/greenbump.yml +0 -37
  67. package/examples/legacy-repo/package.json +0 -12
  68. package/examples/legacy-repo/test.js +0 -17
  69. package/examples/multi-file-repo/models/todo.js +0 -8
  70. package/examples/multi-file-repo/models/user.js +0 -11
  71. package/examples/multi-file-repo/package.json +0 -12
  72. package/examples/multi-file-repo/services/session.js +0 -9
  73. package/examples/multi-file-repo/test.js +0 -19
  74. package/optimization-roadmap.md +0 -772
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parsers.test.js","sourceRoot":"","sources":["../../../src/engine/ecosystems/parsers.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,597 @@
1
+ import { readFile, writeFile, mkdir } from "node:fs/promises";
2
+ import { join, dirname } from "node:path";
3
+ import { getCache } from "../cache/manager.js";
4
+ /**
5
+ * Tiered fix strategies, ordered by cost:
6
+ *
7
+ * Level 1: REGEX — built-in codemod patterns for well-known upgrades ($0)
8
+ * Level 2: RULE — learned patterns from cache, applied by template ($0)
9
+ * Level 3: CACHED — full cached LLM fix for an identical failure ($0)
10
+ * Level 4: LLM — actual model call (paid, last resort)
11
+ *
12
+ * The first three tiers run before any LLM call. On a typical minor/patch
13
+ * upgrade (renamed export, moved module), tier 1-2 resolves the fix with
14
+ * zero tokens spent.
15
+ */
16
+ export var FixTier;
17
+ (function (FixTier) {
18
+ FixTier[FixTier["REGEX"] = 1] = "REGEX";
19
+ FixTier[FixTier["RULE"] = 2] = "RULE";
20
+ FixTier[FixTier["CACHED"] = 3] = "CACHED";
21
+ FixTier[FixTier["LLM"] = 4] = "LLM";
22
+ })(FixTier || (FixTier = {}));
23
+ const BUILTIN_CODEMODS = [
24
+ // ── React 18 → 19 ──
25
+ {
26
+ package: "react-dom",
27
+ versionRange: { fromMajor: 18, toMajor: 19 },
28
+ errorMatch: "ReactDOM.render is not a function",
29
+ description: "ReactDOM.render → createRoot (React 19)",
30
+ transform: {
31
+ find: "ReactDOM\\.render\\(\\s*([\\s\\S]*?),\\s*(document\\.[a-zA-Z]+\\([^)]*\\)[^)]*?)\\s*\\)",
32
+ replace: "createRoot($2).render($1)",
33
+ },
34
+ imports: {
35
+ remove: "import ReactDOM from 'react-dom'",
36
+ add: "import { createRoot } from 'react-dom/client'",
37
+ },
38
+ },
39
+ {
40
+ package: "react-dom",
41
+ versionRange: { fromMajor: 18, toMajor: 19 },
42
+ errorMatch: "ReactDOM.render is not a function",
43
+ description: "ReactDOM.render → createRoot (double-quoted imports)",
44
+ transform: {
45
+ find: "ReactDOM\\.render\\(\\s*([\\s\\S]*?),\\s*(document\\.[a-zA-Z]+\\([^)]*\\)[^)]*?)\\s*\\)",
46
+ replace: "createRoot($2).render($1)",
47
+ },
48
+ imports: {
49
+ remove: 'import ReactDOM from "react-dom"',
50
+ add: 'import { createRoot } from "react-dom/client"',
51
+ },
52
+ },
53
+ {
54
+ package: "react-dom",
55
+ versionRange: { fromMajor: 18, toMajor: 19 },
56
+ errorMatch: "hydrate is not a function",
57
+ description: "ReactDOM.hydrate → hydrateRoot (React 19)",
58
+ transform: {
59
+ find: "ReactDOM\\.hydrate\\(\\s*([\\s\\S]*?),\\s*(document\\.[a-zA-Z]+\\([^)]*\\)[^)]*?)\\s*\\)",
60
+ replace: "hydrateRoot($2, $1)",
61
+ },
62
+ imports: {
63
+ remove: "import ReactDOM from 'react-dom'",
64
+ add: "import { hydrateRoot } from 'react-dom/client'",
65
+ },
66
+ },
67
+ // ── Vue 2 → 3 ──
68
+ {
69
+ package: "vue",
70
+ versionRange: { fromMajor: 2, toMajor: 3 },
71
+ errorMatch: "Vue is not a constructor",
72
+ description: "new Vue() → createApp() (Vue 3)",
73
+ transform: {
74
+ find: "new Vue\\(([^)]*)\\)",
75
+ replace: "createApp($1)",
76
+ },
77
+ imports: {
78
+ remove: "import Vue from 'vue'",
79
+ add: "import { createApp } from 'vue'",
80
+ },
81
+ },
82
+ // ── Node.js assert style ──
83
+ {
84
+ package: "*",
85
+ errorMatch: "assert.equal is deprecated",
86
+ description: "assert.equal → assert.strictEqual",
87
+ transform: {
88
+ find: "assert\\.equal\\(",
89
+ replace: "assert.strictEqual(",
90
+ fileFilter: "test",
91
+ },
92
+ },
93
+ // ── Jest → Vitest common patterns ──
94
+ {
95
+ package: "vitest",
96
+ errorMatch: "jest is not defined",
97
+ description: "jest.fn() → vi.fn() (Vitest)",
98
+ transform: {
99
+ find: "\\bjest\\.",
100
+ replace: "vi.",
101
+ },
102
+ imports: {
103
+ remove: "",
104
+ add: "import { vi } from 'vitest'",
105
+ },
106
+ },
107
+ // ── Express 4 → 5 ──
108
+ {
109
+ package: "express",
110
+ versionRange: { fromMajor: 4, toMajor: 5 },
111
+ errorMatch: "app\\.del is not a function",
112
+ description: "app.del() → app.delete() (Express 5 removed app.del)",
113
+ transform: {
114
+ find: "\\bapp\\.del\\(",
115
+ replace: "app.delete(",
116
+ },
117
+ },
118
+ {
119
+ package: "express",
120
+ versionRange: { fromMajor: 4, toMajor: 5 },
121
+ errorMatch: "res\\.send\\(status\\)|res\\.send\\(\\d{3}\\)",
122
+ description: "res.send(status) → res.sendStatus(status) (Express 5)",
123
+ transform: {
124
+ find: "\\bres\\.send\\((\\d{3})\\)",
125
+ replace: "res.sendStatus($1)",
126
+ },
127
+ },
128
+ // ── Zod 3 → 4 ──
129
+ {
130
+ package: "zod",
131
+ versionRange: { fromMajor: 3, toMajor: 4 },
132
+ errorMatch: "\\berrors\\b.*(not a function|undefined)|error\\.errors",
133
+ description: "error.errors → error.issues (Zod 4)",
134
+ transform: {
135
+ find: "\\.error\\.errors\\b",
136
+ replace: ".error.issues",
137
+ },
138
+ },
139
+ {
140
+ package: "zod",
141
+ versionRange: { fromMajor: 3, toMajor: 4 },
142
+ errorMatch: "z\\.string\\(\\)\\.email|z\\.string\\(\\)\\.url|z\\.string\\(\\)\\.uuid|deprecated.*z\\.string",
143
+ description: "z.string().email()/.url()/.uuid() → z.email()/z.url()/z.uuid() (Zod 4)",
144
+ transform: {
145
+ find: "z\\.string\\(\\)\\.(email|url|uuid)\\(\\)",
146
+ replace: "z.$1()",
147
+ },
148
+ },
149
+ // ── Node util.is* removal (Node 22) ──
150
+ {
151
+ package: "*",
152
+ errorMatch: "util\\.is(Array|Buffer|Date|RegExp|Error|Function|String|Number|Boolean|Object) is not a function",
153
+ description: "util.is*() → native equivalents (removed in Node 22)",
154
+ transform: {
155
+ find: "util\\.isArray\\(",
156
+ replace: "Array.isArray(",
157
+ },
158
+ },
159
+ {
160
+ package: "*",
161
+ errorMatch: "util\\.isBuffer is not a function",
162
+ description: "util.isBuffer() → Buffer.isBuffer() (removed in Node 22)",
163
+ transform: {
164
+ find: "util\\.isBuffer\\(",
165
+ replace: "Buffer.isBuffer(",
166
+ },
167
+ },
168
+ // ── assert.deepEqual → deepStrictEqual ──
169
+ {
170
+ package: "*",
171
+ errorMatch: "assert\\.deepEqual is deprecated",
172
+ description: "assert.deepEqual → assert.deepStrictEqual",
173
+ transform: {
174
+ find: "assert\\.deepEqual\\(",
175
+ replace: "assert.deepStrictEqual(",
176
+ fileFilter: "test",
177
+ },
178
+ },
179
+ // ── Lodash 4 removed/renamed methods ──
180
+ {
181
+ package: "lodash",
182
+ errorMatch: "_\\.pluck is not a function",
183
+ description: "_.pluck(collection, key) → _.map(collection, key) (Lodash 4 removed pluck)",
184
+ transform: {
185
+ find: "_\\.pluck\\(",
186
+ replace: "_.map(",
187
+ },
188
+ },
189
+ {
190
+ package: "lodash",
191
+ errorMatch: "_\\.contains is not a function",
192
+ description: "_.contains → _.includes (Lodash 4 renamed contains)",
193
+ transform: {
194
+ find: "_\\.contains\\(",
195
+ replace: "_.includes(",
196
+ },
197
+ },
198
+ // ── React Router 5 → 6 ──
199
+ {
200
+ package: "react-router-dom",
201
+ versionRange: { fromMajor: 5, toMajor: 6 },
202
+ errorMatch: "Switch.*(is not exported|not a function)|<Switch>",
203
+ description: "<Switch> → <Routes> (React Router 6)",
204
+ transform: {
205
+ find: "<Switch>",
206
+ replace: "<Routes>",
207
+ },
208
+ },
209
+ {
210
+ package: "react-router-dom",
211
+ versionRange: { fromMajor: 5, toMajor: 6 },
212
+ errorMatch: "useHistory.*(is not exported|not a function)",
213
+ description: "useHistory() → useNavigate() (React Router 6)",
214
+ transform: {
215
+ find: "\\buseHistory\\(\\)",
216
+ replace: "useNavigate()",
217
+ },
218
+ imports: {
219
+ remove: "useHistory",
220
+ add: "useNavigate",
221
+ },
222
+ },
223
+ // ── Mongoose 6 → 7+ (doc.remove removed) ──
224
+ {
225
+ package: "mongoose",
226
+ versionRange: { fromMajor: 6, toMajor: 8 },
227
+ errorMatch: "\\.remove is not a function|remove\\(\\).*deprecated",
228
+ description: "doc.remove() → doc.deleteOne() (Mongoose 7+)",
229
+ transform: {
230
+ find: "\\.remove\\(\\)",
231
+ replace: ".deleteOne()",
232
+ },
233
+ },
234
+ // ── Guidance-only codemods (match + advise, no transform) ──
235
+ {
236
+ package: "eslint",
237
+ versionRange: { fromMajor: 8, toMajor: 9 },
238
+ errorMatch: "eslintrc|ESLint configuration.*(invalid|not found)|Could not find config",
239
+ description: "ESLint 9 uses flat config (eslint.config.js) instead of .eslintrc. " +
240
+ "A starter eslint.config.js was created — migrate your rules into it. " +
241
+ "See https://eslint.org/docs/latest/use/configure/migration-guide",
242
+ creates: [
243
+ {
244
+ path: "eslint.config.js",
245
+ content: "// ESLint 9 flat config — generated by greenbump\n" +
246
+ "// Migrate rules from your old .eslintrc.* into the array below.\n" +
247
+ "// Guide: https://eslint.org/docs/latest/use/configure/migration-guide\n" +
248
+ "export default [\n" +
249
+ " {\n" +
250
+ " ignores: [\"dist/**\", \"node_modules/**\"],\n" +
251
+ " },\n" +
252
+ "];\n",
253
+ skipIfExists: true,
254
+ },
255
+ ],
256
+ },
257
+ {
258
+ package: "axios",
259
+ versionRange: { fromMajor: 0, toMajor: 1 },
260
+ errorMatch: "axios.*(is not a function|undefined)|baseURL",
261
+ description: "Axios 1.x changed default export interop and error shapes. " +
262
+ "Check import style (default vs named) and error.response handling. " +
263
+ "See https://github.com/axios/axios/releases/tag/v1.0.0",
264
+ },
265
+ {
266
+ package: "webpack",
267
+ versionRange: { fromMajor: 4, toMajor: 5 },
268
+ errorMatch: "configuration\\.node|node\\.polyfill|BREAKING CHANGE.*polyfill",
269
+ description: "Webpack 5 removed automatic Node.js polyfills. Add resolve.fallback " +
270
+ "entries or the node-polyfill-webpack-plugin if you rely on node builtins. " +
271
+ "See https://webpack.js.org/migrate/5/",
272
+ },
273
+ {
274
+ package: "jest",
275
+ versionRange: { fromMajor: 28, toMajor: 30 },
276
+ errorMatch: "testEnvironment.*jsdom.*not found|Cannot find module.*jsdom",
277
+ description: "Jest 29+ moved jsdom into a separate package. Run: npm i -D jest-environment-jsdom, " +
278
+ "then keep testEnvironment: \"jsdom\".",
279
+ },
280
+ {
281
+ package: "typescript",
282
+ versionRange: { fromMajor: 4, toMajor: 5 },
283
+ errorMatch: "TS1208|isolatedModules",
284
+ description: "TypeScript 5 tightened module interop under isolatedModules. Enable " +
285
+ "\"verbatimModuleSyntax\": true in tsconfig and use `import type` for type-only imports. " +
286
+ "See https://www.typescriptlang.org/tsconfig#verbatimModuleSyntax",
287
+ },
288
+ {
289
+ package: "prettier",
290
+ versionRange: { fromMajor: 2, toMajor: 3 },
291
+ errorMatch: "trailingComma.*invalid|arrowParens",
292
+ description: "Prettier 3 changed defaults (trailingComma: \"all\", arrowParens: \"always\"). " +
293
+ "Pin your preferred values in .prettierrc to keep formatting stable. " +
294
+ "See https://prettier.io/blog/2023/07/05/3.0.0.html",
295
+ },
296
+ {
297
+ package: "socket.io",
298
+ versionRange: { fromMajor: 3, toMajor: 4 },
299
+ errorMatch: "io\\.to.*emit.*not a function|namespace.*not found",
300
+ description: "Socket.IO 4 changed namespace/broadcast API and default CORS handling. " +
301
+ "Review server options (cors, allowRequest) and client connection URLs. " +
302
+ "See https://socket.io/docs/v4/migrating-from-3-x-to-4-0/",
303
+ },
304
+ ];
305
+ /**
306
+ * Level 1: try built-in codemods. Returns applied=true if any codemod
307
+ * matched the error AND modified at least one file.
308
+ */
309
+ export async function tryBuiltinCodemods(ctx) {
310
+ const fromMajor = parseMajor(ctx.fromVersion);
311
+ const toMajor = parseMajor(ctx.toVersion);
312
+ const candidates = BUILTIN_CODEMODS.filter((c) => {
313
+ if (c.package !== "*" && c.package !== ctx.packageName)
314
+ return false;
315
+ if (!new RegExp(c.errorMatch, "i").test(ctx.failureOutput))
316
+ return false;
317
+ if (c.versionRange) {
318
+ const { fromMajor: rf, toMajor: rt } = c.versionRange;
319
+ if (rf !== undefined && fromMajor !== rf)
320
+ return false;
321
+ // toMajor omitted → codemod targets exactly the next major (rf+1).
322
+ // toMajor set → codemod applies to any bump landing at or below it.
323
+ if (rt !== undefined && toMajor > rt)
324
+ return false;
325
+ }
326
+ return true;
327
+ });
328
+ if (candidates.length === 0) {
329
+ return noFix(FixTier.REGEX);
330
+ }
331
+ const editedFiles = [];
332
+ const descriptions = [];
333
+ const advice = [];
334
+ for (const codemod of candidates) {
335
+ let touched = false;
336
+ if (codemod.transform) {
337
+ for (const file of ctx.candidateFiles) {
338
+ if (codemod.transform.fileFilter && !file.includes(codemod.transform.fileFilter))
339
+ continue;
340
+ const abs = join(ctx.cwd, file);
341
+ let content;
342
+ try {
343
+ content = await readFile(abs, "utf8");
344
+ }
345
+ catch {
346
+ continue;
347
+ }
348
+ let updated = content;
349
+ try {
350
+ updated = updated.replace(new RegExp(codemod.transform.find, "g"), codemod.transform.replace);
351
+ }
352
+ catch {
353
+ continue;
354
+ }
355
+ if (codemod.imports) {
356
+ const { remove, add } = codemod.imports;
357
+ if (remove && updated.includes(remove)) {
358
+ updated = updated.replace(remove, add);
359
+ }
360
+ else if (add && !updated.includes(add) && updated !== content) {
361
+ // Transform applied but import line wasn't there in expected form —
362
+ // prepend the new import at the top.
363
+ updated = add + "\n" + updated;
364
+ }
365
+ }
366
+ if (updated !== content) {
367
+ await writeFile(abs, updated, "utf8");
368
+ editedFiles.push(file);
369
+ touched = true;
370
+ }
371
+ }
372
+ }
373
+ // Create any companion files (flat configs, etc.). Runs even for
374
+ // guidance-only codemods (no transform) so a matched breakage can still
375
+ // scaffold the new file the upgrade expects.
376
+ if (codemod.creates) {
377
+ for (const create of codemod.creates) {
378
+ const abs = join(ctx.cwd, create.path);
379
+ if (create.skipIfExists !== false) {
380
+ try {
381
+ await readFile(abs, "utf8");
382
+ continue; // already exists — don't clobber user config
383
+ }
384
+ catch {
385
+ // doesn't exist — proceed to create
386
+ }
387
+ }
388
+ try {
389
+ await mkdir(dirname(abs), { recursive: true });
390
+ await writeFile(abs, create.content, "utf8");
391
+ editedFiles.push(create.path);
392
+ touched = true;
393
+ }
394
+ catch {
395
+ // unwritable — skip
396
+ }
397
+ }
398
+ }
399
+ if (touched) {
400
+ descriptions.push(codemod.description);
401
+ }
402
+ else if (!codemod.transform && !codemod.creates) {
403
+ // Pure guidance codemod (no transform, no creates): matched a known
404
+ // breakage but there's nothing safe to rewrite. Surface the advice —
405
+ // but it must NOT mark the tier as applied, or the run would treat
406
+ // "printed advice" as "fixed" and skip straight to a green check.
407
+ advice.push(codemod.description);
408
+ }
409
+ }
410
+ const applied = editedFiles.length > 0;
411
+ return {
412
+ applied,
413
+ tier: FixTier.REGEX,
414
+ editedFiles,
415
+ description: descriptions.join("; ") || "no codemod matched",
416
+ tokensUsed: { inputTokens: 0, outputTokens: 0 },
417
+ ...(advice.length > 0 ? { advice } : {}),
418
+ };
419
+ }
420
+ /**
421
+ * Level 2: try learned patterns from the local cache (patterns that worked
422
+ * in previous runs of greenbump, either here or on other projects).
423
+ */
424
+ export async function tryLearnedPatterns(ctx) {
425
+ const cache = getCache();
426
+ await cache.init();
427
+ // Try each error line as a signature — the cache is keyed by
428
+ // (package, hash(error signature)) so we probe with the first few
429
+ // distinctive lines of the failure.
430
+ const signatures = extractErrorSignatures(ctx.failureOutput);
431
+ for (const sig of signatures) {
432
+ const pattern = await cache.getFixPattern(ctx.packageName, sig);
433
+ if (!pattern)
434
+ continue;
435
+ const editedFiles = [];
436
+ let allApplied = true;
437
+ for (const [file, edit] of Object.entries(pattern.edits)) {
438
+ const abs = join(ctx.cwd, file);
439
+ let content;
440
+ try {
441
+ content = await readFile(abs, "utf8");
442
+ }
443
+ catch {
444
+ allApplied = false;
445
+ continue;
446
+ }
447
+ let updated;
448
+ if (typeof edit === "string") {
449
+ updated = edit; // whole-file replacement
450
+ }
451
+ else {
452
+ try {
453
+ updated = content.replace(new RegExp(edit.find, "g"), edit.replace);
454
+ }
455
+ catch {
456
+ allApplied = false;
457
+ continue;
458
+ }
459
+ }
460
+ const importFix = pattern.importFixes?.[file];
461
+ if (importFix?.remove && updated.includes(importFix.remove)) {
462
+ updated = updated.replace(importFix.remove, importFix.add ?? "");
463
+ }
464
+ if (updated !== content) {
465
+ await writeFile(abs, updated, "utf8");
466
+ editedFiles.push(file);
467
+ }
468
+ }
469
+ if (editedFiles.length > 0 && allApplied) {
470
+ pattern.hits++;
471
+ await cache.setFixPattern(ctx.packageName, sig, pattern);
472
+ return {
473
+ applied: true,
474
+ tier: FixTier.RULE,
475
+ editedFiles,
476
+ description: `learned pattern: ${pattern.description}`,
477
+ tokensUsed: { inputTokens: 0, outputTokens: 0 },
478
+ };
479
+ }
480
+ if (editedFiles.length === 0) {
481
+ pattern.misses++;
482
+ await cache.setFixPattern(ctx.packageName, sig, pattern);
483
+ }
484
+ }
485
+ return noFix(FixTier.RULE);
486
+ }
487
+ /**
488
+ * Level 3: try a fully cached LLM fix for an identical failure context.
489
+ * The context key covers (package, versions, failure output hash) so this
490
+ * only hits when the exact same failure has been fixed before.
491
+ */
492
+ export async function tryCachedLlmFix(ctx, contextKey) {
493
+ const cache = getCache();
494
+ await cache.init();
495
+ const cached = await cache.getLlmFix(contextKey);
496
+ if (!cached)
497
+ return noFix(FixTier.CACHED);
498
+ const editedFiles = [];
499
+ for (const [file, content] of Object.entries(cached.edits)) {
500
+ const abs = join(ctx.cwd, file);
501
+ try {
502
+ await writeFile(abs, content, "utf8");
503
+ editedFiles.push(file);
504
+ }
505
+ catch {
506
+ // file path doesn't exist in this project — the cached fix doesn't
507
+ // apply cleanly, bail rather than write partial state
508
+ return noFix(FixTier.CACHED);
509
+ }
510
+ }
511
+ cached.hits++;
512
+ await cache.setLlmFix(contextKey, cached);
513
+ return {
514
+ applied: true,
515
+ tier: FixTier.CACHED,
516
+ editedFiles,
517
+ description: `cached fix (used ${cached.hits}x before, from ${cached.model})`,
518
+ tokensUsed: { inputTokens: 0, outputTokens: 0 },
519
+ };
520
+ }
521
+ /**
522
+ * Record a successful LLM fix as a learned pattern + full cached fix,
523
+ * so future identical failures cost $0.
524
+ */
525
+ export async function learnFromSuccessfulFix(ctx, contextKey, editedFiles, model) {
526
+ const cache = getCache();
527
+ await cache.init();
528
+ // Store the full fix (file contents after edit)
529
+ const edits = {};
530
+ for (const file of editedFiles) {
531
+ try {
532
+ edits[file] = await readFile(join(ctx.cwd, file), "utf8");
533
+ }
534
+ catch {
535
+ // skip unreadable files
536
+ }
537
+ }
538
+ if (Object.keys(edits).length > 0) {
539
+ const existing = await cache.getLlmFix(contextKey);
540
+ await cache.setLlmFix(contextKey, {
541
+ edits,
542
+ hits: (existing?.hits ?? 0),
543
+ model,
544
+ });
545
+ }
546
+ }
547
+ /** Build the cache context key for a failure — stable across projects. */
548
+ export function buildContextKey(packageName, from, to, failureOutput) {
549
+ // Normalize the failure output: strip paths, line numbers, timings —
550
+ // keep only the error essence so identical errors across projects collide.
551
+ const normalized = failureOutput
552
+ .replace(/[^\s]*node_modules[^\s]*/g, "<pkg>")
553
+ .replace(/[A-Za-z]:?[\\/][^\s:;)]+/g, "<path>")
554
+ .replace(/:\d+:\d+/g, "")
555
+ .replace(/\d+ms/g, "<time>")
556
+ .replace(/\s+/g, " ")
557
+ .trim()
558
+ .slice(0, 2000);
559
+ return `${packageName}@${from}->${to}::${normalized}`;
560
+ }
561
+ // ── Helpers ────────────────────────────────────────────────────────────────
562
+ function parseMajor(version) {
563
+ const m = version.replace(/^[~^>=\s]*/, "").match(/^(\d+)/);
564
+ return m ? parseInt(m[1], 10) : 0;
565
+ }
566
+ /** Extract distinctive error lines to use as cache probe signatures. */
567
+ function extractErrorSignatures(failureOutput) {
568
+ const lines = failureOutput.split("\n");
569
+ const sigs = [];
570
+ for (const line of lines) {
571
+ const t = line.trim();
572
+ // Keep lines that look like actual error messages
573
+ if (/error|failed|is not a function|is not defined|cannot find|deprecated/i.test(t)
574
+ && t.length > 15 && t.length < 300) {
575
+ sigs.push(t);
576
+ if (sigs.length >= 5)
577
+ break;
578
+ }
579
+ }
580
+ return sigs;
581
+ }
582
+ function noFix(tier) {
583
+ return {
584
+ applied: false,
585
+ tier,
586
+ editedFiles: [],
587
+ description: "no applicable pattern",
588
+ tokensUsed: { inputTokens: 0, outputTokens: 0 },
589
+ };
590
+ }
591
+ /** List built-in codemods (for --list-codemods CLI / docs). */
592
+ export function listBuiltinCodemods() {
593
+ return BUILTIN_CODEMODS
594
+ .map((c) => ` ${c.package}${c.versionRange ? ` (${c.versionRange.fromMajor}→${c.versionRange.toMajor})` : ""}: ${c.description}`)
595
+ .join("\n");
596
+ }
597
+ //# sourceMappingURL=patterns.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patterns.js","sourceRoot":"","sources":["../../../src/engine/fixer/patterns.ts"],"names":[],"mappings":"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"}