greenbump 0.8.0 → 0.9.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 (109) hide show
  1. package/README.md +58 -15
  2. package/README.zh-CN.md +37 -4
  3. package/dist/action/github.test.js +37 -0
  4. package/dist/action/github.test.js.map +1 -0
  5. package/dist/action/main.js +19 -4
  6. package/dist/action/main.js.map +1 -1
  7. package/dist/agent/fixer.js +201 -25
  8. package/dist/agent/fixer.js.map +1 -1
  9. package/dist/agent/fixer.test.js +221 -0
  10. package/dist/agent/fixer.test.js.map +1 -1
  11. package/dist/benchmarks/run.js +0 -0
  12. package/dist/benchmarks/run.js.map +1 -0
  13. package/dist/cli/interactive.js +46 -11
  14. package/dist/cli/interactive.js.map +1 -1
  15. package/dist/cli.js +35 -7
  16. package/dist/cli.js.map +1 -1
  17. package/dist/engine/analyzers/changelog-parser.js +19 -0
  18. package/dist/engine/analyzers/changelog-parser.js.map +1 -1
  19. package/dist/engine/batch.js +54 -10
  20. package/dist/engine/batch.js.map +1 -1
  21. package/dist/engine/cache/manager.js +19 -1
  22. package/dist/engine/cache/manager.js.map +1 -1
  23. package/dist/engine/cache/manager.test.js +17 -0
  24. package/dist/engine/cache/manager.test.js.map +1 -1
  25. package/dist/engine/change-detector.js +52 -23
  26. package/dist/engine/change-detector.js.map +1 -1
  27. package/dist/engine/change-detector.test.js +72 -0
  28. package/dist/engine/change-detector.test.js.map +1 -0
  29. package/dist/engine/changelog.js +22 -2
  30. package/dist/engine/changelog.js.map +1 -1
  31. package/dist/engine/changelog.test.js +31 -0
  32. package/dist/engine/changelog.test.js.map +1 -0
  33. package/dist/engine/checks.js +10 -4
  34. package/dist/engine/checks.js.map +1 -1
  35. package/dist/engine/context/optimizer.js +14 -44
  36. package/dist/engine/context/optimizer.js.map +1 -1
  37. package/dist/engine/context/optimizer.test.js +23 -1
  38. package/dist/engine/context/optimizer.test.js.map +1 -1
  39. package/dist/engine/ecosystems/cargo.js +2 -1
  40. package/dist/engine/ecosystems/cargo.js.map +1 -1
  41. package/dist/engine/ecosystems/conan.js +2 -1
  42. package/dist/engine/ecosystems/conan.js.map +1 -1
  43. package/dist/engine/ecosystems/elm.js +2 -1
  44. package/dist/engine/ecosystems/elm.js.map +1 -1
  45. package/dist/engine/ecosystems/gradle.js +2 -1
  46. package/dist/engine/ecosystems/gradle.js.map +1 -1
  47. package/dist/engine/ecosystems/http.js +18 -0
  48. package/dist/engine/ecosystems/http.js.map +1 -0
  49. package/dist/engine/ecosystems/maven.js +2 -1
  50. package/dist/engine/ecosystems/maven.js.map +1 -1
  51. package/dist/engine/ecosystems/swiftpm.js +2 -1
  52. package/dist/engine/ecosystems/swiftpm.js.map +1 -1
  53. package/dist/engine/exec.js +37 -7
  54. package/dist/engine/exec.js.map +1 -1
  55. package/dist/engine/exec.test.js +36 -0
  56. package/dist/engine/exec.test.js.map +1 -0
  57. package/dist/engine/fixer/patterns.js +55 -18
  58. package/dist/engine/fixer/patterns.js.map +1 -1
  59. package/dist/engine/fixer/patterns.test.js +95 -1
  60. package/dist/engine/fixer/patterns.test.js.map +1 -1
  61. package/dist/engine/git.js +38 -16
  62. package/dist/engine/git.js.map +1 -1
  63. package/dist/engine/git.test.js +51 -1
  64. package/dist/engine/git.test.js.map +1 -1
  65. package/dist/engine/perf/metrics.js +44 -57
  66. package/dist/engine/perf/metrics.js.map +1 -1
  67. package/dist/engine/run.js +120 -12
  68. package/dist/engine/run.js.map +1 -1
  69. package/dist/engine/run.test.js +65 -1
  70. package/dist/engine/run.test.js.map +1 -1
  71. package/dist/engine/sandbox/docker-manager.js +52 -26
  72. package/dist/engine/sandbox/docker-manager.js.map +1 -1
  73. package/dist/engine/sandbox/template-generator.js +0 -4
  74. package/dist/engine/sandbox/template-generator.js.map +1 -1
  75. package/dist/engine/sandbox/template-generator.test.js +16 -0
  76. package/dist/engine/sandbox/template-generator.test.js.map +1 -0
  77. package/dist/engine/scan/benchmark-crosscheck.test.js +116 -0
  78. package/dist/engine/scan/benchmark-crosscheck.test.js.map +1 -0
  79. package/dist/engine/scan/detect.js +96 -0
  80. package/dist/engine/scan/detect.js.map +1 -0
  81. package/dist/engine/scan/impact.js +128 -0
  82. package/dist/engine/scan/impact.js.map +1 -0
  83. package/dist/engine/scan/impact.test.js +217 -0
  84. package/dist/engine/scan/impact.test.js.map +1 -0
  85. package/dist/engine/scan/indexer.js +129 -0
  86. package/dist/engine/scan/indexer.js.map +1 -0
  87. package/dist/engine/scan/indexer.test.js +149 -0
  88. package/dist/engine/scan/indexer.test.js.map +1 -0
  89. package/dist/engine/scan/probes.js +92 -0
  90. package/dist/engine/scan/probes.js.map +1 -0
  91. package/dist/engine/scan/probes.test.js +100 -0
  92. package/dist/engine/scan/probes.test.js.map +1 -0
  93. package/dist/engine/verify.js +41 -58
  94. package/dist/engine/verify.js.map +1 -1
  95. package/dist/engine/verify.test.js +49 -0
  96. package/dist/engine/verify.test.js.map +1 -0
  97. package/dist/format.js +81 -0
  98. package/dist/format.js.map +1 -1
  99. package/dist/format.test.js +8 -0
  100. package/dist/format.test.js.map +1 -1
  101. package/dist/pr.test.js +48 -0
  102. package/dist/pr.test.js.map +1 -0
  103. package/package.json +4 -4
  104. package/dist/engine/dep-graph.js +0 -101
  105. package/dist/engine/dep-graph.js.map +0 -1
  106. package/dist/engine/staged-fix.js +0 -108
  107. package/dist/engine/staged-fix.js.map +0 -1
  108. package/dist/engine/stages.js +0 -125
  109. package/dist/engine/stages.js.map +0 -1
@@ -1,101 +0,0 @@
1
- import madge from "madge";
2
- /**
3
- * Build a dependency graph for the codebase and identify which files
4
- * are affected by upgrading a specific package.
5
- *
6
- * This helps prioritize which files to fix first in a staged fix approach.
7
- */
8
- export async function buildDependencyGraph(cwd, upgradedPkg) {
9
- try {
10
- // Use madge to analyze dependencies
11
- const result = await madge(cwd, {
12
- fileExtensions: ["js", "ts", "jsx", "tsx"],
13
- excludeRegExp: [/node_modules/, /dist/, /build/, /\.test\.|\.spec\./],
14
- });
15
- const graph = result.obj();
16
- const nodes = [];
17
- // Convert madge graph to our format
18
- for (const [file, imports] of Object.entries(graph)) {
19
- const importsList = imports;
20
- // Check if this file directly imports the upgraded package
21
- const usesUpgradedPkg = importsList.some((imp) => {
22
- // Match import statements like: import x from 'react'
23
- // or: const x = require('react')
24
- return imp === upgradedPkg || imp.startsWith(`${upgradedPkg}/`);
25
- });
26
- nodes.push({
27
- file,
28
- imports: importsList,
29
- usesUpgradedPkg,
30
- });
31
- }
32
- return nodes;
33
- }
34
- catch (err) {
35
- // Madge might fail on certain codebases - return empty graph
36
- console.warn(`Failed to build dependency graph: ${err.message}`);
37
- return [];
38
- }
39
- }
40
- /**
41
- * Organize files into layers based on dependency distance from the upgraded package.
42
- *
43
- * Layer 0: Files that directly import the upgraded package
44
- * Layer 1: Files that import Layer 0 files
45
- * Layer 2: Files that import Layer 1 files
46
- * etc.
47
- *
48
- * This layering helps fix files in order: fix the "leaves" first (directly affected),
49
- * then work up the dependency tree.
50
- */
51
- export function organizeLayers(nodes) {
52
- const layers = [];
53
- const fileToLayer = new Map();
54
- // Layer 0: direct users of the upgraded package
55
- const layer0Files = nodes
56
- .filter((n) => n.usesUpgradedPkg)
57
- .map((n) => n.file);
58
- if (layer0Files.length === 0) {
59
- // No direct imports found - return all files as one layer
60
- return [
61
- {
62
- level: 0,
63
- files: nodes.map((n) => n.file),
64
- },
65
- ];
66
- }
67
- layers.push({ level: 0, files: layer0Files });
68
- layer0Files.forEach((f) => fileToLayer.set(f, 0));
69
- // Build subsequent layers
70
- let currentLayer = 0;
71
- let remainingNodes = nodes.filter((n) => !n.usesUpgradedPkg);
72
- while (remainingNodes.length > 0 && currentLayer < 10) {
73
- // Cap at 10 layers to avoid infinite loops
74
- currentLayer++;
75
- const prevLayerFiles = layers[currentLayer - 1].files;
76
- const nextLayerFiles = [];
77
- for (const node of remainingNodes) {
78
- // Check if this node imports any files from the previous layer
79
- const importsPrevLayer = node.imports.some((imp) => prevLayerFiles.includes(imp));
80
- if (importsPrevLayer) {
81
- nextLayerFiles.push(node.file);
82
- fileToLayer.set(node.file, currentLayer);
83
- }
84
- }
85
- if (nextLayerFiles.length === 0) {
86
- // No more dependencies found - remaining files are unaffected
87
- break;
88
- }
89
- layers.push({ level: currentLayer, files: nextLayerFiles });
90
- remainingNodes = remainingNodes.filter((n) => !fileToLayer.has(n.file));
91
- }
92
- return layers;
93
- }
94
- /**
95
- * Get a flat list of files to fix, ordered by dependency layer (leaves first).
96
- * This is what the fix loop will iterate through.
97
- */
98
- export function getPrioritizedFiles(layers) {
99
- return layers.flatMap((layer) => layer.files);
100
- }
101
- //# sourceMappingURL=dep-graph.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dep-graph.js","sourceRoot":"","sources":["../../src/engine/dep-graph.ts"],"names":[],"mappings":"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"}
@@ -1,108 +0,0 @@
1
- /**
2
- * Staged fix orchestrator for v0.4.0
3
- *
4
- * This module provides a multi-stage fix strategy that:
5
- * 1. Builds a dependency graph to identify affected files
6
- * 2. Categorizes files into stages (config → types → source)
7
- * 3. Fixes each stage independently with incremental commits
8
- * 4. Allows rollback to the last successful stage on failure
9
- *
10
- * Usage: pass --staged flag to enable staged fix mode
11
- */
12
- import { buildDependencyGraph, organizeLayers } from "./dep-graph.js";
13
- import { COMMON_STAGES, categorizeFilesByStage } from "./stages.js";
14
- import { commitStage } from "./git.js";
15
- import { runFixLoop } from "../agent/fixer.js";
16
- import { runChecks } from "./checks.js";
17
- /**
18
- * Run a staged fix: break the fix into multiple stages, fix each independently,
19
- * and commit after each successful stage.
20
- */
21
- export async function runStagedFix(opts) {
22
- const log = opts.onLog ?? (() => { });
23
- const { cwd, pm, dep } = opts;
24
- // 1. Build dependency graph
25
- log("📊 building dependency graph…");
26
- const nodes = await buildDependencyGraph(cwd, dep);
27
- if (nodes.length === 0) {
28
- log("⚠️ dependency graph empty, falling back to single-stage fix");
29
- return await runSingleStageFix(opts);
30
- }
31
- const layers = organizeLayers(nodes);
32
- log(`📊 found ${layers.length} dependency layers, ${nodes.length} files total`);
33
- // 2. Categorize files by stage
34
- const stageFiles = await categorizeFilesByStage(cwd, COMMON_STAGES);
35
- const stages = COMMON_STAGES.filter((stage) => {
36
- const files = stageFiles.get(stage.name) || [];
37
- return files.length > 0;
38
- });
39
- if (stages.length === 0) {
40
- log("⚠️ no files matched any stage patterns, falling back to single-stage fix");
41
- return await runSingleStageFix(opts);
42
- }
43
- log(`🔧 identified ${stages.length} stages: ${stages.map(s => s.name).join(" → ")}`);
44
- // 3. Fix each stage
45
- let totalRounds = 0;
46
- let totalInputTokens = 0;
47
- let totalOutputTokens = 0;
48
- const allEditedFiles = [];
49
- for (let i = 0; i < stages.length; i++) {
50
- const stage = stages[i];
51
- const files = stageFiles.get(stage.name) || [];
52
- log(`\n🔧 Stage ${i + 1}/${stages.length}: ${stage.name} (${files.length} files)`);
53
- // Run fix loop for this stage only
54
- // (In a full implementation, we'd pass a file filter to the fix loop)
55
- const stageResult = await runFixLoop({
56
- ...opts,
57
- onLog: (msg) => log(` ${msg}`),
58
- });
59
- totalRounds += stageResult.rounds;
60
- totalInputTokens += stageResult.usage.inputTokens;
61
- totalOutputTokens += stageResult.usage.outputTokens;
62
- allEditedFiles.push(...stageResult.editedFiles);
63
- // Validate stage
64
- const passed = await stage.validator(cwd);
65
- if (!passed) {
66
- log(`❌ Stage ${i + 1} validation failed`);
67
- return {
68
- fixed: false,
69
- completedStages: i,
70
- totalStages: stages.length,
71
- failedStage: stage.name,
72
- rounds: totalRounds,
73
- usage: { inputTokens: totalInputTokens, outputTokens: totalOutputTokens },
74
- editedFiles: allEditedFiles,
75
- budgetExceeded: stageResult.budgetExceeded,
76
- };
77
- }
78
- // Commit this stage
79
- await commitStage(cwd, stage.name, i + 1, stages.length);
80
- log(`✓ Stage ${i + 1} completed and committed`);
81
- }
82
- // Final validation
83
- const finalCheck = await runChecks(pm, cwd, opts.checkOverrides);
84
- return {
85
- fixed: finalCheck.ok,
86
- completedStages: stages.length,
87
- totalStages: stages.length,
88
- rounds: totalRounds,
89
- usage: { inputTokens: totalInputTokens, outputTokens: totalOutputTokens },
90
- editedFiles: allEditedFiles,
91
- };
92
- }
93
- /**
94
- * Fallback: run a single fix loop without staging (same as v0.3.0 behavior)
95
- */
96
- async function runSingleStageFix(opts) {
97
- const result = await runFixLoop(opts);
98
- return {
99
- fixed: result.fixed,
100
- completedStages: result.fixed ? 1 : 0,
101
- totalStages: 1,
102
- rounds: result.rounds,
103
- usage: result.usage,
104
- editedFiles: result.editedFiles,
105
- budgetExceeded: result.budgetExceeded,
106
- };
107
- }
108
- //# sourceMappingURL=staged-fix.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"staged-fix.js","sourceRoot":"","sources":["../../src/engine/staged-fix.ts"],"names":[],"mappings":"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"}
@@ -1,125 +0,0 @@
1
- import { join } from "node:path";
2
- import { pathExists } from "./ecosystems/types.js";
3
- import { exec } from "node:child_process";
4
- import { promisify } from "node:util";
5
- import { glob } from "glob";
6
- const execAsync = promisify(exec);
7
- /**
8
- * Common staged fix strategy for most projects:
9
- * 1. Configuration files (package.json, tsconfig.json, webpack.config.js)
10
- * 2. Type definitions (*.d.ts, types/)
11
- * 3. Source code (*.ts, *.tsx, *.js, *.jsx)
12
- */
13
- export const COMMON_STAGES = [
14
- {
15
- name: "Configuration",
16
- filePatterns: [
17
- "**/package.json",
18
- "**/tsconfig.json",
19
- "**/tsconfig.*.json",
20
- "**/webpack.config.js",
21
- "**/webpack.*.js",
22
- "**/.eslintrc.*",
23
- "**/babel.config.*",
24
- "**/vite.config.*",
25
- "**/rollup.config.*",
26
- ],
27
- validator: async (cwd) => {
28
- // Check if config files are syntactically valid
29
- return await validateConfigSyntax(cwd);
30
- },
31
- },
32
- {
33
- name: "Type Definitions",
34
- filePatterns: [
35
- "**/*.d.ts",
36
- "**/types/**/*.ts",
37
- "**/@types/**/*.ts",
38
- ],
39
- validator: async (cwd) => {
40
- // Check if TypeScript types are valid
41
- if (await pathExists(join(cwd, "tsconfig.json"))) {
42
- try {
43
- await execAsync("npx tsc --noEmit", { cwd, timeout: 60000 });
44
- return true;
45
- }
46
- catch {
47
- return false;
48
- }
49
- }
50
- return true; // No TypeScript, skip
51
- },
52
- },
53
- {
54
- name: "Source Code",
55
- filePatterns: [
56
- "**/*.ts",
57
- "**/*.tsx",
58
- "**/*.js",
59
- "**/*.jsx",
60
- // Exclude already handled files
61
- "!**/*.d.ts",
62
- "!**/types/**",
63
- "!**/@types/**",
64
- "!**/node_modules/**",
65
- "!**/dist/**",
66
- "!**/build/**",
67
- "!**/*.test.*",
68
- "!**/*.spec.*",
69
- ],
70
- validator: async (cwd) => {
71
- // Source code stage succeeds if tests pass
72
- // (This will be checked by the main fix loop)
73
- return true; // Delegated to main validator
74
- },
75
- },
76
- ];
77
- async function validateConfigSyntax(cwd) {
78
- // Check if package.json is valid JSON
79
- try {
80
- const pkgPath = join(cwd, "package.json");
81
- if (await pathExists(pkgPath)) {
82
- const fs = await import("node:fs/promises");
83
- const content = await fs.readFile(pkgPath, "utf8");
84
- JSON.parse(content); // Will throw if invalid
85
- }
86
- // Check if tsconfig.json is valid JSON
87
- const tsconfigPath = join(cwd, "tsconfig.json");
88
- if (await pathExists(tsconfigPath)) {
89
- const fs = await import("node:fs/promises");
90
- const content = await fs.readFile(tsconfigPath, "utf8");
91
- JSON.parse(content); // Will throw if invalid
92
- }
93
- return true;
94
- }
95
- catch {
96
- return false;
97
- }
98
- }
99
- /**
100
- * Match files against a set of glob patterns.
101
- */
102
- export async function matchFiles(cwd, patterns) {
103
- const allMatches = new Set();
104
- for (const pattern of patterns) {
105
- const matches = await glob(pattern, {
106
- cwd,
107
- absolute: false,
108
- ignore: ["**/node_modules/**", "**/dist/**", "**/build/**"],
109
- });
110
- matches.forEach((m) => allMatches.add(m));
111
- }
112
- return Array.from(allMatches);
113
- }
114
- /**
115
- * Determine which files belong to which stage based on glob patterns.
116
- */
117
- export async function categorizeFilesByStage(cwd, stages) {
118
- const stageFiles = new Map();
119
- for (const stage of stages) {
120
- const files = await matchFiles(cwd, stage.filePatterns);
121
- stageFiles.set(stage.name, files);
122
- }
123
- return stageFiles;
124
- }
125
- //# sourceMappingURL=stages.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"stages.js","sourceRoot":"","sources":["../../src/engine/stages.ts"],"names":[],"mappings":"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"}