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,803 @@
1
+ /**
2
+ * Spec 68 §3.2 — the DRY rules, migrated to `analyze(ctx)`.
3
+ *
4
+ * `duplicate-import` re-homes `UniversalDRYAnalyzer.checkDuplicateImports`:
5
+ * group the `imports` fact by `(file, source)` and flag any source imported more
6
+ * than once within a single file, anchored at the first import's location. The
7
+ * legacy detector ran per AST, so the `(file, …)` grouping is load-bearing — two
8
+ * files importing the same module once are not duplicates. The message and the
9
+ * first-import anchoring are verbatim from `checkDuplicateImports`; `symbol`
10
+ * carries the module source exactly as the legacy `createViolation` set
11
+ * `functionName` to it.
12
+ *
13
+ * `duplicate-string-literal` re-homes `checkDuplicateStrings`: group the
14
+ * `string-literals` fact by `(file, value)` and flag any raw string text that
15
+ * appears more than twice within a single file, anchored at the first
16
+ * occurrence. The same per-file grouping holds here (the legacy detector ran
17
+ * per AST), and `value` is the raw `getNodeText` (quotes included) so a
18
+ * `'…'` and `"…"` literal are distinct values — the same key the legacy code
19
+ * compared.
20
+ *
21
+ * The three block rules (`dry/duplicate`, `dry/structural-similarity`,
22
+ * `dry/similar-expression`) read the `code-block` fact — blocks and shape
23
+ * fragments the `codeBlocks.ts` producer extracted from the AST. They re-home
24
+ * `reportExactDuplicates` / `reportStructuralDuplicates` /
25
+ * `reportExpressionSimilarities` over the projected data. The legacy
26
+ * `analyzeAST` ran **once per file**, so each rule partitions the corpus fact by
27
+ * `file` and runs its filter → dedupe → compare within one file (a block in file
28
+ * A is never compared against a block in file B).
29
+ *
30
+ * `dry/diverging-clone` is the cross-run pair-tracking pass (Spec 13 R5): it
31
+ * reads the `clone-pair-history` fact — the `dry_pair_history` similarity series
32
+ * the DRY bundle seeds each run — and flags a pair whose similarity has fallen by
33
+ * `divergenceThreshold` for `divergenceRuns` consecutive runs. It re-homes the
34
+ * legacy auditRunner Phase 2 divergence pass verbatim, over the grouped fact.
35
+ */
36
+ import { RULE_REGISTRY } from '../../analyzers/ruleRegistry.js';
37
+ import * as crypto from 'crypto';
38
+ const META = RULE_REGISTRY['duplicate-import'];
39
+ const STRING_META = RULE_REGISTRY['duplicate-string-literal'];
40
+ const DUP_META = RULE_REGISTRY['dry/duplicate'];
41
+ const STRUCT_META = RULE_REGISTRY['dry/structural-similarity'];
42
+ const EXPR_META = RULE_REGISTRY['dry/similar-expression'];
43
+ const DIVERGING_META = RULE_REGISTRY['dry/diverging-clone'];
44
+ /** Re-homes `checkDuplicateImports`, grouping per file. */
45
+ function detectDuplicateImport(facts) {
46
+ const byFile = new Map();
47
+ for (const imp of facts) {
48
+ // The `imports` fact is shared with the Go `import-organization`/`import-style`
49
+ // rules (a mixed corpus concatenates both producers' output). This rule is
50
+ // TS/JS-only: the Go producer always sets `alias` (null for an unnamed
51
+ // import), the TS producer leaves it absent, so `alias !== undefined` marks
52
+ // a Go import and it is skipped here.
53
+ if (imp.alias !== undefined)
54
+ continue;
55
+ let fileMap = byFile.get(imp.file);
56
+ if (!fileMap) {
57
+ fileMap = new Map();
58
+ byFile.set(imp.file, fileMap);
59
+ }
60
+ const locs = fileMap.get(imp.source) ?? [];
61
+ locs.push({ line: imp.line, column: imp.column });
62
+ fileMap.set(imp.source, locs);
63
+ }
64
+ const findings = [];
65
+ for (const [file, fileMap] of byFile) {
66
+ for (const [source, locs] of fileMap) {
67
+ if (locs.length <= 1)
68
+ continue;
69
+ findings.push({
70
+ ruleId: 'duplicate-import',
71
+ severity: 'high',
72
+ message: `Module "${source}" is imported ${locs.length} times`,
73
+ file,
74
+ line: locs[0].line,
75
+ column: locs[0].column,
76
+ symbol: source,
77
+ });
78
+ }
79
+ }
80
+ return findings;
81
+ }
82
+ /**
83
+ * A single identifier-like token is code *vocabulary*, not a duplicated *value*:
84
+ * `'typescript'`, `'function_declaration'`, `'conventions/usage-pair'`,
85
+ * `'margin-top'` name concepts in the code's own vocabulary (a format name, a
86
+ * tree-sitter node type, a rule id, a CSS property) and are correct to repeat
87
+ * inline — extracting them to a constant adds indirection, not clarity. A magic
88
+ * string worth naming is a value with *content*: whitespace (a message, a query,
89
+ * a sentence) or punctuation outside the slug set (an email, a URL, a format
90
+ * string). This is the precision boundary the legacy `checkDuplicateStrings`
91
+ * lacked — it flagged any repeated string, so a code-analysis tool's own source
92
+ * (full of node-type and fact-name literals) read as hundreds of false positives.
93
+ */
94
+ const VOCABULARY_TOKEN = /^[A-Za-z_$][A-Za-z0-9_$./:-]*$/;
95
+ /** A relative module specifier (`'./x.js'`, `'../x.js'`) names a file, not a value. */
96
+ const RELATIVE_MODULE = /^\.\.?\//;
97
+ /** A CLI flag/option spec (`--overwrite`, `-p, --path <path>`, `--limit <n>`):
98
+ * the commander `.option()` signature string, repeated verbatim across the
99
+ * option definition, help text and docs. A flag *name* (with an optional
100
+ * `<arg>`/`[arg]` placeholder), not a duplicated value — extracting it to a
101
+ * constant adds indirection, not clarity (the same rationale as a vocabulary
102
+ * token). */
103
+ const CLI_OPTION = /^--?[A-Za-z][\w-]*(?:, --?[A-Za-z][\w-]*)*(?:\s+<[^>]+>|\s+\[[^\]]+\])*$/;
104
+ /** A decorative separator — a run of box-drawing/punctuation with no alphanumeric
105
+ * content (`════…`, `──…`). Pure presentation, never a value worth extracting. */
106
+ const SEPARATOR_ONLY = /^[^A-Za-z0-9]*$/;
107
+ /** A dotted/versioned name or IP literal (`.codeauditor.json`, `127.0.0.1`,
108
+ * `v1.2.3`): an identifier-like token whose first character is a digit or dot
109
+ * rather than a letter, so `VOCABULARY_TOKEN` (which starts `[A-Za-z_$]`) misses
110
+ * it. A filename or constant address is a *name*, not a duplicated value. */
111
+ const DOTTED_NAME = /^\.?[A-Za-z0-9_$][A-Za-z0-9_$./:-]*$/;
112
+ /** True when a quoted literal is a *name*, not a duplicated value: a single
113
+ * identifier-like token (vocabulary), a relative module path, a CLI flag spec,
114
+ * a decorative separator, or a dotted filename/IP. */
115
+ function isNameLiteral(value) {
116
+ const inner = value.replace(/^['"`]/, '').replace(/['"`]$/, '');
117
+ return VOCABULARY_TOKEN.test(inner)
118
+ || RELATIVE_MODULE.test(inner)
119
+ || CLI_OPTION.test(inner)
120
+ || SEPARATOR_ONLY.test(inner)
121
+ || DOTTED_NAME.test(inner);
122
+ }
123
+ /** Re-homes `checkDuplicateStrings`, grouping per `(file, value)`. */
124
+ function detectDuplicateStringLiteral(facts) {
125
+ const byFile = new Map();
126
+ for (const lit of facts) {
127
+ if (lit.value.length <= 10)
128
+ continue; // non-trivial strings only
129
+ if (isNameLiteral(lit.value))
130
+ continue; // a name (vocabulary/path), not a value
131
+ let fileMap = byFile.get(lit.file);
132
+ if (!fileMap) {
133
+ fileMap = new Map();
134
+ byFile.set(lit.file, fileMap);
135
+ }
136
+ const locs = fileMap.get(lit.value) ?? [];
137
+ locs.push({ line: lit.line, column: lit.column });
138
+ fileMap.set(lit.value, locs);
139
+ }
140
+ const findings = [];
141
+ for (const [file, fileMap] of byFile) {
142
+ for (const [value, locs] of fileMap) {
143
+ if (locs.length <= 2)
144
+ continue; // more than 2 occurrences
145
+ findings.push({
146
+ ruleId: 'duplicate-string-literal',
147
+ severity: 'high',
148
+ message: `String literal "${value.substring(0, 30)}..." is duplicated ${locs.length} times`,
149
+ file,
150
+ line: locs[0].line,
151
+ column: locs[0].column,
152
+ symbol: value.substring(0, 50),
153
+ fix: { oldText: value, newText: '// Consider extracting to a constant' },
154
+ });
155
+ }
156
+ }
157
+ return findings;
158
+ }
159
+ /**
160
+ * The defaults re-declared from `DEFAULT_DRY_CONFIG` (UniversalDRYAnalyzer.ts) —
161
+ * the same merge the legacy `analyzeAST` did before extraction. `excludePatterns`
162
+ * is verbatim (the test/spec/tests-dir globs). The `checkStructuralSimilarity` /
163
+ * `checkExpressionSimilarity` booleans are no longer read as gates (§10 — config
164
+ * tunes, never selects); they remain in the merged shape only for config-surface
165
+ * compatibility until the §15 deletions drop them.
166
+ */
167
+ const DRY_BLOCK_DEFAULTS = {
168
+ minLineThreshold: 15,
169
+ similarityThreshold: 0.85,
170
+ excludePatterns: [
171
+ '**/*.test.ts', '**/*.spec.ts',
172
+ '**/*.test.tsx', '**/*.spec.tsx',
173
+ '**/*.test.js', '**/*.spec.js',
174
+ '**/*.test.jsx', '**/*.spec.jsx',
175
+ '**/test/**', '**/tests/**',
176
+ ],
177
+ checkStructuralSimilarity: false,
178
+ checkExpressionSimilarity: true,
179
+ minShapeNames: 4,
180
+ };
181
+ /** Merge the (default-merged) thresholds onto the block defaults. */
182
+ export function resolveBlockConfig(t) {
183
+ return { ...DRY_BLOCK_DEFAULTS, ...t };
184
+ }
185
+ /** True if the two blocks share code spans (same file + overlapping lines). */
186
+ function spansOverlap(a, b) {
187
+ if (a.file !== b.file)
188
+ return false;
189
+ return !(a.end.line < b.start.line || b.end.line < a.start.line);
190
+ }
191
+ /** Sort comparator: earliest file+line first. */
192
+ function byFileAndLine(a, b) {
193
+ if (a.file !== b.file)
194
+ return a.file.localeCompare(b.file);
195
+ return a.start.line - b.start.line;
196
+ }
197
+ /**
198
+ * Deduplicate overlapping blocks (re-homed verbatim): prefer the innermost block
199
+ * when one fully contains another, the earliest when only partially overlapping.
200
+ */
201
+ function deduplicateBlocks(blocks) {
202
+ if (blocks.length <= 1)
203
+ return blocks;
204
+ const sorted = [...blocks].sort(byFileAndLine);
205
+ const result = [];
206
+ let last = null;
207
+ for (const block of sorted) {
208
+ if (last && last.file === block.file) {
209
+ if (last.start.line <= block.start.line && last.end.line >= block.end.line) {
210
+ result.pop();
211
+ result.push(block);
212
+ last = block;
213
+ continue;
214
+ }
215
+ if (block.start.line <= last.start.line && block.end.line >= last.end.line) {
216
+ continue;
217
+ }
218
+ if (!(last.end.line < block.start.line)) {
219
+ continue;
220
+ }
221
+ }
222
+ result.push(block);
223
+ last = block;
224
+ }
225
+ return result;
226
+ }
227
+ /** Overlapping bigrams of a token sequence — an order-aware fingerprint. A
228
+ * sequence shorter than two tokens yields no bigrams (similarity 0). */
229
+ function tokenBigrams(tokens) {
230
+ const out = [];
231
+ for (let i = 0; i + 1 < tokens.length; i++) {
232
+ out.push(tokens[i] + '' + tokens[i + 1]);
233
+ }
234
+ return out;
235
+ }
236
+ /** Jaccard similarity over the token *bigrams* of two whitespace-tokenized
237
+ * strings, [0, 1]. Bigrams are order- and frequency-aware where a bare token
238
+ * SET is not: two blocks sharing the same token vocabulary but in a different
239
+ * order (or a large block whose vocabulary subsumes a smaller block's) no
240
+ * longer compare as ~100% structurally similar. */
241
+ function computeJaccardSimilarity(text1, text2) {
242
+ const grams1 = new Set(tokenBigrams(text1.split(/\s+/).filter(Boolean)));
243
+ const grams2 = new Set(tokenBigrams(text2.split(/\s+/).filter(Boolean)));
244
+ let intersection = 0;
245
+ for (const g of grams1) {
246
+ if (grams2.has(g))
247
+ intersection++;
248
+ }
249
+ const union = grams1.size + grams2.size - intersection;
250
+ return union === 0 ? 0 : intersection / union;
251
+ }
252
+ /** Translate a minimal glob (`*`, `**`, `?`) to an anchored regex (re-homed). */
253
+ function globToRegExp(pattern) {
254
+ const out = ['^'];
255
+ for (let i = 0; i < pattern.length; i++) {
256
+ const ch = pattern[i];
257
+ if (ch === '*') {
258
+ if (pattern[i + 1] === '*') {
259
+ i += 1;
260
+ if (pattern[i + 1] === '/') {
261
+ i += 1;
262
+ out.push('(?:.*/)?');
263
+ }
264
+ else {
265
+ out.push('.*');
266
+ }
267
+ }
268
+ else {
269
+ out.push('[^/]*');
270
+ }
271
+ }
272
+ else if (ch === '?') {
273
+ out.push('[^/]');
274
+ }
275
+ else if ('^$\\.+?()[]{}|'.includes(ch)) {
276
+ out.push('\\', ch);
277
+ }
278
+ else {
279
+ out.push(ch);
280
+ }
281
+ }
282
+ out.push('$');
283
+ return new RegExp(out.join(''));
284
+ }
285
+ /** True when a file path matches any of the given glob-ish exclude patterns. */
286
+ function isExcluded(filePath, patterns) {
287
+ const normalized = filePath.replace(/\\/g, '/');
288
+ return patterns.some((pattern) => globToRegExp(pattern).test(normalized));
289
+ }
290
+ /** True when `outer`'s span fully contains `inner`'s span in the same file. */
291
+ function shapeSpansContain(outer, inner) {
292
+ if (outer.file !== inner.file)
293
+ return false;
294
+ const startLte = outer.start.line < inner.start.line ||
295
+ (outer.start.line === inner.start.line && outer.start.column <= inner.start.column);
296
+ const endGte = outer.end.line > inner.end.line ||
297
+ (outer.end.line === inner.end.line && outer.end.column >= inner.end.column);
298
+ return startLte && endGte;
299
+ }
300
+ /** Drop nested fragments, keeping the outermost (re-homed `dedupeShapeFragments`). */
301
+ function dedupeShapeFragments(fragments) {
302
+ const sorted = [...fragments].sort((a, b) => {
303
+ if (a.file !== b.file)
304
+ return a.file.localeCompare(b.file);
305
+ if (a.start.line !== b.start.line)
306
+ return a.start.line - b.start.line;
307
+ if (a.start.column !== b.start.column)
308
+ return a.start.column - b.start.column;
309
+ if (a.end.line !== b.end.line)
310
+ return b.end.line - a.end.line;
311
+ return b.end.column - a.end.column;
312
+ });
313
+ const kept = [];
314
+ for (const f of sorted) {
315
+ if (!kept.some((k) => shapeSpansContain(k, f)))
316
+ kept.push(f);
317
+ }
318
+ return kept;
319
+ }
320
+ /** Longest common subsequence of two string arrays, as the actual shared sequence. */
321
+ function longestCommonSubsequence(a, b) {
322
+ const m = a.length;
323
+ const n = b.length;
324
+ const dp = Array.from({ length: m + 1 }, () => new Array(n + 1).fill(0));
325
+ for (let i = 1; i <= m; i++) {
326
+ for (let j = 1; j <= n; j++) {
327
+ dp[i][j] = a[i - 1] === b[j - 1] ? dp[i - 1][j - 1] + 1 : Math.max(dp[i - 1][j], dp[i][j - 1]);
328
+ }
329
+ }
330
+ const seq = [];
331
+ let i = m;
332
+ let j = n;
333
+ while (i > 0 && j > 0) {
334
+ if (a[i - 1] === b[j - 1]) {
335
+ seq.push(a[i - 1]);
336
+ i--;
337
+ j--;
338
+ }
339
+ else if (dp[i - 1][j] >= dp[i][j - 1]) {
340
+ i--;
341
+ }
342
+ else {
343
+ j--;
344
+ }
345
+ }
346
+ return seq.reverse();
347
+ }
348
+ /**
349
+ * Method names from well-known fluent APIs (query/schema builders, validators,
350
+ * commander, promises, DOM/stdlib chains) — "structurally similar by design",
351
+ * so the default-on expression rule stays quiet on them (re-homed verbatim).
352
+ */
353
+ const FLUENT_CHAIN_METHODS = new Set([
354
+ // SQL query builders (knex, Kysely, Drizzle, …)
355
+ 'select', 'selectDistinct', 'from', 'where', 'andWhere', 'orWhere', 'whereRaw',
356
+ 'whereIn', 'whereNotIn', 'whereNull', 'whereNotNull', 'whereExists', 'whereBetween',
357
+ 'orderBy', 'groupBy', 'having', 'join', 'innerJoin', 'leftJoin', 'rightJoin',
358
+ 'crossJoin', 'fullOuterJoin', 'limit', 'offset', 'distinct', 'count', 'sum', 'avg',
359
+ 'first', 'pluck', 'forUpdate', 'forShare', 'skipLocked', 'union', 'unionAll',
360
+ 'insert', 'update', 'del', 'delete', 'into', 'returning', 'onConflict', 'ignore',
361
+ 'merge', 'increment', 'decrement', 'transacting', 'using', 'updateFrom', 'testSql',
362
+ 'toSQL', 'toQuery', 'raw', 'table', 'schemaBuilder', 'queryBuilder', 'partitionBy',
363
+ // Schema builders (knex `table.integer().unsigned().references()`)
364
+ 'createTable', 'alterTable', 'dropTable', 'dropTableIfExists', 'renameTable',
365
+ 'renameColumn', 'dropColumn', 'integer', 'bigInteger', 'text', 'boolean', 'float',
366
+ 'double', 'decimal', 'date', 'dateTime', 'timestamp', 'timestamps', 'time',
367
+ 'binary', 'json', 'jsonb', 'uuid', 'unsigned', 'references', 'inTable', 'defaultTo',
368
+ 'index', 'unique', 'primary', 'comment', 'foreign', 'onDelete', 'onUpdate',
369
+ 'deferrable', 'withKeyName', 'notNullable', 'collate', 'check',
370
+ // Zod / Valibot schema validators
371
+ 'trim', 'min', 'max', 'length', 'int', 'positive', 'nonnegative', 'negative',
372
+ 'regex', 'email', 'url', 'datetime', 'optional', 'nullish', 'nullable', 'default',
373
+ 'describe', 'refine', 'superRefine', 'transform', 'safeParse', 'parse', 'array',
374
+ 'object', 'enum', 'record', 'union', 'intersection', 'tuple', 'literal', 'number',
375
+ 'string', 'nativeEnum', 'lazy', 'preprocess', 'brand',
376
+ // commander / CLI builders
377
+ 'command', 'description', 'option', 'requiredOption', 'action', 'argument',
378
+ 'version', 'usage', 'name', 'alias', 'allowUnknownOption', 'exitOverride',
379
+ // Promises
380
+ 'then', 'catch', 'finally',
381
+ // DOM / jQuery traversal and JS stdlib array/string method chains
382
+ 'closest', 'find', 'text', 'map', 'filter', 'reduce', 'forEach', 'slice', 'split',
383
+ 'join', 'replace', 'replaceAll', 'toLowerCase', 'toUpperCase', 'flatMap', 'concat',
384
+ ]);
385
+ /** True when the chain is a fluent library/builder API (not duplicated logic). */
386
+ function isFluentChain(names) {
387
+ return names.some((n) => FLUENT_CHAIN_METHODS.has(n));
388
+ }
389
+ /** Partition the corpus `code-block` fact by file, dropping excluded files. */
390
+ function perFileGroups(facts, patterns) {
391
+ const byFile = new Map();
392
+ for (const fact of facts) {
393
+ if (isExcluded(fact.file, patterns))
394
+ continue;
395
+ const group = byFile.get(fact.file) ?? { blocks: [], fragments: [] };
396
+ if (fact.kind === 'block')
397
+ group.blocks.push(fact);
398
+ else
399
+ group.fragments.push(fact);
400
+ byFile.set(fact.file, group);
401
+ }
402
+ return byFile;
403
+ }
404
+ /** Re-homes `reportExactDuplicates` (per file): group by hash, flag repeats. */
405
+ function detectExactDuplicates(blocks, cfg) {
406
+ const minLine = cfg.minLineThreshold || 5;
407
+ const large = blocks.filter((b) => b.lineCount >= minLine);
408
+ const deduped = deduplicateBlocks(large);
409
+ const byHash = new Map();
410
+ for (const block of deduped) {
411
+ const group = byHash.get(block.hash) ?? [];
412
+ group.push(block);
413
+ byHash.set(block.hash, group);
414
+ }
415
+ const findings = [];
416
+ for (const group of byHash.values()) {
417
+ if (group.length < 2)
418
+ continue;
419
+ const sorted = [...group].sort(byFileAndLine);
420
+ const original = sorted[0];
421
+ for (let i = 1; i < sorted.length; i++) {
422
+ const block = sorted[i];
423
+ if (spansOverlap(original, block))
424
+ continue;
425
+ findings.push({
426
+ ruleId: 'dry/duplicate',
427
+ severity: 'high',
428
+ message: `Duplicate code block detected (${block.lineCount} lines). ` +
429
+ `First occurrence at ${original.file}:${original.start.line}`,
430
+ file: block.file,
431
+ line: block.start.line,
432
+ column: block.start.column,
433
+ symbol: block.hash,
434
+ resolution: {
435
+ action: 'extract-duplicate',
436
+ summary: `Extract the ${block.lineCount}-line block duplicated at ${original.file}:${original.start.line} into a shared function both sites call.`,
437
+ files: [block.file, original.file],
438
+ lines: [block.start.line, original.start.line],
439
+ },
440
+ fix: { oldText: block.text, newText: '// Consider extracting to a shared function' },
441
+ });
442
+ }
443
+ }
444
+ return findings;
445
+ }
446
+ /** Re-homes `reportStructuralDuplicates` (per file): Jaccard over token-kind skeletons. */
447
+ function detectStructuralDuplicates(blocks, cfg) {
448
+ const minLine = cfg.minLineThreshold || 5;
449
+ const threshold = cfg.similarityThreshold ?? 0.85;
450
+ const large = blocks.filter((b) => b.lineCount >= minLine);
451
+ const deduped = deduplicateBlocks(large);
452
+ const findings = [];
453
+ for (let i = 0; i < deduped.length; i++) {
454
+ const original = deduped[i];
455
+ for (let j = i + 1; j < deduped.length; j++) {
456
+ const block = deduped[j];
457
+ if (original.hash === block.hash)
458
+ continue;
459
+ if (spansOverlap(original, block))
460
+ continue;
461
+ const similarity = computeJaccardSimilarity(original.structuralSkeleton, block.structuralSkeleton);
462
+ if (similarity < threshold)
463
+ continue;
464
+ findings.push({
465
+ ruleId: 'dry/structural-similarity',
466
+ severity: 'high',
467
+ message: `Structurally similar code block detected (${Math.round(similarity * 100)}% similar). ` +
468
+ `First occurrence at ${original.file}:${original.start.line}`,
469
+ file: block.file,
470
+ line: block.start.line,
471
+ column: block.start.column,
472
+ symbol: block.hash,
473
+ fix: { oldText: block.text, newText: '// Consider extracting to a shared function' },
474
+ });
475
+ }
476
+ }
477
+ return findings;
478
+ }
479
+ /** Build the `dry/similar-expression` finding for `fragment` resembling `first`. */
480
+ function buildSimilarityViolation(fragment, first, shared) {
481
+ const isObject = fragment.fragmentKind === 'object';
482
+ const label = isObject ? 'object literal' : 'call chain';
483
+ const unit = isObject ? 'fields' : 'methods';
484
+ const targetClause = isObject && fragment.target
485
+ ? ` built for "${fragment.target}"`
486
+ : '';
487
+ return {
488
+ ruleId: 'dry/similar-expression',
489
+ severity: 'high',
490
+ message: `Near-identical ${label}${targetClause} detected (${shared.length} shared ${unit}: ${shared.join(', ')}). ` +
491
+ `First occurrence at ${first.file}:${first.start.line}`,
492
+ file: fragment.file,
493
+ line: fragment.start.line,
494
+ column: fragment.start.column,
495
+ symbol: shared.join('.'),
496
+ resolution: {
497
+ action: 'extract-shared-expression',
498
+ summary: `Extract the shared ${isObject ? 'field list' : 'method chain'} (${shared.join(', ')}) into a shared helper, builder, or constant both sites use.`,
499
+ files: [fragment.file, first.file],
500
+ lines: [fragment.start.line, first.start.line],
501
+ },
502
+ fix: { oldText: fragment.text, newText: `// Consider extracting the shared ${unit} into a shared helper` },
503
+ };
504
+ }
505
+ /** Re-homes `reportExpressionSimilarities` (per file): LCS over fragment names. */
506
+ function detectExpressionSimilarities(fragments, cfg) {
507
+ const min = cfg.minShapeNames || 4;
508
+ // The legacy walk filtered fragments during collection: object literals were
509
+ // dropped only for having too few names, while call chains were also dropped
510
+ // when they were fluent library/builder APIs. Re-apply that same split here —
511
+ // a fluent-chain exclusion on an object literal would wrongly drop a
512
+ // `{ select, from, where, orderBy }` literal that the legacy code compared.
513
+ const eligible = fragments.filter((f) => {
514
+ if (f.names.length < min)
515
+ return false;
516
+ if (f.fragmentKind === 'chain' && isFluentChain(f.names))
517
+ return false;
518
+ return true;
519
+ });
520
+ const deduped = dedupeShapeFragments(eligible);
521
+ const reported = new Set();
522
+ const findings = [];
523
+ for (let j = 1; j < deduped.length; j++) {
524
+ if (reported.has(j))
525
+ continue;
526
+ for (let i = 0; i < j; i++) {
527
+ if (deduped[i].fragmentKind !== deduped[j].fragmentKind)
528
+ continue;
529
+ if (deduped[i].target !== deduped[j].target)
530
+ continue;
531
+ const shared = longestCommonSubsequence(deduped[i].names, deduped[j].names);
532
+ if (shared.length < min)
533
+ continue;
534
+ findings.push(buildSimilarityViolation(deduped[j], deduped[i], shared));
535
+ reported.add(j);
536
+ break;
537
+ }
538
+ }
539
+ return findings;
540
+ }
541
+ /**
542
+ * The legacy `computeJaccardSimilarity` (UniversalDRYAnalyzer.ts) — a bare
543
+ * token-SET Jaccard over the whitespace-split skeleton. The migrated
544
+ * `dry/structural-similarity` rule deliberately uses a *bigram* Jaccard
545
+ * (`computeJaccardSimilarity` above), but the seed write must reproduce the
546
+ * *legacy* `dry_pair_history` series byte-for-byte, so it re-homes the legacy
547
+ * bare-token-set metric rather than the migrated bigram.
548
+ */
549
+ function computeBareTokenJaccard(text1, text2) {
550
+ const tokens1 = new Set(text1.split(/\s+/).filter(Boolean));
551
+ const tokens2 = new Set(text2.split(/\s+/).filter(Boolean));
552
+ let intersection = 0;
553
+ for (const t of tokens1) {
554
+ if (tokens2.has(t))
555
+ intersection++;
556
+ }
557
+ const union = tokens1.size + tokens2.size - intersection;
558
+ return union === 0 ? 0 : intersection / union;
559
+ }
560
+ /** The legacy order-independent pair identity: SHA256 of the sorted
561
+ * `file|nodeType|line` ids. */
562
+ function computePairFingerprint(original, block) {
563
+ const id1 = `${original.file}|${original.nodeType}|${original.start.line}`;
564
+ const id2 = `${block.file}|${block.nodeType}|${block.start.line}`;
565
+ const sorted = [id1, id2].sort();
566
+ return crypto.createHash('sha256').update(sorted.join('||')).digest('hex');
567
+ }
568
+ /**
569
+ * Seed the `dry_pair_history` rows the legacy `createDryVisitor` accumulated,
570
+ * from the phase `code-block` fact. This re-homes the pair half of the legacy
571
+ * `analyzeAST` — per-file filter → dedupe → compare — over the projected data,
572
+ * and writes the *legacy* gates:
573
+ *
574
+ * - exact-duplicate pairs (`dry/duplicate`, similarity 1.0) always seed;
575
+ * - structural pairs (`dry/structural-similarity`) seed only when
576
+ * `checkStructuralSimilarity` is true, with the legacy bare-token-set Jaccard
577
+ * (not the migrated rule's bigram) and the legacy `similarityThreshold`.
578
+ *
579
+ * The three block *rules* re-apply `minLineThreshold`/`similarityThreshold` in
580
+ * `detectExactDuplicates`/`detectStructuralDuplicates`; the seed repeats the
581
+ * same per-file filter/dedupe so the written `(fingerprint, contentHash, line)`
582
+ * tuple is byte-identical to what the legacy visitor accumulated.
583
+ *
584
+ * @param codeBlocks - The assembled `code-block` corpus fact.
585
+ * @param config - The default-merged dry config (the rule's `resolveBlockConfig`).
586
+ * @returns The seeded pairs, in per-file walk order.
587
+ */
588
+ export function seedDryPairs(codeBlocks, config) {
589
+ const minLine = config.minLineThreshold || 5;
590
+ const threshold = config.similarityThreshold ?? 0.85;
591
+ const pairs = [];
592
+ const seed = (original, block, similarity, rule) => {
593
+ pairs.push({
594
+ pairFingerprint: computePairFingerprint(original, block),
595
+ file1: original.file,
596
+ symbol1: `${original.nodeType}:${original.start.line}`,
597
+ line1: original.start.line,
598
+ contentHash1: original.hash,
599
+ file2: block.file,
600
+ symbol2: `${block.nodeType}:${block.start.line}`,
601
+ line2: block.start.line,
602
+ contentHash2: block.hash,
603
+ similarity,
604
+ rule,
605
+ });
606
+ };
607
+ for (const { blocks } of perFileGroups(codeBlocks, config.excludePatterns ?? []).values()) {
608
+ const large = blocks.filter((b) => b.lineCount >= minLine);
609
+ const deduped = deduplicateBlocks(large);
610
+ // Exact duplicates — group by hash, seed each later block against the earliest.
611
+ const byHash = new Map();
612
+ for (const block of deduped) {
613
+ const group = byHash.get(block.hash) ?? [];
614
+ group.push(block);
615
+ byHash.set(block.hash, group);
616
+ }
617
+ for (const group of byHash.values()) {
618
+ if (group.length < 2)
619
+ continue;
620
+ const sorted = [...group].sort(byFileAndLine);
621
+ const original = sorted[0];
622
+ for (let i = 1; i < sorted.length; i++) {
623
+ const block = sorted[i];
624
+ if (spansOverlap(original, block))
625
+ continue;
626
+ seed(original, block, 1.0, 'dry/duplicate');
627
+ }
628
+ }
629
+ // Structural similarity — legacy-gated, bare-token-set Jaccard.
630
+ if (config.checkStructuralSimilarity) {
631
+ for (let i = 0; i < deduped.length; i++) {
632
+ const original = deduped[i];
633
+ for (let j = i + 1; j < deduped.length; j++) {
634
+ const block = deduped[j];
635
+ if (original.hash === block.hash)
636
+ continue;
637
+ if (spansOverlap(original, block))
638
+ continue;
639
+ const similarity = computeBareTokenJaccard(original.structuralSkeleton, block.structuralSkeleton);
640
+ if (similarity < threshold)
641
+ continue;
642
+ seed(original, block, similarity, 'dry/structural-similarity');
643
+ }
644
+ }
645
+ }
646
+ }
647
+ return pairs;
648
+ }
649
+ /** The fallback the legacy auditRunner Phase 2 hardcoded when no divergence
650
+ * config was set (mirrors `DEFAULT_ANALYZER_CONFIGS.dry.divergence`). */
651
+ const DIVERGENCE_DEFAULTS = {
652
+ divergenceThreshold: 0.05,
653
+ divergenceRuns: 2,
654
+ minPairSimilarity: 0.5,
655
+ };
656
+ /** Re-homes auditRunner Phase 2 verbatim: flag a pair whose similarity fell by
657
+ * `divergenceThreshold` for `divergenceRuns` consecutive runs. The
658
+ * `clone-pair-history` fact is grouped by fingerprint with its series already
659
+ * in timestamp order, so the anchor (file/line) is the group's most recent row. */
660
+ function detectDivergingClone(facts, cfg) {
661
+ const threshold = cfg.divergenceThreshold ?? 0.05;
662
+ const requiredDeclines = cfg.divergenceRuns ?? 2;
663
+ if (threshold <= 0)
664
+ return [];
665
+ const findings = [];
666
+ for (const group of facts) {
667
+ const rows = group.rows;
668
+ if (rows.length < requiredDeclines + 1)
669
+ continue;
670
+ // Check the last `requiredDeclines` consecutive pairs for a decline.
671
+ let consecutiveDeclines = 0;
672
+ for (let i = rows.length - requiredDeclines; i < rows.length; i++) {
673
+ if (rows[i].similarity < rows[i - 1].similarity - threshold) {
674
+ consecutiveDeclines++;
675
+ }
676
+ }
677
+ if (consecutiveDeclines >= requiredDeclines) {
678
+ const currentSim = rows[rows.length - 1].similarity;
679
+ const prevSim = rows[rows.length - 2].similarity;
680
+ const drop = Math.round((prevSim - currentSim) * 1000) / 1000;
681
+ const fp = group.fingerprint;
682
+ findings.push({
683
+ ruleId: 'dry/diverging-clone',
684
+ severity: 'severe',
685
+ message: `Clone pair has diverged: similarity dropped ${drop} (from ${prevSim.toFixed(3)} to ${currentSim.toFixed(3)}) across ${requiredDeclines} consecutive runs (pair: ${fp.slice(0, 12)}…). Review ${group.file1}:${group.line1} and ${group.file2}:${group.line2} for diverged logic.`,
686
+ file: group.file1,
687
+ line: group.line1,
688
+ // §7 — the pair fingerprint is the stable identity that located this finding.
689
+ symbol: fp,
690
+ });
691
+ }
692
+ }
693
+ return findings;
694
+ }
695
+ // ── The rules ─────────────────────────────────────────────────────────────────
696
+ const duplicateImport = {
697
+ id: 'duplicate-import',
698
+ analyzer: 'dry',
699
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['imports'] },
700
+ severity: 'high',
701
+ message: META.message,
702
+ docs: META.docs,
703
+ thresholds: META.thresholds,
704
+ samples: META.samples,
705
+ analyze(ctx) {
706
+ return detectDuplicateImport(ctx.facts['imports']);
707
+ },
708
+ };
709
+ const duplicateStringLiteral = {
710
+ id: 'duplicate-string-literal',
711
+ analyzer: 'dry',
712
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['string-literals'] },
713
+ severity: 'high',
714
+ message: STRING_META.message,
715
+ docs: STRING_META.docs,
716
+ thresholds: STRING_META.thresholds,
717
+ samples: STRING_META.samples,
718
+ analyze(ctx) {
719
+ return detectDuplicateStringLiteral(ctx.facts['string-literals']);
720
+ },
721
+ };
722
+ const dryDuplicate = {
723
+ id: 'dry/duplicate',
724
+ analyzer: 'dry',
725
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['code-block'] },
726
+ severity: 'high',
727
+ message: DUP_META.message,
728
+ docs: DUP_META.docs,
729
+ thresholds: DUP_META.thresholds,
730
+ samples: DUP_META.samples,
731
+ analyze(ctx) {
732
+ const cfg = resolveBlockConfig(ctx.thresholds);
733
+ const findings = [];
734
+ for (const { blocks } of perFileGroups(ctx.facts['code-block'], cfg.excludePatterns ?? []).values()) {
735
+ findings.push(...detectExactDuplicates(blocks, cfg));
736
+ }
737
+ return findings;
738
+ },
739
+ };
740
+ const dryStructuralSimilarity = {
741
+ id: 'dry/structural-similarity',
742
+ analyzer: 'dry',
743
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['code-block'] },
744
+ severity: 'high',
745
+ message: STRUCT_META.message,
746
+ docs: STRUCT_META.docs,
747
+ thresholds: STRUCT_META.thresholds,
748
+ samples: STRUCT_META.samples,
749
+ analyze(ctx) {
750
+ const cfg = resolveBlockConfig(ctx.thresholds);
751
+ const findings = [];
752
+ for (const { blocks } of perFileGroups(ctx.facts['code-block'], cfg.excludePatterns ?? []).values()) {
753
+ findings.push(...detectStructuralDuplicates(blocks, cfg));
754
+ }
755
+ return findings;
756
+ },
757
+ };
758
+ const drySimilarExpression = {
759
+ id: 'dry/similar-expression',
760
+ analyzer: 'dry',
761
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['code-block'] },
762
+ severity: 'high',
763
+ message: EXPR_META.message,
764
+ docs: EXPR_META.docs,
765
+ thresholds: EXPR_META.thresholds,
766
+ samples: EXPR_META.samples,
767
+ analyze(ctx) {
768
+ const cfg = resolveBlockConfig(ctx.thresholds);
769
+ const findings = [];
770
+ for (const { fragments } of perFileGroups(ctx.facts['code-block'], cfg.excludePatterns ?? []).values()) {
771
+ findings.push(...detectExpressionSimilarities(fragments, cfg));
772
+ }
773
+ return findings;
774
+ },
775
+ };
776
+ const divergingClone = {
777
+ id: 'dry/diverging-clone',
778
+ analyzer: 'dry',
779
+ needs: { formats: ['typescript', 'tsx', 'javascript'], facts: ['clone-pair-history'] },
780
+ severity: 'severe',
781
+ message: DIVERGING_META.message,
782
+ docs: DIVERGING_META.docs,
783
+ thresholds: DIVERGING_META.thresholds,
784
+ samples: DIVERGING_META.samples,
785
+ analyze(ctx) {
786
+ // The divergence knobs resolve the same way the legacy Phase 2 did: the
787
+ // dry namespace's `divergence` object, or the hardcoded fallback. The
788
+ // top-level `divergence` config is threaded into `dry.divergence` by the
789
+ // caller (§11.1), so `ctx.thresholds['divergence']` is the effective value.
790
+ const divergence = ctx.thresholds['divergence'] ?? DIVERGENCE_DEFAULTS;
791
+ return detectDivergingClone(ctx.facts['clone-pair-history'], divergence);
792
+ },
793
+ };
794
+ /** The DRY rules, in registry order. */
795
+ export const dryRules = [
796
+ duplicateImport,
797
+ duplicateStringLiteral,
798
+ dryDuplicate,
799
+ dryStructuralSimilarity,
800
+ drySimilarExpression,
801
+ divergingClone,
802
+ ];
803
+ //# sourceMappingURL=dry.js.map