@promptwheel/core 0.7.22 → 0.7.34

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 (91) hide show
  1. package/dist/codebase-index/ast-analysis.d.ts +33 -2
  2. package/dist/codebase-index/ast-analysis.d.ts.map +1 -1
  3. package/dist/codebase-index/ast-analysis.js +457 -2
  4. package/dist/codebase-index/ast-analysis.js.map +1 -1
  5. package/dist/codebase-index/ast-cache.d.ts +9 -1
  6. package/dist/codebase-index/ast-cache.d.ts.map +1 -1
  7. package/dist/codebase-index/ast-cache.js.map +1 -1
  8. package/dist/codebase-index/ast-patterns.d.ts +24 -4
  9. package/dist/codebase-index/ast-patterns.d.ts.map +1 -1
  10. package/dist/codebase-index/ast-patterns.js +274 -10
  11. package/dist/codebase-index/ast-patterns.js.map +1 -1
  12. package/dist/codebase-index/dead-code.d.ts +37 -4
  13. package/dist/codebase-index/dead-code.d.ts.map +1 -1
  14. package/dist/codebase-index/dead-code.js +152 -17
  15. package/dist/codebase-index/dead-code.js.map +1 -1
  16. package/dist/codebase-index/index.d.ts +4 -2
  17. package/dist/codebase-index/index.d.ts.map +1 -1
  18. package/dist/codebase-index/index.js +129 -14
  19. package/dist/codebase-index/index.js.map +1 -1
  20. package/dist/codebase-index/shared.d.ts +31 -0
  21. package/dist/codebase-index/shared.d.ts.map +1 -1
  22. package/dist/codebase-index/shared.js +50 -0
  23. package/dist/codebase-index/shared.js.map +1 -1
  24. package/dist/dedup/shared.d.ts +14 -0
  25. package/dist/dedup/shared.d.ts.map +1 -1
  26. package/dist/dedup/shared.js +40 -0
  27. package/dist/dedup/shared.js.map +1 -1
  28. package/dist/learnings/shared.d.ts +1 -1
  29. package/dist/learnings/shared.d.ts.map +1 -1
  30. package/dist/learnings/shared.js.map +1 -1
  31. package/dist/proposals/blueprint.d.ts +68 -0
  32. package/dist/proposals/blueprint.d.ts.map +1 -0
  33. package/dist/proposals/blueprint.js +292 -0
  34. package/dist/proposals/blueprint.js.map +1 -0
  35. package/dist/proposals/shared.d.ts +30 -2
  36. package/dist/proposals/shared.d.ts.map +1 -1
  37. package/dist/proposals/shared.js +58 -11
  38. package/dist/proposals/shared.js.map +1 -1
  39. package/dist/proposals/step-classifier.d.ts +32 -0
  40. package/dist/proposals/step-classifier.d.ts.map +1 -0
  41. package/dist/proposals/step-classifier.js +49 -0
  42. package/dist/proposals/step-classifier.js.map +1 -0
  43. package/dist/proposals/trajectory-critic.d.ts +35 -0
  44. package/dist/proposals/trajectory-critic.d.ts.map +1 -0
  45. package/dist/proposals/trajectory-critic.js +211 -0
  46. package/dist/proposals/trajectory-critic.js.map +1 -0
  47. package/dist/repos/tickets.d.ts +2 -0
  48. package/dist/repos/tickets.d.ts.map +1 -1
  49. package/dist/repos/tickets.js.map +1 -1
  50. package/dist/scout/index.d.ts.map +1 -1
  51. package/dist/scout/index.js +10 -1
  52. package/dist/scout/index.js.map +1 -1
  53. package/dist/scout/prompt.d.ts.map +1 -1
  54. package/dist/scout/prompt.js +7 -1
  55. package/dist/scout/prompt.js.map +1 -1
  56. package/dist/scout/runner.d.ts.map +1 -1
  57. package/dist/scout/runner.js +1 -0
  58. package/dist/scout/runner.js.map +1 -1
  59. package/dist/scout/types.d.ts +20 -1
  60. package/dist/scout/types.d.ts.map +1 -1
  61. package/dist/scout/types.js +4 -2
  62. package/dist/scout/types.js.map +1 -1
  63. package/dist/sectors/shared.d.ts +17 -0
  64. package/dist/sectors/shared.d.ts.map +1 -1
  65. package/dist/sectors/shared.js +65 -0
  66. package/dist/sectors/shared.js.map +1 -1
  67. package/dist/services/scout.d.ts +2 -0
  68. package/dist/services/scout.d.ts.map +1 -1
  69. package/dist/services/scout.js +1 -0
  70. package/dist/services/scout.js.map +1 -1
  71. package/dist/trajectory/io.d.ts +32 -0
  72. package/dist/trajectory/io.d.ts.map +1 -0
  73. package/dist/trajectory/io.js +201 -0
  74. package/dist/trajectory/io.js.map +1 -0
  75. package/dist/trajectory/shared.d.ts +50 -0
  76. package/dist/trajectory/shared.d.ts.map +1 -1
  77. package/dist/trajectory/shared.js +178 -0
  78. package/dist/trajectory/shared.js.map +1 -1
  79. package/dist/waves/conflict.d.ts +130 -0
  80. package/dist/waves/conflict.d.ts.map +1 -0
  81. package/dist/waves/conflict.js +400 -0
  82. package/dist/waves/conflict.js.map +1 -0
  83. package/dist/waves/merge.d.ts +75 -0
  84. package/dist/waves/merge.d.ts.map +1 -0
  85. package/dist/waves/merge.js +305 -0
  86. package/dist/waves/merge.js.map +1 -0
  87. package/dist/waves/shared.d.ts +6 -102
  88. package/dist/waves/shared.d.ts.map +1 -1
  89. package/dist/waves/shared.js +16 -346
  90. package/dist/waves/shared.js.map +1 -1
  91. package/package.json +17 -1
@@ -1 +1 @@
1
- {"version":3,"file":"ast-cache.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAM3D,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAUrD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAYvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAwBhG;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrG;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAGnG"}
1
+ {"version":3,"file":"ast-cache.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMlF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAUrD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAYvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAwBhG;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrG;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAGnG"}
@@ -1 +1 @@
1
- {"version":3,"file":"ast-cache.js","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-cache.js","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"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"}
@@ -6,21 +6,41 @@
6
6
  * the scout prompt as pre-identified targets.
7
7
  */
8
8
  import type { AstGrepNode } from './ast-analysis.js';
9
- import type { AstFinding } from './shared.js';
9
+ import type { AstFinding, SymbolRange } from './shared.js';
10
10
  export type { AstFinding } from './shared.js';
11
- /** Bump when patterns change to force re-scan of cached entries. */
11
+ /**
12
+ * Global findings version. Bump to force re-scan of ALL cached entries.
13
+ * Prefer bumping individual pattern `version` fields instead — that only
14
+ * re-scans files matching the changed pattern's language.
15
+ */
12
16
  export declare const FINDINGS_VERSION = 1;
13
17
  export interface AstPattern {
14
18
  id: string;
19
+ /** Per-pattern version. Bump to re-scan only files matching this pattern's langs. */
20
+ version: number;
15
21
  langs: string[];
16
- scan(root: AstGrepNode, langKey: string, content: string): AstFinding[];
22
+ scan(root: AstGrepNode, langKey: string, content: string, symbols?: SymbolRange[]): AstFinding[];
17
23
  }
18
24
  /** Return all registered AST patterns. */
19
25
  export declare function getPatterns(): AstPattern[];
26
+ /**
27
+ * Compute per-pattern version map: `{ patternId: version }`.
28
+ * Used by the cache to determine which patterns have changed since last scan.
29
+ */
30
+ export declare function getPatternVersions(): Record<string, number>;
31
+ /**
32
+ * Check if a cached entry's pattern versions are current for the given language.
33
+ * Returns true if all patterns applicable to `langFamily` have matching versions.
34
+ * Missing entries (new patterns added since cache) return false.
35
+ */
36
+ export declare function arePatternVersionsCurrent(cachedVersions: Record<string, number> | undefined, langFamily: string): boolean;
20
37
  /**
21
38
  * Run matching patterns against an AST root. Filters by lang family,
22
39
  * runs each pattern's scan(), and combines findings. Early-exits if
23
40
  * findings exceed MAX_FINDINGS_PER_FILE.
41
+ *
42
+ * When `symbols` are provided (from the AST cache), patterns can attribute
43
+ * findings to specific functions/classes for more actionable output.
24
44
  */
25
- export declare function scanPatterns(root: AstGrepNode, langKey: string, content: string, patterns: AstPattern[]): AstFinding[];
45
+ export declare function scanPatterns(root: AstGrepNode, langKey: string, content: string, patterns: AstPattern[], symbols?: SymbolRange[]): AstFinding[];
26
46
  //# sourceMappingURL=ast-patterns.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ast-patterns.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C,oEAAoE;AACpE,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAMlC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,EAAE,CAAC;CACzE;AAkKD,0CAA0C;AAC1C,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAMD;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EAAE,GACrB,UAAU,EAAE,CAYd"}
1
+ {"version":3,"file":"ast-patterns.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAMlC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;CAClG;AAwYD,0CAA0C;AAC1C,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAClD,UAAU,EAAE,MAAM,GACjB,OAAO,CAOT;AAMD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,WAAW,EAAE,GACtB,UAAU,EAAE,CAYd"}
@@ -6,7 +6,11 @@
6
6
  * the scout prompt as pre-identified targets.
7
7
  */
8
8
  import { findAllByKind, getLangFamily } from './ast-analysis.js';
9
- /** Bump when patterns change to force re-scan of cached entries. */
9
+ /**
10
+ * Global findings version. Bump to force re-scan of ALL cached entries.
11
+ * Prefer bumping individual pattern `version` fields instead — that only
12
+ * re-scans files matching the changed pattern's language.
13
+ */
10
14
  export const FINDINGS_VERSION = 1;
11
15
  // ---------------------------------------------------------------------------
12
16
  // Helpers
@@ -23,6 +27,21 @@ function countLinesBefore(content, substring) {
23
27
  }
24
28
  return line;
25
29
  }
30
+ /** Find the enclosing symbol for a given 1-based line number. */
31
+ function findEnclosingSymbol(line, symbols) {
32
+ if (line === null || !symbols?.length)
33
+ return undefined;
34
+ return symbols.find(s => s.startLine <= line && line <= s.endLine);
35
+ }
36
+ /** Annotate a finding with enclosing symbol info. */
37
+ function annotateWithSymbol(finding, symbols) {
38
+ const enclosing = findEnclosingSymbol(finding.line, symbols);
39
+ if (enclosing) {
40
+ finding.symbolName = enclosing.name;
41
+ finding.symbolKind = enclosing.kind;
42
+ }
43
+ return finding;
44
+ }
26
45
  /** Max findings per file before early-exit. */
27
46
  const MAX_FINDINGS_PER_FILE = 30;
28
47
  // ---------------------------------------------------------------------------
@@ -30,8 +49,9 @@ const MAX_FINDINGS_PER_FILE = 30;
30
49
  // ---------------------------------------------------------------------------
31
50
  const emptyCatchPattern = {
32
51
  id: 'empty-catch',
52
+ version: 1,
33
53
  langs: ['js'],
34
- scan(root, _langKey, content) {
54
+ scan(root, _langKey, content, symbols) {
35
55
  const findings = [];
36
56
  const catchNodes = findAllByKind(root, 'catch_clause');
37
57
  for (const node of catchNodes) {
@@ -44,12 +64,17 @@ const emptyCatchPattern = {
44
64
  // Empty or comment-only body
45
65
  // eslint-disable-next-line security/detect-unsafe-regex
46
66
  if (body === '' || /^(\/\/[^\n]*\n?\s*)*$/.test(body) || /^\/\*[\s\S]*\*\/\s*$/.test(body)) {
67
+ const line = countLinesBefore(content, text);
68
+ const enclosing = findEnclosingSymbol(line, symbols);
47
69
  findings.push({
48
70
  patternId: 'empty-catch',
49
- message: 'catch clause with empty body',
50
- line: countLinesBefore(content, text),
71
+ message: enclosing
72
+ ? `empty catch in ${enclosing.name}()`
73
+ : 'catch clause with empty body',
74
+ line,
51
75
  severity: 'medium',
52
76
  category: 'fix',
77
+ ...(enclosing ? { symbolName: enclosing.name, symbolKind: enclosing.kind } : {}),
53
78
  });
54
79
  }
55
80
  }
@@ -58,6 +83,7 @@ const emptyCatchPattern = {
58
83
  };
59
84
  const typeAssertionHeavyPattern = {
60
85
  id: 'type-assertion-heavy',
86
+ version: 1,
61
87
  langs: ['js'],
62
88
  scan(root, _langKey, _content) {
63
89
  const asNodes = findAllByKind(root, 'as_expression');
@@ -75,13 +101,37 @@ const typeAssertionHeavyPattern = {
75
101
  };
76
102
  const largeFunctionPattern = {
77
103
  id: 'large-function',
104
+ version: 1,
78
105
  langs: ['js', 'python'],
79
- scan(root, langKey, content) {
106
+ scan(root, langKey, content, symbols) {
80
107
  const findings = [];
81
108
  const family = getLangFamily(langKey);
82
109
  const kinds = family === 'python'
83
110
  ? ['function_definition']
84
111
  : ['function_declaration', 'method_definition', 'arrow_function'];
112
+ // If symbols available, use them directly for size detection (more accurate)
113
+ if (symbols?.length) {
114
+ for (const sym of symbols) {
115
+ if (sym.kind !== 'function')
116
+ continue;
117
+ const lineCount = sym.endLine - sym.startLine + 1;
118
+ if (lineCount > 50) {
119
+ findings.push({
120
+ patternId: 'large-function',
121
+ message: `function ${sym.name} is ${lineCount} lines — consider splitting`,
122
+ line: sym.startLine,
123
+ severity: 'medium',
124
+ category: 'refactor',
125
+ symbolName: sym.name,
126
+ symbolKind: sym.kind,
127
+ });
128
+ }
129
+ if (findings.length >= MAX_FINDINGS_PER_FILE)
130
+ return findings;
131
+ }
132
+ return findings;
133
+ }
134
+ // Fallback: AST traversal when no symbol data
85
135
  for (const kind of kinds) {
86
136
  const nodes = findAllByKind(root, kind);
87
137
  for (const node of nodes) {
@@ -110,6 +160,7 @@ const largeFunctionPattern = {
110
160
  };
111
161
  const anyAnnotationPattern = {
112
162
  id: 'any-annotation',
163
+ version: 1,
113
164
  langs: ['js'],
114
165
  scan(root, _langKey, _content) {
115
166
  const predefinedNodes = findAllByKind(root, 'predefined_type');
@@ -132,25 +183,202 @@ const anyAnnotationPattern = {
132
183
  };
133
184
  const bareExceptPattern = {
134
185
  id: 'bare-except',
186
+ version: 1,
135
187
  langs: ['python'],
136
- scan(root, _langKey, content) {
188
+ scan(root, _langKey, content, symbols) {
137
189
  const findings = [];
138
190
  const exceptNodes = findAllByKind(root, 'except_clause');
139
191
  for (const node of exceptNodes) {
140
192
  const text = node.text();
141
193
  if (/^except\s*:/.test(text)) {
194
+ const line = countLinesBefore(content, text);
195
+ const enclosing = findEnclosingSymbol(line, symbols);
142
196
  findings.push({
143
197
  patternId: 'bare-except',
144
- message: 'bare except clause — specify an exception type',
145
- line: countLinesBefore(content, text),
198
+ message: enclosing
199
+ ? `bare except in ${enclosing.name}() — specify an exception type`
200
+ : 'bare except clause — specify an exception type',
201
+ line,
146
202
  severity: 'high',
147
203
  category: 'fix',
204
+ ...(enclosing ? { symbolName: enclosing.name, symbolKind: enclosing.kind } : {}),
148
205
  });
149
206
  }
150
207
  }
151
208
  return findings;
152
209
  },
153
210
  };
211
+ const consoleLogPattern = {
212
+ id: 'console-log',
213
+ version: 1,
214
+ langs: ['js'],
215
+ scan(root, _langKey, content, symbols) {
216
+ const findings = [];
217
+ const callNodes = findAllByKind(root, 'call_expression');
218
+ for (const node of callNodes) {
219
+ const text = node.text();
220
+ if (/^console\.(log|warn|error|debug|info|trace)\s*\(/.test(text)) {
221
+ const line = countLinesBefore(content, text);
222
+ findings.push(annotateWithSymbol({
223
+ patternId: 'console-log',
224
+ message: `console.${text.match(/console\.(\w+)/)?.[1] ?? 'log'} statement — remove or replace with proper logging`,
225
+ line,
226
+ severity: 'low',
227
+ category: 'cleanup',
228
+ }, symbols));
229
+ }
230
+ if (findings.length >= MAX_FINDINGS_PER_FILE)
231
+ return findings;
232
+ }
233
+ return findings;
234
+ },
235
+ };
236
+ const hardcodedSecretPattern = {
237
+ id: 'hardcoded-secret',
238
+ version: 1,
239
+ langs: ['js', 'python'],
240
+ scan(_root, _langKey, content, symbols) {
241
+ const findings = [];
242
+ const secretRegex = /(?:api[_-]?key|secret|password|token|auth|credential)s?\s*[:=]\s*['"][^'"]{8,}['"]/gi;
243
+ let match;
244
+ while ((match = secretRegex.exec(content)) !== null) {
245
+ // Skip test files and example/mock values
246
+ if (/test|spec|mock|example|fixture|xxx|placeholder/i.test(match[0]))
247
+ continue;
248
+ const line = countLinesBefore(content, match[0]);
249
+ findings.push(annotateWithSymbol({
250
+ patternId: 'hardcoded-secret',
251
+ message: 'possible hardcoded secret — use environment variable instead',
252
+ line,
253
+ severity: 'high',
254
+ category: 'security',
255
+ }, symbols));
256
+ if (findings.length >= MAX_FINDINGS_PER_FILE)
257
+ return findings;
258
+ }
259
+ return findings;
260
+ },
261
+ };
262
+ const todoFixmePattern = {
263
+ id: 'todo-fixme',
264
+ version: 1,
265
+ langs: ['js', 'python'],
266
+ scan(root, _langKey, content, symbols) {
267
+ const findings = [];
268
+ const commentKinds = ['comment', 'line_comment', 'block_comment'];
269
+ for (const kind of commentKinds) {
270
+ const nodes = findAllByKind(root, kind);
271
+ for (const node of nodes) {
272
+ const text = node.text();
273
+ const match = text.match(/\b(TODO|FIXME|HACK|XXX)\b/i);
274
+ if (match) {
275
+ const line = countLinesBefore(content, text);
276
+ findings.push(annotateWithSymbol({
277
+ patternId: 'todo-fixme',
278
+ message: `${match[1].toUpperCase()}: ${text.replace(/^\/[/*]\s*/, '').replace(/\*\/\s*$/, '').trim().slice(0, 80)}`,
279
+ line,
280
+ severity: 'low',
281
+ category: 'cleanup',
282
+ }, symbols));
283
+ }
284
+ if (findings.length >= MAX_FINDINGS_PER_FILE)
285
+ return findings;
286
+ }
287
+ }
288
+ return findings;
289
+ },
290
+ };
291
+ const deeplyNestedPattern = {
292
+ id: 'deeply-nested',
293
+ version: 1,
294
+ langs: ['js', 'python'],
295
+ scan(_root, _langKey, content, symbols) {
296
+ const findings = [];
297
+ const lines = content.split('\n');
298
+ let maxDepth = 0;
299
+ let maxDepthLine = 0;
300
+ let currentDepthStart = 0;
301
+ for (let i = 0; i < lines.length; i++) {
302
+ const line = lines[i];
303
+ const stripped = line.replace(/^\s*/, '');
304
+ if (stripped.length === 0)
305
+ continue;
306
+ const indent = line.length - stripped.length;
307
+ // Estimate nesting depth from indentation (2-space or 4-space)
308
+ const depth = Math.floor(indent / 2);
309
+ if (depth > maxDepth) {
310
+ maxDepth = depth;
311
+ maxDepthLine = i + 1; // 1-based
312
+ currentDepthStart = i + 1;
313
+ }
314
+ }
315
+ if (maxDepth >= 8) { // ~4 logical nesting levels at 2-space indent
316
+ findings.push(annotateWithSymbol({
317
+ patternId: 'deeply-nested',
318
+ message: `deeply nested code (indent level ${maxDepth}) — consider extracting or flattening`,
319
+ line: maxDepthLine,
320
+ severity: 'medium',
321
+ category: 'refactor',
322
+ }, symbols));
323
+ }
324
+ return findings;
325
+ },
326
+ };
327
+ const nonNullAssertionPattern = {
328
+ id: 'non-null-assertion-heavy',
329
+ version: 1,
330
+ langs: ['js'],
331
+ scan(root, _langKey, _content) {
332
+ const nodes = findAllByKind(root, 'non_null_expression');
333
+ if (nodes.length > 5) {
334
+ return [{
335
+ patternId: 'non-null-assertion-heavy',
336
+ message: `${nodes.length} non-null assertions (!) — consider null checks or optional chaining`,
337
+ line: null,
338
+ severity: 'medium',
339
+ category: 'types',
340
+ }];
341
+ }
342
+ return [];
343
+ },
344
+ };
345
+ const unreachableCodePattern = {
346
+ id: 'unreachable-code',
347
+ version: 1,
348
+ langs: ['js'],
349
+ scan(root, _langKey, content, symbols) {
350
+ const findings = [];
351
+ // Look for statement blocks where a return/throw is followed by more statements
352
+ const blockKinds = ['statement_block'];
353
+ for (const blockKind of blockKinds) {
354
+ const blocks = findAllByKind(root, blockKind);
355
+ for (const block of blocks) {
356
+ const children = block.children().filter(c => c.isNamed());
357
+ for (let i = 0; i < children.length - 1; i++) {
358
+ const kind = children[i].kind();
359
+ if (kind === 'return_statement' || kind === 'throw_statement') {
360
+ // Next sibling is unreachable
361
+ const nextText = children[i + 1].text().trim();
362
+ if (nextText && nextText !== '}') {
363
+ const line = countLinesBefore(content, children[i + 1].text());
364
+ findings.push(annotateWithSymbol({
365
+ patternId: 'unreachable-code',
366
+ message: `unreachable code after ${kind === 'return_statement' ? 'return' : 'throw'}`,
367
+ line,
368
+ severity: 'medium',
369
+ category: 'fix',
370
+ }, symbols));
371
+ }
372
+ break; // Only report first unreachable in each block
373
+ }
374
+ }
375
+ if (findings.length >= MAX_FINDINGS_PER_FILE)
376
+ return findings;
377
+ }
378
+ }
379
+ return findings;
380
+ },
381
+ };
154
382
  // ---------------------------------------------------------------------------
155
383
  // Registry
156
384
  // ---------------------------------------------------------------------------
@@ -160,11 +388,44 @@ const PATTERNS = [
160
388
  largeFunctionPattern,
161
389
  anyAnnotationPattern,
162
390
  bareExceptPattern,
391
+ consoleLogPattern,
392
+ hardcodedSecretPattern,
393
+ todoFixmePattern,
394
+ deeplyNestedPattern,
395
+ nonNullAssertionPattern,
396
+ unreachableCodePattern,
163
397
  ];
164
398
  /** Return all registered AST patterns. */
165
399
  export function getPatterns() {
166
400
  return PATTERNS;
167
401
  }
402
+ /**
403
+ * Compute per-pattern version map: `{ patternId: version }`.
404
+ * Used by the cache to determine which patterns have changed since last scan.
405
+ */
406
+ export function getPatternVersions() {
407
+ const versions = {};
408
+ for (const p of PATTERNS) {
409
+ versions[p.id] = p.version;
410
+ }
411
+ return versions;
412
+ }
413
+ /**
414
+ * Check if a cached entry's pattern versions are current for the given language.
415
+ * Returns true if all patterns applicable to `langFamily` have matching versions.
416
+ * Missing entries (new patterns added since cache) return false.
417
+ */
418
+ export function arePatternVersionsCurrent(cachedVersions, langFamily) {
419
+ if (!cachedVersions)
420
+ return false;
421
+ for (const p of PATTERNS) {
422
+ if (!p.langs.includes(langFamily))
423
+ continue;
424
+ if (cachedVersions[p.id] !== p.version)
425
+ return false;
426
+ }
427
+ return true;
428
+ }
168
429
  // ---------------------------------------------------------------------------
169
430
  // Scanner
170
431
  // ---------------------------------------------------------------------------
@@ -172,14 +433,17 @@ export function getPatterns() {
172
433
  * Run matching patterns against an AST root. Filters by lang family,
173
434
  * runs each pattern's scan(), and combines findings. Early-exits if
174
435
  * findings exceed MAX_FINDINGS_PER_FILE.
436
+ *
437
+ * When `symbols` are provided (from the AST cache), patterns can attribute
438
+ * findings to specific functions/classes for more actionable output.
175
439
  */
176
- export function scanPatterns(root, langKey, content, patterns) {
440
+ export function scanPatterns(root, langKey, content, patterns, symbols) {
177
441
  const family = getLangFamily(langKey);
178
442
  const findings = [];
179
443
  for (const pattern of patterns) {
180
444
  if (!pattern.langs.includes(family))
181
445
  continue;
182
- const patternFindings = pattern.scan(root, langKey, content);
446
+ const patternFindings = pattern.scan(root, langKey, content, symbols);
183
447
  findings.push(...patternFindings);
184
448
  if (findings.length >= MAX_FINDINGS_PER_FILE)
185
449
  break;
@@ -1 +1 @@
1
- {"version":3,"file":"ast-patterns.js","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ast-patterns.js","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"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"}
@@ -4,15 +4,48 @@
4
4
  * Cross-module export-import matching to find unused exports and
5
5
  * structural anti-patterns. Pure functions — no I/O.
6
6
  */
7
- import type { ModuleEntry, DeadExportEntry, StructuralIssue, ExportEntry } from './shared.js';
7
+ import type { ModuleEntry, DeadExportEntry, StructuralIssue, ExportEntry, CallEdge, TypeScriptAnalysis } from './shared.js';
8
8
  /**
9
9
  * Detect potentially dead exports by comparing each module's exported names
10
- * against what other modules import. Uses name-based matching (no type
11
- * resolution) — sufficient for high-confidence identification.
10
+ * against what other modules import.
11
+ *
12
+ * When `importedBindings` is provided (from AST cache's importedNames), uses
13
+ * accurate binding name matching. Otherwise falls back to specifier path
14
+ * heuristic (less accurate but works without AST data).
15
+ *
16
+ * `namespaceSpecifiers` contains specifier paths that have `import * as ns`
17
+ * usage — all exports from those modules are considered alive.
12
18
  *
13
19
  * Returns at most `maxResults` entries to keep prompt token count bounded.
14
20
  */
15
- export declare function detectDeadExports(modules: ModuleEntry[], edges: Record<string, string[]>, exportsByModule: Record<string, ExportEntry[]>, importsByModule: Record<string, string[]>, maxResults?: number): DeadExportEntry[];
21
+ export declare function detectDeadExports(modules: ModuleEntry[], edges: Record<string, string[]>, exportsByModule: Record<string, ExportEntry[]>, importsByModule: Record<string, string[]>, maxResults?: number, importedBindings?: Set<string>, namespaceSpecifiers?: Set<string>): DeadExportEntry[];
22
+ /**
23
+ * Detect exported functions that are never called by any other file.
24
+ * Uses call edge data from the AST cache for higher-confidence results
25
+ * than name-based matching alone.
26
+ *
27
+ * Only flags functions — skips classes, types, variables, and constants
28
+ * since those may be used without explicit "call" edges.
29
+ */
30
+ export declare function detectDeadFunctions(exportsByFile: Record<string, ExportEntry[]>, callEdgesByFile: Record<string, CallEdge[]>, maxResults?: number): DeadExportEntry[];
31
+ /**
32
+ * Merge ast-grep per-file call edges with ts-morph global call_graph_edges
33
+ * into a unified set of cross-file callee names.
34
+ *
35
+ * ts-morph edges use format `"path:funcName"` for caller and raw expression
36
+ * text for callee. ast-grep edges have `importSource` for cross-file calls.
37
+ * The fused result is a superset: any function name that appears as a callee
38
+ * in either source is considered "called".
39
+ *
40
+ * Returns a Set of callee names that are called from other files.
41
+ */
42
+ export declare function fuseCallGraphs(callEdgesByFile: Record<string, CallEdge[]>, tsAnalysis?: TypeScriptAnalysis | null): Set<string>;
43
+ /**
44
+ * Enhanced dead function detection using fused call graph data.
45
+ * Combines ast-grep per-file edges with ts-morph global edges to reduce
46
+ * false positives (functions marked dead because ast-grep missed type-resolved calls).
47
+ */
48
+ export declare function detectDeadFunctionsFused(exportsByFile: Record<string, ExportEntry[]>, callEdgesByFile: Record<string, CallEdge[]>, tsAnalysis?: TypeScriptAnalysis | null, maxResults?: number): DeadExportEntry[];
16
49
  /**
17
50
  * Detect structural anti-patterns from dependency graph topology.
18
51
  *
@@ -1 +1 @@
1
- {"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../src/codebase-index/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACZ,MAAM,aAAa,CAAC;AAMrB;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACzC,UAAU,SAAK,GACd,eAAe,EAAE,CA6CnB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACtC,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,WAAW,GAAE,MAAM,EAAO,EAC1B,UAAU,SAAK,GACd,eAAe,EAAE,CAkEnB;AAMD,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACrC,eAAe,CAWjB"}
1
+ {"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../src/codebase-index/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAMrB;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACzC,UAAU,SAAK,EACf,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,eAAe,EAAE,CA8DnB;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,SAAK,GACd,eAAe,EAAE,CA4BnB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACrC,GAAG,CAAC,MAAM,CAAC,CAgCb;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,EACtC,UAAU,SAAK,GACd,eAAe,EAAE,CAkBnB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACtC,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,WAAW,GAAE,MAAM,EAAO,EAC1B,UAAU,SAAK,GACd,eAAe,EAAE,CAkEnB;AAMD,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACrC,eAAe,CAWjB"}