cxgrd 0.1.14 → 0.1.16

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.
@@ -1 +1 @@
1
- {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"AAeA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAwH3F"}
1
+ {"version":3,"file":"input.d.ts","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"AAeA,wBAAsB,YAAY,CAAC,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAuH3F"}
@@ -35,50 +35,47 @@ async function inputCommand(description, projectPath) {
35
35
  process.exit(1);
36
36
  }
37
37
  const allFiles = Object.keys(graph.files || {});
38
- // Load symbols.json to match function/class/variable names
39
- const symbols = await cgDir.readSymbols().catch(() => null);
40
- // Build a map: symbolName → file path
38
+ const symbols = await cgDir.readSymbols().catch(() => ({}));
39
+ // Build symbol file map (lowercase keys for matching)
41
40
  const symbolToFile = {};
42
- if (symbols) {
43
- for (const [filePath, fileSymbols] of Object.entries(symbols)) {
44
- for (const sym of fileSymbols) {
45
- symbolToFile[sym.toLowerCase()] = filePath;
46
- }
41
+ for (const [filePath, fileSymbols] of Object.entries(symbols)) {
42
+ for (const sym of fileSymbols) {
43
+ symbolToFile[sym.toLowerCase()] = filePath;
47
44
  }
48
45
  }
49
- // Find files that define symbols mentioned in the description
50
- const descriptionLower = description.toLowerCase();
46
+ // Tokenize description into whole identifiers using regex
47
+ // "renaming _set_session_cookie to set_cookie"
48
+ // → ["renaming", "_set_session_cookie", "to", "set_cookie"]
49
+ const descriptionTokens = new Set(description.toLowerCase().match(/[a-z_][a-z0-9_]*/g) || []);
50
+ // Match only exact symbol tokens — no substring matching
51
51
  const symbolMatches = [];
52
52
  for (const [sym, filePath] of Object.entries(symbolToFile)) {
53
- if (descriptionLower.includes(sym)) {
53
+ if (descriptionTokens.has(sym)) {
54
54
  if (!symbolMatches.includes(filePath)) {
55
55
  symbolMatches.push(filePath);
56
56
  cli_formatter_1.RichOutput.info(`Symbol match: "${sym}" → ${filePath}`);
57
57
  }
58
58
  }
59
59
  }
60
- // Also do the existing filename/description matching
60
+ // Filename/path matching from description
61
61
  const changeDetector = new change_detector_1.ChangeDetector(rootPath);
62
62
  const gitChanges = changeDetector.getChangedFiles();
63
63
  const descriptionMatch = changeDetector.parseDescription(description, allFiles);
64
64
  // Combine all sources
65
- const changedFiles = [
66
- ...gitChanges.files,
67
- ...descriptionMatch.files,
68
- ...symbolMatches,
69
- ];
70
- const uniqueFiles = [...new Set(changedFiles)];
65
+ const uniqueFiles = [...new Set([
66
+ ...gitChanges.files,
67
+ ...descriptionMatch.files,
68
+ ...symbolMatches,
69
+ ])];
71
70
  if (uniqueFiles.length === 0) {
72
71
  cli_formatter_1.RichOutput.warning('Could not identify changed files. Using heuristics based on description.');
73
72
  }
74
73
  else {
75
74
  cli_formatter_1.RichOutput.info(`Detected ${uniqueFiles.length} changed file(s)`);
76
75
  }
77
- // Run blast radius analysis
78
76
  const analyzer = new blast_radius_analyzer_1.BlastRadiusAnalyzer(graph);
79
77
  const result = analyzer.analyze(uniqueFiles.length > 0 ? uniqueFiles : []);
80
78
  displayBlastRadiusResults(result);
81
- // Save to history
82
79
  const history = await cgDir.readHistory();
83
80
  history.push({
84
81
  timestamp: Date.now(),
@@ -1 +1 @@
1
- {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"input.js","sourceRoot":"","sources":["../../src/commands/input.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;CACH;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAOX;IAGF,OAAO,CAAC,QAAQ,CAuBd;IAEF,OAAO,CAAC,cAAc;IAsCtB,OAAO,CAAC,mBAAmB;IA8B3B,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,eAAe;IA6B9F,QAAQ,IAAI,eAAe;CAG5B"}
1
+ {"version":3,"file":"graph.d.ts","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"AAAA,UAAU,UAAU;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,QAAQ,GAAG,SAAS,GAAG,SAAS,GAAG,KAAK,GAAG,WAAW,CAAC;IAC7D,IAAI,EAAE,MAAM,CAAC;CACd;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,UAAU,EAAE,CAAC;IAC3B,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,EAAE;QACL,UAAU,EAAE,MAAM,CAAC;QACnB,iBAAiB,EAAE,MAAM,CAAC;QAC1B,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KACnC,CAAC;CACH;AAED,qBAAa,sBAAsB;IACjC,OAAO,CAAC,KAAK,CAOX;IAEF,OAAO,CAAC,QAAQ,CAuBd;IAEF,OAAO,CAAC,cAAc;IA0DtB,OAAO,CAAC,mBAAmB;IA2B3B,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,GAAG,eAAe;IA4B9F,QAAQ,IAAI,eAAe;CAG5B"}
package/dist/graph.js CHANGED
@@ -10,23 +10,22 @@ class DependencyGraphBuilder {
10
10
  languages: {},
11
11
  },
12
12
  };
13
- // Regex patterns for extracting imports/requires
14
13
  patterns = {
15
14
  typescript: [
16
- /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+)?['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
17
- /import\s+['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
18
- /from\s+['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
19
- /require\s*\(\s*['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]\s*\)/gm,
15
+ /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+)?['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
16
+ /import\s+['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
17
+ /from\s+['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
18
+ /require\s*\(\s*['"](\.\.\/?[^'"]+|[^/][^'"]*)['"]\s*\)/gm,
20
19
  ],
21
20
  javascript: [
22
- /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+)?['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
23
- /import\s+['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
24
- /from\s+['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]/gm,
25
- /require\s*\(\s*['"](\.\.?\/[^'"]+|[^/][^'"]*)['"]\s*\)/gm,
21
+ /import\s+(?:(?:\{[^}]*\}|\*\s+as\s+\w+|\w+)\s+from\s+)?['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
22
+ /import\s+['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
23
+ /from\s+['"](\.\.\/?[^'"]+|[^/][^'"]*)['\"]/gm,
24
+ /require\s*\(\s*['"](\.\.\/?[^'"]+|[^/][^'"]*)['"]\s*\)/gm,
26
25
  ],
27
26
  python: [
28
- /from\s+([.\w]+)\s+import/gm,
29
- /import\s+([.\w]+)/gm,
27
+ /from\s+([\.\w]+)\s+import/gm,
28
+ /import\s+([\.\w]+)/gm,
30
29
  ],
31
30
  java: [
32
31
  /import\s+([a-zA-Z0-9_.]+);/gm,
@@ -39,44 +38,67 @@ class DependencyGraphBuilder {
39
38
  const symbols = [];
40
39
  switch (language) {
41
40
  case 'typescript':
42
- case 'javascript':
43
- // Extract function declarations
44
- const funcMatches = content.matchAll(/(?:export\s+)?(?:async\s+)?function\s+(\w+)|const\s+(\w+)\s*=|let\s+(\w+)\s*=/gm);
41
+ case 'javascript': {
42
+ // Top-level and exported functions
43
+ const funcMatches = content.matchAll(/(?:export\s+)?(?:async\s+)?function\s+(\w+)|(?:export\s+)?const\s+(\w+)\s*=\s*(?:async\s*)?\(/gm);
45
44
  for (const match of funcMatches) {
46
- const symbol = match[1] || match[2] || match[3];
47
- if (symbol)
48
- symbols.push(symbol);
45
+ const sym = match[1] || match[2];
46
+ if (sym)
47
+ symbols.push(sym);
49
48
  }
50
- // Extract class declarations
49
+ // Classes
51
50
  const classMatches = content.matchAll(/(?:export\s+)?class\s+(\w+)/gm);
52
- for (const match of classMatches) {
51
+ for (const match of classMatches)
53
52
  symbols.push(match[1]);
53
+ // Class methods
54
+ const methodMatches = content.matchAll(/^\s{2,}(?:async\s+)?(\w+)\s*\([^)]*\)\s*(?::\s*\w+\s*)?\{/gm);
55
+ for (const match of methodMatches) {
56
+ const sym = match[1];
57
+ if (sym && !['if', 'for', 'while', 'switch', 'catch'].includes(sym))
58
+ symbols.push(sym);
54
59
  }
55
- // Extract interface/type declarations
60
+ // Interfaces and types
56
61
  const typeMatches = content.matchAll(/(?:export\s+)?(?:interface|type)\s+(\w+)/gm);
57
- for (const match of typeMatches) {
62
+ for (const match of typeMatches)
58
63
  symbols.push(match[1]);
59
- }
60
64
  break;
61
- case 'python':
62
- // Extract function and class definitions
63
- const pyMatches = content.matchAll(/^(?:def|class)\s+(\w+)/gm);
65
+ }
66
+ case 'python': {
67
+ // Top-level AND indented def/class — catches methods inside classes
68
+ const pyMatches = content.matchAll(/^[ \t]*(?:async\s+)?def\s+(\w+)|^[ \t]*class\s+(\w+)/gm);
64
69
  for (const match of pyMatches) {
65
- symbols.push(match[1]);
70
+ const sym = match[1] || match[2];
71
+ if (sym)
72
+ symbols.push(sym);
73
+ }
74
+ break;
75
+ }
76
+ case 'rust': {
77
+ const rustMatches = content.matchAll(/(?:pub\s+)?(?:async\s+)?fn\s+(\w+)|(?:pub\s+)?struct\s+(\w+)|(?:pub\s+)?enum\s+(\w+)/gm);
78
+ for (const match of rustMatches) {
79
+ const sym = match[1] || match[2] || match[3];
80
+ if (sym)
81
+ symbols.push(sym);
66
82
  }
67
83
  break;
84
+ }
85
+ case 'go': {
86
+ const goMatches = content.matchAll(/func\s+(?:\(\w+\s+\*?\w+\)\s+)?(\w+)/gm);
87
+ for (const match of goMatches)
88
+ symbols.push(match[1]);
89
+ break;
90
+ }
68
91
  }
69
- return [...new Set(symbols)]; // Remove duplicates
92
+ return [...new Set(symbols)];
70
93
  }
71
94
  extractDependencies(filePath, content, language) {
72
95
  const dependencies = [];
73
96
  const patterns = this.patterns[language] || [];
74
- let lineNum = 0;
75
97
  const lines = content.split('\n');
76
98
  for (let i = 0; i < lines.length; i++) {
77
99
  const line = lines[i];
78
100
  for (const pattern of patterns) {
79
- pattern.lastIndex = 0; // Reset regex state
101
+ pattern.lastIndex = 0;
80
102
  let match;
81
103
  while ((match = pattern.exec(line)) !== null) {
82
104
  const importPath = match[1];
@@ -111,7 +133,6 @@ class DependencyGraphBuilder {
111
133
  dependencies,
112
134
  symbols,
113
135
  };
114
- // Update stats
115
136
  this.graph.stats.languages[file.language] = (this.graph.stats.languages[file.language] || 0) + 1;
116
137
  this.graph.stats.totalDependencies += dependencies.length;
117
138
  }
package/dist/graph.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"graph.js","sourceRoot":"","sources":["../src/graph.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,3 @@
1
- /**
2
- * Enhanced Blast Radius Analyzer
3
- *
4
- * Determines what breaks when you change a file:
5
- * - Direct impact (files that import/depend on the changed file)
6
- * - Transitive impact (files that depend on the dependent files)
7
- * - Severity scoring (high/medium/low based on multiple factors)
8
- * - Change classification (what type of change is it)
9
- */
10
1
  export interface ChangeType {
11
2
  type: 'function' | 'class' | 'type' | 'export' | 'import' | 'schema' | 'config' | 'unknown';
12
3
  description: string;
@@ -39,8 +30,6 @@ interface FileNode {
39
30
  type: string;
40
31
  }>;
41
32
  symbols: string[];
42
- imports?: string[];
43
- exports?: string[];
44
33
  }
45
34
  interface DependencyGraph {
46
35
  files: Record<string, FileNode>;
@@ -51,44 +40,24 @@ export declare class BlastRadiusAnalyzer {
51
40
  private reverseGraph;
52
41
  constructor(graph: DependencyGraph);
53
42
  /**
54
- * Build reverse dependency graph for quick lookups
43
+ * Normalize an import string to possible file paths.
44
+ * Python: "app.oauth" → ["app/oauth.py", "app/oauth/__init__.py"]
45
+ * JS/TS: "./utils/auth" → ["utils/auth.ts", "utils/auth.js", ...]
55
46
  */
56
- private buildReverseGraph;
47
+ private normalizeImportToFilePath;
57
48
  /**
58
- * Analyze impact of changing specific files
49
+ * Build reverse dependency graph.
50
+ * Stores both raw import strings AND normalized file paths so lookups
51
+ * work regardless of whether the caller uses "app.oauth" or "app/oauth.py".
59
52
  */
53
+ private buildReverseGraph;
60
54
  analyze(changedFiles: string[]): BlastRadiusResult;
61
- /**
62
- * Recursively find all files impacted by a change
63
- */
64
55
  private findImpactedFiles;
65
- /**
66
- * Generate human-readable reason for impact
67
- */
68
- private generateReason;
69
- /**
70
- * Classify the type of change being made
71
- */
72
56
  private classifyChanges;
73
- /**
74
- * Calculate severity for each impacted file based on multiple factors
75
- */
76
57
  private calculateSeverities;
77
- /**
78
- * Heuristics to identify important files
79
- */
80
58
  private isImportantFile;
81
- /**
82
- * Aggregate results and generate recommendations
83
- */
84
59
  private aggregateResults;
85
- /**
86
- * Generate actionable recommendations based on analysis
87
- */
88
60
  private generateRecommendations;
89
- /**
90
- * Detailed analysis for a specific file
91
- */
92
61
  analyzeFile(filePath: string): any;
93
62
  }
94
63
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"blast-radius-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/blast-radius-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;IAClD,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAuC;gBAE/C,KAAK,EAAE,eAAe;IAKlC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAWzB;;OAEG;IACH,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,iBAAiB;IAyBlD;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAgCzB;;OAEG;IACH,OAAO,CAAC,cAAc;IAMtB;;OAEG;IACH,OAAO,CAAC,eAAe;IA2CvB;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAmC3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAiBvB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyCxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IA8C/B;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;CAgBnC"}
1
+ {"version":3,"file":"blast-radius-analyzer.d.ts","sourceRoot":"","sources":["../../src/utils/blast-radius-analyzer.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,UAAU,GAAG,OAAO,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC5F,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IACjD,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;IAClD,cAAc,EAAE,OAAO,CAAC;IACxB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,iBAAiB;IAChC,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,mBAAmB,EAAE,MAAM,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;IAClD,aAAa,EAAE,YAAY,EAAE,CAAC;IAC9B,WAAW,EAAE,UAAU,EAAE,CAAC;IAC1B,eAAe,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,UAAU,QAAQ;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,UAAU,eAAe;IACvB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,EAAE,GAAG,CAAC;CACZ;AAED,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,KAAK,CAAkB;IAC/B,OAAO,CAAC,YAAY,CAAuC;gBAE/C,KAAK,EAAE,eAAe;IAKlC;;;;OAIG;IACH,OAAO,CAAC,yBAAyB;IAkBjC;;;;OAIG;IACH,OAAO,CAAC,iBAAiB;IAqBzB,OAAO,CAAC,YAAY,EAAE,MAAM,EAAE,GAAG,iBAAiB;IAmBlD,OAAO,CAAC,iBAAiB;IA8BzB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,eAAe;IAKvB,OAAO,CAAC,gBAAgB;IAiCxB,OAAO,CAAC,uBAAuB;IAkC/B,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,GAAG;CAWnC"}
@@ -1,159 +1,130 @@
1
1
  "use strict";
2
- /**
3
- * Enhanced Blast Radius Analyzer
4
- *
5
- * Determines what breaks when you change a file:
6
- * - Direct impact (files that import/depend on the changed file)
7
- * - Transitive impact (files that depend on the dependent files)
8
- * - Severity scoring (high/medium/low based on multiple factors)
9
- * - Change classification (what type of change is it)
10
- */
11
2
  Object.defineProperty(exports, "__esModule", { value: true });
12
3
  exports.BlastRadiusAnalyzer = void 0;
13
4
  class BlastRadiusAnalyzer {
14
5
  graph;
15
- reverseGraph = new Map(); // file -> files that depend on it
6
+ reverseGraph = new Map();
16
7
  constructor(graph) {
17
8
  this.graph = graph;
18
9
  this.buildReverseGraph();
19
10
  }
20
11
  /**
21
- * Build reverse dependency graph for quick lookups
12
+ * Normalize an import string to possible file paths.
13
+ * Python: "app.oauth" → ["app/oauth.py", "app/oauth/__init__.py"]
14
+ * JS/TS: "./utils/auth" → ["utils/auth.ts", "utils/auth.js", ...]
15
+ */
16
+ normalizeImportToFilePath(importPath, language) {
17
+ const candidates = [];
18
+ if (language === 'python') {
19
+ const slashPath = importPath.replace(/\./g, '/');
20
+ candidates.push(`${slashPath}.py`);
21
+ candidates.push(`${slashPath}/__init__.py`);
22
+ }
23
+ else {
24
+ const clean = importPath.replace(/^\.\.?\//, '');
25
+ candidates.push(`${clean}.ts`, `${clean}.tsx`, `${clean}.js`, `${clean}.jsx`, `${clean}/index.ts`, `${clean}/index.js`);
26
+ }
27
+ return candidates;
28
+ }
29
+ /**
30
+ * Build reverse dependency graph.
31
+ * Stores both raw import strings AND normalized file paths so lookups
32
+ * work regardless of whether the caller uses "app.oauth" or "app/oauth.py".
22
33
  */
23
34
  buildReverseGraph() {
24
35
  for (const [filePath, node] of Object.entries(this.graph.files || {})) {
25
36
  for (const dep of node.dependencies || []) {
37
+ // Raw key (e.g. "app.oauth")
26
38
  if (!this.reverseGraph.has(dep.to)) {
27
39
  this.reverseGraph.set(dep.to, new Set());
28
40
  }
29
41
  this.reverseGraph.get(dep.to).add(filePath);
42
+ // Normalized file-path keys (e.g. "app/oauth.py")
43
+ const normalized = this.normalizeImportToFilePath(dep.to, node.language);
44
+ for (const candidate of normalized) {
45
+ if (!this.reverseGraph.has(candidate)) {
46
+ this.reverseGraph.set(candidate, new Set());
47
+ }
48
+ this.reverseGraph.get(candidate).add(filePath);
49
+ }
30
50
  }
31
51
  }
32
52
  }
33
- /**
34
- * Analyze impact of changing specific files
35
- */
36
53
  analyze(changedFiles) {
37
54
  const affected = new Map();
38
55
  const visited = new Set();
39
- // Find all impacted files recursively
40
56
  for (const file of changedFiles) {
41
57
  this.findImpactedFiles(file, 1, affected, visited);
42
58
  }
43
- // Classify changes and calculate severity
44
59
  const changeTypes = this.classifyChanges(changedFiles);
45
60
  const impactedArray = Array.from(affected.values());
46
61
  const severityMap = this.calculateSeverities(impactedArray, changeTypes);
47
- // Update severities
48
62
  impactedArray.forEach(file => {
49
63
  file.severity = severityMap.get(file.path) || 'low';
50
64
  });
51
- // Calculate overall risk
52
- const result = this.aggregateResults(impactedArray, changeTypes);
53
- return result;
65
+ return this.aggregateResults(impactedArray, changeTypes);
54
66
  }
55
- /**
56
- * Recursively find all files impacted by a change
57
- */
58
67
  findImpactedFiles(file, depth, affected, visited, maxDepth = 5) {
59
68
  if (visited.has(file) || depth > maxDepth)
60
69
  return;
61
70
  visited.add(file);
62
- // Find files that depend on the current file
63
71
  const dependents = this.reverseGraph.get(file) || new Set();
64
72
  for (const dependent of dependents) {
65
73
  if (!affected.has(dependent)) {
66
74
  affected.set(dependent, {
67
75
  path: dependent,
68
- reason: this.generateReason(file, dependent),
69
- severity: 'medium', // Will be recalculated
76
+ reason: `Depends on ${file.split('/').pop() || file}`,
77
+ severity: 'medium',
70
78
  distance: depth,
71
79
  impactType: depth === 1 ? 'direct' : 'transitive',
72
80
  changeRequired: true,
73
81
  });
74
82
  }
75
- // Recursively find transitive dependencies
76
83
  if (depth < 3) {
77
84
  this.findImpactedFiles(dependent, depth + 1, affected, visited, maxDepth);
78
85
  }
79
86
  }
80
87
  }
81
- /**
82
- * Generate human-readable reason for impact
83
- */
84
- generateReason(from, to) {
85
- const fromName = from.split('/').pop() || from;
86
- const toName = to.split('/').pop() || to;
87
- return `Depends on ${fromName}`;
88
- }
89
- /**
90
- * Classify the type of change being made
91
- */
92
88
  classifyChanges(changedFiles) {
93
89
  const changes = [];
94
- const keywords = {
95
- function: ['function', 'method', 'handler', 'callback'],
96
- class: ['class', 'interface', 'type', 'abstract'],
97
- export: ['export', 'default export'],
98
- schema: ['schema', 'model', 'entity', 'database'],
99
- config: ['config', 'settings', '.env', 'constants'],
100
- };
101
90
  for (const file of changedFiles) {
102
- const fileContent = file.toLowerCase();
103
- let matchedType = 'unknown';
91
+ const f = file.toLowerCase();
92
+ let type = 'unknown';
104
93
  let confidence = 0.3;
105
- // Heuristic classification based on file path and content hints
106
- if (fileContent.includes('schema') || fileContent.includes('model')) {
107
- matchedType = 'schema';
94
+ if (f.includes('schema') || f.includes('model')) {
95
+ type = 'schema';
108
96
  confidence = 0.8;
109
97
  }
110
- else if (fileContent.includes('config') || fileContent.includes('const')) {
111
- matchedType = 'config';
98
+ else if (f.includes('config') || f.includes('const')) {
99
+ type = 'config';
112
100
  confidence = 0.8;
113
101
  }
114
- else if (fileContent.includes('service') || fileContent.includes('handler')) {
115
- matchedType = 'function';
102
+ else if (f.includes('service') || f.includes('handler')) {
103
+ type = 'function';
116
104
  confidence = 0.6;
117
105
  }
118
- else if (fileContent.includes('component') || fileContent.includes('util')) {
119
- matchedType = 'class';
106
+ else if (f.includes('component') || f.includes('util')) {
107
+ type = 'class';
120
108
  confidence = 0.5;
121
109
  }
122
- else {
123
- matchedType = 'unknown';
124
- confidence = 0.3;
125
- }
126
- changes.push({
127
- type: matchedType,
128
- description: `${matchedType} change detected`,
129
- confidence,
130
- });
110
+ changes.push({ type, description: `${type} change detected`, confidence });
131
111
  }
132
112
  return changes;
133
113
  }
134
- /**
135
- * Calculate severity for each impacted file based on multiple factors
136
- */
137
114
  calculateSeverities(files, changeTypes) {
138
115
  const severities = new Map();
116
+ const avgConfidence = changeTypes.length > 0
117
+ ? changeTypes.reduce((s, c) => s + c.confidence, 0) / changeTypes.length
118
+ : 0.5;
139
119
  for (const file of files) {
140
- let score = 0; // 0-100
141
- // Factor 1: Distance (closer = higher severity)
142
- score += (4 - file.distance) * 20; // 0-80 points
143
- // Factor 2: Impact type
120
+ let score = (4 - Math.min(file.distance, 3)) * 20;
144
121
  if (file.impactType === 'direct')
145
122
  score += 15;
146
123
  else if (file.impactType === 'transitive')
147
124
  score += 5;
148
- // Factor 3: File importance heuristics
149
125
  if (this.isImportantFile(file.path))
150
126
  score += 10;
151
- // Factor 4: Change confidence from classification
152
- const avgChangeConfidence = changeTypes.length > 0
153
- ? changeTypes.reduce((sum, c) => sum + c.confidence, 0) / changeTypes.length
154
- : 0.5;
155
- score += avgChangeConfidence * 20;
156
- // Determine severity level
127
+ score += avgConfidence * 20;
157
128
  if (score >= 80)
158
129
  severities.set(file.path, 'critical');
159
130
  else if (score >= 60)
@@ -165,36 +136,17 @@ class BlastRadiusAnalyzer {
165
136
  }
166
137
  return severities;
167
138
  }
168
- /**
169
- * Heuristics to identify important files
170
- */
171
139
  isImportantFile(path) {
172
- const important = [
173
- 'index',
174
- 'main',
175
- 'app',
176
- 'core',
177
- 'api',
178
- 'server',
179
- 'middleware',
180
- 'auth',
181
- 'schema',
182
- ];
183
- const lowerPath = path.toLowerCase();
184
- return important.some(keyword => lowerPath.includes(keyword));
140
+ const important = ['index', 'main', 'app', 'core', 'api', 'server', 'middleware', 'auth', 'schema'];
141
+ return important.some(k => path.toLowerCase().includes(k));
185
142
  }
186
- /**
187
- * Aggregate results and generate recommendations
188
- */
189
143
  aggregateResults(files, changeTypes) {
190
144
  const critical = files.filter(f => f.severity === 'critical').length;
191
145
  const high = files.filter(f => f.severity === 'high').length;
192
146
  const medium = files.filter(f => f.severity === 'medium').length;
193
147
  const low = files.filter(f => f.severity === 'low').length;
194
- // Calculate overall risk (0-100)
195
148
  let totalRisk = critical * 25 + high * 15 + medium * 8 + low * 2;
196
149
  totalRisk = Math.min(100, totalRisk / Math.max(1, files.length) + files.length * 2);
197
- // Determine risk level
198
150
  let riskLevel = 'low';
199
151
  if (totalRisk >= 75)
200
152
  riskLevel = 'critical';
@@ -202,7 +154,6 @@ class BlastRadiusAnalyzer {
202
154
  riskLevel = 'high';
203
155
  else if (totalRisk >= 25)
204
156
  riskLevel = 'medium';
205
- // Generate recommendations
206
157
  const recommendations = this.generateRecommendations(files, changeTypes, riskLevel);
207
158
  const direct = files.filter(f => f.distance === 1).length;
208
159
  const transitive = files.filter(f => f.distance > 1).length;
@@ -213,68 +164,51 @@ class BlastRadiusAnalyzer {
213
164
  totalRisk: Math.round(totalRisk),
214
165
  riskLevel,
215
166
  affectedFiles: files.sort((a, b) => {
216
- const severityOrder = { critical: 0, high: 1, medium: 2, low: 3 };
217
- return (severityOrder[a.severity] || 4) - (severityOrder[b.severity] || 4);
167
+ const order = { critical: 0, high: 1, medium: 2, low: 3 };
168
+ return (order[a.severity] ?? 4) - (order[b.severity] ?? 4);
218
169
  }),
219
170
  changeTypes,
220
171
  recommendations,
221
172
  };
222
173
  }
223
- /**
224
- * Generate actionable recommendations based on analysis
225
- */
226
174
  generateRecommendations(files, changeTypes, riskLevel) {
227
- const recommendations = [];
228
- // Critical files
175
+ const recs = [];
229
176
  const criticalFiles = files.filter(f => f.severity === 'critical');
230
177
  if (criticalFiles.length > 0) {
231
- recommendations.push(`⚠️ ${criticalFiles.length} critical files impacted. Review these carefully:`);
178
+ recs.push(`⚠️ ${criticalFiles.length} critical file(s) impacted review carefully`);
232
179
  }
233
- // Change type specific recommendations
234
- for (const change of changeTypes) {
235
- if (change.type === 'schema') {
236
- recommendations.push('📊 Schema change detected: Update database migrations and models');
237
- }
238
- else if (change.type === 'export') {
239
- recommendations.push('📤 Export change detected: Update all imports in affected files');
240
- }
241
- else if (change.type === 'config') {
242
- recommendations.push('⚙️ Configuration change: Verify environment variables across deployment');
243
- }
180
+ for (const c of changeTypes) {
181
+ if (c.type === 'schema')
182
+ recs.push('📊 Schema change: update database migrations and models');
183
+ else if (c.type === 'export')
184
+ recs.push('📤 Export change: update all imports in affected files');
185
+ else if (c.type === 'config')
186
+ recs.push('⚙️ Config change: verify environment variables across deployments');
244
187
  }
245
- // Risk-level recommendations
246
188
  if (riskLevel === 'critical' || riskLevel === 'high') {
247
- recommendations.push('🚨 Consider writing additional tests for affected modules');
248
- recommendations.push('🔍 Run full test suite before deploying');
189
+ recs.push('🚨 Write additional tests for affected modules');
190
+ recs.push('🔍 Run full test suite before deploying');
249
191
  }
250
192
  else if (riskLevel === 'medium') {
251
- recommendations.push('✓ Run tests for directly affected modules');
193
+ recs.push('✓ Run tests for directly affected modules');
252
194
  }
253
- // Hotfix recommendations
254
195
  if (files.length > 15) {
255
- recommendations.push(`💡 Large blast radius (${files.length} files). Consider breaking change into smaller PRs`);
196
+ recs.push(`💡 Large blast radius (${files.length} files) consider smaller PRs`);
256
197
  }
257
- if (recommendations.length === 0) {
258
- recommendations.push('✓ Low risk change. Proceed with caution.');
259
- }
260
- return recommendations;
198
+ if (recs.length === 0)
199
+ recs.push('✓ Low risk change. Proceed with caution.');
200
+ return recs;
261
201
  }
262
- /**
263
- * Detailed analysis for a specific file
264
- */
265
202
  analyzeFile(filePath) {
266
203
  const node = this.graph.files[filePath];
267
204
  if (!node)
268
205
  return null;
269
- const dependsOn = node.dependencies || [];
270
- const dependedOnBy = Array.from(this.reverseGraph.get(filePath) || []);
271
206
  return {
272
207
  path: filePath,
273
208
  language: node.language,
274
- dependsOn,
275
- dependedOnBy,
209
+ dependsOn: node.dependencies || [],
210
+ dependedOnBy: Array.from(this.reverseGraph.get(filePath) || []),
276
211
  symbols: node.symbols || [],
277
- riskScore: dependedOnBy.length * 2 + dependsOn.length,
278
212
  };
279
213
  }
280
214
  }
@@ -1 +1 @@
1
- {"version":3,"file":"blast-radius-analyzer.js","sourceRoot":"","sources":["../../src/utils/blast-radius-analyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"blast-radius-analyzer.js","sourceRoot":"","sources":["../../src/utils/blast-radius-analyzer.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cxgrd",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "description": "AI context guardrail CLI — dependency-aware architecture safety for AI-assisted development",
5
5
  "main": "dist/index.js",
6
6
  "bin": {