code-auditor-mcp 3.4.17 → 3.5.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 (186) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +94 -0
  3. package/README.md +5 -5
  4. package/dist/analyzers/applicability.d.ts +13 -0
  5. package/dist/analyzers/applicability.d.ts.map +1 -1
  6. package/dist/analyzers/applicability.js +37 -0
  7. package/dist/analyzers/applicability.js.map +1 -1
  8. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  9. package/dist/analyzers/cross-language/APIContractAnalyzer.js +23 -2
  10. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  11. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +52 -9
  12. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  13. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +228 -55
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  15. package/dist/analyzers/cross-language/SchemaValidator.d.ts +19 -12
  16. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  17. package/dist/analyzers/cross-language/SchemaValidator.js +78 -111
  18. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  19. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +0 -6
  20. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  21. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +85 -73
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  23. package/dist/analyzers/documentationAnalyzer.js +5 -5
  24. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  25. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  26. package/dist/analyzers/invariantsAnalyzer.js +1 -0
  27. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  28. package/dist/analyzers/provenance.d.ts +7 -9
  29. package/dist/analyzers/provenance.d.ts.map +1 -1
  30. package/dist/analyzers/provenance.js +88 -124
  31. package/dist/analyzers/provenance.js.map +1 -1
  32. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  33. package/dist/analyzers/reactAnalyzer.js +120 -21
  34. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  35. package/dist/analyzers/ruleRegistry.d.ts +21 -0
  36. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  37. package/dist/analyzers/ruleRegistry.js +61 -12
  38. package/dist/analyzers/ruleRegistry.js.map +1 -1
  39. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  40. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +60 -24
  41. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  42. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  43. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +5 -2
  44. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  45. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  46. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +173 -56
  47. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  48. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -1
  49. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  50. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +23 -12
  51. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  52. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +11 -1
  53. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  54. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +60 -22
  55. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  56. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +2 -3
  57. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  58. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +258 -87
  59. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  60. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  61. package/dist/analyzers/universal/schema/codeAnalysis.js +7 -1
  62. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  63. package/dist/analyzers/universal/schema/jsonSchema.js +7 -11
  64. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  65. package/dist/applyDataDirEnv.js +1 -1
  66. package/dist/applyDataDirEnv.js.map +1 -1
  67. package/dist/auditRouter.d.ts +41 -0
  68. package/dist/auditRouter.d.ts.map +1 -0
  69. package/dist/auditRouter.js +185 -0
  70. package/dist/auditRouter.js.map +1 -0
  71. package/dist/auditRunner.d.ts.map +1 -1
  72. package/dist/auditRunner.js +97 -58
  73. package/dist/auditRunner.js.map +1 -1
  74. package/dist/cli.js +247 -23
  75. package/dist/cli.js.map +1 -1
  76. package/dist/codeIndexDB.d.ts.map +1 -1
  77. package/dist/codeIndexDB.js +36 -2
  78. package/dist/codeIndexDB.js.map +1 -1
  79. package/dist/componentScanner.d.ts.map +1 -1
  80. package/dist/componentScanner.js +7 -2
  81. package/dist/componentScanner.js.map +1 -1
  82. package/dist/config/configLoader.d.ts +9 -0
  83. package/dist/config/configLoader.d.ts.map +1 -1
  84. package/dist/config/configLoader.js +30 -2
  85. package/dist/config/configLoader.js.map +1 -1
  86. package/dist/config/defaults.d.ts.map +1 -1
  87. package/dist/config/defaults.js +10 -3
  88. package/dist/config/defaults.js.map +1 -1
  89. package/dist/dataPaths.d.ts +8 -1
  90. package/dist/dataPaths.d.ts.map +1 -1
  91. package/dist/dataPaths.js +57 -5
  92. package/dist/dataPaths.js.map +1 -1
  93. package/dist/functionScanner.d.ts.map +1 -1
  94. package/dist/functionScanner.js +1 -17
  95. package/dist/functionScanner.js.map +1 -1
  96. package/dist/grammars/tree-sitter-scss.wasm +0 -0
  97. package/dist/invariants/ruleEngine.d.ts +8 -0
  98. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  99. package/dist/invariants/ruleEngine.js +35 -16
  100. package/dist/invariants/ruleEngine.js.map +1 -1
  101. package/dist/languages/LanguageOrchestrator.d.ts +10 -11
  102. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  103. package/dist/languages/LanguageOrchestrator.js +135 -101
  104. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  105. package/dist/languages/RuntimeManager.d.ts +28 -1
  106. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  107. package/dist/languages/RuntimeManager.js +160 -49
  108. package/dist/languages/RuntimeManager.js.map +1 -1
  109. package/dist/languages/go/GoAdapter.d.ts +2 -0
  110. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  111. package/dist/languages/go/GoAdapter.js +15 -22
  112. package/dist/languages/go/GoAdapter.js.map +1 -1
  113. package/dist/languages/go/analyzer +0 -0
  114. package/dist/languages/go/analyzer-src/analyzer.go +510 -0
  115. package/dist/languages/go/analyzer-src/go.mod +3 -0
  116. package/dist/languages/go/analyzer-src/indexer.go +268 -0
  117. package/dist/languages/go/analyzer-src/parser.go +461 -0
  118. package/dist/languages/go/analyzer-src/solid.go +395 -0
  119. package/dist/languages/go/analyzer-src/testconventions.go +25 -0
  120. package/dist/languages/go/analyzer-src/types.go +148 -0
  121. package/dist/languages/go/go.mod +7 -0
  122. package/dist/languages/go/main.go +203 -0
  123. package/dist/languages/testConventions.d.ts +35 -0
  124. package/dist/languages/testConventions.d.ts.map +1 -0
  125. package/dist/languages/testConventions.js +51 -0
  126. package/dist/languages/testConventions.js.map +1 -0
  127. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +3 -0
  128. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  129. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +25 -18
  130. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  131. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  132. package/dist/mcp-tools/workflowGuide.js +3 -3
  133. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  134. package/dist/mcp-tools-shared.d.ts +0 -3
  135. package/dist/mcp-tools-shared.d.ts.map +1 -1
  136. package/dist/mcp-tools-shared.js +24 -128
  137. package/dist/mcp-tools-shared.js.map +1 -1
  138. package/dist/mcp.js +18 -12
  139. package/dist/mcp.js.map +1 -1
  140. package/dist/mcpAuditJobs.d.ts.map +1 -1
  141. package/dist/mcpAuditJobs.js +13 -0
  142. package/dist/mcpAuditJobs.js.map +1 -1
  143. package/dist/mcpAutoIndex.js +1 -1
  144. package/dist/mcpAutoIndex.js.map +1 -1
  145. package/dist/nextFile.d.ts +21 -0
  146. package/dist/nextFile.d.ts.map +1 -0
  147. package/dist/nextFile.js +51 -0
  148. package/dist/nextFile.js.map +1 -0
  149. package/dist/nextFileIncremental.d.ts +141 -0
  150. package/dist/nextFileIncremental.d.ts.map +1 -0
  151. package/dist/nextFileIncremental.js +314 -0
  152. package/dist/nextFileIncremental.js.map +1 -0
  153. package/dist/pipeline.d.ts.map +1 -1
  154. package/dist/pipeline.js +22 -0
  155. package/dist/pipeline.js.map +1 -1
  156. package/dist/pipelineAdapters.d.ts +17 -0
  157. package/dist/pipelineAdapters.d.ts.map +1 -1
  158. package/dist/pipelineAdapters.js +800 -44
  159. package/dist/pipelineAdapters.js.map +1 -1
  160. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  161. package/dist/reporting/jsonReportGenerator.js +11 -30
  162. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  163. package/dist/styles/styleIndexer.d.ts +7 -0
  164. package/dist/styles/styleIndexer.d.ts.map +1 -1
  165. package/dist/styles/styleIndexer.js +44 -61
  166. package/dist/styles/styleIndexer.js.map +1 -1
  167. package/dist/types/crossLanguage.d.ts +1 -0
  168. package/dist/types/crossLanguage.d.ts.map +1 -1
  169. package/dist/types.d.ts +27 -4
  170. package/dist/types.d.ts.map +1 -1
  171. package/dist/types.js.map +1 -1
  172. package/dist/utils/fileDiscovery.d.ts +11 -2
  173. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  174. package/dist/utils/fileDiscovery.js +23 -5
  175. package/dist/utils/fileDiscovery.js.map +1 -1
  176. package/dist/utils/reactDetection.d.ts.map +1 -1
  177. package/dist/utils/reactDetection.js +59 -44
  178. package/dist/utils/reactDetection.js.map +1 -1
  179. package/package.json +31 -27
  180. package/plugin/.claude-plugin/plugin.json +1 -1
  181. package/plugin/README.md +6 -6
  182. package/plugin/hooks/hooks.json +4 -0
  183. package/plugin/scripts/hook-audit.sh +0 -0
  184. package/plugin/scripts/hook-self-audit.sh +107 -0
  185. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +55 -7
  186. package/plugin/skills/code-auditor/SKILL.md +22 -23
@@ -28,29 +28,25 @@ export class SchemaValidator {
28
28
  */
29
29
  async validateSchemas(schemas) {
30
30
  const violations = [];
31
- // Group schemas by name (different language implementations of same schema)
31
+ // Cross-language comparison only. Group schemas by normalized name, then
32
+ // compare one representative per language against the reference language.
33
+ // Same-language duplicates (e.g. two TypeScript interfaces sharing a name
34
+ // in different modules) are not a cross-language contract and are out of
35
+ // scope; per-schema naming/deprecation hygiene is owned by the conventions
36
+ // analyzer, not this validator.
32
37
  const schemaGroups = groupSchemasByName(schemas);
33
- for (const [schemaName, groupSchemas] of schemaGroups) {
34
- if (groupSchemas.length > 1) {
35
- violations.push(...await this.validateSchemaGroup(schemaName, groupSchemas));
38
+ for (const groupSchemas of schemaGroups.values()) {
39
+ const byLanguage = new Map();
40
+ for (const schema of groupSchemas) {
41
+ if (!byLanguage.has(schema.language))
42
+ byLanguage.set(schema.language, schema);
43
+ }
44
+ if (byLanguage.size < 2)
45
+ continue;
46
+ const [reference, ...others] = [...byLanguage.values()];
47
+ for (const current of others) {
48
+ violations.push(...await this.compareSchemas(reference, current));
36
49
  }
37
- }
38
- // Validate individual schema consistency
39
- for (const schema of schemas) {
40
- violations.push(...await this.validateIndividualSchema(schema));
41
- }
42
- return violations;
43
- }
44
- /**
45
- * Validate a group of schemas that should be equivalent
46
- */
47
- async validateSchemaGroup(schemaName, schemas) {
48
- const violations = [];
49
- // Use the first schema as the reference
50
- const reference = schemas[0];
51
- for (let i = 1; i < schemas.length; i++) {
52
- const current = schemas[i];
53
- violations.push(...await this.compareSchemas(reference, current));
54
50
  }
55
51
  return violations;
56
52
  }
@@ -140,34 +136,6 @@ export class SchemaValidator {
140
136
  }
141
137
  return violations;
142
138
  }
143
- /**
144
- * Validate individual schema for internal consistency
145
- */
146
- async validateIndividualSchema(schema) {
147
- const violations = [];
148
- // Check for deprecated field usage
149
- if (this.options.checkDeprecated) {
150
- const deprecatedFields = schema.fields.filter(f => f.deprecated);
151
- if (deprecatedFields.length > 0) {
152
- violations.push({
153
- file: schema.file,
154
- line: schema.line,
155
- severity: 'warning',
156
- message: `Schema ${schema.name} contains ${deprecatedFields.length} deprecated fields`,
157
- rule: "field-mismatch",
158
- violationType: 'field-mismatch',
159
- schemas: [schema],
160
- suggestion: 'Review and migrate away from deprecated fields',
161
- analyzer: 'schema-validator',
162
- category: 'cross-language-schema'
163
- });
164
- }
165
- }
166
- // Check for naming consistency
167
- const namingViolations = this.checkFieldNaming(schema);
168
- violations.push(...namingViolations);
169
- return violations;
170
- }
171
139
  /**
172
140
  * Check version compatibility between schemas
173
141
  */
@@ -206,7 +174,7 @@ export class SchemaValidator {
206
174
  file: curSchema.file,
207
175
  line: curSchema.line,
208
176
  severity: 'warning',
209
- message: `Type mismatch for field '${fieldName}': expected ${normalizedRefType}, got ${normalizedCurType}`,
177
+ message: `Type-name strings differ for field '${fieldName}': expected ${normalizedRefType}, got ${normalizedCurType}`,
210
178
  rule: "schema-field-mismatch",
211
179
  violationType: 'schema-field-mismatch',
212
180
  schemas: [refSchema, curSchema],
@@ -287,31 +255,6 @@ export class SchemaValidator {
287
255
  }
288
256
  return violations;
289
257
  }
290
- /**
291
- * Check field naming consistency
292
- */
293
- checkFieldNaming(schema) {
294
- const violations = [];
295
- for (const field of schema.fields) {
296
- // Check for consistent naming convention
297
- if (!isConsistentNaming(field.name, schema.language)) {
298
- violations.push({
299
- file: schema.file,
300
- line: schema.line,
301
- severity: 'suggestion',
302
- message: `Field '${field.name}' doesn't follow ${schema.language} naming conventions`,
303
- rule: "field-mismatch",
304
- violationType: 'field-mismatch',
305
- schemas: [schema],
306
- fieldName: field.name,
307
- suggestion: `Use ${getRecommendedNaming(field.name, schema.language)} naming convention`,
308
- analyzer: 'schema-validator',
309
- category: 'cross-language-schema'
310
- });
311
- }
312
- }
313
- return violations;
314
- }
315
258
  /**
316
259
  * Check if versions are compatible
317
260
  */
@@ -349,9 +292,31 @@ function groupSchemasByName(schemas) {
349
292
  * Normalize schema name for comparison
350
293
  */
351
294
  function normalizeSchemaName(name) {
352
- return name.toLowerCase()
353
- .replace(/[-_]/g, '')
354
- .replace(/request|response|dto|model/g, '');
295
+ // Lowercase and strip separators only, so snake_case (TS) and PascalCase (Go)
296
+ // spellings of the same logical schema group together. Do NOT strip
297
+ // request/response/dto/model suffixes — those are distinct schemas, and
298
+ // stripping them collapsed e.g. User, UserDto, and UserRequest into one
299
+ // group, producing false missing/extra-field pairs.
300
+ return name.toLowerCase().replace(/[-_]/g, '');
301
+ }
302
+ /**
303
+ * Count cross-language schema pairs — groups of the same logical schema name
304
+ * implemented in ≥2 languages. Returns the number of comparisons
305
+ * {@link SchemaValidator.validateSchemas} would perform (one reference plus
306
+ * every additional language per group). A single-language corpus (or one with
307
+ * no schemas at all) yields zero, which the caller uses to report "no
308
+ * cross-language pairs found" instead of a misleadingly clean zero.
309
+ * @param schemas
310
+ * @returns
311
+ */
312
+ export function countCrossLanguagePairs(schemas) {
313
+ let pairs = 0;
314
+ for (const groupSchemas of groupSchemasByName(schemas).values()) {
315
+ const languages = new Set(groupSchemas.map(s => s.language));
316
+ if (languages.size >= 2)
317
+ pairs += languages.size - 1;
318
+ }
319
+ return pairs;
355
320
  }
356
321
  /**
357
322
  * Normalize type names across languages
@@ -415,38 +380,6 @@ function parseVersion(version) {
415
380
  patch: parts[2] || 0
416
381
  };
417
382
  }
418
- /**
419
- * Check if field name follows language conventions
420
- */
421
- function isConsistentNaming(fieldName, language) {
422
- switch (language) {
423
- case 'typescript':
424
- case 'javascript':
425
- return /^[a-z][a-zA-Z0-9]*$/.test(fieldName); // camelCase
426
- case 'go':
427
- return /^[A-Z][a-zA-Z0-9]*$/.test(fieldName); // PascalCase for exported
428
- case 'python':
429
- return /^[a-z][a-z0-9_]*$/.test(fieldName); // snake_case
430
- default:
431
- return true;
432
- }
433
- }
434
- /**
435
- * Get recommended naming convention
436
- */
437
- function getRecommendedNaming(fieldName, language) {
438
- switch (language) {
439
- case 'typescript':
440
- case 'javascript':
441
- return 'camelCase';
442
- case 'go':
443
- return 'PascalCase';
444
- case 'python':
445
- return 'snake_case';
446
- default:
447
- return 'consistent';
448
- }
449
- }
450
383
  // ---------------------------------------------------------------------------
451
384
  // Schema extraction (pure functions — no validator state)
452
385
  // ---------------------------------------------------------------------------
@@ -509,13 +442,47 @@ function extractTypeScriptInterface(entity) {
509
442
  })) || []
510
443
  };
511
444
  }
445
+ /**
446
+ * True when a Go field type is a non-nilable value type (hence always present),
447
+ * i.e. "required". Nilable reference types — pointers, slices, maps, channels,
448
+ * functions, and the built-in interface types — are optional.
449
+ * @param type
450
+ * @returns
451
+ */
452
+ export function isGoValueType(type) {
453
+ if (!type)
454
+ return false;
455
+ const t = type.trim();
456
+ if (t === 'interface' || t === 'interface{}' || t === 'any' || t === 'error') {
457
+ return false;
458
+ }
459
+ // Nilable reference types. `[]` is a slice (nilable); `[N]` is a fixed-size
460
+ // array (value type), so only the empty-bracket form is nilable.
461
+ if (t.startsWith('*'))
462
+ return false; // pointer
463
+ if (t.startsWith('[]'))
464
+ return false; // slice
465
+ if (t.startsWith('map['))
466
+ return false; // map
467
+ if (t.startsWith('chan') || t.startsWith('<-chan'))
468
+ return false; // channel
469
+ if (t.startsWith('func'))
470
+ return false; // function
471
+ return true;
472
+ }
512
473
  function extractGoStruct(entity) {
513
474
  if (entity.type !== 'struct')
514
475
  return null;
515
476
  const fields = entity.metadata?.fields?.map((field) => ({
516
477
  name: field.name,
517
478
  type: field.type,
518
- required: field.isExported, // Simplified assumption
479
+ // A Go field is required iff it is a non-nilable value type. Pointers
480
+ // (`*T`), slices, maps, channels, functions, and interfaces are nilable and
481
+ // therefore optional. The old `isExported` proxy was inverted: an exported
482
+ // pointer (`Email *string`) is optional, and an unexported value (`id int`)
483
+ // is always present — exportedness is a visibility signal, not a
484
+ // requiredness one.
485
+ required: isGoValueType(field.type),
519
486
  description: field.tag
520
487
  })) || [];
521
488
  return {
@@ -1 +1 @@
1
- {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/SchemaValidator.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"SchemaValidator.js","sourceRoot":"","sources":["../../../src/analyzers/cross-language/SchemaValidator.ts"],"names":[],"mappings":"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"}
@@ -38,12 +38,6 @@ export declare class CrossDomainAnalyzer extends UniversalAnalyzer {
38
38
  * @returns
39
39
  */
40
40
  analyze(files: string[], config?: any, options?: any): Promise<AnalyzerResult>;
41
- /**
42
- * Project root scoping: in test environments the in-memory DB singleton is
43
- * shared across tests, so schema_usage entries from previous test cases leak
44
- * into subsequent queries. Build a file-path LIKE clause scoped to root.
45
- */
46
- private resolveFilePathClause;
47
41
  /** Run the R1/R3/R4 detectors and collect their violations. */
48
42
  private runDetectors;
49
43
  /** Count distinct files with schema_usage entries. */
@@ -1 +1 @@
1
- {"version":3,"file":"CrossDomainAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/crossDomain/CrossDomainAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAoD,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAwNzE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,WAAW,sFACiE;IACrF,QAAQ,CAAC,QAAQ,kBAAkB;IAEnC;;;;;;;;OAQG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,GAAQ,EAChB,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,cAAc,CAAC,CA8BzB;IAED;;;;OAIG;IACH,OAAO,CAAC,qBAAqB;IAQ7B,+DAA+D;IAC/D,OAAO,CAAC,YAAY;IA+BpB,sDAAsD;IACtD,OAAO,CAAC,kBAAkB;IAQ1B,yCAAyC;IACnC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAEjC;CACF"}
1
+ {"version":3,"file":"CrossDomainAnalyzer.d.ts","sourceRoot":"","sources":["../../../src/analyzers/crossDomain/CrossDomainAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAoD,MAAM,gBAAgB,CAAC;AACvG,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAiQzE;;GAEG;AACH,qBAAa,mBAAoB,SAAQ,iBAAiB;IACxD,QAAQ,CAAC,IAAI,kBAAiB;IAC9B,QAAQ,CAAC,WAAW,sFACiE;IACrF,QAAQ,CAAC,QAAQ,kBAAkB;IAEnC;;;;;;;;OAQG;IACG,OAAO,CACX,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,GAAQ,EAChB,OAAO,GAAE,GAAQ,GAChB,OAAO,CAAC,cAAc,CAAC,CA8BzB;IAED,+DAA+D;IAC/D,OAAO,CAAC,YAAY;IA+BpB,sDAAsD;IACtD,OAAO,CAAC,kBAAkB;IAU1B,yCAAyC;IACnC,UAAU,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC,CAEjC;CACF"}
@@ -23,10 +23,53 @@ import * as path from 'node:path';
23
23
  import { UniversalAnalyzer } from '../../languages/UniversalAnalyzer.js';
24
24
  import { VALIDATOR_PACKAGES } from '../provenance.js';
25
25
  import { makeVisitorStatus } from '../../pipeline.js';
26
+ /** Chunked IN-clause bound (SQLite max host params, conservative). */
27
+ const SQLITE_MAX_VARIABLES = 900;
28
+ function resolveFileScope(config) {
29
+ const scopedFiles = config.isScoped ? (config.scopedFiles ?? []) : [];
30
+ if (scopedFiles.length > 0) {
31
+ const chunks = [];
32
+ for (let i = 0; i < scopedFiles.length; i += SQLITE_MAX_VARIABLES) {
33
+ chunks.push(scopedFiles.slice(i, i + SQLITE_MAX_VARIABLES));
34
+ }
35
+ return {
36
+ apply: (column) => ({
37
+ clause: `AND (${chunks.map((c) => `${column} IN (${c.map(() => '?').join(', ')})`).join(' OR ')})`,
38
+ params: scopedFiles,
39
+ }),
40
+ };
41
+ }
42
+ const projectRoot = config.projectRoot;
43
+ const resolvedRoot = projectRoot ? path.resolve(projectRoot) : undefined;
44
+ if (!resolvedRoot) {
45
+ return { apply: () => ({ clause: '', params: [] }) };
46
+ }
47
+ return {
48
+ apply: (column) => ({
49
+ clause: `AND ${column} LIKE ?`,
50
+ params: [`${resolvedRoot}%`],
51
+ }),
52
+ };
53
+ }
26
54
  // ---------------------------------------------------------------------------
27
55
  // Call-graph helpers — pure functions with no `this` state, kept off the
28
56
  // analyzer class to bound its aggregate cyclomatic complexity.
29
57
  // ---------------------------------------------------------------------------
58
+ /**
59
+ * Advance a call-graph BFS frontier by one node: query `funcId`'s call
60
+ * neighbors and enqueue any not yet visited. Shared by the two BFS walks.
61
+ */
62
+ function enqueueCallNeighbors(indexHandle, nextLevel, funcId, visited) {
63
+ const callees = indexHandle
64
+ .query(`SELECT neighbor_key FROM graph_cache
65
+ WHERE graph_type = 'call' AND node_key = ?`, [String(funcId)]);
66
+ for (const callee of callees) {
67
+ const calleeId = parseInt(callee.neighbor_key, 10);
68
+ if (!isNaN(calleeId) && !visited.has(calleeId)) {
69
+ nextLevel.push(calleeId);
70
+ }
71
+ }
72
+ }
30
73
  /**
31
74
  * BFS through the call graph (graph_cache) up to maxDepth to check if
32
75
  * any path from startFuncId reaches a validator function ID.
@@ -43,15 +86,7 @@ function bfsReachesValidator(indexHandle, startFuncId, validatorIds, maxDepth) {
43
86
  continue;
44
87
  visited.add(funcId);
45
88
  // Get callees from graph_cache call edges
46
- const callees = indexHandle
47
- .query(`SELECT neighbor_key FROM graph_cache
48
- WHERE graph_type = 'call' AND node_key = ?`, [String(funcId)]);
49
- for (const callee of callees) {
50
- const calleeId = parseInt(callee.neighbor_key, 10);
51
- if (!isNaN(calleeId) && !visited.has(calleeId)) {
52
- nextLevel.push(calleeId);
53
- }
54
- }
89
+ enqueueCallNeighbors(indexHandle, nextLevel, funcId, visited);
55
90
  }
56
91
  currentLevel = nextLevel;
57
92
  }
@@ -111,15 +146,7 @@ function collectReachableIds(indexHandle, startIds, maxDepth) {
111
146
  continue;
112
147
  visited.add(funcId);
113
148
  reachableIds.add(funcId);
114
- const callees = indexHandle
115
- .query(`SELECT neighbor_key FROM graph_cache
116
- WHERE graph_type = 'call' AND node_key = ?`, [String(funcId)]);
117
- for (const callee of callees) {
118
- const calleeId = parseInt(callee.neighbor_key, 10);
119
- if (!isNaN(calleeId) && !visited.has(calleeId)) {
120
- nextLevel.push(calleeId);
121
- }
122
- }
149
+ enqueueCallNeighbors(indexHandle, nextLevel, funcId, visited);
123
150
  }
124
151
  currentLevel = nextLevel;
125
152
  }
@@ -164,9 +191,9 @@ export class CrossDomainAnalyzer extends UniversalAnalyzer {
164
191
  metrics: { filesAnalyzed: 0, totalViolations: 0, executionTime: Date.now() - startTime },
165
192
  };
166
193
  }
167
- const filePathClause = this.resolveFilePathClause(config);
168
- const violations = this.runDetectors(indexHandle, config, filePathClause);
169
- const uniqueFiles = this.countDistinctFiles(indexHandle, filePathClause);
194
+ const scope = resolveFileScope(config);
195
+ const violations = this.runDetectors(indexHandle, config, scope);
196
+ const uniqueFiles = this.countDistinctFiles(indexHandle, scope);
170
197
  return {
171
198
  violations,
172
199
  errors: [],
@@ -180,51 +207,38 @@ export class CrossDomainAnalyzer extends UniversalAnalyzer {
180
207
  },
181
208
  };
182
209
  }
183
- /**
184
- * Project root scoping: in test environments the in-memory DB singleton is
185
- * shared across tests, so schema_usage entries from previous test cases leak
186
- * into subsequent queries. Build a file-path LIKE clause scoped to root.
187
- */
188
- resolveFilePathClause(config) {
189
- const projectRoot = config.projectRoot;
190
- const resolvedRoot = projectRoot ? path.resolve(projectRoot) : undefined;
191
- return resolvedRoot
192
- ? { clause: 'AND file_path LIKE ?', param: `${resolvedRoot}%` }
193
- : undefined;
194
- }
195
210
  /** Run the R1/R3/R4 detectors and collect their violations. */
196
- runDetectors(indexHandle, config, filePathClause) {
211
+ runDetectors(indexHandle, config, scope) {
197
212
  const violations = [];
198
213
  // R1 — Schema lifecycle detectors
199
214
  const lifecycle = config.schemaLifecycle ?? {};
200
215
  if (lifecycle.enableWrittenNeverRead !== false) {
201
- violations.push(...detectWrittenNeverRead(indexHandle, filePathClause));
216
+ violations.push(...detectWrittenNeverRead(indexHandle, scope));
202
217
  }
203
218
  if (lifecycle.enableReadNeverWritten !== false) {
204
- violations.push(...detectReadNeverWritten(indexHandle, filePathClause));
219
+ violations.push(...detectReadNeverWritten(indexHandle, scope));
205
220
  }
206
221
  if (lifecycle.enableTransactionBoundaryRisk !== false) {
207
222
  const txnTableMax = lifecycle.txnTableMax ?? 4;
208
- violations.push(...detectTransactionBoundaryRisk(indexHandle, txnTableMax, filePathClause));
223
+ violations.push(...detectTransactionBoundaryRisk(indexHandle, txnTableMax, scope));
209
224
  }
210
225
  // R3 — Validation-bypass detection
211
226
  const bypass = config.validatorBypass;
212
227
  if (bypass) {
213
- violations.push(...detectValidationBypass(indexHandle, bypass, filePathClause));
228
+ violations.push(...detectValidationBypass(indexHandle, bypass, scope));
214
229
  }
215
230
  // R4 — Coverage by importance
216
231
  const coverage = config.coverage;
217
232
  if (coverage) {
218
- violations.push(...detectUncoveredRisk(indexHandle, coverage, filePathClause));
233
+ violations.push(...detectUncoveredRisk(indexHandle, coverage, scope));
219
234
  }
220
235
  return violations;
221
236
  }
222
237
  /** Count distinct files with schema_usage entries. */
223
- countDistinctFiles(indexHandle, filePathClause) {
238
+ countDistinctFiles(indexHandle, scope) {
239
+ const fp = scope.apply('file_path');
224
240
  const rows = indexHandle
225
- .query(filePathClause
226
- ? `SELECT COUNT(DISTINCT file_path) as cnt FROM schema_usage WHERE 1=1 ${filePathClause.clause}`
227
- : 'SELECT COUNT(DISTINCT file_path) as cnt FROM schema_usage', (filePathClause ? [filePathClause.param] : []));
241
+ .query(`SELECT COUNT(DISTINCT file_path) as cnt FROM schema_usage WHERE 1=1 ${fp.clause}`, fp.params);
228
242
  return rows[0]?.cnt ?? 0;
229
243
  }
230
244
  /** No-op — all detection is DB-based. */
@@ -237,18 +251,18 @@ export class CrossDomainAnalyzer extends UniversalAnalyzer {
237
251
  * Detect tables that are written to (INSERT/UPDATE/DELETE/CREATE) but
238
252
  * never read from (SELECT). These might be dead writes or missed read paths.
239
253
  */
240
- function detectWrittenNeverRead(indexHandle, filePath) {
254
+ function detectWrittenNeverRead(indexHandle, scope) {
241
255
  const violations = [];
242
- const fpWhere = filePath ? filePath.clause : '';
256
+ const fp = scope.apply('file_path');
243
257
  const rows = indexHandle
244
258
  .query(`SELECT DISTINCT table_name, file_path, function_name, line, usage_type
245
259
  FROM schema_usage
246
260
  WHERE usage_type IN ('insert', 'update', 'delete', 'create')
247
- ${fpWhere}
261
+ ${fp.clause}
248
262
  AND table_name NOT IN (
249
- SELECT DISTINCT table_name FROM schema_usage WHERE usage_type = 'select' ${fpWhere}
263
+ SELECT DISTINCT table_name FROM schema_usage WHERE usage_type = 'select' ${fp.clause}
250
264
  )
251
- ORDER BY table_name, file_path`, (filePath ? [filePath.param, filePath.param] : []));
265
+ ORDER BY table_name, file_path`, [...fp.params, ...fp.params]);
252
266
  // Deduplicate by table_name — one violation per table, anchored to
253
267
  // the first writing file encountered.
254
268
  const seen = new Set();
@@ -275,19 +289,19 @@ function detectWrittenNeverRead(indexHandle, filePath) {
275
289
  * (INSERT/UPDATE/DELETE/CREATE). These may be external/managed tables
276
290
  * or indicate missing write coverage.
277
291
  */
278
- function detectReadNeverWritten(indexHandle, filePath) {
292
+ function detectReadNeverWritten(indexHandle, scope) {
279
293
  const violations = [];
280
- const fpWhere = filePath ? filePath.clause : '';
294
+ const fp = scope.apply('file_path');
281
295
  const rows = indexHandle
282
296
  .query(`SELECT DISTINCT table_name, file_path, function_name, line, usage_type
283
297
  FROM schema_usage
284
298
  WHERE usage_type = 'select'
285
- ${fpWhere}
299
+ ${fp.clause}
286
300
  AND table_name NOT IN (
287
301
  SELECT DISTINCT table_name FROM schema_usage
288
- WHERE usage_type IN ('insert', 'update', 'delete', 'create') ${fpWhere}
302
+ WHERE usage_type IN ('insert', 'update', 'delete', 'create') ${fp.clause}
289
303
  )
290
- ORDER BY table_name, file_path`, (filePath ? [filePath.param, filePath.param] : []));
304
+ ORDER BY table_name, file_path`, [...fp.params, ...fp.params]);
291
305
  const seen = new Set();
292
306
  for (const row of rows) {
293
307
  if (seen.has(row.table_name))
@@ -315,18 +329,17 @@ function detectReadNeverWritten(indexHandle, filePath) {
315
329
  * writing to too many tables in a single logical operation can lead to
316
330
  * long-running transactions, lock contention, and partial-failure complexity.
317
331
  */
318
- function detectTransactionBoundaryRisk(indexHandle, txnTableMax, filePath) {
319
- const fpWhere = filePath ? filePath.clause : '';
320
- const fpParams = filePath ? [filePath.param] : [];
332
+ function detectTransactionBoundaryRisk(indexHandle, txnTableMax, scope) {
333
+ const fp = scope.apply('su.file_path');
321
334
  // Query schema_usage directly (no JOIN on functions) so this detector
322
335
  // works whether or not deepSync has populated the functions table.
323
336
  const writerRows = indexHandle
324
337
  .query(`SELECT su.function_name, su.file_path, su.table_name, MIN(su.line) as line
325
338
  FROM schema_usage su
326
339
  WHERE su.usage_type IN ('insert', 'update', 'delete', 'create')
327
- ${fpWhere}
340
+ ${fp.clause}
328
341
  GROUP BY su.function_name, su.file_path, su.table_name
329
- ORDER BY su.function_name, su.file_path`, fpParams);
342
+ ORDER BY su.function_name, su.file_path`, fp.params);
330
343
  if (writerRows.length === 0)
331
344
  return [];
332
345
  const funcWrites = groupWriterTables(writerRows);
@@ -421,21 +434,21 @@ function resolveCallGraphContext(indexHandle) {
421
434
  * 3. Heuristic fallback: name GLOB 'validate*' OR 'assert*' (when both
422
435
  * above are silent)
423
436
  */
424
- function detectValidationBypass(indexHandle, config, filePath) {
437
+ function detectValidationBypass(indexHandle, config, scope) {
425
438
  const violations = [];
426
439
  const { validators: userValidators = [], modeShare = 0.8, minCorpus = 20, depth = 3, } = config;
427
440
  const validatorIds = buildValidatorIds(indexHandle, userValidators);
428
441
  if (validatorIds.size === 0)
429
442
  return violations;
430
- const fpAliasWhere = filePath ? `AND su.${filePath.clause.slice(4)}` : '';
443
+ const fp = scope.apply('su.file_path');
431
444
  const writers = indexHandle
432
445
  .query(`SELECT DISTINCT su.function_name, su.file_path, su.line, f.id as function_id
433
446
  FROM schema_usage su
434
447
  JOIN functions f ON f.name = su.function_name
435
448
  AND f.file_path = su.file_path
436
449
  WHERE su.usage_type IN ('insert', 'update', 'delete', 'create')
437
- ${fpAliasWhere}
438
- ORDER BY su.file_path, su.function_name`, (filePath ? [filePath.param] : []));
450
+ ${fp.clause}
451
+ ORDER BY su.file_path, su.function_name`, fp.params);
439
452
  if (writers.length === 0)
440
453
  return violations;
441
454
  const writerCoverage = computeWriterCoverage(writers, validatorIds, indexHandle, depth);
@@ -586,7 +599,7 @@ function flagUnvalidatedWriters(dirWriters, minCorpus, modeShare, depth) {
586
599
  * to static reach analysis from test files (BFS from test-file functions
587
600
  * into the call graph).
588
601
  */
589
- function detectUncoveredRisk(indexHandle, coverage, filePath) {
602
+ function detectUncoveredRisk(indexHandle, coverage, scope) {
590
603
  const topRiskDecile = coverage.topRiskDecile ?? 0.1;
591
604
  // Check if any measured coverage exists
592
605
  const measuredCount = indexHandle
@@ -594,7 +607,7 @@ function detectUncoveredRisk(indexHandle, coverage, filePath) {
594
607
  if (measuredCount > 0) {
595
608
  return detectMeasuredUncovered(indexHandle, topRiskDecile);
596
609
  }
597
- return detectStaticReachUncovered(indexHandle, coverage, filePath);
610
+ return detectStaticReachUncovered(indexHandle, coverage, scope);
598
611
  }
599
612
  /**
600
613
  * Flag exported high-risk functions with no measured test coverage, using
@@ -642,20 +655,19 @@ function detectMeasuredUncovered(indexHandle, topRiskDecile) {
642
655
  * Static-reach fallback: flag exported high-risk functions that are not
643
656
  * reachable from known test files via BFS through the call graph.
644
657
  */
645
- function detectStaticReachUncovered(indexHandle, coverage, filePath) {
658
+ function detectStaticReachUncovered(indexHandle, coverage, scope) {
646
659
  const topRiskDecile = coverage.topRiskDecile ?? 0.1;
647
- const highRiskFns = queryHighRiskFunctions(indexHandle, topRiskDecile, filePath);
660
+ const highRiskFns = queryHighRiskFunctions(indexHandle, topRiskDecile, scope);
648
661
  if (highRiskFns.length === 0)
649
662
  return [];
650
663
  const reachableIds = computeTestReachableIds(indexHandle, coverage);
651
664
  return flagUnreachedHighRisk(highRiskFns, reachableIds);
652
665
  }
653
666
  /** Rank exported functions by hotspot score and take the top decile. */
654
- function queryHighRiskFunctions(indexHandle, topRiskDecile, filePath) {
655
- const fpWhere = filePath ? 'AND f.file_path LIKE ?' : '';
656
- const params = [topRiskDecile];
657
- if (filePath)
658
- params.push(filePath.param);
667
+ function queryHighRiskFunctions(indexHandle, topRiskDecile, scope) {
668
+ const fp = scope.apply('f.file_path');
669
+ // Param order matters: the CTE's `f.file_path` scope binds first (it appears
670
+ // first in the SQL text), then the outer `pct <= ?` binds topRiskDecile.
659
671
  return indexHandle.query(`WITH ranked AS (
660
672
  SELECT
661
673
  f.name,
@@ -668,12 +680,12 @@ function queryHighRiskFunctions(indexHandle, topRiskDecile, filePath) {
668
680
  LEFT JOIN hotspot_scores hs ON hs.target = (f.file_path || ':' || f.name)
669
681
  AND hs.type = 'function'
670
682
  WHERE f.is_exported = 1
671
- ${fpWhere}
683
+ ${fp.clause}
672
684
  )
673
685
  SELECT id, name, file_path, line_number, risk_score
674
686
  FROM ranked
675
687
  WHERE pct <= ?
676
- ORDER BY risk_score DESC`, params);
688
+ ORDER BY risk_score DESC`, [...fp.params, topRiskDecile]);
677
689
  }
678
690
  /** Flag high-risk functions not in the reachable set. */
679
691
  function flagUnreachedHighRisk(highRiskFns, reachableIds) {