code-auditor-mcp 3.4.12 → 3.4.14

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 (255) hide show
  1. package/CHANGELOG.md +74 -1
  2. package/dist/analyzers/__verify_self_probe.d.ts +2 -0
  3. package/dist/analyzers/__verify_self_probe.d.ts.map +1 -0
  4. package/dist/analyzers/__verify_self_probe.js +5 -0
  5. package/dist/analyzers/__verify_self_probe.js.map +1 -0
  6. package/dist/analyzers/analyzerUtils.d.ts +34 -1
  7. package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
  8. package/dist/analyzers/analyzerUtils.js +61 -22
  9. package/dist/analyzers/analyzerUtils.js.map +1 -1
  10. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts +18 -23
  11. package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
  12. package/dist/analyzers/cross-language/APIContractAnalyzer.js +198 -186
  13. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  14. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +78 -55
  15. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  16. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +244 -243
  17. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  18. package/dist/analyzers/cross-language/SchemaValidator.d.ts +27 -37
  19. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  20. package/dist/analyzers/cross-language/SchemaValidator.js +314 -275
  21. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  22. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +17 -46
  23. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  24. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +620 -523
  25. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  26. package/dist/analyzers/documentationAnalyzer.d.ts +7 -2
  27. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  28. package/dist/analyzers/documentationAnalyzer.js +259 -198
  29. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  30. package/dist/analyzers/invariantsAnalyzer.d.ts.map +1 -1
  31. package/dist/analyzers/invariantsAnalyzer.js +57 -50
  32. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  33. package/dist/analyzers/orm/adapterRegistry.d.ts +10 -0
  34. package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
  35. package/dist/analyzers/orm/adapterRegistry.js +10 -0
  36. package/dist/analyzers/orm/adapterRegistry.js.map +1 -1
  37. package/dist/analyzers/orm/drizzleAdapter.d.ts +22 -0
  38. package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
  39. package/dist/analyzers/orm/drizzleAdapter.js +42 -44
  40. package/dist/analyzers/orm/drizzleAdapter.js.map +1 -1
  41. package/dist/analyzers/orm/prismaAdapter.d.ts +30 -0
  42. package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
  43. package/dist/analyzers/orm/prismaAdapter.js +30 -0
  44. package/dist/analyzers/orm/prismaAdapter.js.map +1 -1
  45. package/dist/analyzers/provenance.d.ts +62 -2
  46. package/dist/analyzers/provenance.d.ts.map +1 -1
  47. package/dist/analyzers/provenance.js +443 -349
  48. package/dist/analyzers/provenance.js.map +1 -1
  49. package/dist/analyzers/reactAnalyzer.d.ts +11 -0
  50. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  51. package/dist/analyzers/reactAnalyzer.js +188 -125
  52. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  53. package/dist/analyzers/ruleRegistry.d.ts +110 -1
  54. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  55. package/dist/analyzers/ruleRegistry.js +1714 -124
  56. package/dist/analyzers/ruleRegistry.js.map +1 -1
  57. package/dist/analyzers/ruleTiming.d.ts +54 -0
  58. package/dist/analyzers/ruleTiming.d.ts.map +1 -0
  59. package/dist/analyzers/ruleTiming.js +71 -0
  60. package/dist/analyzers/ruleTiming.js.map +1 -0
  61. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +13 -0
  62. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  63. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +362 -283
  64. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  65. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +26 -68
  66. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  67. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +430 -391
  68. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  69. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +17 -202
  70. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  71. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +1073 -1121
  72. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  73. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +3 -49
  74. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  75. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +414 -340
  76. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  77. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +48 -5
  78. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  79. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +262 -134
  80. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  81. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +23 -214
  82. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  83. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +139 -1521
  84. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  85. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +78 -79
  86. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  87. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +613 -480
  88. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  89. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +307 -0
  90. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -0
  91. package/dist/analyzers/universal/schema/codeAnalysis.js +965 -0
  92. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -0
  93. package/dist/analyzers/universal/schema/config.d.ts +31 -0
  94. package/dist/analyzers/universal/schema/config.d.ts.map +1 -0
  95. package/dist/analyzers/universal/schema/config.js +57 -0
  96. package/dist/analyzers/universal/schema/config.js.map +1 -0
  97. package/dist/analyzers/universal/schema/discovery.d.ts +167 -0
  98. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -0
  99. package/dist/analyzers/universal/schema/discovery.js +616 -0
  100. package/dist/analyzers/universal/schema/discovery.js.map +1 -0
  101. package/dist/analyzers/universal/schema/jsonSchema.d.ts +27 -0
  102. package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -0
  103. package/dist/analyzers/universal/schema/jsonSchema.js +368 -0
  104. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -0
  105. package/dist/analyzers/universal/schema/migrations.d.ts +90 -0
  106. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -0
  107. package/dist/analyzers/universal/schema/migrations.js +238 -0
  108. package/dist/analyzers/universal/schema/migrations.js.map +1 -0
  109. package/dist/analyzers/universal/schema/types.d.ts +131 -0
  110. package/dist/analyzers/universal/schema/types.d.ts.map +1 -0
  111. package/dist/analyzers/universal/schema/types.js +10 -0
  112. package/dist/analyzers/universal/schema/types.js.map +1 -0
  113. package/dist/analyzers/universal/schema/violations.d.ts +44 -0
  114. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -0
  115. package/dist/analyzers/universal/schema/violations.js +54 -0
  116. package/dist/analyzers/universal/schema/violations.js.map +1 -0
  117. package/dist/auditRunner.d.ts.map +1 -1
  118. package/dist/auditRunner.js +89 -13
  119. package/dist/auditRunner.js.map +1 -1
  120. package/dist/cli.js +315 -40
  121. package/dist/cli.js.map +1 -1
  122. package/dist/config/configLoader.d.ts.map +1 -1
  123. package/dist/config/configLoader.js +9 -7
  124. package/dist/config/configLoader.js.map +1 -1
  125. package/dist/config/defaults.d.ts +12 -3
  126. package/dist/config/defaults.d.ts.map +1 -1
  127. package/dist/config/defaults.js +16 -6
  128. package/dist/config/defaults.js.map +1 -1
  129. package/dist/config/effectiveConfig.d.ts +75 -0
  130. package/dist/config/effectiveConfig.d.ts.map +1 -0
  131. package/dist/config/effectiveConfig.js +213 -0
  132. package/dist/config/effectiveConfig.js.map +1 -0
  133. package/dist/config/pathProfiles.d.ts +7 -4
  134. package/dist/config/pathProfiles.d.ts.map +1 -1
  135. package/dist/config/pathProfiles.js +8 -10
  136. package/dist/config/pathProfiles.js.map +1 -1
  137. package/dist/config/thresholdRationales.d.ts +45 -0
  138. package/dist/config/thresholdRationales.d.ts.map +1 -0
  139. package/dist/config/thresholdRationales.js +67 -0
  140. package/dist/config/thresholdRationales.js.map +1 -0
  141. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  142. package/dist/conventions/conventionMiner.js +6 -2
  143. package/dist/conventions/conventionMiner.js.map +1 -1
  144. package/dist/enforcement/diffGate.d.ts +55 -0
  145. package/dist/enforcement/diffGate.d.ts.map +1 -0
  146. package/dist/enforcement/diffGate.js +136 -0
  147. package/dist/enforcement/diffGate.js.map +1 -0
  148. package/dist/enforcement/gate.d.ts +36 -0
  149. package/dist/enforcement/gate.d.ts.map +1 -0
  150. package/dist/enforcement/gate.js +72 -0
  151. package/dist/enforcement/gate.js.map +1 -0
  152. package/dist/enforcement/suppressions.d.ts +41 -0
  153. package/dist/enforcement/suppressions.d.ts.map +1 -0
  154. package/dist/enforcement/suppressions.js +170 -0
  155. package/dist/enforcement/suppressions.js.map +1 -0
  156. package/dist/fingerprint.d.ts.map +1 -1
  157. package/dist/fingerprint.js +4 -1
  158. package/dist/fingerprint.js.map +1 -1
  159. package/dist/invariants/ruleEngine.d.ts +3 -4
  160. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  161. package/dist/invariants/ruleEngine.js +2 -2
  162. package/dist/invariants/ruleEngine.js.map +1 -1
  163. package/dist/languages/LanguageOrchestrator.d.ts +14 -0
  164. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  165. package/dist/languages/LanguageOrchestrator.js +93 -55
  166. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  167. package/dist/languages/LanguageRegistry.d.ts +8 -0
  168. package/dist/languages/LanguageRegistry.d.ts.map +1 -1
  169. package/dist/languages/LanguageRegistry.js +8 -0
  170. package/dist/languages/LanguageRegistry.js.map +1 -1
  171. package/dist/languages/RuntimeManager.d.ts +82 -60
  172. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  173. package/dist/languages/RuntimeManager.js +404 -349
  174. package/dist/languages/RuntimeManager.js.map +1 -1
  175. package/dist/languages/UniversalAnalyzer.d.ts +51 -6
  176. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  177. package/dist/languages/UniversalAnalyzer.js +127 -88
  178. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  179. package/dist/languages/adapterBridge.d.ts +36 -0
  180. package/dist/languages/adapterBridge.d.ts.map +1 -1
  181. package/dist/languages/adapterBridge.js +89 -35
  182. package/dist/languages/adapterBridge.js.map +1 -1
  183. package/dist/languages/go/GoAdapter.d.ts +66 -23
  184. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  185. package/dist/languages/go/GoAdapter.js +553 -474
  186. package/dist/languages/go/GoAdapter.js.map +1 -1
  187. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts +33 -4
  188. package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
  189. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +101 -66
  190. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  191. package/dist/languages/tree-sitter/converter.d.ts +18 -0
  192. package/dist/languages/tree-sitter/converter.d.ts.map +1 -1
  193. package/dist/languages/tree-sitter/converter.js +18 -0
  194. package/dist/languages/tree-sitter/converter.js.map +1 -1
  195. package/dist/languages/tree-sitter/parser.d.ts +39 -2
  196. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  197. package/dist/languages/tree-sitter/parser.js +93 -12
  198. package/dist/languages/tree-sitter/parser.js.map +1 -1
  199. package/dist/languages/types.d.ts +67 -2
  200. package/dist/languages/types.d.ts.map +1 -1
  201. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +253 -72
  202. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  203. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +1419 -923
  204. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  205. package/dist/mcp-tools-shared.d.ts.map +1 -1
  206. package/dist/mcp-tools-shared.js.map +1 -1
  207. package/dist/pipeline.d.ts +13 -5
  208. package/dist/pipeline.d.ts.map +1 -1
  209. package/dist/pipeline.js +381 -200
  210. package/dist/pipeline.js.map +1 -1
  211. package/dist/pipelineAdapters.d.ts +3 -8
  212. package/dist/pipelineAdapters.d.ts.map +1 -1
  213. package/dist/pipelineAdapters.js +149 -94
  214. package/dist/pipelineAdapters.js.map +1 -1
  215. package/dist/presets/presets.d.ts +54 -0
  216. package/dist/presets/presets.d.ts.map +1 -0
  217. package/dist/presets/presets.js +181 -0
  218. package/dist/presets/presets.js.map +1 -0
  219. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  220. package/dist/reporting/sarifReportGenerator.js +6 -3
  221. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  222. package/dist/ruleAliases.d.ts +67 -0
  223. package/dist/ruleAliases.d.ts.map +1 -0
  224. package/dist/ruleAliases.js +102 -0
  225. package/dist/ruleAliases.js.map +1 -0
  226. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  227. package/dist/styles/cssAstExtractor.js +78 -18
  228. package/dist/styles/cssAstExtractor.js.map +1 -1
  229. package/dist/styles/styleIndexer.d.ts +6 -0
  230. package/dist/styles/styleIndexer.d.ts.map +1 -1
  231. package/dist/styles/styleIndexer.js +26 -4
  232. package/dist/styles/styleIndexer.js.map +1 -1
  233. package/dist/styles/tailwindConfigLoader.d.ts +8 -6
  234. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
  235. package/dist/styles/tailwindConfigLoader.js +61 -15
  236. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  237. package/dist/styles/tailwindProbe.d.ts +31 -0
  238. package/dist/styles/tailwindProbe.d.ts.map +1 -1
  239. package/dist/styles/tailwindProbe.js +145 -4
  240. package/dist/styles/tailwindProbe.js.map +1 -1
  241. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  242. package/dist/styles/tailwindUtilityExpander.js +13 -1
  243. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  244. package/dist/types.d.ts +181 -1
  245. package/dist/types.d.ts.map +1 -1
  246. package/dist/types.js +8 -0
  247. package/dist/types.js.map +1 -1
  248. package/dist/utils/fileDiscovery.d.ts +9 -0
  249. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  250. package/dist/utils/fileDiscovery.js +21 -0
  251. package/dist/utils/fileDiscovery.js.map +1 -1
  252. package/package.json +5 -3
  253. package/plugin/hooks/hooks.json +1 -1
  254. package/plugin/scripts/hook-audit.sh +25 -7
  255. package/plugin/skills/code-auditor/SKILL.md +5 -5
@@ -6,8 +6,21 @@
6
6
  * before any adapterBridge use. Adapter calls to getParser() on an uninitialized
7
7
  * parser throw with a clear message — this is a programmer error, not a runtime
8
8
  * condition to recover from.
9
+ *
10
+ * Spec 32 — WASM Abort recovery:
11
+ * `parser.parse()` can throw a `WebAssembly.RuntimeError` with the Emscripten
12
+ * `Aborted()` signature when the shared WASM runtime's arena reaches its ceiling.
13
+ * Once `ABORT` is set, the runtime singleton is dead and every subsequent parse
14
+ * fails. We therefore:
15
+ * - hold the `Parser`/`Language` classes in mutable bindings (not static imports)
16
+ * so a fresh runtime can be swapped in,
17
+ * - expose `parseWithRecovery()` which detects an abort, reinstantiates the module
18
+ * (cache-busted dynamic import), retries the file once, and otherwise rethrows
19
+ * so the caller records the file as unparsed (never silently dropped).
9
20
  */
10
- import { Parser } from 'web-tree-sitter';
21
+ import * as webTreeSitter from 'web-tree-sitter';
22
+ import type { Tree } from 'web-tree-sitter';
23
+ declare let Parser: typeof webTreeSitter.Parser;
11
24
  /**
12
25
  * Initialize tree-sitter parsers for all supported languages.
13
26
  * MUST be called once before any adapterBridge or adapter use.
@@ -15,16 +28,39 @@ import { Parser } from 'web-tree-sitter';
15
28
  * WASM paths are resolved relative to this module's location via import.meta.url,
16
29
  * NOT process.cwd(). This ensures the grammars are found regardless of the
17
30
  * working directory at runtime (critical for npx-invoked hooks).
31
+ * @returns
18
32
  */
19
33
  export declare function initParsers(): Promise<void>;
34
+ /**
35
+ * Reinstantiate the tree-sitter runtime after an abort. Dynamically re-imports
36
+ * a fresh `web-tree-sitter` module instance (cache-busted) so the dead shared
37
+ * WASM singleton is replaced, then rebuilds all grammars and parsers from it.
38
+ * @returns
39
+ */
40
+ export declare function recoverParsers(): Promise<void>;
41
+ /**
42
+ * Parse content with abort recovery. On an abort, reinstantiates the runtime
43
+ * and retries the file once. A second abort propagates to the caller so the
44
+ * file is recorded as unparsed rather than silently dropped.
45
+ *
46
+ * @param lang - Language identifier ('typescript', 'javascript', 'go', ...)
47
+ * @param isTsx - If true, use the TSX grammar
48
+ * @param content - Source text to parse
49
+ * @param recover - Fault-injection seam. Defaults to the real `recoverParsers`;
50
+ * tests may pass a stub to exercise the retry orchestration without hitting
51
+ * `import.meta.resolve` (which vitest's SSR transform rewrites away).
52
+ * @returns the parsed tree, or null if the parser produced no tree.
53
+ */
54
+ export declare function parseWithRecovery(lang: string, isTsx: boolean, content: string, recover?: () => Promise<void>): Promise<Tree | null>;
20
55
  /**
21
56
  * Get a tree-sitter Parser for the given language.
22
57
  * Throws if initParsers() has not been called.
23
58
  *
24
59
  * @param lang - Language identifier ('typescript', 'javascript', 'go')
25
60
  * @param isTsx - If true and lang is 'typescript', use the TSX grammar
61
+ * @returns
26
62
  */
27
- export declare function getParser(lang: string, isTsx?: boolean): Parser;
63
+ export declare function getParser(lang: string, isTsx?: boolean): typeof Parser.prototype;
28
64
  /**
29
65
  * Returns true if parsers have been initialized.
30
66
  */
@@ -33,4 +69,5 @@ export declare function isInitialized(): boolean;
33
69
  * Get available language identifiers.
34
70
  */
35
71
  export declare function getAvailableLanguages(): string[];
72
+ export {};
36
73
  //# sourceMappingURL=parser.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EAAE,MAAM,EAAY,MAAM,iBAAiB,CAAC;AAuCnD;;;;;;;GAOG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAgCjD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,MAAM,CAyBtE;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,KAAK,aAAa,MAAM,iBAAiB,CAAC;AACjD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAG5C,QAAA,IAAI,MAAM,EAAE,OAAO,aAAa,CAAC,MAA6B,CAAC;AAiD/D;;;;;;;;GAQG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAIjD;AAuDD;;;;;GAKG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,IAAI,CAAC,CAOpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CACrC,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,MAAM,EACf,OAAO,GAAE,MAAM,OAAO,CAAC,IAAI,CAAkB,GAC5C,OAAO,CAAC,IAAI,GAAG,IAAI,CAAC,CAWtB;AAED;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,GAAE,OAAe,GAAG,OAAO,MAAM,CAAC,SAAS,CAgBvF;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,MAAM,EAAE,CAEhD"}
@@ -6,15 +6,36 @@
6
6
  * before any adapterBridge use. Adapter calls to getParser() on an uninitialized
7
7
  * parser throw with a clear message — this is a programmer error, not a runtime
8
8
  * condition to recover from.
9
+ *
10
+ * Spec 32 — WASM Abort recovery:
11
+ * `parser.parse()` can throw a `WebAssembly.RuntimeError` with the Emscripten
12
+ * `Aborted()` signature when the shared WASM runtime's arena reaches its ceiling.
13
+ * Once `ABORT` is set, the runtime singleton is dead and every subsequent parse
14
+ * fails. We therefore:
15
+ * - hold the `Parser`/`Language` classes in mutable bindings (not static imports)
16
+ * so a fresh runtime can be swapped in,
17
+ * - expose `parseWithRecovery()` which detects an abort, reinstantiates the module
18
+ * (cache-busted dynamic import), retries the file once, and otherwise rethrows
19
+ * so the caller records the file as unparsed (never silently dropped).
9
20
  */
10
21
  import { readFileSync } from 'node:fs';
11
- import { Parser, Language } from 'web-tree-sitter';
22
+ import * as webTreeSitter from 'web-tree-sitter';
23
+ // Mutable bindings — a recovery swaps these to a fresh module's classes.
24
+ let Parser = webTreeSitter.Parser;
25
+ let Language = webTreeSitter.Language;
12
26
  // ---------------------------------------------------------------------------
13
27
  // State
14
28
  // ---------------------------------------------------------------------------
15
29
  let initialized = false;
16
30
  const parsers = new Map();
17
31
  const languages = new Map();
32
+ /**
33
+ * Cache-buster for recovering from an Emscripten Abort(). Each recovery bumps
34
+ * this and dynamically re-imports `web-tree-sitter` with `?gen=N` appended so
35
+ * Node's module cache treats it as a distinct module instance with a fresh,
36
+ * non-aborted runtime singleton.
37
+ */
38
+ let recoveryGeneration = 0;
18
39
  /**
19
40
  * Mapping from adapter language ID to the grammar WASM filename.
20
41
  * Keyed by the strings adapters use internally (not file extensions).
@@ -33,6 +54,7 @@ const GRAMMAR_FILES = {
33
54
  */
34
55
  const LANGUAGE_GRAMMAR_MAP = {
35
56
  typescript: 'typescript',
57
+ tsx: 'tsx',
36
58
  javascript: 'javascript',
37
59
  go: 'go',
38
60
  css: 'css',
@@ -48,21 +70,33 @@ const LANGUAGE_GRAMMAR_MAP = {
48
70
  * WASM paths are resolved relative to this module's location via import.meta.url,
49
71
  * NOT process.cwd(). This ensures the grammars are found regardless of the
50
72
  * working directory at runtime (critical for npx-invoked hooks).
73
+ * @returns
51
74
  */
52
75
  export async function initParsers() {
53
76
  if (initialized)
54
77
  return;
78
+ await loadGrammarsAndParsers();
79
+ initialized = true;
80
+ }
81
+ /**
82
+ * Shared grammar + parser construction, used by both initial startup and
83
+ * post-abort recovery. Clears the singleton maps and rebuilds them from the
84
+ * current (possibly freshly-imported) Parser/Language classes.
85
+ */
86
+ async function loadGrammarsAndParsers() {
55
87
  // Initialize the tree-sitter runtime (loads the tree-sitter C library WASM)
56
88
  await Parser.init();
57
89
  // Resolve the grammars directory relative to this module
58
90
  // At runtime: dist/languages/tree-sitter/parser.js → ../../grammars/
59
91
  const grammarsDir = new URL('../../grammars/', import.meta.url);
92
+ languages.clear();
60
93
  for (const [grammarKey, wasmFile] of Object.entries(GRAMMAR_FILES)) {
61
94
  const wasmUrl = new URL(wasmFile, grammarsDir);
62
95
  const wasmBuffer = readFileSync(wasmUrl);
63
96
  const language = await Language.load(wasmBuffer);
64
97
  languages.set(grammarKey, language);
65
98
  }
99
+ parsers.clear();
66
100
  // Create parser instances for each primary language
67
101
  for (const [lang, grammarKey] of Object.entries(LANGUAGE_GRAMMAR_MAP)) {
68
102
  const language = languages.get(grammarKey);
@@ -74,7 +108,61 @@ export async function initParsers() {
74
108
  parser.setLanguage(language);
75
109
  parsers.set(lang, parser);
76
110
  }
77
- initialized = true;
111
+ }
112
+ /**
113
+ * Detect an Emscripten Abort() surfaced as a thrown WebAssembly.RuntimeError.
114
+ * These errors are the signature of a dead WASM runtime — not a per-file parse
115
+ * failure — and must trigger module recovery rather than a per-file skip.
116
+ */
117
+ function detectAbort(err) {
118
+ if (!(err instanceof Error))
119
+ return false;
120
+ const name = err.name ?? '';
121
+ const message = err.message ?? '';
122
+ return (name === 'RuntimeError' ||
123
+ message.includes('Aborted(') ||
124
+ message.includes('abort('));
125
+ }
126
+ /**
127
+ * Reinstantiate the tree-sitter runtime after an abort. Dynamically re-imports
128
+ * a fresh `web-tree-sitter` module instance (cache-busted) so the dead shared
129
+ * WASM singleton is replaced, then rebuilds all grammars and parsers from it.
130
+ * @returns
131
+ */
132
+ export async function recoverParsers() {
133
+ recoveryGeneration++;
134
+ const baseUrl = import.meta.resolve('web-tree-sitter');
135
+ const fresh = await import(`${baseUrl}?gen=${recoveryGeneration}`);
136
+ Parser = fresh.Parser;
137
+ Language = fresh.Language;
138
+ await loadGrammarsAndParsers();
139
+ }
140
+ /**
141
+ * Parse content with abort recovery. On an abort, reinstantiates the runtime
142
+ * and retries the file once. A second abort propagates to the caller so the
143
+ * file is recorded as unparsed rather than silently dropped.
144
+ *
145
+ * @param lang - Language identifier ('typescript', 'javascript', 'go', ...)
146
+ * @param isTsx - If true, use the TSX grammar
147
+ * @param content - Source text to parse
148
+ * @param recover - Fault-injection seam. Defaults to the real `recoverParsers`;
149
+ * tests may pass a stub to exercise the retry orchestration without hitting
150
+ * `import.meta.resolve` (which vitest's SSR transform rewrites away).
151
+ * @returns the parsed tree, or null if the parser produced no tree.
152
+ */
153
+ export async function parseWithRecovery(lang, isTsx, content, recover = recoverParsers) {
154
+ try {
155
+ const parser = getParser(lang, isTsx);
156
+ return parser.parse(content);
157
+ }
158
+ catch (err) {
159
+ if (!detectAbort(err))
160
+ throw err;
161
+ // Abort killed the shared runtime — reinstantiate and retry the file once.
162
+ await recover();
163
+ const parser = getParser(lang, isTsx);
164
+ return parser.parse(content); // a second abort propagates to the caller
165
+ }
78
166
  }
79
167
  /**
80
168
  * Get a tree-sitter Parser for the given language.
@@ -82,23 +170,16 @@ export async function initParsers() {
82
170
  *
83
171
  * @param lang - Language identifier ('typescript', 'javascript', 'go')
84
172
  * @param isTsx - If true and lang is 'typescript', use the TSX grammar
173
+ * @returns
85
174
  */
86
175
  export function getParser(lang, isTsx = false) {
87
176
  if (!initialized) {
88
177
  throw new Error('Tree-sitter parsers not initialized. Call initParsers() before using any adapter.');
89
178
  }
90
179
  const key = isTsx ? 'tsx' : lang;
91
- // tsx is handled separately — it shares the TypeScript adapter
92
- if (isTsx && languages.has('tsx')) {
93
- // Return a one-off parser with TSX grammar
94
- const tsxLang = languages.get('tsx');
95
- const p = new Parser();
96
- p.setLanguage(tsxLang);
97
- return p;
98
- }
99
- const parser = parsers.get(lang);
180
+ const parser = parsers.get(key);
100
181
  if (!parser) {
101
- throw new Error(`No tree-sitter parser for language "${lang}". ` +
182
+ throw new Error(`No tree-sitter parser for language "${key}". ` +
102
183
  `Supported: ${[...parsers.keys()].join(', ')}`);
103
184
  }
104
185
  return parser;
@@ -1 +1 @@
1
- {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../../src/languages/tree-sitter/parser.ts"],"names":[],"mappings":"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"}
@@ -9,6 +9,8 @@ export interface AST {
9
9
  language: string;
10
10
  filePath: string;
11
11
  errors: ParseError[];
12
+ /** Called by the pipeline after all visitors process a file to reclaim WASM tree memory. */
13
+ dispose?: () => void;
12
14
  }
13
15
  /**
14
16
  * Generic AST node that can represent nodes from any language
@@ -153,9 +155,9 @@ export interface ResolvedConstant {
153
155
  declLine: number;
154
156
  }
155
157
  /**
156
- * Language adapter interface - must be implemented for each language
158
+ * Parser role: file detection and AST production.
157
159
  */
158
- export interface LanguageAdapter {
160
+ export interface LanguageParser {
159
161
  readonly name: string;
160
162
  readonly fileExtensions: string[];
161
163
  /**
@@ -166,18 +168,38 @@ export interface LanguageAdapter {
166
168
  * Check if this adapter supports a file
167
169
  */
168
170
  supportsFile(filePath: string): boolean;
171
+ }
172
+ /**
173
+ * AST navigation role: structural traversal of the parsed tree.
174
+ */
175
+ export interface AstNavigation {
169
176
  findNodes(ast: AST, pattern: NodePattern): ASTNode[];
170
177
  getParent(node: ASTNode): ASTNode | null;
171
178
  getChildren(node: ASTNode): ASTNode[];
172
179
  getSiblings(node: ASTNode): ASTNode[];
180
+ }
181
+ /**
182
+ * Node information role: reading type/text/name/location off a node.
183
+ */
184
+ export interface NodeIntrospection {
173
185
  getNodeType(node: ASTNode): string;
174
186
  getNodeText(node: ASTNode, sourceCode: string): string;
175
187
  getNodeName(node: ASTNode): string | null;
176
188
  getNodeLocation(node: ASTNode): SourceLocation;
189
+ }
190
+ /**
191
+ * Language-specific extraction role: pull structured entities out of an AST.
192
+ */
193
+ export interface LanguageExtraction {
177
194
  extractFunctions(ast: AST): FunctionInfo[];
178
195
  extractClasses(ast: AST): ClassInfo[];
179
196
  extractImports(ast: AST): ImportInfo[];
180
197
  extractExports(ast: AST): ExportInfo[];
198
+ }
199
+ /**
200
+ * Node predicate role: classify AST nodes by kind.
201
+ */
202
+ export interface NodePredicates {
181
203
  isClass(node: ASTNode): boolean;
182
204
  isFunction(node: ASTNode): boolean;
183
205
  isMethod(node: ASTNode): boolean;
@@ -187,10 +209,29 @@ export interface LanguageAdapter {
187
209
  isLoop(node: ASTNode): boolean;
188
210
  isConditional(node: ASTNode): boolean;
189
211
  isVariableDeclaration(node: ASTNode): boolean;
212
+ }
213
+ /**
214
+ * Advanced analysis role: type info, documentation, and complexity.
215
+ */
216
+ export interface AdvancedAnalysis {
190
217
  getTypeInfo(node: ASTNode): string | null;
191
218
  getDocumentation(node: ASTNode): string | null;
192
219
  getComplexity(node: ASTNode): number;
220
+ }
221
+ /**
222
+ * Optional capabilities a language may or may not provide.
223
+ *
224
+ * String-construction capabilities replace text-pattern heuristics for SQL
225
+ * injection detection with AST-level knowledge of how each host language
226
+ * constructs dynamic strings. When a language adapter does not implement
227
+ * these, the caller falls back to the legacy text-pattern approach (Legacy
228
+ * check disabled in v3.4.7 — if no adapter capability is present, no
229
+ * injection risk is flagged).
230
+ */
231
+ export interface OptionalCapabilities {
232
+ /** Extract interfaces (for languages that support them). */
193
233
  extractInterfaces?(ast: AST): InterfaceInfo[];
234
+ /** Extract raw import info including dynamic/require forms. */
194
235
  extractRawImports?(filePath: string, content: string): Array<{
195
236
  moduleSpecifier: string;
196
237
  isStatic: boolean;
@@ -198,6 +239,7 @@ export interface LanguageAdapter {
198
239
  isRequire: boolean;
199
240
  line: number;
200
241
  }>;
242
+ /** Extract exported symbol names from an AST. */
201
243
  extractExportedSymbols?(ast: AST): Array<{
202
244
  name: string;
203
245
  line: number;
@@ -228,6 +270,29 @@ export interface LanguageAdapter {
228
270
  * @param sourceCode - The source text
229
271
  */
230
272
  resolveLocalConstant?(identifierNode: ASTNode, ast: AST, sourceCode: string): ResolvedConstant | null;
273
+ /**
274
+ * Returns true if an interpolated expression is provably safe to embed in a
275
+ * SQL string — a compile-time constant, quote-escaped sanitizer, ternary of
276
+ * safe branches, static-array `.map().join()`, local function call with a
277
+ * safe body and safe call sites, or a guard-validated parameter. Used to
278
+ * clear cross-function false positives without weakening raw-input detection.
279
+ *
280
+ * @param node - The expression node inside a ${…} substitution (or operand).
281
+ * @param ast - The full AST for scope traversal.
282
+ * @param sourceCode - The source text.
283
+ */
284
+ isSafeInterpolation?(node: ASTNode, ast: AST, sourceCode: string): boolean;
285
+ }
286
+ /**
287
+ * Language adapter interface - must be implemented for each language.
288
+ *
289
+ * Composed from role interfaces (Spec-33 interface-segregation): a single
290
+ * 35-member interface once forced every adapter to implement all members at
291
+ * once, bloating each adapter class (the TypeScript adapter grew to 78
292
+ * methods, Go to 53). Splitting into roles lets adapters implement the
293
+ * capabilities they support and compose them back into a full adapter.
294
+ */
295
+ export interface LanguageAdapter extends LanguageParser, AstNavigation, NodeIntrospection, LanguageExtraction, NodePredicates, AdvancedAnalysis, OptionalCapabilities {
231
296
  }
232
297
  /**
233
298
  * Interface information extracted from AST
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/languages/types.ts"],"names":[],"mappings":"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"}