code-auditor-mcp 4.1.1 → 5.0.2

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 (1087) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +381 -0
  3. package/README.md +4 -4
  4. package/configs/hhra-compat.json +0 -8
  5. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts +1 -1
  6. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts.map +1 -1
  7. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js +7 -1
  8. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js.map +1 -1
  9. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts +2 -8
  10. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
  11. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js +4 -4
  12. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js.map +1 -1
  13. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts +1 -1
  14. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts.map +1 -1
  15. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js.map +1 -1
  16. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts +2 -2
  17. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts.map +1 -1
  18. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js.map +1 -1
  19. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts +1 -1
  20. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts.map +1 -1
  21. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js.map +1 -1
  22. package/dist/analyzers/applicability.d.ts +42 -0
  23. package/dist/analyzers/applicability.d.ts.map +1 -1
  24. package/dist/analyzers/applicability.js +74 -0
  25. package/dist/analyzers/applicability.js.map +1 -1
  26. package/dist/analyzers/cross-language/APIContractAnalyzer.js +18 -24
  27. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  28. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +30 -23
  29. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  30. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +113 -76
  31. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  32. package/dist/analyzers/cross-language/SchemaValidator.d.ts +2 -0
  33. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  34. package/dist/analyzers/cross-language/SchemaValidator.js +8 -3
  35. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  36. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  37. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +210 -148
  38. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  39. package/dist/analyzers/documentationAnalyzer.d.ts.map +1 -1
  40. package/dist/analyzers/documentationAnalyzer.js +23 -28
  41. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  42. package/dist/analyzers/handleIdentification.d.ts +356 -0
  43. package/dist/analyzers/handleIdentification.d.ts.map +1 -0
  44. package/dist/analyzers/handleIdentification.js +427 -0
  45. package/dist/analyzers/handleIdentification.js.map +1 -0
  46. package/dist/analyzers/manifestStaleness.d.ts +64 -0
  47. package/dist/analyzers/manifestStaleness.d.ts.map +1 -0
  48. package/dist/analyzers/manifestStaleness.js +115 -0
  49. package/dist/analyzers/manifestStaleness.js.map +1 -0
  50. package/dist/analyzers/orgFilterTiers.d.ts +73 -1
  51. package/dist/analyzers/orgFilterTiers.d.ts.map +1 -1
  52. package/dist/analyzers/orgFilterTiers.js +166 -1
  53. package/dist/analyzers/orgFilterTiers.js.map +1 -1
  54. package/dist/analyzers/provenance.d.ts +251 -57
  55. package/dist/analyzers/provenance.d.ts.map +1 -1
  56. package/dist/analyzers/provenance.js +1109 -429
  57. package/dist/analyzers/provenance.js.map +1 -1
  58. package/dist/analyzers/reactAnalyzer.d.ts +2 -0
  59. package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
  60. package/dist/analyzers/reactAnalyzer.js +2 -0
  61. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  62. package/dist/analyzers/receiverResolution.d.ts +183 -0
  63. package/dist/analyzers/receiverResolution.d.ts.map +1 -0
  64. package/dist/analyzers/receiverResolution.js +540 -0
  65. package/dist/analyzers/receiverResolution.js.map +1 -0
  66. package/dist/analyzers/receiverRoot.d.ts +348 -0
  67. package/dist/analyzers/receiverRoot.d.ts.map +1 -0
  68. package/dist/analyzers/receiverRoot.js +1032 -0
  69. package/dist/analyzers/receiverRoot.js.map +1 -0
  70. package/dist/analyzers/ruleRegistry.d.ts +12 -68
  71. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  72. package/dist/analyzers/ruleRegistry.js +32 -342
  73. package/dist/analyzers/ruleRegistry.js.map +1 -1
  74. package/dist/analyzers/ruleTiming.d.ts +10 -0
  75. package/dist/analyzers/ruleTiming.d.ts.map +1 -1
  76. package/dist/analyzers/ruleTiming.js +20 -0
  77. package/dist/analyzers/ruleTiming.js.map +1 -1
  78. package/dist/analyzers/sqlLiteral.d.ts +76 -0
  79. package/dist/analyzers/sqlLiteral.d.ts.map +1 -0
  80. package/dist/analyzers/sqlLiteral.js +419 -0
  81. package/dist/analyzers/sqlLiteral.js.map +1 -0
  82. package/dist/analyzers/tsEcosystem.d.ts +115 -0
  83. package/dist/analyzers/tsEcosystem.d.ts.map +1 -0
  84. package/dist/analyzers/tsEcosystem.js +241 -0
  85. package/dist/analyzers/tsEcosystem.js.map +1 -0
  86. package/dist/analyzers/tsExpressionDescriptor.d.ts +156 -0
  87. package/dist/analyzers/tsExpressionDescriptor.d.ts.map +1 -0
  88. package/dist/analyzers/tsExpressionDescriptor.js +374 -0
  89. package/dist/analyzers/tsExpressionDescriptor.js.map +1 -0
  90. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +6 -0
  91. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  92. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +107 -44
  93. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  94. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
  95. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +23 -35
  96. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  97. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +287 -49
  98. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  99. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +2130 -512
  100. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  101. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
  102. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +2 -18
  103. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  104. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +0 -33
  105. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  106. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +20 -143
  107. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  108. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +4 -3
  109. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
  110. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +36 -13
  111. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  112. package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
  113. package/dist/analyzers/universal/UniversalSecretsAnalyzer.js +6 -0
  114. package/dist/analyzers/universal/UniversalSecretsAnalyzer.js.map +1 -1
  115. package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts +15 -0
  116. package/dist/analyzers/universal/UniversalSecurityAnalyzer.d.ts.map +1 -1
  117. package/dist/analyzers/universal/UniversalSecurityAnalyzer.js +25 -0
  118. package/dist/analyzers/universal/UniversalSecurityAnalyzer.js.map +1 -1
  119. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +21 -32
  120. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  121. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +166 -196
  122. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  123. package/dist/analyzers/universal/functionConcerns.d.ts +3 -0
  124. package/dist/analyzers/universal/functionConcerns.d.ts.map +1 -1
  125. package/dist/analyzers/universal/functionConcerns.js +4 -1
  126. package/dist/analyzers/universal/functionConcerns.js.map +1 -1
  127. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +310 -69
  128. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  129. package/dist/analyzers/universal/schema/codeAnalysis.js +709 -383
  130. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  131. package/dist/analyzers/universal/schema/config.d.ts +3 -14
  132. package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
  133. package/dist/analyzers/universal/schema/config.js +3 -16
  134. package/dist/analyzers/universal/schema/config.js.map +1 -1
  135. package/dist/analyzers/universal/schema/discovery.d.ts +22 -1
  136. package/dist/analyzers/universal/schema/discovery.d.ts.map +1 -1
  137. package/dist/analyzers/universal/schema/discovery.js +36 -20
  138. package/dist/analyzers/universal/schema/discovery.js.map +1 -1
  139. package/dist/analyzers/universal/schema/jsonSchema.d.ts.map +1 -1
  140. package/dist/analyzers/universal/schema/jsonSchema.js +13 -3
  141. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  142. package/dist/analyzers/universal/schema/migrations.d.ts +187 -27
  143. package/dist/analyzers/universal/schema/migrations.d.ts.map +1 -1
  144. package/dist/analyzers/universal/schema/migrations.js +443 -186
  145. package/dist/analyzers/universal/schema/migrations.js.map +1 -1
  146. package/dist/analyzers/universal/schema/types.d.ts +17 -3
  147. package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
  148. package/dist/analyzers/universal/schema/violations.js +1 -1
  149. package/dist/analyzers/universal/schema/violations.js.map +1 -1
  150. package/dist/analyzers/universal/styleScale.d.ts +52 -0
  151. package/dist/analyzers/universal/styleScale.d.ts.map +1 -0
  152. package/dist/analyzers/universal/styleScale.js +95 -0
  153. package/dist/analyzers/universal/styleScale.js.map +1 -0
  154. package/dist/applyDataDirEnv.js +1 -1
  155. package/dist/applyDataDirEnv.js.map +1 -1
  156. package/dist/auditRouter.d.ts +26 -30
  157. package/dist/auditRouter.d.ts.map +1 -1
  158. package/dist/auditRouter.js +373 -143
  159. package/dist/auditRouter.js.map +1 -1
  160. package/dist/auditRunner.d.ts +66 -1
  161. package/dist/auditRunner.d.ts.map +1 -1
  162. package/dist/auditRunner.js +1544 -1034
  163. package/dist/auditRunner.js.map +1 -1
  164. package/dist/baseline.d.ts +30 -3
  165. package/dist/baseline.d.ts.map +1 -1
  166. package/dist/baseline.js +70 -9
  167. package/dist/baseline.js.map +1 -1
  168. package/dist/cli.js +983 -821
  169. package/dist/cli.js.map +1 -1
  170. package/dist/codeIndex/analyzerConfig.d.ts +60 -0
  171. package/dist/codeIndex/analyzerConfig.d.ts.map +1 -0
  172. package/dist/codeIndex/analyzerConfig.js +98 -0
  173. package/dist/codeIndex/analyzerConfig.js.map +1 -0
  174. package/dist/codeIndex/auditResults.d.ts +39 -0
  175. package/dist/codeIndex/auditResults.d.ts.map +1 -0
  176. package/dist/codeIndex/auditResults.js +99 -0
  177. package/dist/codeIndex/auditResults.js.map +1 -0
  178. package/dist/codeIndex/codeMap.d.ts +59 -0
  179. package/dist/codeIndex/codeMap.d.ts.map +1 -0
  180. package/dist/codeIndex/codeMap.js +72 -0
  181. package/dist/codeIndex/codeMap.js.map +1 -0
  182. package/dist/codeIndex/conventions.d.ts +33 -0
  183. package/dist/codeIndex/conventions.d.ts.map +1 -0
  184. package/dist/codeIndex/conventions.js +84 -0
  185. package/dist/codeIndex/conventions.js.map +1 -0
  186. package/dist/codeIndex/coverage.d.ts +78 -0
  187. package/dist/codeIndex/coverage.d.ts.map +1 -0
  188. package/dist/codeIndex/coverage.js +164 -0
  189. package/dist/codeIndex/coverage.js.map +1 -0
  190. package/dist/codeIndex/dependencyGraph.d.ts +97 -0
  191. package/dist/codeIndex/dependencyGraph.d.ts.map +1 -0
  192. package/dist/codeIndex/dependencyGraph.js +241 -0
  193. package/dist/codeIndex/dependencyGraph.js.map +1 -0
  194. package/dist/codeIndex/functionIndex.d.ts +111 -0
  195. package/dist/codeIndex/functionIndex.d.ts.map +1 -0
  196. package/dist/codeIndex/functionIndex.js +306 -0
  197. package/dist/codeIndex/functionIndex.js.map +1 -0
  198. package/dist/codeIndex/inferredReceivers.d.ts +32 -0
  199. package/dist/codeIndex/inferredReceivers.d.ts.map +1 -0
  200. package/dist/codeIndex/inferredReceivers.js +41 -0
  201. package/dist/codeIndex/inferredReceivers.js.map +1 -0
  202. package/dist/codeIndex/meta.d.ts +30 -0
  203. package/dist/codeIndex/meta.d.ts.map +1 -0
  204. package/dist/codeIndex/meta.js +37 -0
  205. package/dist/codeIndex/meta.js.map +1 -0
  206. package/dist/codeIndex/migrations.d.ts +96 -0
  207. package/dist/codeIndex/migrations.d.ts.map +1 -0
  208. package/dist/codeIndex/migrations.js +1302 -0
  209. package/dist/codeIndex/migrations.js.map +1 -0
  210. package/dist/codeIndex/projectTasks.d.ts +54 -0
  211. package/dist/codeIndex/projectTasks.d.ts.map +1 -0
  212. package/dist/codeIndex/projectTasks.js +81 -0
  213. package/dist/codeIndex/projectTasks.js.map +1 -0
  214. package/dist/codeIndex/provenance.d.ts +47 -0
  215. package/dist/codeIndex/provenance.d.ts.map +1 -0
  216. package/dist/codeIndex/provenance.js +48 -0
  217. package/dist/codeIndex/provenance.js.map +1 -0
  218. package/dist/codeIndex/rawSql.d.ts +54 -0
  219. package/dist/codeIndex/rawSql.d.ts.map +1 -0
  220. package/dist/codeIndex/rawSql.js +71 -0
  221. package/dist/codeIndex/rawSql.js.map +1 -0
  222. package/dist/codeIndex/schema.d.ts +99 -0
  223. package/dist/codeIndex/schema.d.ts.map +1 -0
  224. package/dist/codeIndex/schema.js +174 -0
  225. package/dist/codeIndex/schema.js.map +1 -0
  226. package/dist/codeIndex/search.d.ts +40 -0
  227. package/dist/codeIndex/search.d.ts.map +1 -0
  228. package/dist/codeIndex/search.js +316 -0
  229. package/dist/codeIndex/search.js.map +1 -0
  230. package/dist/codeIndex/shared.d.ts +27 -0
  231. package/dist/codeIndex/shared.d.ts.map +1 -0
  232. package/dist/codeIndex/shared.js +46 -0
  233. package/dist/codeIndex/shared.js.map +1 -0
  234. package/dist/codeIndex/sqliteCollection.d.ts +81 -0
  235. package/dist/codeIndex/sqliteCollection.d.ts.map +1 -0
  236. package/dist/codeIndex/sqliteCollection.js +250 -0
  237. package/dist/codeIndex/sqliteCollection.js.map +1 -0
  238. package/dist/codeIndex/whitelist.d.ts +59 -0
  239. package/dist/codeIndex/whitelist.d.ts.map +1 -0
  240. package/dist/codeIndex/whitelist.js +188 -0
  241. package/dist/codeIndex/whitelist.js.map +1 -0
  242. package/dist/codeIndexDB.d.ts +132 -271
  243. package/dist/codeIndexDB.d.ts.map +1 -1
  244. package/dist/codeIndexDB.js +365 -2729
  245. package/dist/codeIndexDB.js.map +1 -1
  246. package/dist/codeIndexService.d.ts +87 -12
  247. package/dist/codeIndexService.d.ts.map +1 -1
  248. package/dist/codeIndexService.js +110 -34
  249. package/dist/codeIndexService.js.map +1 -1
  250. package/dist/componentScanner.d.ts +35 -0
  251. package/dist/componentScanner.d.ts.map +1 -1
  252. package/dist/componentScanner.js +114 -80
  253. package/dist/componentScanner.js.map +1 -1
  254. package/dist/config/configGeneratePath.d.ts +4 -0
  255. package/dist/config/configGeneratePath.d.ts.map +1 -1
  256. package/dist/config/configGeneratePath.js +4 -0
  257. package/dist/config/configGeneratePath.js.map +1 -1
  258. package/dist/config/configLoader.d.ts +15 -0
  259. package/dist/config/configLoader.d.ts.map +1 -1
  260. package/dist/config/configLoader.js +15 -16
  261. package/dist/config/configLoader.js.map +1 -1
  262. package/dist/config/defaults.d.ts +11 -7
  263. package/dist/config/defaults.d.ts.map +1 -1
  264. package/dist/config/defaults.js +16 -14
  265. package/dist/config/defaults.js.map +1 -1
  266. package/dist/config/effectiveConfig.d.ts +17 -2
  267. package/dist/config/effectiveConfig.d.ts.map +1 -1
  268. package/dist/config/effectiveConfig.js +32 -25
  269. package/dist/config/effectiveConfig.js.map +1 -1
  270. package/dist/config/lintConfigReader.d.ts +6 -0
  271. package/dist/config/lintConfigReader.d.ts.map +1 -1
  272. package/dist/config/lintConfigReader.js +6 -0
  273. package/dist/config/lintConfigReader.js.map +1 -1
  274. package/dist/config/staticObjectExtract.d.ts +4 -0
  275. package/dist/config/staticObjectExtract.d.ts.map +1 -1
  276. package/dist/config/staticObjectExtract.js +7 -3
  277. package/dist/config/staticObjectExtract.js.map +1 -1
  278. package/dist/config/thresholdRationales.d.ts +2 -0
  279. package/dist/config/thresholdRationales.d.ts.map +1 -1
  280. package/dist/config/thresholdRationales.js +5 -2
  281. package/dist/config/thresholdRationales.js.map +1 -1
  282. package/dist/constants.d.ts +1 -1
  283. package/dist/conventions/conventionMiner.d.ts +105 -2
  284. package/dist/conventions/conventionMiner.d.ts.map +1 -1
  285. package/dist/conventions/conventionMiner.js +334 -259
  286. package/dist/conventions/conventionMiner.js.map +1 -1
  287. package/dist/coverage/coverageService.js +4 -4
  288. package/dist/coverage/coverageService.js.map +1 -1
  289. package/dist/daemon/args.d.ts +3 -0
  290. package/dist/daemon/args.d.ts.map +1 -1
  291. package/dist/daemon/args.js +3 -0
  292. package/dist/daemon/args.js.map +1 -1
  293. package/dist/daemon/core.d.ts +33 -27
  294. package/dist/daemon/core.d.ts.map +1 -1
  295. package/dist/daemon/core.js +198 -162
  296. package/dist/daemon/core.js.map +1 -1
  297. package/dist/daemon/lspServer.d.ts +8 -0
  298. package/dist/daemon/lspServer.d.ts.map +1 -1
  299. package/dist/daemon/lspServer.js +8 -0
  300. package/dist/daemon/lspServer.js.map +1 -1
  301. package/dist/daemon/main.d.ts +2 -0
  302. package/dist/daemon/main.d.ts.map +1 -1
  303. package/dist/daemon/main.js +22 -4
  304. package/dist/daemon/main.js.map +1 -1
  305. package/dist/daemon/resolve.d.ts +18 -3
  306. package/dist/daemon/resolve.d.ts.map +1 -1
  307. package/dist/daemon/resolve.js +25 -4
  308. package/dist/daemon/resolve.js.map +1 -1
  309. package/dist/daemon/socketClient.d.ts +10 -1
  310. package/dist/daemon/socketClient.d.ts.map +1 -1
  311. package/dist/daemon/socketClient.js +10 -1
  312. package/dist/daemon/socketClient.js.map +1 -1
  313. package/dist/daemon/socketServer.d.ts +13 -0
  314. package/dist/daemon/socketServer.d.ts.map +1 -1
  315. package/dist/daemon/socketServer.js +13 -0
  316. package/dist/daemon/socketServer.js.map +1 -1
  317. package/dist/dataPaths.d.ts +17 -8
  318. package/dist/dataPaths.d.ts.map +1 -1
  319. package/dist/dataPaths.js +16 -44
  320. package/dist/dataPaths.js.map +1 -1
  321. package/dist/dismissals.d.ts +22 -1
  322. package/dist/dismissals.d.ts.map +1 -1
  323. package/dist/dismissals.js +22 -1
  324. package/dist/dismissals.js.map +1 -1
  325. package/dist/enforcement/gate.d.ts +1 -0
  326. package/dist/enforcement/gate.d.ts.map +1 -1
  327. package/dist/enforcement/gate.js +1 -0
  328. package/dist/enforcement/gate.js.map +1 -1
  329. package/dist/fingerprint.d.ts +6 -0
  330. package/dist/fingerprint.d.ts.map +1 -1
  331. package/dist/fingerprint.js +46 -1
  332. package/dist/fingerprint.js.map +1 -1
  333. package/dist/functionScanner.d.ts +30 -1
  334. package/dist/functionScanner.d.ts.map +1 -1
  335. package/dist/functionScanner.js +258 -256
  336. package/dist/functionScanner.js.map +1 -1
  337. package/dist/generators/AWSQConfigGenerator.d.ts +23 -0
  338. package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
  339. package/dist/generators/AWSQConfigGenerator.js +23 -0
  340. package/dist/generators/AWSQConfigGenerator.js.map +1 -1
  341. package/dist/generators/BaseConfigGenerator.d.ts +7 -0
  342. package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
  343. package/dist/generators/BaseConfigGenerator.js +7 -0
  344. package/dist/generators/BaseConfigGenerator.js.map +1 -1
  345. package/dist/generators/ClaudeConfigGenerator.d.ts +23 -0
  346. package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
  347. package/dist/generators/ClaudeConfigGenerator.js +23 -0
  348. package/dist/generators/ClaudeConfigGenerator.js.map +1 -1
  349. package/dist/generators/ClineConfigGenerator.d.ts +23 -0
  350. package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
  351. package/dist/generators/ClineConfigGenerator.js +23 -0
  352. package/dist/generators/ClineConfigGenerator.js.map +1 -1
  353. package/dist/generators/CodeiumConfigGenerator.d.ts +23 -0
  354. package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
  355. package/dist/generators/CodeiumConfigGenerator.js +23 -0
  356. package/dist/generators/CodeiumConfigGenerator.js.map +1 -1
  357. package/dist/generators/CodexConfigGenerator.d.ts +23 -0
  358. package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
  359. package/dist/generators/CodexConfigGenerator.js +23 -0
  360. package/dist/generators/CodexConfigGenerator.js.map +1 -1
  361. package/dist/generators/ConfigGeneratorFactory.d.ts +9 -0
  362. package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
  363. package/dist/generators/ConfigGeneratorFactory.js +9 -0
  364. package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
  365. package/dist/generators/ContinueConfigGenerator.d.ts +23 -0
  366. package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
  367. package/dist/generators/ContinueConfigGenerator.js +23 -0
  368. package/dist/generators/ContinueConfigGenerator.js.map +1 -1
  369. package/dist/generators/CopilotConfigGenerator.d.ts +23 -0
  370. package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
  371. package/dist/generators/CopilotConfigGenerator.js +23 -0
  372. package/dist/generators/CopilotConfigGenerator.js.map +1 -1
  373. package/dist/generators/CursorConfigGenerator.d.ts +23 -0
  374. package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
  375. package/dist/generators/CursorConfigGenerator.js +23 -0
  376. package/dist/generators/CursorConfigGenerator.js.map +1 -1
  377. package/dist/generators/GeminiConfigGenerator.d.ts +23 -0
  378. package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
  379. package/dist/generators/GeminiConfigGenerator.js +23 -0
  380. package/dist/generators/GeminiConfigGenerator.js.map +1 -1
  381. package/dist/generators/VSCodeConfigGenerator.d.ts +23 -0
  382. package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
  383. package/dist/generators/VSCodeConfigGenerator.js +23 -0
  384. package/dist/generators/VSCodeConfigGenerator.js.map +1 -1
  385. package/dist/generators/ZCodeConfigGenerator.d.ts +23 -0
  386. package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
  387. package/dist/generators/ZCodeConfigGenerator.js +23 -0
  388. package/dist/generators/ZCodeConfigGenerator.js.map +1 -1
  389. package/dist/graph/blastRadius.d.ts.map +1 -1
  390. package/dist/graph/blastRadius.js +12 -7
  391. package/dist/graph/blastRadius.js.map +1 -1
  392. package/dist/graph/callGraph.d.ts +31 -0
  393. package/dist/graph/callGraph.d.ts.map +1 -1
  394. package/dist/graph/callGraph.js +62 -32
  395. package/dist/graph/callGraph.js.map +1 -1
  396. package/dist/graph/importClassification.d.ts +28 -0
  397. package/dist/graph/importClassification.d.ts.map +1 -1
  398. package/dist/graph/importClassification.js +57 -0
  399. package/dist/graph/importClassification.js.map +1 -1
  400. package/dist/graph/importGraph.d.ts +38 -0
  401. package/dist/graph/importGraph.d.ts.map +1 -1
  402. package/dist/graph/importGraph.js +38 -0
  403. package/dist/graph/importGraph.js.map +1 -1
  404. package/dist/graph/outputFormatter.d.ts +12 -4
  405. package/dist/graph/outputFormatter.d.ts.map +1 -1
  406. package/dist/graph/outputFormatter.js +12 -62
  407. package/dist/graph/outputFormatter.js.map +1 -1
  408. package/dist/graph/resolutionEnvironment.d.ts +61 -0
  409. package/dist/graph/resolutionEnvironment.d.ts.map +1 -0
  410. package/dist/graph/resolutionEnvironment.js +57 -0
  411. package/dist/graph/resolutionEnvironment.js.map +1 -0
  412. package/dist/hooks/codex.d.ts +8 -1
  413. package/dist/hooks/codex.d.ts.map +1 -1
  414. package/dist/hooks/codex.js +7 -0
  415. package/dist/hooks/codex.js.map +1 -1
  416. package/dist/hooks/core.d.ts +6 -0
  417. package/dist/hooks/core.d.ts.map +1 -1
  418. package/dist/hooks/core.js +6 -1
  419. package/dist/hooks/core.js.map +1 -1
  420. package/dist/hooks/cursor.d.ts +11 -1
  421. package/dist/hooks/cursor.d.ts.map +1 -1
  422. package/dist/hooks/cursor.js +10 -0
  423. package/dist/hooks/cursor.js.map +1 -1
  424. package/dist/index.d.ts +4 -0
  425. package/dist/index.d.ts.map +1 -1
  426. package/dist/index.js +4 -0
  427. package/dist/index.js.map +1 -1
  428. package/dist/installConfig.d.ts +23 -5
  429. package/dist/installConfig.d.ts.map +1 -1
  430. package/dist/installConfig.js +23 -5
  431. package/dist/installConfig.js.map +1 -1
  432. package/dist/installer.d.ts +6 -0
  433. package/dist/installer.d.ts.map +1 -1
  434. package/dist/installer.js +6 -0
  435. package/dist/installer.js.map +1 -1
  436. package/dist/invariants/ruleEngine.d.ts +3 -0
  437. package/dist/invariants/ruleEngine.d.ts.map +1 -1
  438. package/dist/invariants/ruleEngine.js +156 -119
  439. package/dist/invariants/ruleEngine.js.map +1 -1
  440. package/dist/invariants/ruleValidator.d.ts +3 -0
  441. package/dist/invariants/ruleValidator.d.ts.map +1 -1
  442. package/dist/invariants/ruleValidator.js +185 -178
  443. package/dist/invariants/ruleValidator.js.map +1 -1
  444. package/dist/languages/LanguageOrchestrator.d.ts +4 -1
  445. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  446. package/dist/languages/LanguageOrchestrator.js +8 -19
  447. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  448. package/dist/languages/RuntimeManager.d.ts +8 -0
  449. package/dist/languages/RuntimeManager.d.ts.map +1 -1
  450. package/dist/languages/RuntimeManager.js +55 -5
  451. package/dist/languages/RuntimeManager.js.map +1 -1
  452. package/dist/languages/UniversalAnalyzer.js +1 -1
  453. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  454. package/dist/languages/adapterBridge.d.ts +4 -0
  455. package/dist/languages/adapterBridge.d.ts.map +1 -1
  456. package/dist/languages/adapterBridge.js +37 -3
  457. package/dist/languages/adapterBridge.js.map +1 -1
  458. package/dist/languages/go/GoAdapter.d.ts.map +1 -1
  459. package/dist/languages/go/GoAdapter.js +11 -14
  460. package/dist/languages/go/GoAdapter.js.map +1 -1
  461. package/dist/languages/go/analyzer-darwin-amd64 +0 -0
  462. package/dist/languages/go/analyzer-darwin-arm64 +0 -0
  463. package/dist/languages/go/analyzer-linux-amd64 +0 -0
  464. package/dist/languages/go/analyzer-linux-arm64 +0 -0
  465. package/dist/languages/go/analyzer-src/analyzer.go +2 -0
  466. package/dist/languages/go/analyzer-src/dataaccess.go +388 -0
  467. package/dist/languages/go/analyzer-src/types.go +8 -0
  468. package/dist/languages/go/analyzer-windows-amd64.exe +0 -0
  469. package/dist/languages/go/database-packages.json +8 -0
  470. package/dist/languages/go/goResolution.d.ts +229 -0
  471. package/dist/languages/go/goResolution.d.ts.map +1 -0
  472. package/dist/languages/go/goResolution.js +799 -0
  473. package/dist/languages/go/goResolution.js.map +1 -0
  474. package/dist/languages/go/stdlib-packages.json +353 -0
  475. package/dist/languages/go/tenantInputs.d.ts +37 -0
  476. package/dist/languages/go/tenantInputs.d.ts.map +1 -0
  477. package/dist/languages/go/tenantInputs.js +121 -0
  478. package/dist/languages/go/tenantInputs.js.map +1 -0
  479. package/dist/languages/index.d.ts +1 -0
  480. package/dist/languages/index.d.ts.map +1 -1
  481. package/dist/languages/index.js +5 -0
  482. package/dist/languages/index.js.map +1 -1
  483. package/dist/languages/json/JsonAdapter.d.ts +177 -0
  484. package/dist/languages/json/JsonAdapter.d.ts.map +1 -0
  485. package/dist/languages/json/JsonAdapter.js +531 -0
  486. package/dist/languages/json/JsonAdapter.js.map +1 -0
  487. package/dist/languages/locationIndex.d.ts +41 -0
  488. package/dist/languages/locationIndex.d.ts.map +1 -0
  489. package/dist/languages/locationIndex.js +42 -0
  490. package/dist/languages/locationIndex.js.map +1 -0
  491. package/dist/languages/sql/dialectDetection.d.ts +57 -0
  492. package/dist/languages/sql/dialectDetection.d.ts.map +1 -0
  493. package/dist/languages/sql/dialectDetection.js +135 -0
  494. package/dist/languages/sql/dialectDetection.js.map +1 -0
  495. package/dist/languages/sql/sqlAst.d.ts +494 -0
  496. package/dist/languages/sql/sqlAst.d.ts.map +1 -0
  497. package/dist/languages/sql/sqlAst.js +1817 -0
  498. package/dist/languages/sql/sqlAst.js.map +1 -0
  499. package/dist/languages/testConventions.d.ts +12 -1
  500. package/dist/languages/testConventions.d.ts.map +1 -1
  501. package/dist/languages/testConventions.js +13 -1
  502. package/dist/languages/testConventions.js.map +1 -1
  503. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js +1 -1
  504. package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
  505. package/dist/languages/tree-sitter/converter.js +2 -2
  506. package/dist/languages/tree-sitter/converter.js.map +1 -1
  507. package/dist/languages/tree-sitter/parser.d.ts +3 -4
  508. package/dist/languages/tree-sitter/parser.d.ts.map +1 -1
  509. package/dist/languages/tree-sitter/parser.js +10 -4
  510. package/dist/languages/tree-sitter/parser.js.map +1 -1
  511. package/dist/languages/tree-sitter/rawNode.d.ts +3 -0
  512. package/dist/languages/tree-sitter/rawNode.d.ts.map +1 -1
  513. package/dist/languages/tree-sitter/rawNode.js +3 -0
  514. package/dist/languages/tree-sitter/rawNode.js.map +1 -1
  515. package/dist/languages/types.d.ts +7 -0
  516. package/dist/languages/types.d.ts.map +1 -1
  517. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +36 -0
  518. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
  519. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +168 -45
  520. package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
  521. package/dist/languages/typescript/database-packages.json +19 -0
  522. package/dist/ledger.d.ts +118 -2
  523. package/dist/ledger.d.ts.map +1 -1
  524. package/dist/ledger.js +167 -45
  525. package/dist/ledger.js.map +1 -1
  526. package/dist/legacyIndexNotice.d.ts +32 -0
  527. package/dist/legacyIndexNotice.d.ts.map +1 -0
  528. package/dist/legacyIndexNotice.js +89 -0
  529. package/dist/legacyIndexNotice.js.map +1 -0
  530. package/dist/mcp-tools/discoveryQueries.d.ts +55 -0
  531. package/dist/mcp-tools/discoveryQueries.d.ts.map +1 -0
  532. package/dist/mcp-tools/discoveryQueries.js +157 -0
  533. package/dist/mcp-tools/discoveryQueries.js.map +1 -0
  534. package/dist/mcp-tools/projectTasks.d.ts +9 -123
  535. package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
  536. package/dist/mcp-tools/projectTasks.js +180 -170
  537. package/dist/mcp-tools/projectTasks.js.map +1 -1
  538. package/dist/mcp-tools/whitelistTools.d.ts +20 -0
  539. package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
  540. package/dist/mcp-tools/whitelistTools.js +20 -0
  541. package/dist/mcp-tools/whitelistTools.js.map +1 -1
  542. package/dist/mcp-tools/workflowGuide.d.ts +9 -0
  543. package/dist/mcp-tools/workflowGuide.d.ts.map +1 -1
  544. package/dist/mcp-tools/workflowGuide.js +13 -5
  545. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  546. package/dist/mcp-tools-shared.d.ts +78 -0
  547. package/dist/mcp-tools-shared.d.ts.map +1 -1
  548. package/dist/mcp-tools-shared.js +203 -340
  549. package/dist/mcp-tools-shared.js.map +1 -1
  550. package/dist/mcp-ui-simple.d.ts +2 -0
  551. package/dist/mcp-ui-simple.d.ts.map +1 -1
  552. package/dist/mcp-ui-simple.js +12 -5
  553. package/dist/mcp-ui-simple.js.map +1 -1
  554. package/dist/mcp.d.ts +6 -0
  555. package/dist/mcp.d.ts.map +1 -1
  556. package/dist/mcp.js +827 -850
  557. package/dist/mcp.js.map +1 -1
  558. package/dist/mcpAuditJobs.d.ts +29 -33
  559. package/dist/mcpAuditJobs.d.ts.map +1 -1
  560. package/dist/mcpAuditJobs.js +102 -791
  561. package/dist/mcpAuditJobs.js.map +1 -1
  562. package/dist/mcpAutoIndex.d.ts +5 -0
  563. package/dist/mcpAutoIndex.d.ts.map +1 -1
  564. package/dist/mcpAutoIndex.js +7 -2
  565. package/dist/mcpAutoIndex.js.map +1 -1
  566. package/dist/mcpDiagnostics.d.ts +7 -0
  567. package/dist/mcpDiagnostics.d.ts.map +1 -1
  568. package/dist/mcpDiagnostics.js +34 -9
  569. package/dist/mcpDiagnostics.js.map +1 -1
  570. package/dist/mcpToolErrors.d.ts +16 -0
  571. package/dist/mcpToolErrors.d.ts.map +1 -1
  572. package/dist/mcpToolErrors.js +16 -0
  573. package/dist/mcpToolErrors.js.map +1 -1
  574. package/dist/nextFile.d.ts +6 -0
  575. package/dist/nextFile.d.ts.map +1 -1
  576. package/dist/nextFile.js +6 -0
  577. package/dist/nextFile.js.map +1 -1
  578. package/dist/nextFileIncremental.d.ts +44 -4
  579. package/dist/nextFileIncremental.d.ts.map +1 -1
  580. package/dist/nextFileIncremental.js +47 -7
  581. package/dist/nextFileIncremental.js.map +1 -1
  582. package/dist/phase/batchFunctions.d.ts +38 -0
  583. package/dist/phase/batchFunctions.d.ts.map +1 -0
  584. package/dist/phase/batchFunctions.js +64 -0
  585. package/dist/phase/batchFunctions.js.map +1 -0
  586. package/dist/phase/checks.d.ts +39 -0
  587. package/dist/phase/checks.d.ts.map +1 -0
  588. package/dist/phase/checks.js +48 -0
  589. package/dist/phase/checks.js.map +1 -0
  590. package/dist/phase/codeBlocks.d.ts +25 -0
  591. package/dist/phase/codeBlocks.d.ts.map +1 -0
  592. package/dist/phase/codeBlocks.js +268 -0
  593. package/dist/phase/codeBlocks.js.map +1 -0
  594. package/dist/phase/colorMath.d.ts +41 -0
  595. package/dist/phase/colorMath.d.ts.map +1 -0
  596. package/dist/phase/colorMath.js +109 -0
  597. package/dist/phase/colorMath.js.map +1 -0
  598. package/dist/phase/config.d.ts +29 -0
  599. package/dist/phase/config.d.ts.map +1 -0
  600. package/dist/phase/config.js +54 -0
  601. package/dist/phase/config.js.map +1 -0
  602. package/dist/phase/consumed.d.ts +47 -0
  603. package/dist/phase/consumed.d.ts.map +1 -0
  604. package/dist/phase/consumed.js +22 -0
  605. package/dist/phase/consumed.js.map +1 -0
  606. package/dist/phase/conventionMining.d.ts +59 -0
  607. package/dist/phase/conventionMining.d.ts.map +1 -0
  608. package/dist/phase/conventionMining.js +152 -0
  609. package/dist/phase/conventionMining.js.map +1 -0
  610. package/dist/phase/coverage.d.ts +65 -0
  611. package/dist/phase/coverage.d.ts.map +1 -0
  612. package/dist/phase/coverage.js +121 -0
  613. package/dist/phase/coverage.js.map +1 -0
  614. package/dist/phase/dag.d.ts +49 -0
  615. package/dist/phase/dag.d.ts.map +1 -0
  616. package/dist/phase/dag.js +120 -0
  617. package/dist/phase/dag.js.map +1 -0
  618. package/dist/phase/dataAccessCalls.d.ts +33 -0
  619. package/dist/phase/dataAccessCalls.d.ts.map +1 -0
  620. package/dist/phase/dataAccessCalls.js +42 -0
  621. package/dist/phase/dataAccessCalls.js.map +1 -0
  622. package/dist/phase/dataAccessCallsCandidates.d.ts +25 -0
  623. package/dist/phase/dataAccessCallsCandidates.d.ts.map +1 -0
  624. package/dist/phase/dataAccessCallsCandidates.js +27 -0
  625. package/dist/phase/dataAccessCallsCandidates.js.map +1 -0
  626. package/dist/phase/dynamicSql.d.ts +18 -0
  627. package/dist/phase/dynamicSql.d.ts.map +1 -0
  628. package/dist/phase/dynamicSql.js +20 -0
  629. package/dist/phase/dynamicSql.js.map +1 -0
  630. package/dist/phase/exportForm.d.ts +23 -0
  631. package/dist/phase/exportForm.d.ts.map +1 -0
  632. package/dist/phase/exportForm.js +29 -0
  633. package/dist/phase/exportForm.js.map +1 -0
  634. package/dist/phase/exportSymbols.d.ts +21 -0
  635. package/dist/phase/exportSymbols.d.ts.map +1 -0
  636. package/dist/phase/exportSymbols.js +28 -0
  637. package/dist/phase/exportSymbols.js.map +1 -0
  638. package/dist/phase/fileHeader.d.ts +15 -0
  639. package/dist/phase/fileHeader.d.ts.map +1 -0
  640. package/dist/phase/fileHeader.js +33 -0
  641. package/dist/phase/fileHeader.js.map +1 -0
  642. package/dist/phase/fileImports.d.ts +39 -0
  643. package/dist/phase/fileImports.d.ts.map +1 -0
  644. package/dist/phase/fileImports.js +138 -0
  645. package/dist/phase/fileImports.js.map +1 -0
  646. package/dist/phase/fileSymbols.d.ts +25 -0
  647. package/dist/phase/fileSymbols.d.ts.map +1 -0
  648. package/dist/phase/fileSymbols.js +302 -0
  649. package/dist/phase/fileSymbols.js.map +1 -0
  650. package/dist/phase/functionBodies.d.ts +28 -0
  651. package/dist/phase/functionBodies.d.ts.map +1 -0
  652. package/dist/phase/functionBodies.js +67 -0
  653. package/dist/phase/functionBodies.js.map +1 -0
  654. package/dist/phase/functionIndex.d.ts +28 -0
  655. package/dist/phase/functionIndex.d.ts.map +1 -0
  656. package/dist/phase/functionIndex.js +152 -0
  657. package/dist/phase/functionIndex.js.map +1 -0
  658. package/dist/phase/goFunctionAnalysis.d.ts +47 -0
  659. package/dist/phase/goFunctionAnalysis.d.ts.map +1 -0
  660. package/dist/phase/goFunctionAnalysis.js +291 -0
  661. package/dist/phase/goFunctionAnalysis.js.map +1 -0
  662. package/dist/phase/goFunctions.d.ts +38 -0
  663. package/dist/phase/goFunctions.d.ts.map +1 -0
  664. package/dist/phase/goFunctions.js +154 -0
  665. package/dist/phase/goFunctions.js.map +1 -0
  666. package/dist/phase/goImports.d.ts +29 -0
  667. package/dist/phase/goImports.d.ts.map +1 -0
  668. package/dist/phase/goImports.js +68 -0
  669. package/dist/phase/goImports.js.map +1 -0
  670. package/dist/phase/goPackageBindings.d.ts +22 -0
  671. package/dist/phase/goPackageBindings.d.ts.map +1 -0
  672. package/dist/phase/goPackageBindings.js +30 -0
  673. package/dist/phase/goPackageBindings.js.map +1 -0
  674. package/dist/phase/goSwitches.d.ts +28 -0
  675. package/dist/phase/goSwitches.d.ts.map +1 -0
  676. package/dist/phase/goSwitches.js +52 -0
  677. package/dist/phase/goSwitches.js.map +1 -0
  678. package/dist/phase/importForm.d.ts +20 -0
  679. package/dist/phase/importForm.d.ts.map +1 -0
  680. package/dist/phase/importForm.js +27 -0
  681. package/dist/phase/importForm.js.map +1 -0
  682. package/dist/phase/importSpecifiers.d.ts +20 -0
  683. package/dist/phase/importSpecifiers.d.ts.map +1 -0
  684. package/dist/phase/importSpecifiers.js +30 -0
  685. package/dist/phase/importSpecifiers.js.map +1 -0
  686. package/dist/phase/imports.d.ts +18 -0
  687. package/dist/phase/imports.d.ts.map +1 -0
  688. package/dist/phase/imports.js +25 -0
  689. package/dist/phase/imports.js.map +1 -0
  690. package/dist/phase/jsonDocument.d.ts +26 -0
  691. package/dist/phase/jsonDocument.d.ts.map +1 -0
  692. package/dist/phase/jsonDocument.js +36 -0
  693. package/dist/phase/jsonDocument.js.map +1 -0
  694. package/dist/phase/localBinding.d.ts +33 -0
  695. package/dist/phase/localBinding.d.ts.map +1 -0
  696. package/dist/phase/localBinding.js +208 -0
  697. package/dist/phase/localBinding.js.map +1 -0
  698. package/dist/phase/loopQueries.d.ts +31 -0
  699. package/dist/phase/loopQueries.d.ts.map +1 -0
  700. package/dist/phase/loopQueries.js +44 -0
  701. package/dist/phase/loopQueries.js.map +1 -0
  702. package/dist/phase/loopQueryCandidates.d.ts +26 -0
  703. package/dist/phase/loopQueryCandidates.d.ts.map +1 -0
  704. package/dist/phase/loopQueryCandidates.js +28 -0
  705. package/dist/phase/loopQueryCandidates.js.map +1 -0
  706. package/dist/phase/oracles.d.ts +216 -0
  707. package/dist/phase/oracles.d.ts.map +1 -0
  708. package/dist/phase/oracles.js +484 -0
  709. package/dist/phase/oracles.js.map +1 -0
  710. package/dist/phase/phaseModel.d.ts +190 -0
  711. package/dist/phase/phaseModel.d.ts.map +1 -0
  712. package/dist/phase/phaseModel.js +491 -0
  713. package/dist/phase/phaseModel.js.map +1 -0
  714. package/dist/phase/producers.d.ts +450 -0
  715. package/dist/phase/producers.d.ts.map +1 -0
  716. package/dist/phase/producers.js +1030 -0
  717. package/dist/phase/producers.js.map +1 -0
  718. package/dist/phase/querySiteCandidates.d.ts +27 -0
  719. package/dist/phase/querySiteCandidates.d.ts.map +1 -0
  720. package/dist/phase/querySiteCandidates.js +66 -0
  721. package/dist/phase/querySiteCandidates.js.map +1 -0
  722. package/dist/phase/querySites.d.ts +30 -0
  723. package/dist/phase/querySites.d.ts.map +1 -0
  724. package/dist/phase/querySites.js +93 -0
  725. package/dist/phase/querySites.js.map +1 -0
  726. package/dist/phase/reachability.d.ts +61 -0
  727. package/dist/phase/reachability.d.ts.map +1 -0
  728. package/dist/phase/reachability.js +104 -0
  729. package/dist/phase/reachability.js.map +1 -0
  730. package/dist/phase/reactComponents.d.ts +33 -0
  731. package/dist/phase/reactComponents.d.ts.map +1 -0
  732. package/dist/phase/reactComponents.js +47 -0
  733. package/dist/phase/reactComponents.js.map +1 -0
  734. package/dist/phase/receiverActivity.d.ts +35 -0
  735. package/dist/phase/receiverActivity.d.ts.map +1 -0
  736. package/dist/phase/receiverActivity.js +66 -0
  737. package/dist/phase/receiverActivity.js.map +1 -0
  738. package/dist/phase/receiverConsumers.d.ts +207 -0
  739. package/dist/phase/receiverConsumers.d.ts.map +1 -0
  740. package/dist/phase/receiverConsumers.js +1063 -0
  741. package/dist/phase/receiverConsumers.js.map +1 -0
  742. package/dist/phase/receiverProvenance.d.ts +120 -0
  743. package/dist/phase/receiverProvenance.d.ts.map +1 -0
  744. package/dist/phase/receiverProvenance.js +377 -0
  745. package/dist/phase/receiverProvenance.js.map +1 -0
  746. package/dist/phase/routing.d.ts +47 -0
  747. package/dist/phase/routing.d.ts.map +1 -0
  748. package/dist/phase/routing.js +62 -0
  749. package/dist/phase/routing.js.map +1 -0
  750. package/dist/phase/rules/conventions.d.ts +61 -0
  751. package/dist/phase/rules/conventions.d.ts.map +1 -0
  752. package/dist/phase/rules/conventions.js +403 -0
  753. package/dist/phase/rules/conventions.js.map +1 -0
  754. package/dist/phase/rules/crossDomain.d.ts +102 -0
  755. package/dist/phase/rules/crossDomain.d.ts.map +1 -0
  756. package/dist/phase/rules/crossDomain.js +918 -0
  757. package/dist/phase/rules/crossDomain.js.map +1 -0
  758. package/dist/phase/rules/dataAccess.d.ts +62 -0
  759. package/dist/phase/rules/dataAccess.d.ts.map +1 -0
  760. package/dist/phase/rules/dataAccess.js +480 -0
  761. package/dist/phase/rules/dataAccess.js.map +1 -0
  762. package/dist/phase/rules/dependencyGraph.d.ts +44 -0
  763. package/dist/phase/rules/dependencyGraph.d.ts.map +1 -0
  764. package/dist/phase/rules/dependencyGraph.js +260 -0
  765. package/dist/phase/rules/dependencyGraph.js.map +1 -0
  766. package/dist/phase/rules/documentation.d.ts +45 -0
  767. package/dist/phase/rules/documentation.d.ts.map +1 -0
  768. package/dist/phase/rules/documentation.js +340 -0
  769. package/dist/phase/rules/documentation.js.map +1 -0
  770. package/dist/phase/rules/dry.d.ts +109 -0
  771. package/dist/phase/rules/dry.d.ts.map +1 -0
  772. package/dist/phase/rules/dry.js +803 -0
  773. package/dist/phase/rules/dry.js.map +1 -0
  774. package/dist/phase/rules/fileDocumentation.d.ts +36 -0
  775. package/dist/phase/rules/fileDocumentation.d.ts.map +1 -0
  776. package/dist/phase/rules/fileDocumentation.js +134 -0
  777. package/dist/phase/rules/fileDocumentation.js.map +1 -0
  778. package/dist/phase/rules/functionBodies.d.ts +33 -0
  779. package/dist/phase/rules/functionBodies.d.ts.map +1 -0
  780. package/dist/phase/rules/functionBodies.js +71 -0
  781. package/dist/phase/rules/functionBodies.js.map +1 -0
  782. package/dist/phase/rules/goRules.d.ts +49 -0
  783. package/dist/phase/rules/goRules.d.ts.map +1 -0
  784. package/dist/phase/rules/goRules.js +209 -0
  785. package/dist/phase/rules/goRules.js.map +1 -0
  786. package/dist/phase/rules/querySites.d.ts +29 -0
  787. package/dist/phase/rules/querySites.d.ts.map +1 -0
  788. package/dist/phase/rules/querySites.js +94 -0
  789. package/dist/phase/rules/querySites.js.map +1 -0
  790. package/dist/phase/rules/react.d.ts +38 -0
  791. package/dist/phase/rules/react.d.ts.map +1 -0
  792. package/dist/phase/rules/react.js +202 -0
  793. package/dist/phase/rules/react.js.map +1 -0
  794. package/dist/phase/rules/registry.d.ts +170 -0
  795. package/dist/phase/rules/registry.d.ts.map +1 -0
  796. package/dist/phase/rules/registry.js +103 -0
  797. package/dist/phase/rules/registry.js.map +1 -0
  798. package/dist/phase/rules/schema.d.ts +79 -0
  799. package/dist/phase/rules/schema.d.ts.map +1 -0
  800. package/dist/phase/rules/schema.js +273 -0
  801. package/dist/phase/rules/schema.js.map +1 -0
  802. package/dist/phase/rules/schemaJson.d.ts +32 -0
  803. package/dist/phase/rules/schemaJson.d.ts.map +1 -0
  804. package/dist/phase/rules/schemaJson.js +81 -0
  805. package/dist/phase/rules/schemaJson.js.map +1 -0
  806. package/dist/phase/rules/schemaValidator.d.ts +38 -0
  807. package/dist/phase/rules/schemaValidator.d.ts.map +1 -0
  808. package/dist/phase/rules/schemaValidator.js +107 -0
  809. package/dist/phase/rules/schemaValidator.js.map +1 -0
  810. package/dist/phase/rules/secrets.d.ts +34 -0
  811. package/dist/phase/rules/secrets.d.ts.map +1 -0
  812. package/dist/phase/rules/secrets.js +208 -0
  813. package/dist/phase/rules/secrets.js.map +1 -0
  814. package/dist/phase/rules/security.d.ts +30 -0
  815. package/dist/phase/rules/security.d.ts.map +1 -0
  816. package/dist/phase/rules/security.js +85 -0
  817. package/dist/phase/rules/security.js.map +1 -0
  818. package/dist/phase/rules/securityDefects.d.ts +37 -0
  819. package/dist/phase/rules/securityDefects.d.ts.map +1 -0
  820. package/dist/phase/rules/securityDefects.js +167 -0
  821. package/dist/phase/rules/securityDefects.js.map +1 -0
  822. package/dist/phase/rules/solid.d.ts +61 -0
  823. package/dist/phase/rules/solid.d.ts.map +1 -0
  824. package/dist/phase/rules/solid.js +562 -0
  825. package/dist/phase/rules/solid.js.map +1 -0
  826. package/dist/phase/rules/styles.d.ts +77 -0
  827. package/dist/phase/rules/styles.d.ts.map +1 -0
  828. package/dist/phase/rules/styles.js +868 -0
  829. package/dist/phase/rules/styles.js.map +1 -0
  830. package/dist/phase/rules/unreferencedModule.d.ts +26 -0
  831. package/dist/phase/rules/unreferencedModule.d.ts.map +1 -0
  832. package/dist/phase/rules/unreferencedModule.js +61 -0
  833. package/dist/phase/rules/unreferencedModule.js.map +1 -0
  834. package/dist/phase/runner.d.ts +549 -0
  835. package/dist/phase/runner.d.ts.map +1 -0
  836. package/dist/phase/runner.js +1098 -0
  837. package/dist/phase/runner.js.map +1 -0
  838. package/dist/phase/schemaCode.d.ts +34 -0
  839. package/dist/phase/schemaCode.d.ts.map +1 -0
  840. package/dist/phase/schemaCode.js +53 -0
  841. package/dist/phase/schemaCode.js.map +1 -0
  842. package/dist/phase/schemaObjects.d.ts +37 -0
  843. package/dist/phase/schemaObjects.d.ts.map +1 -0
  844. package/dist/phase/schemaObjects.js +139 -0
  845. package/dist/phase/schemaObjects.js.map +1 -0
  846. package/dist/phase/schemaUsage.d.ts +30 -0
  847. package/dist/phase/schemaUsage.d.ts.map +1 -0
  848. package/dist/phase/schemaUsage.js +99 -0
  849. package/dist/phase/schemaUsage.js.map +1 -0
  850. package/dist/phase/schemaUsageCandidates.d.ts +32 -0
  851. package/dist/phase/schemaUsageCandidates.d.ts.map +1 -0
  852. package/dist/phase/schemaUsageCandidates.js +165 -0
  853. package/dist/phase/schemaUsageCandidates.js.map +1 -0
  854. package/dist/phase/schemaValidations.d.ts +34 -0
  855. package/dist/phase/schemaValidations.d.ts.map +1 -0
  856. package/dist/phase/schemaValidations.js +53 -0
  857. package/dist/phase/schemaValidations.js.map +1 -0
  858. package/dist/phase/secretCandidates.d.ts +28 -0
  859. package/dist/phase/secretCandidates.d.ts.map +1 -0
  860. package/dist/phase/secretCandidates.js +132 -0
  861. package/dist/phase/secretCandidates.js.map +1 -0
  862. package/dist/phase/securityCandidates.d.ts +29 -0
  863. package/dist/phase/securityCandidates.d.ts.map +1 -0
  864. package/dist/phase/securityCandidates.js +469 -0
  865. package/dist/phase/securityCandidates.js.map +1 -0
  866. package/dist/phase/seeded-defects.d.ts +18 -0
  867. package/dist/phase/seeded-defects.d.ts.map +1 -0
  868. package/dist/phase/seeded-defects.js +61 -0
  869. package/dist/phase/seeded-defects.js.map +1 -0
  870. package/dist/phase/stringLiterals.d.ts +24 -0
  871. package/dist/phase/stringLiterals.d.ts.map +1 -0
  872. package/dist/phase/stringLiterals.js +35 -0
  873. package/dist/phase/stringLiterals.js.map +1 -0
  874. package/dist/phase/stylesCss.d.ts +25 -0
  875. package/dist/phase/stylesCss.d.ts.map +1 -0
  876. package/dist/phase/stylesCss.js +34 -0
  877. package/dist/phase/stylesCss.js.map +1 -0
  878. package/dist/phase/stylesMarkup.d.ts +31 -0
  879. package/dist/phase/stylesMarkup.d.ts.map +1 -0
  880. package/dist/phase/stylesMarkup.js +48 -0
  881. package/dist/phase/stylesMarkup.js.map +1 -0
  882. package/dist/phase/stylesSource.d.ts +36 -0
  883. package/dist/phase/stylesSource.d.ts.map +1 -0
  884. package/dist/phase/stylesSource.js +50 -0
  885. package/dist/phase/stylesSource.js.map +1 -0
  886. package/dist/phase/typeDeclarations.d.ts +33 -0
  887. package/dist/phase/typeDeclarations.d.ts.map +1 -0
  888. package/dist/phase/typeDeclarations.js +76 -0
  889. package/dist/phase/typeDeclarations.js.map +1 -0
  890. package/dist/phase/types.d.ts +2199 -0
  891. package/dist/phase/types.d.ts.map +1 -0
  892. package/dist/phase/types.js +27 -0
  893. package/dist/phase/types.js.map +1 -0
  894. package/dist/phase/withinFileProvenance.d.ts +50 -0
  895. package/dist/phase/withinFileProvenance.d.ts.map +1 -0
  896. package/dist/phase/withinFileProvenance.js +112 -0
  897. package/dist/phase/withinFileProvenance.js.map +1 -0
  898. package/dist/pipeline.d.ts +37 -30
  899. package/dist/pipeline.d.ts.map +1 -1
  900. package/dist/pipeline.js +131 -326
  901. package/dist/pipeline.js.map +1 -1
  902. package/dist/pipelineAdapters.d.ts +104 -21
  903. package/dist/pipelineAdapters.d.ts.map +1 -1
  904. package/dist/pipelineAdapters.js +1144 -984
  905. package/dist/pipelineAdapters.js.map +1 -1
  906. package/dist/pipelineTypes.d.ts +21 -0
  907. package/dist/pipelineTypes.d.ts.map +1 -1
  908. package/dist/pipelineTypes.js +21 -10
  909. package/dist/pipelineTypes.js.map +1 -1
  910. package/dist/presets/presets.d.ts +9 -2
  911. package/dist/presets/presets.d.ts.map +1 -1
  912. package/dist/presets/presets.js +15 -26
  913. package/dist/presets/presets.js.map +1 -1
  914. package/dist/reporting/csvReportGenerator.d.ts +14 -3
  915. package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
  916. package/dist/reporting/csvReportGenerator.js +14 -3
  917. package/dist/reporting/csvReportGenerator.js.map +1 -1
  918. package/dist/reporting/htmlReportGenerator.d.ts +5 -1
  919. package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
  920. package/dist/reporting/htmlReportGenerator.js +5 -1
  921. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  922. package/dist/reporting/jsonReportGenerator.d.ts +9 -2
  923. package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
  924. package/dist/reporting/jsonReportGenerator.js +19 -5
  925. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  926. package/dist/reporting/reportGenerator.d.ts +9 -2
  927. package/dist/reporting/reportGenerator.d.ts.map +1 -1
  928. package/dist/reporting/reportGenerator.js +9 -2
  929. package/dist/reporting/reportGenerator.js.map +1 -1
  930. package/dist/reporting/sarifReportGenerator.d.ts +14 -0
  931. package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
  932. package/dist/reporting/sarifReportGenerator.js +14 -0
  933. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  934. package/dist/reporting/sizeDistribution.d.ts +19 -2
  935. package/dist/reporting/sizeDistribution.d.ts.map +1 -1
  936. package/dist/reporting/sizeDistribution.js +23 -5
  937. package/dist/reporting/sizeDistribution.js.map +1 -1
  938. package/dist/ruleAliases.d.ts +6 -8
  939. package/dist/ruleAliases.d.ts.map +1 -1
  940. package/dist/ruleAliases.js +29 -4
  941. package/dist/ruleAliases.js.map +1 -1
  942. package/dist/search/QueryParser.d.ts +1 -0
  943. package/dist/search/QueryParser.d.ts.map +1 -1
  944. package/dist/search/QueryParser.js +32 -91
  945. package/dist/search/QueryParser.js.map +1 -1
  946. package/dist/services/CodeMapGenerator.d.ts +19 -20
  947. package/dist/services/CodeMapGenerator.d.ts.map +1 -1
  948. package/dist/services/CodeMapGenerator.js +214 -194
  949. package/dist/services/CodeMapGenerator.js.map +1 -1
  950. package/dist/services/ProjectTaskRepository.d.ts +65 -3
  951. package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
  952. package/dist/services/ProjectTaskRepository.js +94 -25
  953. package/dist/services/ProjectTaskRepository.js.map +1 -1
  954. package/dist/services/auditJobService.d.ts +17 -1
  955. package/dist/services/auditJobService.d.ts.map +1 -1
  956. package/dist/services/auditJobService.js +16 -0
  957. package/dist/services/auditJobService.js.map +1 -1
  958. package/dist/services/fileAccounting.d.ts +43 -5
  959. package/dist/services/fileAccounting.d.ts.map +1 -1
  960. package/dist/services/fileAccounting.js +48 -9
  961. package/dist/services/fileAccounting.js.map +1 -1
  962. package/dist/services/projectTaskHelpers.d.ts +45 -0
  963. package/dist/services/projectTaskHelpers.d.ts.map +1 -1
  964. package/dist/services/projectTaskHelpers.js +45 -0
  965. package/dist/services/projectTaskHelpers.js.map +1 -1
  966. package/dist/services/whitelistService.d.ts +40 -5
  967. package/dist/services/whitelistService.d.ts.map +1 -1
  968. package/dist/services/whitelistService.js +87 -46
  969. package/dist/services/whitelistService.js.map +1 -1
  970. package/dist/sqlite/betterSqlite3.d.ts +35 -1
  971. package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
  972. package/dist/sqlite/betterSqlite3.js +35 -1
  973. package/dist/sqlite/betterSqlite3.js.map +1 -1
  974. package/dist/sqlite/driver.d.ts +23 -0
  975. package/dist/sqlite/driver.d.ts.map +1 -1
  976. package/dist/sqlite/driver.js +23 -0
  977. package/dist/sqlite/driver.js.map +1 -1
  978. package/dist/sqlite/nodeSqlite.d.ts +35 -1
  979. package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
  980. package/dist/sqlite/nodeSqlite.js +35 -1
  981. package/dist/sqlite/nodeSqlite.js.map +1 -1
  982. package/dist/structuralSignature.d.ts +9 -0
  983. package/dist/structuralSignature.d.ts.map +1 -1
  984. package/dist/structuralSignature.js +9 -0
  985. package/dist/structuralSignature.js.map +1 -1
  986. package/dist/styles/cssAstExtractor.d.ts +15 -0
  987. package/dist/styles/cssAstExtractor.d.ts.map +1 -1
  988. package/dist/styles/cssAstExtractor.js +15 -0
  989. package/dist/styles/cssAstExtractor.js.map +1 -1
  990. package/dist/styles/normalizer.d.ts +6 -0
  991. package/dist/styles/normalizer.d.ts.map +1 -1
  992. package/dist/styles/normalizer.js +6 -0
  993. package/dist/styles/normalizer.js.map +1 -1
  994. package/dist/styles/styleExtractor.d.ts +29 -2
  995. package/dist/styles/styleExtractor.d.ts.map +1 -1
  996. package/dist/styles/styleExtractor.js +67 -48
  997. package/dist/styles/styleExtractor.js.map +1 -1
  998. package/dist/styles/styleIndexer.d.ts +8 -0
  999. package/dist/styles/styleIndexer.d.ts.map +1 -1
  1000. package/dist/styles/styleIndexer.js +135 -138
  1001. package/dist/styles/styleIndexer.js.map +1 -1
  1002. package/dist/styles/tailwindConfigLoader.d.ts +12 -0
  1003. package/dist/styles/tailwindConfigLoader.d.ts.map +1 -1
  1004. package/dist/styles/tailwindConfigLoader.js +12 -0
  1005. package/dist/styles/tailwindConfigLoader.js.map +1 -1
  1006. package/dist/styles/tailwindExpander.d.ts +3 -0
  1007. package/dist/styles/tailwindExpander.d.ts.map +1 -1
  1008. package/dist/styles/tailwindExpander.js +8 -4
  1009. package/dist/styles/tailwindExpander.js.map +1 -1
  1010. package/dist/styles/tailwindProbe.d.ts +9 -0
  1011. package/dist/styles/tailwindProbe.d.ts.map +1 -1
  1012. package/dist/styles/tailwindProbe.js +181 -166
  1013. package/dist/styles/tailwindProbe.js.map +1 -1
  1014. package/dist/styles/tailwindUtilityExpander.d.ts +13 -0
  1015. package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
  1016. package/dist/styles/tailwindUtilityExpander.js +13 -0
  1017. package/dist/styles/tailwindUtilityExpander.js.map +1 -1
  1018. package/dist/symbols.d.ts +13 -11
  1019. package/dist/symbols.d.ts.map +1 -1
  1020. package/dist/symbols.js +14 -21
  1021. package/dist/symbols.js.map +1 -1
  1022. package/dist/telemetry.d.ts +31 -3
  1023. package/dist/telemetry.d.ts.map +1 -1
  1024. package/dist/telemetry.js +31 -3
  1025. package/dist/telemetry.js.map +1 -1
  1026. package/dist/tool-registry.d.ts +37 -1
  1027. package/dist/tool-registry.d.ts.map +1 -1
  1028. package/dist/tool-registry.js +37 -1
  1029. package/dist/tool-registry.js.map +1 -1
  1030. package/dist/types.d.ts +114 -71
  1031. package/dist/types.d.ts.map +1 -1
  1032. package/dist/types.js +7 -16
  1033. package/dist/types.js.map +1 -1
  1034. package/dist/ui/InteractivePrompts.d.ts +12 -0
  1035. package/dist/ui/InteractivePrompts.d.ts.map +1 -1
  1036. package/dist/ui/InteractivePrompts.js +12 -0
  1037. package/dist/ui/InteractivePrompts.js.map +1 -1
  1038. package/dist/utils/astParser.d.ts +15 -0
  1039. package/dist/utils/astParser.d.ts.map +1 -1
  1040. package/dist/utils/astParser.js +15 -0
  1041. package/dist/utils/astParser.js.map +1 -1
  1042. package/dist/utils/astUtils.d.ts +60 -0
  1043. package/dist/utils/astUtils.d.ts.map +1 -1
  1044. package/dist/utils/astUtils.js +350 -362
  1045. package/dist/utils/astUtils.js.map +1 -1
  1046. package/dist/utils/contentHash.d.ts +22 -0
  1047. package/dist/utils/contentHash.d.ts.map +1 -0
  1048. package/dist/utils/contentHash.js +26 -0
  1049. package/dist/utils/contentHash.js.map +1 -0
  1050. package/dist/utils/dependencyExtractor.d.ts +28 -0
  1051. package/dist/utils/dependencyExtractor.d.ts.map +1 -1
  1052. package/dist/utils/dependencyExtractor.js +28 -1
  1053. package/dist/utils/dependencyExtractor.js.map +1 -1
  1054. package/dist/utils/errorMessage.d.ts +10 -0
  1055. package/dist/utils/errorMessage.d.ts.map +1 -0
  1056. package/dist/utils/errorMessage.js +12 -0
  1057. package/dist/utils/errorMessage.js.map +1 -0
  1058. package/dist/utils/fileDiscovery.d.ts +61 -2
  1059. package/dist/utils/fileDiscovery.d.ts.map +1 -1
  1060. package/dist/utils/fileDiscovery.js +131 -23
  1061. package/dist/utils/fileDiscovery.js.map +1 -1
  1062. package/dist/utils/reactDetection.d.ts +34 -5
  1063. package/dist/utils/reactDetection.d.ts.map +1 -1
  1064. package/dist/utils/reactDetection.js +73 -52
  1065. package/dist/utils/reactDetection.js.map +1 -1
  1066. package/dist/version.generated.d.ts +1 -1
  1067. package/dist/version.generated.js +1 -1
  1068. package/dist/workers/auditWorker.js +7 -3
  1069. package/dist/workers/auditWorker.js.map +1 -1
  1070. package/examples/.auditrc.example.json +0 -8
  1071. package/examples/.auditrc.json +0 -11
  1072. package/examples/.code-auditor.json +0 -2
  1073. package/examples/nextjs.auditrc.json +0 -8
  1074. package/examples/node-api.auditrc.json +0 -7
  1075. package/examples/react.auditrc.json +0 -6
  1076. package/examples/tolerant-solid.auditrc.json +0 -5
  1077. package/package.json +18 -9
  1078. package/plugin/.claude-plugin/manifest.json +16 -0
  1079. package/plugin/.claude-plugin/plugin.json +1 -1
  1080. package/plugin/hooks/hooks.json +7 -3
  1081. package/plugin/scripts/hook-audit.sh +46 -16
  1082. package/plugin/scripts/hook-common.sh +81 -12
  1083. package/plugin/scripts/hook-drift-check.sh +76 -0
  1084. package/plugin/scripts/hook-self-audit.sh +22 -14
  1085. package/plugin/scripts/hook-warm.sh +5 -6
  1086. package/plugin/skills/code-auditor/SKILL.md +1 -1
  1087. package/server.json +10 -4
@@ -0,0 +1,1063 @@
1
+ /**
2
+ * Spec 70 Item 4 (step 3) — the corpus-side reductions for the four receiver
3
+ * consumers, over the `receiver-activity` file fact + the `receiver-provenance`
4
+ * fixed point.
5
+ *
6
+ * The collapse makes each receiver consumer a corpus producer: it reads (a) a raw
7
+ * file fact extracted while the AST lived, and (b) the provenance fixed point, and
8
+ * re-derives the file's `buildProvenanceContext().dbProvenanced` with no AST via
9
+ * `classifyBuildProvenance`. This module holds the shared rehydration + the gate
10
+ * mirror those reductions need, so each consumer's `process` is a thin projection
11
+ * over pre-rehydrated provenance. The rehydrators are the inverse of the file
12
+ * producers' serialization: `evidenceFromFact`/`tsExtractFromFact` rebuild the
13
+ * `ProvenanceEvidence`/`TsWithinFileProvenanceExtract` the classify seam reads, and
14
+ * `rehydrateReceiverActivity` rebuilds the `Binding`/`R3Site` inputs
15
+ * `classifyBuildProvenance` folds R3 over.
16
+ */
17
+ import picomatch from 'picomatch';
18
+ import { barePackageName } from '../analyzers/receiverRoot.js';
19
+ import { classifyBuildProvenance, evidenceFromFact, rehydrateWithinFileProvenance, bindingFromFact } from './receiverProvenance.js';
20
+ import { DEFAULT_SCHEMA_CONFIG } from '../analyzers/universal/schema/config.js';
21
+ import { identifyHandle } from '../analyzers/handleIdentification.js';
22
+ import { handleTypesForPackage } from '../analyzers/tsEcosystem.js';
23
+ import { parseSqlTables } from '../analyzers/universal/schema/codeAnalysis.js';
24
+ import { dialectForPackage } from '../languages/sql/dialectDetection.js';
25
+ import { parseSql, DEFAULT_SQL_DIALECT, extractTableNames, whereFacts, isWriteStatement, isMassWriteStatement, isUpsertStatement, whereColumnRefs, isDdlStatementKind, } from '../languages/sql/sqlAst.js';
26
+ import { rawInsertColumnsFromAst } from '../analyzers/universal/UniversalDataAccessAnalyzer.js';
27
+ import { describeUnprovenReceiver, resolveSpecifier, makeHeritageResolver } from '../analyzers/receiverResolution.js';
28
+ /** Merge a file's local `interfaceFields` with the corpus-wide ambient map:
29
+ * local declarations win, and ambient (global-script) declarations fill in only
30
+ * the names the file does not itself declare. Ordering is name-level, not
31
+ * field-level — a name the file declares is used whole, so an `interface Env`
32
+ * declared in-file shadows the global-script `Env` rather than being merged
33
+ * field-by-field (that is how TypeScript's own declaration merging resolves a
34
+ * local declaration against an ambient one in practice). */
35
+ function mergeInterfaceFields(local, ambient) {
36
+ if (!local)
37
+ return ambient;
38
+ if (!ambient || ambient.size === 0)
39
+ return local;
40
+ const merged = new Map(ambient);
41
+ for (const [name, fields] of local)
42
+ merged.set(name, fields);
43
+ return merged;
44
+ }
45
+ /** Assemble a `FileReceiverEnv` from the per-file fold and the resolution tail.
46
+ * Single constructor — the five consumers previously each built a near-identical
47
+ * nine-field literal, which `dry/similar-expression` flagged as the same object
48
+ * built five times. */
49
+ function fileReceiverEnv(fold, tail) {
50
+ const { dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields } = fold;
51
+ const { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField } = tail;
52
+ const mergedFields = mergeInterfaceFields(interfaceFields, ambientInterfaceFields);
53
+ return { dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields: mergedFields, sqlDialect, declaredTypePackages, resolveImport, resolveHeritageField };
54
+ }
55
+ /**
56
+ * Build the single specifier-resolution seam the consumers thread into
57
+ * `identifyHandle`'s TS env: one `filesByPath` set derived once from the
58
+ * within-file facts, so the four specifier kinds (relative, tsconfig-`paths`,
59
+ * bare vendor, and the `@/`/`~/` fallback) all answer through `resolveSpecifier`
60
+ * (Spec 70 B1). Returns null when there is no project root to resolve against —
61
+ * the env's `resolveImport` stays undefined and the classifier abstains as it did
62
+ * before the seam was threaded.
63
+ */
64
+ function makeSpecifierResolver(withinFacts, projectRoot, tsconfig) {
65
+ if (!projectRoot)
66
+ return null;
67
+ const filesByPath = new Set(withinFacts.map((f) => f.file));
68
+ // Memoize the resolution keyed on (source, importerPath) so a specifier that
69
+ // resolved once in the run is never re-probed. `resolveSpecifier`'s vendor arm
70
+ // walks up from the importer's directory doing `readFileSync`/`existsSync`
71
+ // probes, and the same bare import is resolved once per candidate that
72
+ // references it; without the cache that filesystem work is repeated for every
73
+ // candidate across every file. The importer is part of the key because the
74
+ // relative arm (and a monorepo's nested `node_modules`) resolve per-directory.
75
+ const cache = new Map();
76
+ return (source, importerPath) => {
77
+ const key = `${source}\u0000${importerPath}`;
78
+ const hit = cache.get(key);
79
+ if (hit !== undefined)
80
+ return hit;
81
+ const resolved = resolveSpecifier(source, importerPath, filesByPath, projectRoot, tsconfig);
82
+ cache.set(key, resolved);
83
+ return resolved;
84
+ };
85
+ }
86
+ // ── Rehydrators — fact → the corpus-side classify input, no translation ──────
87
+ /** Rehydrate one file's `receiver-activity` fact back to the three provenance
88
+ * inputs `classifyBuildProvenance` reads: the `Binding` map (`identifyHandle`'s
89
+ * declaration resolution), the `R3Site[]` (`applyR3FromSites`), and the DB-shaped
90
+ * activity set (`passesFileGate`'s `dbActivity` signal).
91
+ * @param fact - The serialized `receiver-activity` fact (may be absent).
92
+ * @returns The rehydrated bindings, R3 sites, and DB-activity set. */
93
+ export function rehydrateReceiverActivity(fact) {
94
+ if (!fact)
95
+ return { bindings: new Map(), bindingsByScope: new Map(), r3Sites: [], dbActivity: new Set() };
96
+ const bindings = new Map();
97
+ const bindingsByScope = new Map();
98
+ for (const b of fact.bindings) {
99
+ const binding = bindingFromFact(b);
100
+ // First wins (fact order == declaration order) — the flat map matches the
101
+ // legacy `buildBindingEnv` collapse for scope-agnostic consumers.
102
+ if (!bindings.has(b.name))
103
+ bindings.set(b.name, binding);
104
+ const scope = binding.scope ?? 0;
105
+ let byScope = bindingsByScope.get(b.name);
106
+ if (!byScope) {
107
+ byScope = new Map();
108
+ bindingsByScope.set(b.name, byScope);
109
+ }
110
+ if (!byScope.has(scope))
111
+ byScope.set(scope, binding);
112
+ }
113
+ return {
114
+ bindings,
115
+ bindingsByScope,
116
+ r3Sites: fact.r3Sites.map((s) => ({
117
+ root: s.root,
118
+ receiver: s.receiver,
119
+ method: s.method,
120
+ sqlArgument: s.sqlArgument,
121
+ thisField: s.thisField,
122
+ thisHeritage: s.thisHeritage,
123
+ })),
124
+ dbActivity: new Set(fact.dbActivity),
125
+ };
126
+ }
127
+ /** Rehydrate the `receiver-provenance` fact's `files` back to a per-file seed
128
+ * map — the exact `FileProvenance[file]` the legacy `file.receiverProvenance`
129
+ * carried, keyed by file path so a consumer can look up its seed.
130
+ * @param fact - The serialized `receiver-provenance` fixed point.
131
+ * @returns A per-file map of provenanced-name → evidence. */
132
+ export function rehydrateReceiverProvenance(fact) {
133
+ const byFile = new Map();
134
+ for (const f of fact.files) {
135
+ byFile.set(f.file, new Map(f.provenance.map((e) => [e.identifier, evidenceFromFact(e)])));
136
+ }
137
+ return byFile;
138
+ }
139
+ /** Rehydrate the TS-family `within-file-provenance` facts back to a per-file
140
+ * `TsWithinFileProvenanceExtract` map (Go facts are skipped — the receiver
141
+ * consumers are TS-family-only).
142
+ * @param withinFacts - The `within-file-provenance` facts (TS-family + Go).
143
+ * @returns A per-file map of rehydrated `TsWithinFileProvenanceExtract` (Go skipped). */
144
+ export function rehydrateWithinTsExtracts(withinFacts) {
145
+ const byFile = new Map();
146
+ for (const fact of withinFacts) {
147
+ if (fact.format === 'go')
148
+ continue;
149
+ const rehydrated = rehydrateWithinFileProvenance(fact);
150
+ if (rehydrated.kind === 'ts')
151
+ byFile.set(fact.file, rehydrated.projection);
152
+ }
153
+ return byFile;
154
+ }
155
+ /** Rehydrate the Go `within-file-provenance` facts back to a per-file
156
+ * `GoWithinFileProvenanceExtract` map (TS facts are skipped). The Go extract is
157
+ * the binding + import env the Go arm of `identifyHandle` reads — `data-access-calls`
158
+ * is the one receiver consumer that runs for the `go` format, so its corpus
159
+ * producer needs the Go extracts in addition to the TS ones.
160
+ * @param withinFacts - The `within-file-provenance` facts (TS-family + Go).
161
+ * @returns A per-file map of rehydrated `GoWithinFileProvenanceExtract` (TS skipped). */
162
+ export function rehydrateWithinGoExtracts(withinFacts) {
163
+ const byFile = new Map();
164
+ for (const fact of withinFacts) {
165
+ if (fact.format !== 'go')
166
+ continue;
167
+ const rehydrated = rehydrateWithinFileProvenance(fact);
168
+ if (rehydrated.kind === 'go')
169
+ byFile.set(fact.file, rehydrated.projection);
170
+ }
171
+ return byFile;
172
+ }
173
+ /** Re-fold one file's DB-receiver environment from the rehydrated within-file
174
+ * extracts + the cross-file seed — the shared setup for the `data-access-calls`
175
+ * and `unproven-query-receivers` consumers. Go: the seed is the provenanced set
176
+ * and the extract supplies the binding/import env. TS: `classifyBuildProvenance`
177
+ * folds the seed + activity R3 sites + function wrappers into `dbProvenanced`,
178
+ * and the activity supplies the bindings. */
179
+ function foldReceiverEnvironment(opts) {
180
+ const { file, isGo, tsExtracts, goExtracts, seeds, activityByFile, sqlDialect } = opts;
181
+ if (isGo) {
182
+ const seed = seeds.get(file) ?? new Map();
183
+ const goExtract = goExtracts.get(file);
184
+ return {
185
+ dbProvenanced: seed,
186
+ bindings: new Map(),
187
+ bindingsByScope: new Map(),
188
+ goEnv: {
189
+ provenance: seed,
190
+ bindings: goExtract?.bindings ?? new Map(),
191
+ imports: goExtract?.imports ?? new Map(),
192
+ },
193
+ interfaceFields: undefined,
194
+ };
195
+ }
196
+ const extract = tsExtracts.get(file);
197
+ const activity = rehydrateReceiverActivity(activityByFile.get(file));
198
+ return {
199
+ dbProvenanced: extract
200
+ ? classifyBuildProvenance(extract, seeds.get(file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
201
+ : new Map(),
202
+ bindings: activity.bindings,
203
+ bindingsByScope: activity.bindingsByScope,
204
+ goEnv: undefined,
205
+ interfaceFields: extract?.interfaceFields,
206
+ };
207
+ }
208
+ // ── The gate mirror ──────────────────────────────────────────────────────────
209
+ /**
210
+ * The corpus-side mirror of `passesFileGate` for `mode !== 'names'` (the
211
+ * producers always build `mode: 'hybrid'`). The `names` arm never runs, and
212
+ * `hasSqlTag` — the one input the corpus producer cannot re-derive (it scans
213
+ * source text) — arrives pre-extracted in the raw fact. The glob + provenance +
214
+ * activity arms are byte-identical to the legacy gate.
215
+ */
216
+ function passesFileGateRehydrated(filePath, hasSqlTag, dbProvenanced, dbActivity) {
217
+ const gateGlobs = DEFAULT_SCHEMA_CONFIG.fileGateGlobs ?? ['**/*.sql', '**/migrations/**'];
218
+ if (gateGlobs.some((glob) => picomatch.isMatch(filePath, glob)))
219
+ return true;
220
+ if (dbProvenanced.size > 0)
221
+ return true;
222
+ if (dbActivity.size > 0)
223
+ return true;
224
+ return hasSqlTag;
225
+ }
226
+ // ── `query-sites` reduction ──────────────────────────────────────────────────
227
+ /**
228
+ * The corpus `query-sites` producer: re-derive each file's gate (glob ||
229
+ * dbProvenanced || dbActivity || hasSqlTag) from the raw `query-site-candidates`
230
+ * fact + the provenance fixed point, and emit the sites of the files that pass.
231
+ *
232
+ * A file's `dbProvenanced` is re-derived by `classifyBuildProvenance` from its
233
+ * within-file extract, its cross-file seed (`receiver-provenance`), and its
234
+ * `receiver-activity` inputs. Files are iterated in the raw fact's (file-sorted)
235
+ * order, so the emitted site array — and every finding derived from it — is
236
+ * byte-identical to the legacy gated extraction.
237
+ *
238
+ * @param candidates the raw `query-site-candidates` facts (one per TS-family file)
239
+ * @param withinFacts the `within-file-provenance` facts (TS-family)
240
+ * @param provenance the `receiver-provenance` fixed point
241
+ * @param activityFacts the `receiver-activity` facts
242
+ * @param sqlDialect the corpus's named dialect, or null to skip R3
243
+ * @returns the classified query-site facts (one per admitted TS-family site)
244
+ */
245
+ export function classifyQuerySites(candidates, withinFacts, provenance, activityFacts, sqlDialect) {
246
+ const extracts = rehydrateWithinTsExtracts(withinFacts);
247
+ const seeds = rehydrateReceiverProvenance(provenance);
248
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
249
+ const out = [];
250
+ for (const cand of candidates) {
251
+ const extract = extracts.get(cand.file);
252
+ // A file with no within-file extract (should not happen — both facts are
253
+ // TS-family, emitted for the same files) cannot re-derive provenance; its
254
+ // gate falls through to dbActivity/hasSqlTag/glob, matching a file with no
255
+ // within-file DB seed.
256
+ const activity = rehydrateReceiverActivity(activityByFile.get(cand.file));
257
+ const dbProvenanced = extract
258
+ ? classifyBuildProvenance(extract, seeds.get(cand.file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
259
+ : new Map();
260
+ if (passesFileGateRehydrated(cand.file, cand.hasSqlTag, dbProvenanced, activity.dbActivity)) {
261
+ out.push(...cand.sites);
262
+ }
263
+ }
264
+ return out;
265
+ }
266
+ // ── `schema-usage` reduction ─────────────────────────────────────────────────
267
+ /** True when `loc` falls inside the span [start, end] (all 1-based line/column). */
268
+ function contains(start, end, loc) {
269
+ const afterStart = start.line < loc.line || (start.line === loc.line && start.column <= loc.column);
270
+ const beforeEnd = end.line > loc.line || (end.line === loc.line && end.column >= loc.column);
271
+ return afterStart && beforeEnd;
272
+ }
273
+ /** True when `a` starts at or after `b` — the "innermost wins" tiebreak. */
274
+ function startsAtOrAfter(a, b) {
275
+ return a.line > b.line || (a.line === b.line && a.column >= b.column);
276
+ }
277
+ /** The corpus-side mirror of `dialectForEvidence` (private in provenance.ts):
278
+ * the SQL dialect a DB-driver package's evidence names, or null. */
279
+ function dialectForEvidence(evidence) {
280
+ if (!evidence?.packageName)
281
+ return null;
282
+ return dialectForPackage(evidence.packageName);
283
+ }
284
+ /** The corpus-side mirror of `resolveSiteDialect`'s member arm (provenance.ts):
285
+ * the receiver text's package, then each dotted segment, first non-null wins. */
286
+ function resolveSiteDialectFromReceiver(receiver, dbProvenanced) {
287
+ if (!receiver)
288
+ return null;
289
+ for (const candidate of [receiver, ...receiver.split('.')]) {
290
+ const dialect = dialectForEvidence(dbProvenanced.get(candidate));
291
+ if (dialect)
292
+ return dialect;
293
+ }
294
+ return null;
295
+ }
296
+ /**
297
+ * The corpus-side mirror of `findClosestNodeAt` + `findEnclosingFunctionIdentity`
298
+ * (the legacy re-home), over the projected spans. For an in-function reference
299
+ * the identity is the innermost enclosing function (the containing span with the
300
+ * latest start); for a top-level reference it is the `string_fragment` containing
301
+ * the reference — the deepest node `findClosestNodeAt` returns for a table name
302
+ * inside a SQL string — whose start becomes the coordinate.
303
+ */
304
+ function rehomeReference(ref, filePath, functions, stringFragments) {
305
+ const loc = ref.location;
306
+ let fn = null;
307
+ for (const f of functions) {
308
+ const start = { line: f.startLine, column: f.startColumn };
309
+ if (contains(start, { line: f.endLine, column: f.endColumn }, loc) &&
310
+ (fn === null || startsAtOrAfter(start, { line: fn.startLine, column: fn.startColumn }))) {
311
+ fn = f;
312
+ }
313
+ }
314
+ if (fn) {
315
+ return {
316
+ tableName: ref.table,
317
+ filePath,
318
+ functionName: fn.name,
319
+ functionStartLine: fn.startLine,
320
+ functionStartColumn: fn.startColumn,
321
+ usageType: ref.type,
322
+ line: loc.line,
323
+ column: loc.column,
324
+ rawQuery: ref.context,
325
+ origin: ref.origin,
326
+ };
327
+ }
328
+ let frag = null;
329
+ for (const fr of stringFragments) {
330
+ const start = { line: fr.startLine, column: fr.startColumn };
331
+ if (contains(start, { line: fr.endLine, column: fr.endColumn }, loc) &&
332
+ (frag === null || startsAtOrAfter(start, { line: frag.startLine, column: frag.startColumn }))) {
333
+ frag = fr;
334
+ }
335
+ }
336
+ return {
337
+ tableName: ref.table,
338
+ filePath,
339
+ functionName: 'top-level',
340
+ functionStartLine: frag?.startLine ?? null,
341
+ functionStartColumn: frag?.startColumn ?? null,
342
+ usageType: ref.type,
343
+ line: loc.line,
344
+ column: loc.column,
345
+ rawQuery: ref.context,
346
+ origin: ref.origin,
347
+ };
348
+ }
349
+ /**
350
+ * The corpus-side mirror of `dbCallVerdict`'s provenance-dependent admission
351
+ * (`identifyHandle`). The raw producer already applied the structural gates
352
+ * (callee shape, method gate, root gate, resolvable SQL); this re-folds the
353
+ * handle verdict over the re-derived `dbProvenanced` + rehydrated bindings and
354
+ * drops `not-handle` (and, for a bare-identifier call, a name that is neither
355
+ * provenanced nor type-annotated). Returns the verdict plus the site dialect the
356
+ * caller's `parseSqlTables` needs, or null when the call is not admitted.
357
+ */
358
+ function admitDbCall(call, env) {
359
+ const { dbProvenanced, bindings, sqlDialect, interfaceFields, declaredTypePackages, resolveImport, resolveHeritageField } = env;
360
+ const siteDialect = call.calleeType === 'identifier'
361
+ ? dialectForEvidence(dbProvenanced.get(call.name))
362
+ : resolveSiteDialectFromReceiver(call.receiver, dbProvenanced);
363
+ const dialect = siteDialect ?? sqlDialect ?? null;
364
+ const resolutionEnv = { provenance: dbProvenanced, bindings, interfaceFields, declaredTypePackages, resolveImport, resolveHeritageField, adapter: undefined, sourceCode: '' };
365
+ const facts = {
366
+ imports: new Map(),
367
+ typeAnnotations: new Map(),
368
+ bindings: new Map(),
369
+ withinFileProvenance: new Map(),
370
+ sqlDialect: dialect,
371
+ resolution: { dialect: 'ts', env: resolutionEnv },
372
+ };
373
+ if (call.calleeType === 'identifier') {
374
+ const binding = bindings.get(call.name);
375
+ const isProvenanced = dbProvenanced.has(call.name);
376
+ const isTypeAnnotated = !!binding && !!binding.typeText;
377
+ // A named import from a manifest DB package is a DB *signal* even when the
378
+ // name isn't a handle — admit it so `identifyHandle` proves `not-handle`
379
+ // rather than dropping the site for want of evidence (Spec 70).
380
+ const isDbPackageImport = !!binding && binding.kind === 'import' && handleTypesForPackage(binding.source ?? '') !== undefined;
381
+ if (!isProvenanced && !isTypeAnnotated && !isDbPackageImport)
382
+ return null;
383
+ const verdict = identifyHandle({
384
+ format: 'typescript',
385
+ root: call.name,
386
+ receiver: call.name,
387
+ method: call.name,
388
+ sqlArgument: call.sqlArgument,
389
+ thisField: false,
390
+ }, facts);
391
+ return verdict.kind === 'not-handle' ? null : { dialect };
392
+ }
393
+ const verdict = identifyHandle({
394
+ format: 'typescript',
395
+ root: call.root,
396
+ receiver: call.receiver ?? call.root,
397
+ method: call.method,
398
+ sqlArgument: call.sqlArgument,
399
+ thisField: call.thisField,
400
+ }, facts);
401
+ return verdict.kind === 'not-handle' ? null : { dialect };
402
+ }
403
+ /**
404
+ * The corpus `schema-usage` producer: re-derive each file's gate and its
405
+ * `dbProvenanced` from the raw `schema-usage-candidates` fact + the provenance
406
+ * fixed point, then re-admit and re-home the provenance-dependent references
407
+ * (tagged-template + DB-call) and append the provenance-free references the raw
408
+ * producer already re-homed (ORM / query-builder / collection-adapter).
409
+ *
410
+ * The emitted array is the legacy `extractSchemaUsage` output, byte-identical:
411
+ * strategy (1) tagged, (2) DB-call, (4) ORM, (5) query-builder, (6)
412
+ * collection-adapter — in that order, gated the same way, re-homed the same way.
413
+ *
414
+ * @param candidates the raw `schema-usage-candidates` facts (one per TS-family file)
415
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
416
+ * @returns the classified schema-usage facts (strategies 1/2/4/5/6, in order)
417
+ */
418
+ export function classifySchemaUsage(candidates, resolution) {
419
+ const { withinFacts, provenance, activityFacts, sqlDialect, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig } = resolution;
420
+ const extracts = rehydrateWithinTsExtracts(withinFacts);
421
+ const seeds = rehydrateReceiverProvenance(provenance);
422
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
423
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
424
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
425
+ const out = [];
426
+ for (const cand of candidates) {
427
+ const extract = extracts.get(cand.file);
428
+ const activity = rehydrateReceiverActivity(activityByFile.get(cand.file));
429
+ const dbProvenanced = extract
430
+ ? classifyBuildProvenance(extract, seeds.get(cand.file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
431
+ : new Map();
432
+ if (!passesFileGateRehydrated(cand.file, cand.hasSqlTag, dbProvenanced, activity.dbActivity)) {
433
+ continue;
434
+ }
435
+ const sourceCode = cand.sourceCode;
436
+ const resolveImport = resolver ? (source) => resolver(source, cand.file) : undefined;
437
+ const env = fileReceiverEnv({ dbProvenanced, bindings: activity.bindings, bindingsByScope: activity.bindingsByScope, goEnv: undefined, interfaceFields: extract?.interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
438
+ // (1) Tagged-template SQL — re-admit by the tag's package dialect, parse.
439
+ for (const t of cand.tagged) {
440
+ const siteDialect = dialectForEvidence(dbProvenanced.get(t.tagName));
441
+ const dialect = siteDialect ?? sqlDialect ?? null;
442
+ const parsed = parseSqlTables(t.templateText, t.location, sourceCode, undefined, dialect, null);
443
+ for (const ref of parsed.references) {
444
+ out.push(rehomeReference(ref, cand.file, cand.functions, cand.stringFragments));
445
+ }
446
+ }
447
+ // (2) DB-call patterns — re-admit via `identifyHandle`, then parse. An
448
+ // unresolved candidate (`sqlText === null`) contributes no table references
449
+ // here; its `unresolved` record is re-derived by `classifyUnresolvedQuerySites`.
450
+ for (const call of cand.dbCalls) {
451
+ if (call.sqlText === null)
452
+ continue;
453
+ const admitted = admitDbCall(call, env);
454
+ if (!admitted)
455
+ continue;
456
+ const parsed = parseSqlTables(call.sqlText, call.location, sourceCode, undefined, admitted.dialect, null);
457
+ for (const ref of parsed.references) {
458
+ out.push(rehomeReference(ref, cand.file, cand.functions, cand.stringFragments));
459
+ }
460
+ }
461
+ // (4)(5)(6) ORM / query-builder / collection-adapter — re-homed raw-side.
462
+ out.push(...cand.ormRefs, ...cand.queryBuilderRefs, ...cand.collectionAdapterRefs);
463
+ }
464
+ return out;
465
+ }
466
+ /**
467
+ * Spec 70 1b — the corpus `unresolved-query` reduction. The legacy `schema-code`
468
+ * visitor emitted `checkUnresolvedQueries` for DB-calls `findTableReferences`
469
+ * admitted via `dbCallVerdict` (i.e. `identifyHandle` said "DB handle") but whose
470
+ * SQL argument was held in an unresolvable identifier. The collapse re-derives
471
+ * that surface with no AST: for each raw `schema-usage-candidates` fact, re-derive
472
+ * `dbProvenanced` (as `classifySchemaUsage` does), re-apply the file gate, then
473
+ * re-admit every `unresolved` candidate via `identifyHandle` — dropping any that
474
+ * are not DB handles — and emit the `unresolved-query` site record.
475
+ *
476
+ * @param candidates the raw `schema-usage-candidates` facts (one per TS-family file)
477
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
478
+ * @returns the unresolved-query site records re-admitted via `identifyHandle`
479
+ */
480
+ export function classifyUnresolvedQuerySites(candidates, resolution) {
481
+ const { withinFacts, provenance, activityFacts, sqlDialect, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig } = resolution;
482
+ const extracts = rehydrateWithinTsExtracts(withinFacts);
483
+ const seeds = rehydrateReceiverProvenance(provenance);
484
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
485
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
486
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
487
+ const out = [];
488
+ for (const cand of candidates) {
489
+ const extract = extracts.get(cand.file);
490
+ const activity = rehydrateReceiverActivity(activityByFile.get(cand.file));
491
+ const dbProvenanced = extract
492
+ ? classifyBuildProvenance(extract, seeds.get(cand.file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
493
+ : new Map();
494
+ if (!passesFileGateRehydrated(cand.file, cand.hasSqlTag, dbProvenanced, activity.dbActivity)) {
495
+ continue;
496
+ }
497
+ const resolveImport = resolver ? (source) => resolver(source, cand.file) : undefined;
498
+ const env = fileReceiverEnv({ dbProvenanced, bindings: activity.bindings, bindingsByScope: activity.bindingsByScope, goEnv: undefined, interfaceFields: extract?.interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
499
+ for (const call of cand.dbCalls) {
500
+ if (call.unresolved === null)
501
+ continue;
502
+ // Re-admit via `identifyHandle` — mirror the legacy `dbCallVerdict` gate so
503
+ // a non-DB receiver (`page.$`, `$('.foo')`) never emits `unresolved-query`.
504
+ const admitted = admitDbCall(call, env);
505
+ if (!admitted)
506
+ continue;
507
+ out.push({ file: cand.file, identifier: call.unresolved.identifier, location: call.unresolved.location });
508
+ }
509
+ }
510
+ return out;
511
+ }
512
+ /**
513
+ * Spec 70 R2 — the corpus `unparseable` reduction. The legacy `schema-code`
514
+ * visitor emitted `checkUnparseableSql` for every DB-call / tagged-template SQL
515
+ * argument `findTableReferences` admitted but whose static text the named
516
+ * dialect could not parse (e.g. SQLite `PRAGMA`/`VACUUM`/`ANALYZE`). The collapse
517
+ * re-derives that surface with no AST: for each raw `schema-usage-candidates`
518
+ * fact, re-derive `dbProvenanced` (as `classifySchemaUsage` does), re-apply the
519
+ * file gate, then re-admit and re-parse every tagged template and DB-call
520
+ * candidate — collecting `parseSqlTables().unparseable` (which
521
+ * `classifySchemaUsage` discards) instead of its references. This is the
522
+ * `unparseable` sibling of {@link classifyUnresolvedQuerySites} (the
523
+ * `unresolved` half): the same re-derivation shape, a distinct output record.
524
+ *
525
+ * @param candidates the raw `schema-usage-candidates` facts (one per TS-family file)
526
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
527
+ * @returns the unparseable-SQL records re-admitted via `identifyHandle`, each
528
+ * stamped with its `file` (the legacy visitor emitted `checkUnparseableSql`
529
+ * per-file, so the caller must be able to re-group by file)
530
+ */
531
+ export function classifyUnparseableSql(candidates, resolution) {
532
+ const { withinFacts, provenance, activityFacts, sqlDialect, sqlDialectReason, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig } = resolution;
533
+ const extracts = rehydrateWithinTsExtracts(withinFacts);
534
+ const seeds = rehydrateReceiverProvenance(provenance);
535
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
536
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
537
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
538
+ const out = [];
539
+ for (const cand of candidates) {
540
+ const extract = extracts.get(cand.file);
541
+ const activity = rehydrateReceiverActivity(activityByFile.get(cand.file));
542
+ const dbProvenanced = extract
543
+ ? classifyBuildProvenance(extract, seeds.get(cand.file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
544
+ : new Map();
545
+ if (!passesFileGateRehydrated(cand.file, cand.hasSqlTag, dbProvenanced, activity.dbActivity)) {
546
+ continue;
547
+ }
548
+ const sourceCode = cand.sourceCode;
549
+ const resolveImport = resolver ? (source) => resolver(source, cand.file) : undefined;
550
+ const env = fileReceiverEnv({ dbProvenanced, bindings: activity.bindings, bindingsByScope: activity.bindingsByScope, goEnv: undefined, interfaceFields: extract?.interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
551
+ // (1) Tagged-template SQL — re-admit by the tag's package dialect, parse.
552
+ for (const t of cand.tagged) {
553
+ const siteDialect = dialectForEvidence(dbProvenanced.get(t.tagName));
554
+ const dialect = siteDialect ?? sqlDialect ?? null;
555
+ const parsed = parseSqlTables(t.templateText, t.location, sourceCode, undefined, dialect, sqlDialectReason ?? null);
556
+ for (const u of parsed.unparseable)
557
+ out.push({ ...u, file: cand.file });
558
+ }
559
+ // (2) DB-call patterns — re-admit via `identifyHandle`, then parse. An
560
+ // unresolved candidate (`sqlText === null`) contributes no unparseable record
561
+ // here; its `unresolved` record is re-derived by `classifyUnresolvedQuerySites`.
562
+ for (const call of cand.dbCalls) {
563
+ if (call.sqlText === null)
564
+ continue;
565
+ const admitted = admitDbCall(call, env);
566
+ if (!admitted)
567
+ continue;
568
+ const parsed = parseSqlTables(call.sqlText, call.location, sourceCode, undefined, admitted.dialect, sqlDialectReason ?? null);
569
+ for (const u of parsed.unparseable)
570
+ out.push({ ...u, file: cand.file });
571
+ }
572
+ }
573
+ return out;
574
+ }
575
+ /** Project a candidate's `handle*` fields into the corpus-side `HandleIdentity`.
576
+ * The two candidates differ only in `format` (data-access carries the raw
577
+ * producer's format; loop-query is TS-only) and which field is the handle SQL
578
+ * argument (`handleSqlArg` vs `sqlArg`) — everything else is the shared shape. */
579
+ function handleIdentity(source, format, sqlArg) {
580
+ return {
581
+ format,
582
+ calleeType: source.handleCalleeType,
583
+ name: source.handleName,
584
+ root: source.handleRoot,
585
+ receiver: source.handleReceiver,
586
+ method: source.handleMethod,
587
+ thisField: source.handleThisField,
588
+ thisHeritage: source.handleThisHeritage,
589
+ sqlArg,
590
+ siteReceiver: source.handleSiteReceiver,
591
+ scope: source.handleRootScope ?? 0,
592
+ };
593
+ }
594
+ /** The identity of one data-access-call candidate (the `handle*` fields). */
595
+ function dataAccessIdentity(cand) {
596
+ return handleIdentity(cand, cand.format, cand.handleSqlArg);
597
+ }
598
+ /** The identity of one loop-query candidate (TS-only; `sqlArg` is the handle
599
+ * SQL-argument source, `handleSiteReceiver` the site-dialect receiver). */
600
+ function loopQueryIdentity(cand) {
601
+ return handleIdentity(cand, 'typescript', cand.sqlArg);
602
+ }
603
+ /**
604
+ * The corpus-side mirror of `handleVerdictForCall` — re-fold `identifyHandle`
605
+ * over the re-derived `dbProvenanced` + rehydrated bindings (TS) or the Go
606
+ * resolution env (Go). The raw producer already applied every structural gate
607
+ * (callee shape, method/root gate, template → enclosing-call resolution), so the
608
+ * identity is already narrowed to a query-shaped call; what remains is the
609
+ * provenance-dependent gate the identifier arm alone carries (a bare name that is
610
+ * neither provenanced nor type-annotated is rejected before `identifyHandle`) and
611
+ * the verdict itself. Returns the tri-state verdict, or null when the shape is
612
+ * not query-shaped.
613
+ */
614
+ /** A stable string key for one candidate's handle identity, for the shared
615
+ * verdict cache. `sqlArg` and `siteReceiver` are part of the key because both
616
+ * feed `identifyHandle` (the SQL-argument parse and the site-dialect parse). */
617
+ function handleIdentityKey(id) {
618
+ return [
619
+ id.format,
620
+ id.calleeType ?? '',
621
+ id.name ?? '',
622
+ id.root ?? '',
623
+ id.receiver ?? '',
624
+ id.method ?? '',
625
+ id.thisField ? '1' : '0',
626
+ id.thisHeritage ?? '',
627
+ id.sqlArg ?? '',
628
+ id.siteReceiver ?? '',
629
+ String(id.scope),
630
+ ].join('\u0000');
631
+ }
632
+ function reFoldHandleVerdict(id, env, file, verdictCache) {
633
+ const key = verdictCache ? `${file}\u0000${handleIdentityKey(id)}` : null;
634
+ if (key !== null) {
635
+ const hit = verdictCache.get(key);
636
+ if (hit !== undefined)
637
+ return hit;
638
+ }
639
+ const result = foldHandleVerdict(id, env);
640
+ if (key !== null)
641
+ verdictCache.set(key, result);
642
+ return result;
643
+ }
644
+ function foldHandleVerdict(id, env) {
645
+ const { dbProvenanced, bindings, bindingsByScope, goEnv, sqlDialect, interfaceFields, declaredTypePackages, resolveImport, resolveHeritageField } = env;
646
+ if (id.format === 'go') {
647
+ if (!goEnv || id.calleeType !== 'member' || !id.root || !id.method)
648
+ return null;
649
+ return identifyHandle({
650
+ format: 'go',
651
+ root: id.root,
652
+ receiver: id.receiver ?? id.root,
653
+ method: id.method,
654
+ sqlArgument: id.sqlArg,
655
+ thisField: false,
656
+ }, {
657
+ imports: new Map(),
658
+ typeAnnotations: new Map(),
659
+ bindings: new Map(),
660
+ withinFileProvenance: new Map(),
661
+ sqlDialect: sqlDialect ?? null,
662
+ resolution: { dialect: 'go', env: goEnv },
663
+ });
664
+ }
665
+ if (id.calleeType === 'identifier') {
666
+ const name = id.name;
667
+ if (!name)
668
+ return null;
669
+ const binding = bindings.get(name);
670
+ const isProvenanced = dbProvenanced.has(name);
671
+ const isTypeAnnotated = !!binding &&
672
+ (binding.kind === 'variable' || binding.kind === 'field' || binding.kind === 'parameter') &&
673
+ !!binding.typeText;
674
+ if (!isProvenanced && !isTypeAnnotated)
675
+ return null;
676
+ const dialect = dialectForEvidence(dbProvenanced.get(name)) ?? sqlDialect ?? null;
677
+ const resolutionEnv = { provenance: dbProvenanced, bindings, bindingsByScope, interfaceFields, declaredTypePackages, resolveImport, resolveHeritageField, adapter: undefined, sourceCode: '' };
678
+ return identifyHandle({
679
+ format: 'typescript',
680
+ root: name,
681
+ receiver: name,
682
+ method: name,
683
+ sqlArgument: id.sqlArg,
684
+ thisField: false,
685
+ scope: id.scope,
686
+ }, {
687
+ imports: new Map(),
688
+ typeAnnotations: new Map(),
689
+ bindings: new Map(),
690
+ withinFileProvenance: new Map(),
691
+ sqlDialect: dialect,
692
+ resolution: { dialect: 'ts', env: resolutionEnv },
693
+ });
694
+ }
695
+ if (id.calleeType === 'member') {
696
+ if (!id.root || !id.method)
697
+ return null;
698
+ const dialect = resolveSiteDialectFromReceiver(id.siteReceiver, dbProvenanced) ?? sqlDialect ?? null;
699
+ const resolutionEnv = { provenance: dbProvenanced, bindings, bindingsByScope, interfaceFields, declaredTypePackages, resolveImport, resolveHeritageField, adapter: undefined, sourceCode: '' };
700
+ return identifyHandle({
701
+ format: 'typescript',
702
+ root: id.root,
703
+ receiver: id.receiver ?? id.root,
704
+ method: id.method,
705
+ sqlArgument: id.sqlArg,
706
+ thisField: id.thisField,
707
+ thisHeritage: id.thisHeritage,
708
+ scope: id.scope,
709
+ }, {
710
+ imports: new Map(),
711
+ typeAnnotations: new Map(),
712
+ bindings: new Map(),
713
+ withinFileProvenance: new Map(),
714
+ sqlDialect: dialect,
715
+ resolution: { dialect: 'ts', env: resolutionEnv },
716
+ });
717
+ }
718
+ return null;
719
+ }
720
+ /** The corpus-side mirror of `classifyCallType` (private in the analyzer): a
721
+ * non-decision label — `sql` for a raw SQL query, `orm` for a query-builder
722
+ * shape, `unknown` otherwise. No rule reads it. */
723
+ function classifyCallType(isSqlQuery, isOrmCall) {
724
+ if (isSqlQuery)
725
+ return 'sql';
726
+ if (isOrmCall)
727
+ return 'orm';
728
+ return 'unknown';
729
+ }
730
+ /** The corpus-side mirror of `nextSymbol` (private in the analyzer): the next
731
+ * stable per-file symbol key for a (function, method) pair. */
732
+ function nextSymbol(fnName, method, ordinals) {
733
+ const base = `${fnName}:${method}`;
734
+ const ordinal = (ordinals.get(base) ?? 0) + 1;
735
+ ordinals.set(base, ordinal);
736
+ return ordinal > 1 ? `${base}:${ordinal}` : base;
737
+ }
738
+ /** Re-fold one candidate into a resolved query, mirroring `buildDatabaseCall`
739
+ * byte-identically over the pre-extracted provenance-free fields plus the
740
+ * already-re-folded handle verdict. */
741
+ function buildDataAccessCall(cand, verdict, dbProvenanced, sqlDialect, learnedWrappers) {
742
+ // A call_expression rediscovered via its template argument is dropped in favour
743
+ // of the template (path 2).
744
+ if (cand.skipCallForTemplateArg)
745
+ return null;
746
+ const sqlArg = cand.sqlArg;
747
+ // `resolveSiteDialect` reads the node's *own* callee — the `site*` identity —
748
+ // distinct from the handle verdict's enclosing-call identity.
749
+ const siteDialect = cand.siteCalleeType === 'identifier'
750
+ ? cand.siteName
751
+ ? dialectForEvidence(dbProvenanced.get(cand.siteName))
752
+ : null
753
+ : resolveSiteDialectFromReceiver(cand.siteReceiver, dbProvenanced);
754
+ const dialect = siteDialect ?? sqlDialect ?? null;
755
+ const parsed = sqlArg !== null ? parseSql(sqlArg, dialect ?? DEFAULT_SQL_DIALECT) : null;
756
+ const sqlOk = parsed && parsed.ok ? parsed : null;
757
+ // DDL statements (CREATE/ALTER/DROP/USE) are schema definition, not a
758
+ // row-level data-access query: they carry no rows to filter and no tenant
759
+ // predicate to check. A variable assignment holding a migration body
760
+ // (`const up = \`CREATE TABLE …\``) must not surface as a data-access call —
761
+ // schema is read separately by the `.sql` visitor and Durable Object DDL.
762
+ if (sqlOk && isDdlStatementKind(sqlOk.kind))
763
+ return null;
764
+ const isOrmCall = cand.isOrmCall;
765
+ const isTaggedSqlCall = cand.isTaggedSqlCall;
766
+ const handleAdmits = verdict !== null && verdict.kind !== 'not-handle';
767
+ const isSqlPosition = handleAdmits || cand.isQueryBuilderShape;
768
+ const isSqlQuery = sqlOk !== null || isSqlPosition || isTaggedSqlCall;
769
+ if (!isSqlQuery && !isOrmCall)
770
+ return null;
771
+ const sqlAstNode = sqlOk ? sqlOk.ast : null;
772
+ const builderVerb = sqlAstNode ? null : cand.builderVerb;
773
+ const sqlTables = sqlAstNode ? extractTableNames(sqlAstNode) : [];
774
+ const ormTables = isOrmCall ? cand.ormTables : [];
775
+ const tables = [...new Set([...sqlTables, ...ormTables])];
776
+ const facts = sqlAstNode ? whereFacts(sqlAstNode) : null;
777
+ const hasFilter = (facts
778
+ ? (facts.hasWhere && !facts.whereIsTautology) || facts.hasHaving || facts.hasLimit
779
+ : false) ||
780
+ (isOrmCall && cand.ormHasFilter);
781
+ // Security: static arms 1–3 ran raw-side; arm 4 (a learned DB wrapper carrying
782
+ // bind params) is the one cross-file dependency, corrected here.
783
+ let security = {
784
+ parameterized: cand.staticParameterized,
785
+ injectionRisk: cand.staticInjectionRisk,
786
+ escaped: cand.staticEscaped,
787
+ };
788
+ if (cand.arm4CalleeName && learnedWrappers.has(cand.arm4CalleeName)) {
789
+ security = { parameterized: true, injectionRisk: false, escaped: false };
790
+ }
791
+ const injectionRisk = security.injectionRisk && verdict?.kind === 'handle';
792
+ return {
793
+ type: classifyCallType(isSqlQuery, isOrmCall),
794
+ method: cand.method,
795
+ file: cand.file,
796
+ line: cand.line,
797
+ column: cand.column,
798
+ tables,
799
+ queryText: cand.nodeText,
800
+ hasOrganizationFilter: cand.hasOrganizationFilter,
801
+ hasFilter,
802
+ isWrite: sqlAstNode ? isWriteStatement(sqlAstNode) : builderVerb !== null,
803
+ isMassWrite: sqlAstNode ? isMassWriteStatement(sqlAstNode) : builderVerb === 'update',
804
+ isUpsert: sqlAstNode
805
+ ? isUpsertStatement(sqlAstNode) || sqlOk?.conflictClauseTruncated === true
806
+ : false,
807
+ isRawInsert: sqlAstNode ? (sqlAstNode.type === 'insert' || sqlAstNode.type === 'replace') : false,
808
+ insertColumns: sqlAstNode ? rawInsertColumnsFromAst(sqlAstNode) : null,
809
+ sqlWhereColumns: sqlAstNode ? [...whereColumnRefs(sqlAstNode)] : null,
810
+ hasParameterizedQuery: security.parameterized,
811
+ hasSqlInjectionRisk: injectionRisk,
812
+ sqlEscaped: security.escaped,
813
+ enclosingFunction: cand.enclosingFunction,
814
+ resolvedWhere: cand.resolvedWhere ?? undefined,
815
+ handleVerdict: verdict ?? undefined,
816
+ };
817
+ }
818
+ /**
819
+ * The corpus `data-access-calls` producer: re-derive each file's `dbProvenanced`
820
+ * (TS via `classifyBuildProvenance`; Go via the fixed-point seed) from the raw
821
+ * `data-access-calls-candidates` fact + the provenance fixed point, then re-fold
822
+ * the legacy `extractDatabaseCalls` pipeline — discovery filter (`isDbCallCandidate`)
823
+ * → line dedup (template preferred, else first in pre-order) → `buildDatabaseCall`
824
+ * — with no AST. The dedup runs on the *discovered* set, not the built set, so a
825
+ * discovered-but-rejected node still shadows an admitted node on the same line
826
+ * exactly as the legacy pass did.
827
+ *
828
+ * @param candidates the raw `data-access-calls-candidates` facts (one per file)
829
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
830
+ * @returns the resolved DB calls, deduped and rebuilt with no AST
831
+ */
832
+ export function classifyDataAccessCalls(candidates, resolution) {
833
+ const { withinFacts, provenance, activityFacts, sqlDialect, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig, verdictCache } = resolution;
834
+ const tsExtracts = rehydrateWithinTsExtracts(withinFacts);
835
+ const goExtracts = rehydrateWithinGoExtracts(withinFacts);
836
+ const seeds = rehydrateReceiverProvenance(provenance);
837
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
838
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
839
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
840
+ // Group candidates by file, preserving the raw fact's (input-file) order.
841
+ const byFile = new Map();
842
+ for (const cand of candidates) {
843
+ let list = byFile.get(cand.file);
844
+ if (!list) {
845
+ list = [];
846
+ byFile.set(cand.file, list);
847
+ }
848
+ list.push(cand);
849
+ }
850
+ const out = [];
851
+ for (const [file, fileCands] of byFile) {
852
+ const isGo = fileCands[0].format === 'go';
853
+ const { dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields } = foldReceiverEnvironment({
854
+ file, isGo, tsExtracts, goExtracts, seeds, activityByFile, sqlDialect,
855
+ });
856
+ const learnedWrappers = new Set([...dbProvenanced.values()].filter((ev) => ev.reason === 'wrapper').map((ev) => ev.identifier));
857
+ const resolveImport = resolver ? (source) => resolver(source, file) : undefined;
858
+ const env = fileReceiverEnv({ dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
859
+ // 1. Discovery filter — `isDbCallCandidate`, re-folding the handle verdict.
860
+ const discovered = [];
861
+ for (const cand of fileCands) {
862
+ const verdict = reFoldHandleVerdict(dataAccessIdentity(cand), env, file, verdictCache);
863
+ const handleAdmits = verdict !== null && verdict.kind !== 'not-handle';
864
+ const isCandidate = handleAdmits || cand.isQueryBuilderShape || cand.isTaggedSqlCall || cand.isVariableAssignmentSql;
865
+ if (isCandidate)
866
+ discovered.push({ cand, verdict });
867
+ }
868
+ // 2. Line dedup — `dedupeCandidateNodes` (template preferred, else first).
869
+ const byLine = new Map();
870
+ for (const d of discovered) {
871
+ const line = d.cand.line;
872
+ if (!byLine.has(line))
873
+ byLine.set(line, []);
874
+ byLine.get(line).push(d);
875
+ }
876
+ const unique = [];
877
+ for (const items of byLine.values()) {
878
+ if (items.length === 1) {
879
+ unique.push(items[0]);
880
+ }
881
+ else {
882
+ unique.push(items.find((it) => it.cand.isTemplateLiteral) ?? items[0]);
883
+ }
884
+ }
885
+ // 3. Build — `buildDatabaseCall` over the deduped set.
886
+ for (const { cand, verdict } of unique) {
887
+ const built = buildDataAccessCall(cand, verdict, dbProvenanced, sqlDialect, learnedWrappers);
888
+ if (built)
889
+ out.push(built);
890
+ }
891
+ }
892
+ return out;
893
+ }
894
+ /**
895
+ * The corpus `loop-queries` producer: re-derive each file's `dbProvenanced` (TS
896
+ * via `classifyBuildProvenance`), re-fold the strict-handle filter
897
+ * (`isDbCallNode`'s `identifyHandle`), dedup by loop byte-offset (one finding per
898
+ * loop, first wins), and assign the stable symbol. The provenance-free
899
+ * discriminators already ran in the raw producer; only the three
900
+ * provenance-dependent steps remain.
901
+ *
902
+ * @param candidates the raw `loop-query-candidates` facts (one per file)
903
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
904
+ * @returns the resolved loop-query facts (deduped, stable symbols assigned)
905
+ */
906
+ export function classifyLoopQueries(candidates, resolution) {
907
+ const { withinFacts, provenance, activityFacts, sqlDialect, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig, verdictCache } = resolution;
908
+ const tsExtracts = rehydrateWithinTsExtracts(withinFacts);
909
+ const seeds = rehydrateReceiverProvenance(provenance);
910
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
911
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
912
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
913
+ const byFile = new Map();
914
+ for (const cand of candidates) {
915
+ let list = byFile.get(cand.file);
916
+ if (!list) {
917
+ list = [];
918
+ byFile.set(cand.file, list);
919
+ }
920
+ list.push(cand);
921
+ }
922
+ const out = [];
923
+ for (const [file, fileCands] of byFile) {
924
+ const extract = tsExtracts.get(file);
925
+ const activity = rehydrateReceiverActivity(activityByFile.get(file));
926
+ const dbProvenanced = extract
927
+ ? classifyBuildProvenance(extract, seeds.get(file) ?? new Map(), activity.bindings, activity.r3Sites, sqlDialect)
928
+ : new Map();
929
+ const reported = new Set();
930
+ const loopOrdinals = new Map();
931
+ const resolveImport = resolver ? (source) => resolver(source, file) : undefined;
932
+ const env = fileReceiverEnv({ dbProvenanced, bindings: activity.bindings, bindingsByScope: activity.bindingsByScope, goEnv: undefined, interfaceFields: extract?.interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
933
+ for (const cand of fileCands) {
934
+ const verdict = reFoldHandleVerdict(loopQueryIdentity(cand), env, file, verdictCache);
935
+ if (!verdict || verdict.kind !== 'handle')
936
+ continue;
937
+ const dedupKey = String(cand.loopStartOffset);
938
+ if (reported.has(dedupKey))
939
+ continue;
940
+ reported.add(dedupKey);
941
+ const symbol = nextSymbol(cand.enclosingFunction, 'loop-query', loopOrdinals);
942
+ out.push({
943
+ file: cand.file,
944
+ line: cand.line,
945
+ column: cand.column,
946
+ symbol,
947
+ loopLine: cand.loopLine,
948
+ depth: cand.depth,
949
+ });
950
+ }
951
+ }
952
+ return out;
953
+ }
954
+ // ── `unproven-query-receivers` reduction (Spec 70 2c) ────────────────────────
955
+ /**
956
+ * The corpus `unproven-query-receivers` reduction (Spec 70 2c) — the fifth
957
+ * receiver consumer, re-derived from the raw `data-access-calls-candidates` fact
958
+ * + the provenance fixed point with no AST. It re-folds `identifyHandle` per
959
+ * member candidate and emits an `UnprovenQueryReceiver` when the verdict is
960
+ * `unproven` and the call is query-shaped — mirroring the pre-pass's candidacy
961
+ * filter (language-independent string-arg, the SQL literal as admission proof)
962
+ * and its `root === null` skip (re-folded
963
+ * via `reFoldHandleVerdict`'s null on a missing root). This is the source for the
964
+ * `cannot-fire` coverage diagnostic, re-homed from `collectCannotFireDiagnostics`
965
+ * (which read the pre-pass's `unprovenQueryReceivers`).
966
+ *
967
+ * @param candidates the raw `data-access-calls-candidates` facts (one per file)
968
+ * @param resolution the per-corpus resolution inputs (facts + dialect/project tail)
969
+ * @returns the unproven query-receiver records, deduped and rebuilt
970
+ */
971
+ export function classifyUnprovenQueryReceivers(candidates, resolution) {
972
+ const { withinFacts, provenance, activityFacts, sqlDialect, declaredTypePackages, ambientInterfaceFields, projectRoot, tsconfig, verdictCache } = resolution;
973
+ const tsExtracts = rehydrateWithinTsExtracts(withinFacts);
974
+ const goExtracts = rehydrateWithinGoExtracts(withinFacts);
975
+ const seeds = rehydrateReceiverProvenance(provenance);
976
+ const activityByFile = new Map(activityFacts.map((f) => [f.file, f]));
977
+ const resolver = makeSpecifierResolver(withinFacts, projectRoot, tsconfig);
978
+ const heritageResolver = makeHeritageResolver(projectRoot, declaredTypePackages) ?? undefined;
979
+ const byFile = new Map();
980
+ for (const cand of candidates) {
981
+ let list = byFile.get(cand.file);
982
+ if (!list) {
983
+ list = [];
984
+ byFile.set(cand.file, list);
985
+ }
986
+ list.push(cand);
987
+ }
988
+ const out = [];
989
+ for (const [file, fileCands] of byFile) {
990
+ const isGo = fileCands[0].format === 'go';
991
+ const { dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields } = foldReceiverEnvironment({
992
+ file, isGo, tsExtracts, goExtracts, seeds, activityByFile, sqlDialect,
993
+ });
994
+ // Re-fold each member candidate to its unproven verdict, then line-dedup —
995
+ // mirroring `classifyDataAccessCalls`'s step 2 (template preferred, else
996
+ // first). The broadened discovery matches both the `call_expression` node and
997
+ // its `template_string` child, so without the dedup one query-shaped site
998
+ // emits two identical cannot-fire diagnostics and doubles the coverage count.
999
+ const resolveImport = resolver ? (source) => resolver(source, file) : undefined;
1000
+ const env = fileReceiverEnv({ dbProvenanced, bindings, bindingsByScope, goEnv, interfaceFields }, { sqlDialect, declaredTypePackages, ambientInterfaceFields, resolveImport, resolveHeritageField: heritageResolver });
1001
+ const admitted = [];
1002
+ for (const cand of fileCands) {
1003
+ const id = dataAccessIdentity(cand);
1004
+ // Candidacy filter only — mirror the pre-pass's member-callee gate (an
1005
+ // identifier callee is not a query-shaped *call site*). A member call is
1006
+ // *nominated* when it carries a static SQL argument (the sql-argument
1007
+ // evidence source, `handleSqlArg`) or is genuinely query-shaped (the real
1008
+ // `isQueryBuilderShape` test, carried on the candidate) — nomination is not
1009
+ // admission. `reFoldHandleVerdict` → `identifyHandle` re-folds the
1010
+ // discriminant over the re-derived provenance, so a null-arg `not-handle`
1011
+ // root resolves to `not-handle` below.
1012
+ if (id.calleeType !== 'member')
1013
+ continue;
1014
+ if (cand.handleSqlArg === null && !cand.isQueryBuilderShape)
1015
+ continue;
1016
+ const verdict = reFoldHandleVerdict(id, env, file, verdictCache);
1017
+ if (!verdict || verdict.kind !== 'unproven')
1018
+ continue;
1019
+ // Fix 1 — admission requires evidence; the evidence test is on the SITE,
1020
+ // not the receiver root. A candidate is a data-access site when it carries
1021
+ // a SQL argument (the sql-argument source, `handleSqlArg`) OR its receiver
1022
+ // is reached by declaration-resolution (a bare-package import). A SQL
1023
+ // argument qualifies the site on its own — whatever the receiver resolves
1024
+ // to, the site reports `unproven` (cannot-fire), never a silent clean.
1025
+ // Only a candidate with *neither* source — no SQL argument, and a receiver
1026
+ // root that does not reach a package (a local opaque type, an un-annotated
1027
+ // parameter/factory-return/field, or a relative in-repo re-export) — is
1028
+ // dropped as not-a-site.
1029
+ if (cand.handleSqlArg === null) {
1030
+ const rootBinding = id.root === null
1031
+ ? undefined
1032
+ : ((id.scope !== undefined ? bindingsByScope.get(id.root)?.get(id.scope) : undefined) ?? bindings.get(id.root));
1033
+ if (!rootBinding ||
1034
+ rootBinding.kind !== 'import' ||
1035
+ barePackageName(rootBinding.source ?? '') === null) {
1036
+ continue;
1037
+ }
1038
+ }
1039
+ admitted.push({ cand, verdict });
1040
+ }
1041
+ const byLine = new Map();
1042
+ for (const a of admitted) {
1043
+ const line = a.cand.line;
1044
+ if (!byLine.has(line))
1045
+ byLine.set(line, []);
1046
+ byLine.get(line).push(a);
1047
+ }
1048
+ const unique = [];
1049
+ for (const items of byLine.values()) {
1050
+ unique.push(items.length === 1 ? items[0] : (items.find((it) => it.cand.isTemplateLiteral) ?? items[0]));
1051
+ }
1052
+ for (const { cand, verdict } of unique) {
1053
+ const id = dataAccessIdentity(cand);
1054
+ const receiver = id.receiver ?? id.root ?? '(unknown)';
1055
+ const root = id.root ?? receiver;
1056
+ const method = id.method ?? '';
1057
+ const reason = describeUnprovenReceiver(receiver, method, root, verdict.reason, cand.isQueryBuilderShape, isGo ? 'go' : 'typescript');
1058
+ out.push({ file, line: cand.line, receiver, root, method, reason });
1059
+ }
1060
+ }
1061
+ return out;
1062
+ }
1063
+ //# sourceMappingURL=receiverConsumers.js.map