code-auditor-mcp 3.4.10 → 3.4.12

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 (86) hide show
  1. package/.claude-plugin/marketplace.json +10 -3
  2. package/CHANGELOG.md +141 -1
  3. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  4. package/dist/analyzers/documentationAnalyzer.js +11 -59
  5. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  6. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  7. package/dist/analyzers/invariantsAnalyzer.js +10 -3
  8. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  9. package/dist/analyzers/provenance.d.ts +10 -0
  10. package/dist/analyzers/provenance.d.ts.map +1 -1
  11. package/dist/analyzers/provenance.js +41 -11
  12. package/dist/analyzers/provenance.js.map +1 -1
  13. package/dist/analyzers/ruleRegistry.d.ts +8 -0
  14. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  15. package/dist/analyzers/ruleRegistry.js +28 -5
  16. package/dist/analyzers/ruleRegistry.js.map +1 -1
  17. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  18. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +9 -7
  19. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  20. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +85 -0
  21. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  22. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +422 -2
  23. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  24. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +2 -0
  25. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  26. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +3 -0
  27. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  28. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  29. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +9 -1
  30. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  31. package/dist/auditRunner.d.ts.map +1 -1
  32. package/dist/auditRunner.js +30 -30
  33. package/dist/auditRunner.js.map +1 -1
  34. package/dist/cli.js +33 -0
  35. package/dist/cli.js.map +1 -1
  36. package/dist/conventions/conventionMiner.d.ts +5 -4
  37. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  38. package/dist/conventions/conventionMiner.js +37 -17
  39. package/dist/conventions/conventionMiner.js.map +1 -1
  40. package/dist/grammars/tree-sitter-scss.wasm +0 -0
  41. package/dist/invariants/ruleEngine.d.ts +23 -0
  42. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  43. package/dist/invariants/ruleEngine.js +11 -115
  44. package/dist/invariants/ruleEngine.js.map +1 -1
  45. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +5 -5
  46. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  47. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +11 -9
  48. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  49. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  50. package/dist/languages/tree-sitter/parser.js +2 -0
  51. package/dist/languages/tree-sitter/parser.js.map +1 -1
  52. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +13 -0
  53. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  54. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +242 -24
  55. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  56. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  57. package/dist/mcp-tools-shared.d.ts.map +1 -1
  58. package/dist/mcp-tools-shared.js +1 -0
  59. package/dist/mcp-tools-shared.js.map +1 -1
  60. package/dist/mcpAuditJobs.d.ts.map +1 -1
  61. package/dist/mcpAuditJobs.js +1 -0
  62. package/dist/mcpAuditJobs.js.map +1 -1
  63. package/dist/pipeline.d.ts +22 -1
  64. package/dist/pipeline.d.ts.map +1 -1
  65. package/dist/pipeline.js +157 -14
  66. package/dist/pipeline.js.map +1 -1
  67. package/dist/pipelineAdapters.d.ts +10 -0
  68. package/dist/pipelineAdapters.d.ts.map +1 -1
  69. package/dist/pipelineAdapters.js +277 -48
  70. package/dist/pipelineAdapters.js.map +1 -1
  71. package/dist/styles/cssAstExtractor.d.ts +61 -0
  72. package/dist/styles/cssAstExtractor.d.ts.map +1 -0
  73. package/dist/styles/cssAstExtractor.js +617 -0
  74. package/dist/styles/cssAstExtractor.js.map +1 -0
  75. package/dist/styles/styleExtractor.d.ts +2 -2
  76. package/dist/styles/styleExtractor.d.ts.map +1 -1
  77. package/dist/styles/styleExtractor.js +69 -16
  78. package/dist/styles/styleExtractor.js.map +1 -1
  79. package/dist/styles/styleIndexer.d.ts.map +1 -1
  80. package/dist/styles/styleIndexer.js +4 -0
  81. package/dist/styles/styleIndexer.js.map +1 -1
  82. package/dist/types.d.ts +20 -0
  83. package/dist/types.d.ts.map +1 -1
  84. package/dist/types.js.map +1 -1
  85. package/package.json +3 -2
  86. package/plugin/.claude-plugin/plugin.json +1 -1
@@ -10,11 +10,18 @@
10
10
  "name": "code-auditor",
11
11
  "source": "./plugin",
12
12
  "description": "Diff-scoped code quality auditing on every edit. Indexes your codebase, enforces invariants, and feeds violations back to the agent so fixes happen inline.",
13
- "version": "3.4.9",
13
+ "version": "3.4.13",
14
14
  "author": {
15
15
  "name": "Ben Hammond"
16
16
  },
17
- "keywords": ["code-quality", "audit", "solid", "linting", "invariants"]
17
+ "keywords": [
18
+ "code-quality",
19
+ "audit",
20
+ "solid",
21
+ "linting",
22
+ "invariants"
23
+ ]
18
24
  }
19
- ]
25
+ ],
26
+ "version": "3.4.12"
20
27
  }
package/CHANGELOG.md CHANGED
@@ -2,7 +2,147 @@
2
2
 
3
3
  All notable changes to the Code Auditor MCP project.
4
4
 
5
- ## [3.4.9] — unreleased
5
+ ## [3.4.13] — 2026-08-09
6
+
7
+ ### Accuracy fix — `unknown-table` silently off when configuring `schemas`
8
+
9
+ The pipeline schema reducer (`createSchemaReducer`) built its known-tables catalog
10
+ from `schemaConfig.knownTables` (a flat `string[]`) only. It did not read
11
+ `schemaConfig.schemas` — the documented, structured `{name, tables}` shape that
12
+ the standalone `UniversalSchemaAnalyzer.analyze()` path uses. A user who configured
13
+ only `schemas` in `.codeauditor.json` got `knownTables.size === 0`, triggering the
14
+ fail-open gate, and `unknown-table` violations silently never fired.
15
+
16
+ **Fix**: `createSchemaReducer` now flattens `schemaConfig.schemas` into the catalog
17
+ the same way the standalone analyzer does, so both config shapes work in both code
18
+ paths.
19
+
20
+ ### Fixture corpus — 7 known-answer regression guard suites
21
+
22
+ Systematic fixture corpus: small projects with known-answer inputs and exact
23
+ violation-count assertions. Each suite copies to a temp dir and runs cold
24
+ through the real CLI — no mocks between config and report.
25
+
26
+ | Suite | Directory | What it guards |
27
+ |-------|-----------|---------------|
28
+ | Invariant rules | `tests/fixtures/invariant-rules/` | All 5 rule kinds: import-ban, naming, call-constraint, module-boundary, ast-pattern |
29
+ | Data-access rules | `tests/fixtures/data-access-rules/` | unfiltered-query, loop-query, missing-org-filter, complex-query; pool.length non-DB receiver guard |
30
+ | SQL FP guards | `tests/fixtures/sql-fp-guards/` | 10 safe-pattern files (prepare-bind, escapeSql, wrapper-bind, etc.) + 1 true positive; 15 documented acknowledged FPs |
31
+ | Conventions | `tests/fixtures/conventions/` | export-shape majority-rule detection (named-majority vs all-named) |
32
+ | Cross-domain | `tests/fixtures/cross-domain/` | written-never-read on INSERT-only table, transaction-boundary on multi-table write |
33
+ | SQL CTE | `tests/fixtures/sql-cte/` | CTE names excluded from table references; inner tables extracted |
34
+ | SQL subquery | `tests/fixtures/sql-subquery-alias/` | Subquery aliases excluded; column alias near-miss guard |
35
+
36
+ ### Other fixes
37
+ - **`dbWrapperNames` passthrough**: schema-code visitor config wasn't forwarding
38
+ `dbWrapperNames`, so locally-defined wrapper functions weren't recognized in
39
+ the pipeline path (only the standalone analyzer saw them).
40
+ - **Non-DB `pool` receiver guard**: `pool.length` on array variables is no longer
41
+ mistaken for a database pool operation.
42
+ - **SQL CTE / subquery-alias parser regression guards** (v3.4.8 regression): CTE
43
+ names and subquery aliases correctly excluded from table reference extraction.
44
+ Confirmed via integration tests.
45
+
46
+ ### Open
47
+ - **15 documented `sql-injection-risk` false positives**: each mechanism named
48
+ in `docs/sql-injection-fp-defect.md`. The FP-guard fixture tests use
49
+ `toBeLessThanOrEqual(currentCount)` assertions — improvements drop the count
50
+ without breaking; regressions that spike it are caught.
51
+
52
+ ### Adjudication release — Spec 26 findings confirmed
53
+
54
+ All Spec 26 findings adjudicated against recall-protocol cold run (119 styles,
55
+ 116 conventions, 1256 data-access). No code changes — every finding verified
56
+ individually.
57
+
58
+ #### Styles (frosted-prism.css delta)
59
+ - 9 token-bypass REAL: `#06131c` vs `--active-ink` (token consumed in 8 selectors)
60
+ - 4 token-bypass RULE BUG: `#fff` vs `--health-base` (cross-file discovery without semantic scoping — `#fff` is universal color used for Discord/YouTube elements unrelated to health bars)
61
+ - 15 declaration-set-similarity REAL: verified every pair (5-11/11 declarations identical)
62
+ - 1 z-index-sprawl REAL: 10 distinct z-index values in one file
63
+ - Failure construct identified: one-liner `@keyframes {...{...}...}` with nested braces immediately followed by `@media {...}` — `{[^}]*}` regex matches first nested `}`, confusing brace-counting state machine
64
+
65
+ #### SQL injection (18 survivors)
66
+ - 2 REAL: hero-data-agent.ts:232, :241 — `opts.gameMode` (RPC user input) interpolated into `.exec()` SQL with only quote-escaping
67
+ - 1 RULE BUG: store.ts:422 — `table` is fixed internal literal (documented)
68
+ - 15 FALSE POSITIVES: all `.prepare()` calls interpolate compile-time constants (OFFICIAL_HEROES_SQL, EFFECT_FLAGS, CATALOG_SOURCES_SQL, allowlist-guarded values)
69
+ - Zero SQL-keyword receiver false positives (confirmed)
70
+
71
+ #### Conventions
72
+ - +1 export-shape: AdminModerationShell.tsx uses `export default` in 97%-named directory (AST `extractExports` correctly identified)
73
+
74
+ #### Recall-protocol tickets
75
+ - generation_queue: 8 unknown-table violations, table dropped in migration 0198
76
+ - hero-data-agent.ts: user-input interpolation into `.exec()` SQL
77
+
78
+ ## [3.4.11] — 2026-08-07
79
+
80
+ ### Spec 26: Consume the ASTs We Already Produce
81
+
82
+ Stage 1 parses every `.css` file into a tree-sitter AST, but all CSS analysis
83
+ operated via regex on raw source text. Spec 26 converts CSS extraction and
84
+ several TypeScript subsystems to walk the AST via adapter methods — the regex
85
+ only classifies tokens; the AST discovers structure.
86
+
87
+ #### Phase 2 — CSS AST extraction (`cssAstExtractor.ts`)
88
+
89
+ CSS declarations, class names, and custom-property tokens are now extracted from
90
+ tree-sitter-css ASTs via three pure functions: `extractDeclarationsFromCSSAst`,
91
+ `extractClassUsageFromCSSAst`, `extractTokensFromCSSAst`. `.scss` files stay on
92
+ the regex path (tree-sitter-css is not an SCSS grammar).
93
+
94
+ Five parser bugs in the retired regex path are eliminated by AST structure:
95
+
96
+ - **Bug 1** (whitespace before `@`-rules): `at_rule` nodes are always correct
97
+ - **Bug 2** (`@apply` in rule sets): handled via ERROR/postcss_statement/at_rule children
98
+ - **Bug 3** (nested `@`-rule brace): tree-sitter handles brace matching
99
+ - **Bug 4** (backward-scan boundary): no backward scanning — selectors from `selectors` child
100
+ - **Bug 5** (CSS comments as class names): comment nodes are typed, naturally excluded
101
+
102
+ The `;` stripping fix in `getPropertyAndValue()` (tree-sitter-css includes the
103
+ trailing semicolon in declaration node text) uncovered 53 legitimate
104
+ cross-mechanism violations previously hidden: 14 token-bypass + 39
105
+ mechanism-fragmentation. Styles total: 119 (was 66).
106
+
107
+ Also fixed: `extractClassUsageFromCSSAst` filters by parent type `class_selector`
108
+ to exclude pseudo-classes (`:hover`, `:focus`) and pseudo-elements.
109
+
110
+ #### Phase 1 — TypeScript subsystems
111
+
112
+ - **Invariants** (`ruleEngine.ts`): `extractImports()` and `extractExportedSymbols()`
113
+ regex functions deleted. `function-index` visitor now emits `imports`,
114
+ `dynamicImports`, and `exports` facts per file — invariants reducer consumes
115
+ them via `fileData` instead of re-extracting from source.
116
+ - **Conventions** (`conventionMiner.ts`): `detectExportForm()` now accepts
117
+ `ExportInfo[]` from `extractExports(ast)` instead of 6 regexes on raw source.
118
+ Export-shape detection found one additional legitimate violation
119
+ (`AdminModerationShell`) the regex path missed.
120
+ - **Documentation** (`documentationAnalyzer.ts`): `getJSDocText()` and
121
+ `getPrecedingJSDocComments()` replaced by `adapter.getDocumentation()`.
122
+
123
+ ### SQL injection parameterization detection
124
+
125
+ Four new methods in `UniversalDataAccessAnalyzer.ts` detect safe parameterized
126
+ SQL patterns before the keyword/dynamic-part check:
127
+
128
+ - `isInPrepareBindChain`: detects `.prepare().bind()` chains including the
129
+ two-statement pattern (`const stmt = db.prepare(sql); stmt.bind(x).all()`)
130
+ - `isInExecChain`: detects safe DO `.exec()` with spread binds
131
+ - `isD1ConvenienceCall`: detects D1 convenience methods (`.all()`, `.first()`,
132
+ `.run()`) with bind parameters
133
+
134
+ 18 legitimate `sql-injection-risk` violations remain (down from ~55 false
135
+ positives): 3 DO `.exec()` calls without detectable parameterization, 15
136
+ `prepare()` calls where the bind chain cannot be verified (dynamic table/column
137
+ names not bind-able).
138
+
139
+ ### unknown-table = 8 (all generation_queue)
140
+
141
+ The DO DDL visitor correctly identifies 8 references to the `generation_queue`
142
+ table in `src/pages/api/admin/generation/queue.ts`. The table was dropped in
143
+ migration 0198 — a dead admin page referencing a removed table.
144
+
145
+ ## [3.4.10] — 2026-07-31
6
146
 
7
147
  ### Accuracy fix: Phantom cross-domain lifecycle violations from over-broad DB detection defaults
8
148
 
@@ -1 +1 @@
1
- {"version":3,"file":"documentationAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAC;AA+GrB;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,4BAA4B,EAAE,2BAW1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AAuQD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,OAAO,CAAC,2BAA2B,CAAM,EACjD,OAAO,GAAE,YAAiB,EAC1B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,cAAc,CAAC,CAiHzB"}
1
+ {"version":3,"file":"documentationAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAMH,OAAO,EAEL,cAAc,EACd,YAAY,EACZ,gBAAgB,EACjB,MAAM,aAAa,CAAC;AAyDrB;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,mBAAmB,EAAE,OAAO,CAAC;IAC7B,oBAAoB,EAAE,OAAO,CAAC;IAC9B,eAAe,EAAE,OAAO,CAAC;IACzB,gBAAgB,EAAE,OAAO,CAAC;IAC1B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,OAAO,CAAC;IAC3B,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,eAAO,MAAM,4BAA4B,EAAE,2BAW1C,CAAC;AAEF;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,cAAc,EAAE,MAAM,CAAC;IACvB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,EAAE,MAAM,CAAC;IACzB,mBAAmB,EAAE,MAAM,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,iBAAiB,EAAE,MAAM,CAAC;IAC1B,aAAa,EAAE,MAAM,CAAC;IACtB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,qBAAqB,EAAE,MAAM,EAAE,CAAC;CACjC;AA2QD;;;GAGG;AACH,wBAAsB,oBAAoB,CACxC,KAAK,EAAE,MAAM,EAAE,EACf,MAAM,GAAE,OAAO,CAAC,2BAA2B,CAAM,EACjD,OAAO,GAAE,YAAiB,EAC1B,gBAAgB,CAAC,EAAE,gBAAgB,GAClC,OAAO,CAAC,cAAc,CAAC,CAiHzB"}
@@ -5,6 +5,7 @@
5
5
  * Migrated from TypeScript Compiler API to tree-sitter AST patterns.
6
6
  */
7
7
  import { walkAST, isExported as adapterIsExported } from '../languages/adapterBridge.js';
8
+ import { LanguageRegistry } from '../languages/LanguageRegistry.js';
8
9
  import { makeVisitorStatus, getFilesProcessed } from '../pipeline.js';
9
10
  import { getNodePosition, findNodesOfType, getNodeName, processFiles } from './analyzerUtils.js';
10
11
  import { isReactComponent, getComponentName } from '../utils/reactDetection.js';
@@ -15,57 +16,6 @@ import { isReactComponent, getComponentName } from '../utils/reactDetection.js';
15
16
  const rawText = (node) => node.raw?.text ?? '';
16
17
  /** Find the first child of a given type. */
17
18
  const findChild = (node, type) => node.children?.find(c => c.type === type);
18
- /**
19
- * Get preceding comment nodes that are JSDoc-style (/** ... *​/).
20
- * Looks at siblings in the raw tree-sitter parent, walking backwards from
21
- * the given node until a non-comment sibling is found.
22
- */
23
- function getPrecedingJSDocComments(node) {
24
- const raw = node.raw;
25
- if (!raw?.parent)
26
- return [];
27
- const parentRaw = raw.parent;
28
- const parentAST = node.parent;
29
- if (!parentAST?.children)
30
- return [];
31
- // Find our position in the parent AST children
32
- const ourIndex = parentAST.children.findIndex(c => c.range[0] === node.range[0] && c.range[1] === node.range[1]);
33
- if (ourIndex < 0)
34
- return [];
35
- // Walk backwards collecting adjacent comment nodes
36
- const comments = [];
37
- for (let i = ourIndex - 1; i >= 0; i--) {
38
- const sibling = parentAST.children[i];
39
- if (sibling.type === 'comment') {
40
- const text = rawText(sibling);
41
- if (text.includes('/**')) {
42
- comments.unshift(sibling);
43
- }
44
- else {
45
- // Non-JSDoc comment — stop looking
46
- break;
47
- }
48
- }
49
- else {
50
- break;
51
- }
52
- }
53
- return comments;
54
- }
55
- /**
56
- * Extract the cleaned JSDoc comment text from preceding comment nodes.
57
- * Strips leading /**, trailing *​/, and leading * on each line.
58
- */
59
- function getJSDocText(node) {
60
- const comments = getPrecedingJSDocComments(node);
61
- if (comments.length === 0)
62
- return null;
63
- const combined = comments.map(c => rawText(c)).join('\n');
64
- return combined
65
- .replace(/\/\*\*|\*\/|\s*\*\s?/g, ' ')
66
- .replace(/\s+/g, ' ')
67
- .trim();
68
- }
69
19
  /**
70
20
  * Parse @param tag details from JSDoc comment text.
71
21
  * Returns array of documented parameter names.
@@ -133,12 +83,12 @@ function getFilePurpose(rootNode) {
133
83
  /**
134
84
  * Analyzes JSDoc parameter documentation for a function-like node.
135
85
  */
136
- function analyzeParamDocumentation(node) {
86
+ function analyzeParamDocumentation(node, adapter) {
137
87
  const totalParams = countParameters(node);
138
88
  if (totalParams === 0) {
139
89
  return { totalParams: 0, documentedParams: 0 };
140
90
  }
141
- const jsDocText = getJSDocText(node);
91
+ const jsDocText = adapter.getDocumentation(node);
142
92
  if (!jsDocText) {
143
93
  return { totalParams, documentedParams: 0 };
144
94
  }
@@ -151,8 +101,8 @@ function analyzeParamDocumentation(node) {
151
101
  /**
152
102
  * Checks if function has @returns or @return documentation in its JSDoc.
153
103
  */
154
- function hasReturnDocumentation(node) {
155
- const jsDocText = getJSDocText(node);
104
+ function hasReturnDocumentation(node, adapter) {
105
+ const jsDocText = adapter.getDocumentation(node);
156
106
  if (!jsDocText)
157
107
  return false;
158
108
  return /@returns?\b/i.test(jsDocText);
@@ -171,6 +121,8 @@ function hasReturnDocumentation(node) {
171
121
  function analyzeFileDocumentation(ast, filePath, sourceCode, config) {
172
122
  const violations = [];
173
123
  const fileName = filePath;
124
+ // B3: Get the language adapter for this file type
125
+ const adapter = LanguageRegistry.getInstance().getAdapterForFile(filePath);
174
126
  let totalFunctions = 0;
175
127
  let documentedFunctions = 0;
176
128
  let totalComponents = 0;
@@ -205,7 +157,7 @@ function analyzeFileDocumentation(ast, filePath, sourceCode, config) {
205
157
  const nodeExported = adapterIsExported(node);
206
158
  const shouldCheck = !config.checkExportedOnly || nodeExported;
207
159
  if (shouldCheck) {
208
- const jsDoc = getJSDocText(node);
160
+ const jsDoc = adapter?.getDocumentation(node) ?? null;
209
161
  const hasGoodDoc = jsDoc ? jsDoc.length >= config.minDescriptionLength : false;
210
162
  if (hasGoodDoc) {
211
163
  documentedFunctions++;
@@ -227,7 +179,7 @@ function analyzeFileDocumentation(ast, filePath, sourceCode, config) {
227
179
  }
228
180
  // Check parameter documentation
229
181
  if (node.type === 'function_declaration' || node.type === 'function_expression') {
230
- const paramAnalysis = analyzeParamDocumentation(node);
182
+ const paramAnalysis = analyzeParamDocumentation(node, adapter);
231
183
  if (paramAnalysis.totalParams > 0) {
232
184
  functionsWithParams++;
233
185
  if (paramAnalysis.documentedParams === paramAnalysis.totalParams) {
@@ -258,7 +210,7 @@ function analyzeFileDocumentation(ast, filePath, sourceCode, config) {
258
210
  const hasReturn = hasReturnType || hasReturnStatements;
259
211
  if (hasReturn) {
260
212
  functionsWithReturns++;
261
- if (hasReturnDocumentation(node)) {
213
+ if (hasReturnDocumentation(node, adapter)) {
262
214
  returnsDocumented++;
263
215
  }
264
216
  else if (config.requireReturnDocs && hasGoodDoc) {
@@ -286,7 +238,7 @@ function analyzeFileDocumentation(ast, filePath, sourceCode, config) {
286
238
  const componentExported = adapterIsExported(node);
287
239
  const shouldCheck = !config.checkExportedOnly || componentExported;
288
240
  if (shouldCheck) {
289
- const jsDoc = getJSDocText(node);
241
+ const jsDoc = adapter?.getDocumentation(node) ?? null;
290
242
  const hasGoodDoc = jsDoc ? jsDoc.length >= config.minDescriptionLength : false;
291
243
  if (hasGoodDoc) {
292
244
  documentedComponents++;
@@ -1 +1 @@
1
- {"version":3,"file":"documentationAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"documentationAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/documentationAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"invariantsAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/invariantsAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAwD,MAAM,aAAa,CAAC;AAoD1G;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBA8E/B,CAAC"}
1
+ {"version":3,"file":"invariantsAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/invariantsAnalyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAwD,MAAM,aAAa,CAAC;AAoD1G;;GAEG;AACH,eAAO,MAAM,iBAAiB,EAAE,gBAqF/B,CAAC"}
@@ -38,8 +38,8 @@ function loadRules(config, _projectDir) {
38
38
  function toViolation(rv) {
39
39
  return {
40
40
  file: rv.file,
41
- line: rv.line,
42
- column: rv.column,
41
+ line: rv.line ?? 1,
42
+ column: rv.column ?? 1,
43
43
  severity: rv.severity,
44
44
  message: rv.message,
45
45
  rule: rv.ruleId,
@@ -70,9 +70,13 @@ export const analyzeInvariants = async (files, config, options, _progressCallbac
70
70
  };
71
71
  }
72
72
  const { rules, errors } = ruleData;
73
- // If there are validation errors, return them as violations
73
+ // If there are validation errors, return them as violations.
74
+ // line: 1 anchors file-level errors (no specific line to point at).
75
+ // Required by validateHookContract: every violation needs file + line ≥ 1.
74
76
  const errorViolations = errors.map(err => ({
75
77
  file: '.codeauditor.json',
78
+ line: 1,
79
+ column: 1,
76
80
  severity: 'critical',
77
81
  message: err,
78
82
  rule: 'config-error',
@@ -99,12 +103,15 @@ export const analyzeInvariants = async (files, config, options, _progressCallbac
99
103
  projectDir,
100
104
  sourceMap: config.sourceMap,
101
105
  knownFiles: config.knownFiles,
106
+ fileData: config.fileData,
102
107
  });
103
108
  const violations = [
104
109
  ...errorViolations,
105
110
  ...result.violations.map(toViolation),
106
111
  ...result.errors.map(err => ({
107
112
  file: '.codeauditor.json',
113
+ line: 1,
114
+ column: 1,
108
115
  severity: 'warning',
109
116
  message: err,
110
117
  rule: 'engine-error',
@@ -1 +1 @@
1
- {"version":3,"file":"invariantsAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/invariantsAnalyzer.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"invariantsAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/invariantsAnalyzer.ts"],"names":[],"mappings":"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"}
@@ -90,6 +90,16 @@ export interface BuildProvenanceContextOptions {
90
90
  dbReceiverNames?: string[];
91
91
  dbBindingNames?: string[];
92
92
  dbCallMethods?: string[];
93
+ /**
94
+ * Known DB wrapper function names — e.g. d1Query, d1Exec.
95
+ * These are project-specific functions that wrap D1/DB API calls
96
+ * (e.g. function d1Query(sql) { return d1.prepare(sql).all(); }).
97
+ * When imported from a local module (not a known DB package), provenance
98
+ * can't trace through the import chain. These names provide a hybrid-mode
99
+ * fallback: any call to an identifier matching this list is treated as
100
+ * DB-provenanced.
101
+ */
102
+ dbWrapperNames?: string[];
93
103
  /** Validator package list override (defaults to VALIDATOR_PACKAGES) */
94
104
  validatorPackageList?: string[];
95
105
  }
@@ -1 +1 @@
1
- {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/analyzers/provenance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"provenance.d.ts","sourceRoot":"","sources":["../../src/analyzers/provenance.ts"],"names":[],"mappings":"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"}
@@ -510,8 +510,10 @@ function getMemberExpressionReceiver(node, adapter, sourceCode) {
510
510
  firstChild.type !== 'property_identifier' && firstChild.type !== 'field_identifier') {
511
511
  if (firstChild.type === 'member_expression' ||
512
512
  firstChild.type === 'selector_expression') {
513
- current = firstChild;
514
- continue;
513
+ // Compound receiver: env.DB.prepare → receiver is "env.DB", not "env".
514
+ // Return the full text of the inner member expression so fallback
515
+ // entries like dbBindingNames: ['env.DB'] match the provenance check.
516
+ return adapter.getNodeText(firstChild, sourceCode);
515
517
  }
516
518
  if (firstChild.type === 'identifier') {
517
519
  return adapter.getNodeText(firstChild, sourceCode);
@@ -608,11 +610,11 @@ export function buildProvenanceContext(ast, adapter, sourceCode, options) {
608
610
  // 3. Fallback: in hybrid mode, add identifiers that match name lists
609
611
  // but weren't caught by provenance (R3)
610
612
  if (mode === 'hybrid') {
611
- dbProvenanced = addNameListFallbacks(dbProvenanced, sourceCode, options.dbReceiverNames ?? [], options.dbBindingNames ?? []);
613
+ dbProvenanced = addNameListFallbacks(dbProvenanced, sourceCode, options.dbReceiverNames ?? [], options.dbBindingNames ?? [], options.dbWrapperNames ?? []);
612
614
  }
613
615
  // 4. In names mode, use ONLY name lists
614
616
  if (mode === 'names') {
615
- dbProvenanced = buildNamesOnlyProvenance(sourceCode, options.dbReceiverNames ?? [], options.dbBindingNames ?? []);
617
+ dbProvenanced = buildNamesOnlyProvenance(sourceCode, options.dbReceiverNames ?? [], options.dbBindingNames ?? [], options.dbWrapperNames ?? []);
616
618
  }
617
619
  return {
618
620
  dbProvenanced,
@@ -627,7 +629,7 @@ export function buildProvenanceContext(ast, adapter, sourceCode, options) {
627
629
  * These entries carry `reason: 'fallback'` — visible in config detection
628
630
  * so users can audit and tighten their chains.
629
631
  */
630
- function addNameListFallbacks(provenanceMap, sourceCode, dbReceiverNames, dbBindingNames) {
632
+ function addNameListFallbacks(provenanceMap, sourceCode, dbReceiverNames, dbBindingNames, dbWrapperNames) {
631
633
  const result = new Map(provenanceMap);
632
634
  // Scan for DB receiver names used as identifiers
633
635
  for (const name of dbReceiverNames) {
@@ -668,13 +670,26 @@ function addNameListFallbacks(provenanceMap, sourceCode, dbReceiverNames, dbBind
668
670
  }
669
671
  }
670
672
  }
673
+ // Scan for DB wrapper function names (e.g. d1Query, d1Exec)
674
+ for (const name of dbWrapperNames) {
675
+ if (result.has(name))
676
+ continue;
677
+ if (identifierAppearsInSource(sourceCode, name)) {
678
+ result.set(name, {
679
+ identifier: name,
680
+ reason: 'fallback',
681
+ source: `name list match: dbWrapperNames contains "${name}"`,
682
+ chain: [],
683
+ });
684
+ }
685
+ }
671
686
  return result;
672
687
  }
673
688
  /**
674
689
  * Build a provenance map using ONLY name lists (for names mode).
675
690
  */
676
- function buildNamesOnlyProvenance(sourceCode, dbReceiverNames, dbBindingNames) {
677
- return addNameListFallbacks(new Map(), sourceCode, dbReceiverNames, dbBindingNames);
691
+ function buildNamesOnlyProvenance(sourceCode, dbReceiverNames, dbBindingNames, dbWrapperNames) {
692
+ return addNameListFallbacks(new Map(), sourceCode, dbReceiverNames, dbBindingNames, dbWrapperNames);
678
693
  }
679
694
  /** Check if an identifier name appears as a standalone identifier in source. */
680
695
  function identifierAppearsInSource(sourceCode, name) {
@@ -750,8 +765,11 @@ function isMemberExpressionDBProvenanced(node, adapter, sourceCode, context, met
750
765
  break;
751
766
  }
752
767
  if (firstChild.type === 'member_expression' || firstChild.type === 'selector_expression') {
753
- current = firstChild;
754
- continue;
768
+ // Compound receiver: env.DB.prepare → root is "env.DB", not "env".
769
+ // Returning the full text of the inner member expression ensures
770
+ // fallback entries match (e.g. dbBindingNames: ['env.DB']).
771
+ rootReceiver = adapter.getNodeText(firstChild, sourceCode);
772
+ break;
755
773
  }
756
774
  // this.db.prepare → root is a chain on `this`, check `this.xxx`
757
775
  if (firstChild.type === 'this' || firstChild.type === 'super') {
@@ -766,8 +784,20 @@ function isMemberExpressionDBProvenanced(node, adapter, sourceCode, context, met
766
784
  if (context.mode === 'names') {
767
785
  return isDBMethodCall(node, adapter, sourceCode, context, methods);
768
786
  }
769
- // Check if the root receiver is DB-provenanced
770
- if (!context.dbProvenanced.has(rootReceiver)) {
787
+ // Check if the root receiver is DB-provenanced.
788
+ // Compound receivers (e.g. "db.users" or "env.DB") need to match both
789
+ // the full text (for bindings like "env.DB") and each sub-identifier
790
+ // (for receivers like "db.users" where "db" is in dbReceiverNames).
791
+ const matchesProvenance = (r) => {
792
+ if (context.dbProvenanced.has(r))
793
+ return true;
794
+ for (const part of r.split('.')) {
795
+ if (context.dbProvenanced.has(part))
796
+ return true;
797
+ }
798
+ return false;
799
+ };
800
+ if (!matchesProvenance(rootReceiver)) {
771
801
  if (rootReceiver !== 'this')
772
802
  return false;
773
803
  // For `this.xxx`, check if the method chain itself suggests DB usage