@opencodereview/core 1.9.1

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 (453) hide show
  1. package/dist/ai/anthropic-provider.d.ts +41 -0
  2. package/dist/ai/anthropic-provider.d.ts.map +1 -0
  3. package/dist/ai/anthropic-provider.js +139 -0
  4. package/dist/ai/anthropic-provider.js.map +1 -0
  5. package/dist/ai/index.d.ts +39 -0
  6. package/dist/ai/index.d.ts.map +1 -0
  7. package/dist/ai/index.js +41 -0
  8. package/dist/ai/index.js.map +1 -0
  9. package/dist/ai/ollama-provider.d.ts +46 -0
  10. package/dist/ai/ollama-provider.d.ts.map +1 -0
  11. package/dist/ai/ollama-provider.js +149 -0
  12. package/dist/ai/ollama-provider.js.map +1 -0
  13. package/dist/ai/openai-provider.d.ts +44 -0
  14. package/dist/ai/openai-provider.d.ts.map +1 -0
  15. package/dist/ai/openai-provider.js +137 -0
  16. package/dist/ai/openai-provider.js.map +1 -0
  17. package/dist/ai/orchestrator.d.ts +60 -0
  18. package/dist/ai/orchestrator.d.ts.map +1 -0
  19. package/dist/ai/orchestrator.js +188 -0
  20. package/dist/ai/orchestrator.js.map +1 -0
  21. package/dist/ai/prompts.d.ts +27 -0
  22. package/dist/ai/prompts.d.ts.map +1 -0
  23. package/dist/ai/prompts.js +112 -0
  24. package/dist/ai/prompts.js.map +1 -0
  25. package/dist/ai/types.d.ts +75 -0
  26. package/dist/ai/types.d.ts.map +1 -0
  27. package/dist/ai/types.js +10 -0
  28. package/dist/ai/types.js.map +1 -0
  29. package/dist/ai/v4/embedding/index.d.ts +10 -0
  30. package/dist/ai/v4/embedding/index.d.ts.map +1 -0
  31. package/dist/ai/v4/embedding/index.js +10 -0
  32. package/dist/ai/v4/embedding/index.js.map +1 -0
  33. package/dist/ai/v4/embedding/local.d.ts +68 -0
  34. package/dist/ai/v4/embedding/local.d.ts.map +1 -0
  35. package/dist/ai/v4/embedding/local.js +167 -0
  36. package/dist/ai/v4/embedding/local.js.map +1 -0
  37. package/dist/ai/v4/embedding/ollama.d.ts +58 -0
  38. package/dist/ai/v4/embedding/ollama.d.ts.map +1 -0
  39. package/dist/ai/v4/embedding/ollama.js +101 -0
  40. package/dist/ai/v4/embedding/ollama.js.map +1 -0
  41. package/dist/ai/v4/embedding/openai.d.ts +36 -0
  42. package/dist/ai/v4/embedding/openai.d.ts.map +1 -0
  43. package/dist/ai/v4/embedding/openai.js +76 -0
  44. package/dist/ai/v4/embedding/openai.js.map +1 -0
  45. package/dist/ai/v4/embedding/similarity.d.ts +36 -0
  46. package/dist/ai/v4/embedding/similarity.d.ts.map +1 -0
  47. package/dist/ai/v4/embedding/similarity.js +60 -0
  48. package/dist/ai/v4/embedding/similarity.js.map +1 -0
  49. package/dist/ai/v4/index.d.ts +51 -0
  50. package/dist/ai/v4/index.d.ts.map +1 -0
  51. package/dist/ai/v4/index.js +54 -0
  52. package/dist/ai/v4/index.js.map +1 -0
  53. package/dist/ai/v4/llm/anthropic.d.ts +38 -0
  54. package/dist/ai/v4/llm/anthropic.d.ts.map +1 -0
  55. package/dist/ai/v4/llm/anthropic.js +86 -0
  56. package/dist/ai/v4/llm/anthropic.js.map +1 -0
  57. package/dist/ai/v4/llm/index.d.ts +9 -0
  58. package/dist/ai/v4/llm/index.d.ts.map +1 -0
  59. package/dist/ai/v4/llm/index.js +9 -0
  60. package/dist/ai/v4/llm/index.js.map +1 -0
  61. package/dist/ai/v4/llm/ollama.d.ts +39 -0
  62. package/dist/ai/v4/llm/ollama.d.ts.map +1 -0
  63. package/dist/ai/v4/llm/ollama.js +95 -0
  64. package/dist/ai/v4/llm/ollama.js.map +1 -0
  65. package/dist/ai/v4/llm/openai.d.ts +38 -0
  66. package/dist/ai/v4/llm/openai.d.ts.map +1 -0
  67. package/dist/ai/v4/llm/openai.js +88 -0
  68. package/dist/ai/v4/llm/openai.js.map +1 -0
  69. package/dist/ai/v4/patterns/defect-patterns.d.ts +57 -0
  70. package/dist/ai/v4/patterns/defect-patterns.d.ts.map +1 -0
  71. package/dist/ai/v4/patterns/defect-patterns.js +331 -0
  72. package/dist/ai/v4/patterns/defect-patterns.js.map +1 -0
  73. package/dist/ai/v4/patterns/index.d.ts +8 -0
  74. package/dist/ai/v4/patterns/index.d.ts.map +1 -0
  75. package/dist/ai/v4/patterns/index.js +7 -0
  76. package/dist/ai/v4/patterns/index.js.map +1 -0
  77. package/dist/ai/v4/pipeline.d.ts +74 -0
  78. package/dist/ai/v4/pipeline.d.ts.map +1 -0
  79. package/dist/ai/v4/pipeline.js +381 -0
  80. package/dist/ai/v4/pipeline.js.map +1 -0
  81. package/dist/ai/v4/sla.d.ts +62 -0
  82. package/dist/ai/v4/sla.d.ts.map +1 -0
  83. package/dist/ai/v4/sla.js +136 -0
  84. package/dist/ai/v4/sla.js.map +1 -0
  85. package/dist/ai/v4/types.d.ts +117 -0
  86. package/dist/ai/v4/types.d.ts.map +1 -0
  87. package/dist/ai/v4/types.js +16 -0
  88. package/dist/ai/v4/types.js.map +1 -0
  89. package/dist/ai-healer/prompt-builder.d.ts +33 -0
  90. package/dist/ai-healer/prompt-builder.d.ts.map +1 -0
  91. package/dist/ai-healer/prompt-builder.js +89 -0
  92. package/dist/ai-healer/prompt-builder.js.map +1 -0
  93. package/dist/config/defaults.d.ts +14 -0
  94. package/dist/config/defaults.d.ts.map +1 -0
  95. package/dist/config/defaults.js +57 -0
  96. package/dist/config/defaults.js.map +1 -0
  97. package/dist/config/index.d.ts +8 -0
  98. package/dist/config/index.d.ts.map +1 -0
  99. package/dist/config/index.js +6 -0
  100. package/dist/config/index.js.map +1 -0
  101. package/dist/config/loader.d.ts +33 -0
  102. package/dist/config/loader.d.ts.map +1 -0
  103. package/dist/config/loader.js +245 -0
  104. package/dist/config/loader.js.map +1 -0
  105. package/dist/config/types.d.ts +58 -0
  106. package/dist/config/types.d.ts.map +1 -0
  107. package/dist/config/types.js +7 -0
  108. package/dist/config/types.js.map +1 -0
  109. package/dist/config/v4-config.d.ts +77 -0
  110. package/dist/config/v4-config.d.ts.map +1 -0
  111. package/dist/config/v4-config.js +336 -0
  112. package/dist/config/v4-config.js.map +1 -0
  113. package/dist/detectors/ai-detector.d.ts +38 -0
  114. package/dist/detectors/ai-detector.d.ts.map +1 -0
  115. package/dist/detectors/ai-detector.js +62 -0
  116. package/dist/detectors/ai-detector.js.map +1 -0
  117. package/dist/detectors/context-break.d.ts +57 -0
  118. package/dist/detectors/context-break.d.ts.map +1 -0
  119. package/dist/detectors/context-break.js +199 -0
  120. package/dist/detectors/context-break.js.map +1 -0
  121. package/dist/detectors/deep-hallucination.d.ts +42 -0
  122. package/dist/detectors/deep-hallucination.d.ts.map +1 -0
  123. package/dist/detectors/deep-hallucination.js +297 -0
  124. package/dist/detectors/deep-hallucination.js.map +1 -0
  125. package/dist/detectors/duplication.d.ts +61 -0
  126. package/dist/detectors/duplication.d.ts.map +1 -0
  127. package/dist/detectors/duplication.js +204 -0
  128. package/dist/detectors/duplication.js.map +1 -0
  129. package/dist/detectors/hallucination.d.ts +80 -0
  130. package/dist/detectors/hallucination.d.ts.map +1 -0
  131. package/dist/detectors/hallucination.js +350 -0
  132. package/dist/detectors/hallucination.js.map +1 -0
  133. package/dist/detectors/index.d.ts +35 -0
  134. package/dist/detectors/index.d.ts.map +1 -0
  135. package/dist/detectors/index.js +33 -0
  136. package/dist/detectors/index.js.map +1 -0
  137. package/dist/detectors/logic-gap.d.ts +58 -0
  138. package/dist/detectors/logic-gap.d.ts.map +1 -0
  139. package/dist/detectors/logic-gap.js +284 -0
  140. package/dist/detectors/logic-gap.js.map +1 -0
  141. package/dist/detectors/over-engineering.d.ts +44 -0
  142. package/dist/detectors/over-engineering.d.ts.map +1 -0
  143. package/dist/detectors/over-engineering.js +257 -0
  144. package/dist/detectors/over-engineering.js.map +1 -0
  145. package/dist/detectors/security-pattern.d.ts +43 -0
  146. package/dist/detectors/security-pattern.d.ts.map +1 -0
  147. package/dist/detectors/security-pattern.js +235 -0
  148. package/dist/detectors/security-pattern.js.map +1 -0
  149. package/dist/detectors/stale-api.d.ts +44 -0
  150. package/dist/detectors/stale-api.d.ts.map +1 -0
  151. package/dist/detectors/stale-api.js +160 -0
  152. package/dist/detectors/stale-api.js.map +1 -0
  153. package/dist/detectors/type-safety.d.ts +41 -0
  154. package/dist/detectors/type-safety.d.ts.map +1 -0
  155. package/dist/detectors/type-safety.js +306 -0
  156. package/dist/detectors/type-safety.js.map +1 -0
  157. package/dist/detectors/v4/context-coherence.d.ts +67 -0
  158. package/dist/detectors/v4/context-coherence.d.ts.map +1 -0
  159. package/dist/detectors/v4/context-coherence.js +319 -0
  160. package/dist/detectors/v4/context-coherence.js.map +1 -0
  161. package/dist/detectors/v4/hallucinated-import.d.ts +52 -0
  162. package/dist/detectors/v4/hallucinated-import.d.ts.map +1 -0
  163. package/dist/detectors/v4/hallucinated-import.js +206 -0
  164. package/dist/detectors/v4/hallucinated-import.js.map +1 -0
  165. package/dist/detectors/v4/index.d.ts +28 -0
  166. package/dist/detectors/v4/index.d.ts.map +1 -0
  167. package/dist/detectors/v4/index.js +40 -0
  168. package/dist/detectors/v4/index.js.map +1 -0
  169. package/dist/detectors/v4/over-engineering.d.ts +69 -0
  170. package/dist/detectors/v4/over-engineering.d.ts.map +1 -0
  171. package/dist/detectors/v4/over-engineering.js +234 -0
  172. package/dist/detectors/v4/over-engineering.js.map +1 -0
  173. package/dist/detectors/v4/security-pattern.d.ts +46 -0
  174. package/dist/detectors/v4/security-pattern.d.ts.map +1 -0
  175. package/dist/detectors/v4/security-pattern.js +233 -0
  176. package/dist/detectors/v4/security-pattern.js.map +1 -0
  177. package/dist/detectors/v4/stale-api.d.ts +59 -0
  178. package/dist/detectors/v4/stale-api.d.ts.map +1 -0
  179. package/dist/detectors/v4/stale-api.js +470 -0
  180. package/dist/detectors/v4/stale-api.js.map +1 -0
  181. package/dist/detectors/v4/types.d.ts +74 -0
  182. package/dist/detectors/v4/types.d.ts.map +1 -0
  183. package/dist/detectors/v4/types.js +10 -0
  184. package/dist/detectors/v4/types.js.map +1 -0
  185. package/dist/diff/filter.d.ts +35 -0
  186. package/dist/diff/filter.d.ts.map +1 -0
  187. package/dist/diff/filter.js +65 -0
  188. package/dist/diff/filter.js.map +1 -0
  189. package/dist/diff/index.d.ts +9 -0
  190. package/dist/diff/index.d.ts.map +1 -0
  191. package/dist/diff/index.js +8 -0
  192. package/dist/diff/index.js.map +1 -0
  193. package/dist/diff/parser.d.ts +61 -0
  194. package/dist/diff/parser.d.ts.map +1 -0
  195. package/dist/diff/parser.js +203 -0
  196. package/dist/diff/parser.js.map +1 -0
  197. package/dist/i18n/en.d.ts +18 -0
  198. package/dist/i18n/en.d.ts.map +1 -0
  199. package/dist/i18n/en.js +83 -0
  200. package/dist/i18n/en.js.map +1 -0
  201. package/dist/i18n/index.d.ts +13 -0
  202. package/dist/i18n/index.d.ts.map +1 -0
  203. package/dist/i18n/index.js +14 -0
  204. package/dist/i18n/index.js.map +1 -0
  205. package/dist/i18n/provider.d.ts +54 -0
  206. package/dist/i18n/provider.d.ts.map +1 -0
  207. package/dist/i18n/provider.js +88 -0
  208. package/dist/i18n/provider.js.map +1 -0
  209. package/dist/i18n/types.d.ts +37 -0
  210. package/dist/i18n/types.d.ts.map +1 -0
  211. package/dist/i18n/types.js +10 -0
  212. package/dist/i18n/types.js.map +1 -0
  213. package/dist/i18n/zh.d.ts +14 -0
  214. package/dist/i18n/zh.d.ts.map +1 -0
  215. package/dist/i18n/zh.js +83 -0
  216. package/dist/i18n/zh.js.map +1 -0
  217. package/dist/index.d.ts +113 -0
  218. package/dist/index.d.ts.map +1 -0
  219. package/dist/index.js +106 -0
  220. package/dist/index.js.map +1 -0
  221. package/dist/ir/index.d.ts +10 -0
  222. package/dist/ir/index.d.ts.map +1 -0
  223. package/dist/ir/index.js +9 -0
  224. package/dist/ir/index.js.map +1 -0
  225. package/dist/ir/types.d.ts +126 -0
  226. package/dist/ir/types.d.ts.map +1 -0
  227. package/dist/ir/types.js +33 -0
  228. package/dist/ir/types.js.map +1 -0
  229. package/dist/languages/go/index.d.ts +7 -0
  230. package/dist/languages/go/index.d.ts.map +1 -0
  231. package/dist/languages/go/index.js +7 -0
  232. package/dist/languages/go/index.js.map +1 -0
  233. package/dist/languages/go/parser.d.ts +89 -0
  234. package/dist/languages/go/parser.d.ts.map +1 -0
  235. package/dist/languages/go/parser.js +509 -0
  236. package/dist/languages/go/parser.js.map +1 -0
  237. package/dist/languages/index.d.ts +13 -0
  238. package/dist/languages/index.d.ts.map +1 -0
  239. package/dist/languages/index.js +14 -0
  240. package/dist/languages/index.js.map +1 -0
  241. package/dist/languages/java/index.d.ts +7 -0
  242. package/dist/languages/java/index.d.ts.map +1 -0
  243. package/dist/languages/java/index.js +7 -0
  244. package/dist/languages/java/index.js.map +1 -0
  245. package/dist/languages/java/parser.d.ts +82 -0
  246. package/dist/languages/java/parser.d.ts.map +1 -0
  247. package/dist/languages/java/parser.js +492 -0
  248. package/dist/languages/java/parser.js.map +1 -0
  249. package/dist/languages/kotlin/index.d.ts +7 -0
  250. package/dist/languages/kotlin/index.d.ts.map +1 -0
  251. package/dist/languages/kotlin/index.js +7 -0
  252. package/dist/languages/kotlin/index.js.map +1 -0
  253. package/dist/languages/kotlin/parser.d.ts +84 -0
  254. package/dist/languages/kotlin/parser.d.ts.map +1 -0
  255. package/dist/languages/kotlin/parser.js +507 -0
  256. package/dist/languages/kotlin/parser.js.map +1 -0
  257. package/dist/languages/python/index.d.ts +7 -0
  258. package/dist/languages/python/index.d.ts.map +1 -0
  259. package/dist/languages/python/index.js +7 -0
  260. package/dist/languages/python/index.js.map +1 -0
  261. package/dist/languages/python/parser.d.ts +91 -0
  262. package/dist/languages/python/parser.d.ts.map +1 -0
  263. package/dist/languages/python/parser.js +375 -0
  264. package/dist/languages/python/parser.js.map +1 -0
  265. package/dist/languages/registry.d.ts +81 -0
  266. package/dist/languages/registry.d.ts.map +1 -0
  267. package/dist/languages/registry.js +150 -0
  268. package/dist/languages/registry.js.map +1 -0
  269. package/dist/languages/types.d.ts +137 -0
  270. package/dist/languages/types.d.ts.map +1 -0
  271. package/dist/languages/types.js +10 -0
  272. package/dist/languages/types.js.map +1 -0
  273. package/dist/languages/typescript/index.d.ts +7 -0
  274. package/dist/languages/typescript/index.d.ts.map +1 -0
  275. package/dist/languages/typescript/index.js +7 -0
  276. package/dist/languages/typescript/index.js.map +1 -0
  277. package/dist/languages/typescript/parser.d.ts +51 -0
  278. package/dist/languages/typescript/parser.d.ts.map +1 -0
  279. package/dist/languages/typescript/parser.js +286 -0
  280. package/dist/languages/typescript/parser.js.map +1 -0
  281. package/dist/license/generator.d.ts +43 -0
  282. package/dist/license/generator.d.ts.map +1 -0
  283. package/dist/license/generator.js +72 -0
  284. package/dist/license/generator.js.map +1 -0
  285. package/dist/license/index.d.ts +11 -0
  286. package/dist/license/index.d.ts.map +1 -0
  287. package/dist/license/index.js +12 -0
  288. package/dist/license/index.js.map +1 -0
  289. package/dist/license/types.d.ts +85 -0
  290. package/dist/license/types.d.ts.map +1 -0
  291. package/dist/license/types.js +10 -0
  292. package/dist/license/types.js.map +1 -0
  293. package/dist/license/validator.d.ts +77 -0
  294. package/dist/license/validator.d.ts.map +1 -0
  295. package/dist/license/validator.js +275 -0
  296. package/dist/license/validator.js.map +1 -0
  297. package/dist/parser/extractor.d.ts +31 -0
  298. package/dist/parser/extractor.d.ts.map +1 -0
  299. package/dist/parser/extractor.js +10 -0
  300. package/dist/parser/extractor.js.map +1 -0
  301. package/dist/parser/extractors/go.d.ts +21 -0
  302. package/dist/parser/extractors/go.d.ts.map +1 -0
  303. package/dist/parser/extractors/go.js +569 -0
  304. package/dist/parser/extractors/go.js.map +1 -0
  305. package/dist/parser/extractors/index.d.ts +13 -0
  306. package/dist/parser/extractors/index.d.ts.map +1 -0
  307. package/dist/parser/extractors/index.js +13 -0
  308. package/dist/parser/extractors/index.js.map +1 -0
  309. package/dist/parser/extractors/java.d.ts +24 -0
  310. package/dist/parser/extractors/java.d.ts.map +1 -0
  311. package/dist/parser/extractors/java.js +611 -0
  312. package/dist/parser/extractors/java.js.map +1 -0
  313. package/dist/parser/extractors/kotlin.d.ts +25 -0
  314. package/dist/parser/extractors/kotlin.d.ts.map +1 -0
  315. package/dist/parser/extractors/kotlin.js +665 -0
  316. package/dist/parser/extractors/kotlin.js.map +1 -0
  317. package/dist/parser/extractors/python.d.ts +21 -0
  318. package/dist/parser/extractors/python.d.ts.map +1 -0
  319. package/dist/parser/extractors/python.js +514 -0
  320. package/dist/parser/extractors/python.js.map +1 -0
  321. package/dist/parser/extractors/typescript.d.ts +23 -0
  322. package/dist/parser/extractors/typescript.d.ts.map +1 -0
  323. package/dist/parser/extractors/typescript.js +664 -0
  324. package/dist/parser/extractors/typescript.js.map +1 -0
  325. package/dist/parser/index.d.ts +15 -0
  326. package/dist/parser/index.d.ts.map +1 -0
  327. package/dist/parser/index.js +14 -0
  328. package/dist/parser/index.js.map +1 -0
  329. package/dist/parser/manager.d.ts +50 -0
  330. package/dist/parser/manager.d.ts.map +1 -0
  331. package/dist/parser/manager.js +159 -0
  332. package/dist/parser/manager.js.map +1 -0
  333. package/dist/registry/builtins/go-builtins.d.ts +13 -0
  334. package/dist/registry/builtins/go-builtins.d.ts.map +1 -0
  335. package/dist/registry/builtins/go-builtins.js +63 -0
  336. package/dist/registry/builtins/go-builtins.js.map +1 -0
  337. package/dist/registry/builtins/java-builtins.d.ts +10 -0
  338. package/dist/registry/builtins/java-builtins.d.ts.map +1 -0
  339. package/dist/registry/builtins/java-builtins.js +59 -0
  340. package/dist/registry/builtins/java-builtins.js.map +1 -0
  341. package/dist/registry/builtins/kotlin-builtins.d.ts +10 -0
  342. package/dist/registry/builtins/kotlin-builtins.d.ts.map +1 -0
  343. package/dist/registry/builtins/kotlin-builtins.js +38 -0
  344. package/dist/registry/builtins/kotlin-builtins.js.map +1 -0
  345. package/dist/registry/builtins/node-builtins.d.ts +10 -0
  346. package/dist/registry/builtins/node-builtins.d.ts.map +1 -0
  347. package/dist/registry/builtins/node-builtins.js +36 -0
  348. package/dist/registry/builtins/node-builtins.js.map +1 -0
  349. package/dist/registry/builtins/python-builtins.d.ts +10 -0
  350. package/dist/registry/builtins/python-builtins.d.ts.map +1 -0
  351. package/dist/registry/builtins/python-builtins.js +43 -0
  352. package/dist/registry/builtins/python-builtins.js.map +1 -0
  353. package/dist/registry/cache.d.ts +53 -0
  354. package/dist/registry/cache.d.ts.map +1 -0
  355. package/dist/registry/cache.js +147 -0
  356. package/dist/registry/cache.js.map +1 -0
  357. package/dist/registry/go-registry.d.ts +52 -0
  358. package/dist/registry/go-registry.d.ts.map +1 -0
  359. package/dist/registry/go-registry.js +148 -0
  360. package/dist/registry/go-registry.js.map +1 -0
  361. package/dist/registry/index.d.ts +18 -0
  362. package/dist/registry/index.d.ts.map +1 -0
  363. package/dist/registry/index.js +21 -0
  364. package/dist/registry/index.js.map +1 -0
  365. package/dist/registry/maven-registry.d.ts +57 -0
  366. package/dist/registry/maven-registry.d.ts.map +1 -0
  367. package/dist/registry/maven-registry.js +155 -0
  368. package/dist/registry/maven-registry.js.map +1 -0
  369. package/dist/registry/npm-registry.d.ts +40 -0
  370. package/dist/registry/npm-registry.d.ts.map +1 -0
  371. package/dist/registry/npm-registry.js +155 -0
  372. package/dist/registry/npm-registry.js.map +1 -0
  373. package/dist/registry/pypi-registry.d.ts +49 -0
  374. package/dist/registry/pypi-registry.d.ts.map +1 -0
  375. package/dist/registry/pypi-registry.js +175 -0
  376. package/dist/registry/pypi-registry.js.map +1 -0
  377. package/dist/registry/registry-manager.d.ts +45 -0
  378. package/dist/registry/registry-manager.d.ts.map +1 -0
  379. package/dist/registry/registry-manager.js +107 -0
  380. package/dist/registry/registry-manager.js.map +1 -0
  381. package/dist/registry/types.d.ts +83 -0
  382. package/dist/registry/types.d.ts.map +1 -0
  383. package/dist/registry/types.js +12 -0
  384. package/dist/registry/types.js.map +1 -0
  385. package/dist/reporter/html-reporter.d.ts +20 -0
  386. package/dist/reporter/html-reporter.d.ts.map +1 -0
  387. package/dist/reporter/html-reporter.js +612 -0
  388. package/dist/reporter/html-reporter.js.map +1 -0
  389. package/dist/reporter/index.d.ts +28 -0
  390. package/dist/reporter/index.d.ts.map +1 -0
  391. package/dist/reporter/index.js +48 -0
  392. package/dist/reporter/index.js.map +1 -0
  393. package/dist/reporter/markdown-reporter.d.ts +16 -0
  394. package/dist/reporter/markdown-reporter.d.ts.map +1 -0
  395. package/dist/reporter/markdown-reporter.js +182 -0
  396. package/dist/reporter/markdown-reporter.js.map +1 -0
  397. package/dist/reporter/sarif-reporter.d.ts +67 -0
  398. package/dist/reporter/sarif-reporter.d.ts.map +1 -0
  399. package/dist/reporter/sarif-reporter.js +73 -0
  400. package/dist/reporter/sarif-reporter.js.map +1 -0
  401. package/dist/reporter/terminal-reporter.d.ts +14 -0
  402. package/dist/reporter/terminal-reporter.d.ts.map +1 -0
  403. package/dist/reporter/terminal-reporter.js +126 -0
  404. package/dist/reporter/terminal-reporter.js.map +1 -0
  405. package/dist/reporter/types.d.ts +43 -0
  406. package/dist/reporter/types.d.ts.map +1 -0
  407. package/dist/reporter/types.js +10 -0
  408. package/dist/reporter/types.js.map +1 -0
  409. package/dist/reporter/v4-html.d.ts +24 -0
  410. package/dist/reporter/v4-html.d.ts.map +1 -0
  411. package/dist/reporter/v4-html.js +359 -0
  412. package/dist/reporter/v4-html.js.map +1 -0
  413. package/dist/reporter/v4-terminal.d.ts +55 -0
  414. package/dist/reporter/v4-terminal.d.ts.map +1 -0
  415. package/dist/reporter/v4-terminal.js +199 -0
  416. package/dist/reporter/v4-terminal.js.map +1 -0
  417. package/dist/scanner/index.d.ts +9 -0
  418. package/dist/scanner/index.d.ts.map +1 -0
  419. package/dist/scanner/index.js +9 -0
  420. package/dist/scanner/index.js.map +1 -0
  421. package/dist/scanner/v4-scanner.d.ts +162 -0
  422. package/dist/scanner/v4-scanner.d.ts.map +1 -0
  423. package/dist/scanner/v4-scanner.js +327 -0
  424. package/dist/scanner/v4-scanner.js.map +1 -0
  425. package/dist/scorer/report.d.ts +52 -0
  426. package/dist/scorer/report.d.ts.map +1 -0
  427. package/dist/scorer/report.js +347 -0
  428. package/dist/scorer/report.js.map +1 -0
  429. package/dist/scorer/scoring-engine.d.ts +170 -0
  430. package/dist/scorer/scoring-engine.d.ts.map +1 -0
  431. package/dist/scorer/scoring-engine.js +308 -0
  432. package/dist/scorer/scoring-engine.js.map +1 -0
  433. package/dist/scorer/v4-adapter.d.ts +87 -0
  434. package/dist/scorer/v4-adapter.d.ts.map +1 -0
  435. package/dist/scorer/v4-adapter.js +145 -0
  436. package/dist/scorer/v4-adapter.js.map +1 -0
  437. package/dist/sla/index.d.ts +7 -0
  438. package/dist/sla/index.d.ts.map +1 -0
  439. package/dist/sla/index.js +6 -0
  440. package/dist/sla/index.js.map +1 -0
  441. package/dist/sla/tracker.d.ts +70 -0
  442. package/dist/sla/tracker.d.ts.map +1 -0
  443. package/dist/sla/tracker.js +151 -0
  444. package/dist/sla/tracker.js.map +1 -0
  445. package/dist/sla/types.d.ts +67 -0
  446. package/dist/sla/types.d.ts.map +1 -0
  447. package/dist/sla/types.js +42 -0
  448. package/dist/sla/types.js.map +1 -0
  449. package/dist/types.d.ts +172 -0
  450. package/dist/types.d.ts.map +1 -0
  451. package/dist/types.js +69 -0
  452. package/dist/types.js.map +1 -0
  453. package/package.json +97 -0
@@ -0,0 +1,235 @@
1
+ /**
2
+ * Security Pattern Detector (V3)
3
+ *
4
+ * Detects AI-generated security anti-patterns:
5
+ * 1. Hardcoded secrets/credentials (CWE-798)
6
+ * 2. eval/Function constructor usage (CWE-95)
7
+ * 3. SQL injection via string concatenation/template literals (CWE-89)
8
+ * 4. Insecure cryptography: Math.random(), MD5/SHA1 for passwords (CWE-328/338)
9
+ * 5. Insecure defaults: cors origin '*', disabled security headers (CWE-942)
10
+ *
11
+ * AI models frequently generate code with these patterns from training data.
12
+ *
13
+ * Implements the unified Detector interface.
14
+ *
15
+ * @since 0.3.0
16
+ */
17
+ import { AIDefectCategory } from '../types.js';
18
+ // ─── Hardcoded Secret Patterns ───
19
+ const SECRET_NAME_PATTERN = /(?:password|passwd|pwd|api_?key|apikey|secret|token|credential|private_?key|auth_?token|access_?key|client_?secret)\s*[:=]\s*['"`]([^'"`]{4,})['"`]/i;
20
+ const SECRET_ASSIGNMENT_PATTERN = /(?:const|let|var)\s+(?:password|passwd|pwd|apiKey|api_key|secret|token|credential|privateKey|private_key|authToken|auth_token|accessKey|access_key|clientSecret|client_secret)\s*=\s*['"`]([^'"`]{4,})['"`]/i;
21
+ // ─── SQL Patterns ───
22
+ const SQL_CONCAT_PATTERN = /['"`](?:SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE)\s.*?['"`]\s*\+\s*\w+/i;
23
+ const SQL_TEMPLATE_PATTERN = /(?:SELECT|INSERT|UPDATE|DELETE|DROP|ALTER|CREATE|TRUNCATE)\s.*?\$\{/i;
24
+ // ─── All Security Patterns ───
25
+ const SECURITY_PATTERNS = [
26
+ // 1. Hardcoded secrets
27
+ {
28
+ type: 'hardcoded-secret',
29
+ regex: SECRET_NAME_PATTERN,
30
+ severity: 'critical',
31
+ message: 'Hardcoded secret/credential detected',
32
+ suggestion: 'Use environment variables (process.env.XXX) or a secrets manager instead of hardcoding credentials.',
33
+ cweId: 'CWE-798',
34
+ skipTests: true,
35
+ },
36
+ {
37
+ type: 'hardcoded-secret',
38
+ regex: SECRET_ASSIGNMENT_PATTERN,
39
+ severity: 'critical',
40
+ message: 'Hardcoded secret assigned to variable with sensitive name',
41
+ suggestion: 'Use environment variables (process.env.XXX) or a secrets manager.',
42
+ cweId: 'CWE-798',
43
+ skipTests: true,
44
+ },
45
+ // 2. eval / Function constructor
46
+ {
47
+ type: 'unsafe-eval',
48
+ regex: /\beval\s*\(/,
49
+ severity: 'high',
50
+ message: 'Use of eval() detected — allows arbitrary code execution',
51
+ suggestion: 'Avoid eval(). Use JSON.parse() for data parsing, or safer alternatives like Function constructors with strict sandboxing.',
52
+ cweId: 'CWE-95',
53
+ },
54
+ {
55
+ type: 'unsafe-eval',
56
+ regex: /new\s+Function\s*\(/,
57
+ severity: 'high',
58
+ message: 'Use of new Function() detected — allows dynamic code execution',
59
+ suggestion: 'Avoid new Function(). Use structured approaches to achieve dynamic behavior.',
60
+ cweId: 'CWE-95',
61
+ },
62
+ // 3. SQL injection
63
+ {
64
+ type: 'sql-injection',
65
+ regex: SQL_CONCAT_PATTERN,
66
+ severity: 'medium',
67
+ message: 'Potential SQL injection: SQL query built with string concatenation',
68
+ suggestion: 'Use parameterized queries or an ORM instead of string concatenation for SQL queries.',
69
+ cweId: 'CWE-89',
70
+ },
71
+ {
72
+ type: 'sql-injection',
73
+ regex: SQL_TEMPLATE_PATTERN,
74
+ severity: 'medium',
75
+ message: 'Potential SQL injection: SQL query built with template literal interpolation',
76
+ suggestion: 'Use parameterized queries (e.g., $1 placeholders) instead of template literal interpolation.',
77
+ cweId: 'CWE-89',
78
+ },
79
+ // 4. Insecure crypto
80
+ {
81
+ type: 'insecure-random',
82
+ regex: /Math\.random\s*\(\)/,
83
+ severity: 'medium',
84
+ message: 'Math.random() is not cryptographically secure',
85
+ suggestion: 'Use crypto.randomBytes() or crypto.randomUUID() for security-sensitive random values.',
86
+ cweId: 'CWE-338',
87
+ },
88
+ {
89
+ type: 'insecure-hash',
90
+ regex: /createHash\s*\(\s*['"]md5['"]\s*\)/,
91
+ severity: 'medium',
92
+ message: 'MD5 is cryptographically broken — should not be used for security purposes',
93
+ suggestion: 'Use SHA-256 or SHA-3 for hashing. Use bcrypt/scrypt/argon2 for password hashing.',
94
+ cweId: 'CWE-328',
95
+ },
96
+ {
97
+ type: 'insecure-hash',
98
+ regex: /createHash\s*\(\s*['"]sha1['"]\s*\)/,
99
+ severity: 'medium',
100
+ message: 'SHA-1 is deprecated for security use — vulnerable to collision attacks',
101
+ suggestion: 'Use SHA-256 or SHA-3 for hashing. Use bcrypt/scrypt/argon2 for password hashing.',
102
+ cweId: 'CWE-328',
103
+ },
104
+ // 5. Insecure defaults
105
+ {
106
+ type: 'insecure-cors',
107
+ regex: /cors\s*\(\s*\{[^}]*origin\s*:\s*['"`]\*['"`]/,
108
+ severity: 'medium',
109
+ message: 'CORS configured with wildcard origin — allows any domain to make requests',
110
+ suggestion: 'Restrict CORS origin to specific trusted domains instead of using wildcard \'*\'.',
111
+ cweId: 'CWE-942',
112
+ },
113
+ {
114
+ type: 'insecure-config',
115
+ regex: /helmet\s*\(\s*\{[^}]*contentSecurityPolicy\s*:\s*false/,
116
+ severity: 'medium',
117
+ message: 'Content Security Policy is disabled in helmet configuration',
118
+ suggestion: 'Enable Content Security Policy. Configure it for your specific needs rather than disabling it.',
119
+ cweId: 'CWE-693',
120
+ },
121
+ {
122
+ type: 'insecure-config',
123
+ regex: /rejectUnauthorized\s*:\s*false/,
124
+ severity: 'medium',
125
+ message: 'TLS certificate verification is disabled (rejectUnauthorized: false)',
126
+ suggestion: 'Do not disable TLS certificate verification in production. Fix the certificate chain instead.',
127
+ cweId: 'CWE-295',
128
+ },
129
+ ];
130
+ // ─── Helpers ───
131
+ function isTestFile(filePath) {
132
+ return /\.(test|spec)\.[jt]sx?$/.test(filePath) ||
133
+ filePath.includes('__tests__') ||
134
+ filePath.includes('__mocks__') ||
135
+ /\/tests?\//.test(filePath);
136
+ }
137
+ // ─── Main Detector ───
138
+ /**
139
+ * SecurityPatternDetector — detects common security anti-patterns in AI-generated code.
140
+ *
141
+ * Scans source code with regex patterns for 5 categories:
142
+ * hardcoded secrets, eval usage, SQL injection, insecure crypto, insecure defaults.
143
+ */
144
+ export class SecurityPatternDetector {
145
+ name = 'security-pattern';
146
+ version = '1.0.0';
147
+ tier = 1;
148
+ // ─── V3 Unified Interface ───
149
+ async detect(files) {
150
+ const allIssues = [];
151
+ let globalIndex = 0;
152
+ for (const file of files) {
153
+ const issues = this.analyzeFile(file.path, file.content);
154
+ for (const issue of issues) {
155
+ issue.id = `security:${globalIndex++}`;
156
+ allIssues.push(issue);
157
+ }
158
+ }
159
+ return allIssues;
160
+ }
161
+ // ─── Internal Analysis ───
162
+ analyzeFile(filePath, source) {
163
+ const issues = [];
164
+ const lines = source.split('\n');
165
+ const isTest = isTestFile(filePath);
166
+ for (let i = 0; i < lines.length; i++) {
167
+ const line = lines[i];
168
+ const trimmed = line.trim();
169
+ // Skip comments
170
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*')) {
171
+ continue;
172
+ }
173
+ // Skip suppressed lines
174
+ const prevLine = i > 0 ? lines[i - 1] : '';
175
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable')) {
176
+ continue;
177
+ }
178
+ for (const pattern of SECURITY_PATTERNS) {
179
+ // Skip test-file-only patterns in test files
180
+ if (pattern.skipTests && isTest) {
181
+ continue;
182
+ }
183
+ // Reset regex state
184
+ const regex = new RegExp(pattern.regex.source, pattern.regex.flags);
185
+ const match = regex.exec(line);
186
+ if (match) {
187
+ // Additional check: for hardcoded secrets, skip env variable references
188
+ if (pattern.type === 'hardcoded-secret') {
189
+ if (line.includes('process.env') || line.includes('env.') ||
190
+ line.includes('config.') || line.includes('Config.')) {
191
+ continue;
192
+ }
193
+ // Skip example/placeholder values
194
+ const value = match[1] || '';
195
+ if (value === 'xxx' || value === 'XXX' || value === '***' ||
196
+ value === 'your-' || value.startsWith('your-') ||
197
+ value === 'placeholder' || value === 'changeme') {
198
+ continue;
199
+ }
200
+ }
201
+ // For SQL injection, skip tagged template literals (sql``, Prisma.$queryRaw``)
202
+ if (pattern.type === 'sql-injection') {
203
+ if (/(?:sql|Prisma\.\$queryRaw)\s*`/.test(line)) {
204
+ continue;
205
+ }
206
+ }
207
+ issues.push({
208
+ id: '', // set in detect()
209
+ detector: this.name,
210
+ type: pattern.type,
211
+ category: AIDefectCategory.SECURITY_ANTIPATTERN,
212
+ severity: pattern.severity,
213
+ message: pattern.message,
214
+ file: filePath,
215
+ line: i + 1,
216
+ column: match.index + 1,
217
+ suggestion: pattern.suggestion,
218
+ fix: {
219
+ description: pattern.suggestion,
220
+ autoFixable: false,
221
+ },
222
+ references: pattern.cweId
223
+ ? { urls: [`https://cwe.mitre.org/data/definitions/${pattern.cweId.replace('CWE-', '')}.html`], cweId: pattern.cweId }
224
+ : undefined,
225
+ confidence: 0.85,
226
+ detectionSource: 'static',
227
+ });
228
+ }
229
+ }
230
+ }
231
+ return issues;
232
+ }
233
+ }
234
+ export default SecurityPatternDetector;
235
+ //# sourceMappingURL=security-pattern.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security-pattern.js","sourceRoot":"","sources":["../../src/detectors/security-pattern.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,44 @@
1
+ /**
2
+ * Stale API Detector (V3)
3
+ *
4
+ * Detects AI-generated code using deprecated/removed APIs.
5
+ * AI models trained on older data frequently suggest outdated APIs
6
+ * (e.g., new Buffer(), fs.exists(), React.createClass()).
7
+ *
8
+ * Uses an embedded JSON database of deprecated APIs for fast regex-based scanning.
9
+ *
10
+ * Implements the unified Detector interface.
11
+ *
12
+ * @since 0.3.0
13
+ */
14
+ import type { Detector, UnifiedIssue, FileAnalysis } from '../types.js';
15
+ export interface DeprecatedAPIEntry {
16
+ api: string;
17
+ pattern: string;
18
+ replacement: string;
19
+ deprecated_since: string;
20
+ severity: string;
21
+ references: string[];
22
+ }
23
+ /**
24
+ * StaleAPIDetector — detects deprecated/outdated API usage in AI-generated code.
25
+ *
26
+ * Scans source code using regex patterns from an embedded deprecated API database.
27
+ * Reports matches as UnifiedIssue with category STALE_KNOWLEDGE.
28
+ */
29
+ export declare class StaleAPIDetector implements Detector {
30
+ readonly name = "stale-api";
31
+ readonly version = "1.0.0";
32
+ readonly tier: 1;
33
+ private entries;
34
+ private compiledPatterns;
35
+ constructor();
36
+ /**
37
+ * Allow injecting custom entries (useful for testing).
38
+ */
39
+ static withEntries(entries: DeprecatedAPIEntry[]): StaleAPIDetector;
40
+ detect(files: FileAnalysis[]): Promise<UnifiedIssue[]>;
41
+ private analyzeFile;
42
+ }
43
+ export default StaleAPIDetector;
44
+ //# sourceMappingURL=stale-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-api.d.ts","sourceRoot":"","sources":["../../src/detectors/stale-api.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAKlF,MAAM,WAAW,kBAAkB;IACjC,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,gBAAgB,EAAE,MAAM,CAAC;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AA2DD;;;;;GAKG;AACH,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,QAAQ,CAAC,IAAI,eAAe;IAC5B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAU;IAE3B,OAAO,CAAC,OAAO,CAAuB;IACtC,OAAO,CAAC,gBAAgB,CAAsD;;IAU9E;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,kBAAkB,EAAE,GAAG,gBAAgB;IAY7D,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAiB5D,OAAO,CAAC,WAAW;CAoDpB;AAED,eAAe,gBAAgB,CAAC"}
@@ -0,0 +1,160 @@
1
+ /**
2
+ * Stale API Detector (V3)
3
+ *
4
+ * Detects AI-generated code using deprecated/removed APIs.
5
+ * AI models trained on older data frequently suggest outdated APIs
6
+ * (e.g., new Buffer(), fs.exists(), React.createClass()).
7
+ *
8
+ * Uses an embedded JSON database of deprecated APIs for fast regex-based scanning.
9
+ *
10
+ * Implements the unified Detector interface.
11
+ *
12
+ * @since 0.3.0
13
+ */
14
+ import { readFileSync } from 'node:fs';
15
+ import { join, dirname } from 'node:path';
16
+ import { fileURLToPath } from 'node:url';
17
+ import { AIDefectCategory } from '../types.js';
18
+ // ─── Load Embedded Database ───
19
+ function resolveDataPath() {
20
+ // Try multiple strategies to find the data file
21
+ const candidates = [];
22
+ // Strategy 1: Relative to this source file (works in ESM)
23
+ try {
24
+ const thisFile = fileURLToPath(import.meta.url);
25
+ candidates.push(join(dirname(thisFile), '..', 'data', 'deprecated-apis-js.json'));
26
+ }
27
+ catch {
28
+ // import.meta.url not available (e.g., vitest transforms)
29
+ }
30
+ // Strategy 2: Relative to CWD (packages/core)
31
+ candidates.push(join(process.cwd(), 'src', 'data', 'deprecated-apis-js.json'));
32
+ // Strategy 3: Relative to CWD (project root)
33
+ candidates.push(join(process.cwd(), 'packages', 'core', 'src', 'data', 'deprecated-apis-js.json'));
34
+ for (const candidate of candidates) {
35
+ try {
36
+ readFileSync(candidate, 'utf-8');
37
+ return candidate;
38
+ }
39
+ catch {
40
+ continue;
41
+ }
42
+ }
43
+ return candidates[0]; // fallback, will fail gracefully
44
+ }
45
+ function loadDeprecatedAPIs() {
46
+ try {
47
+ const dataPath = resolveDataPath();
48
+ const raw = readFileSync(dataPath, 'utf-8');
49
+ return JSON.parse(raw);
50
+ }
51
+ catch {
52
+ return [];
53
+ }
54
+ }
55
+ // ─── Helpers ───
56
+ function mapSeverity(sev) {
57
+ switch (sev) {
58
+ case 'critical': return 'critical';
59
+ case 'high': return 'high';
60
+ case 'medium': return 'medium';
61
+ case 'low': return 'low';
62
+ case 'info': return 'info';
63
+ default: return 'high';
64
+ }
65
+ }
66
+ // ─── Main Detector ───
67
+ /**
68
+ * StaleAPIDetector — detects deprecated/outdated API usage in AI-generated code.
69
+ *
70
+ * Scans source code using regex patterns from an embedded deprecated API database.
71
+ * Reports matches as UnifiedIssue with category STALE_KNOWLEDGE.
72
+ */
73
+ export class StaleAPIDetector {
74
+ name = 'stale-api';
75
+ version = '1.0.0';
76
+ tier = 1;
77
+ entries;
78
+ compiledPatterns;
79
+ constructor() {
80
+ this.entries = loadDeprecatedAPIs();
81
+ this.compiledPatterns = this.entries.map(entry => ({
82
+ entry,
83
+ regex: new RegExp(entry.pattern, 'g'),
84
+ }));
85
+ }
86
+ /**
87
+ * Allow injecting custom entries (useful for testing).
88
+ */
89
+ static withEntries(entries) {
90
+ const detector = new StaleAPIDetector();
91
+ detector.entries = entries;
92
+ detector.compiledPatterns = entries.map(entry => ({
93
+ entry,
94
+ regex: new RegExp(entry.pattern, 'g'),
95
+ }));
96
+ return detector;
97
+ }
98
+ // ─── V3 Unified Interface ───
99
+ async detect(files) {
100
+ const allIssues = [];
101
+ let globalIndex = 0;
102
+ for (const file of files) {
103
+ const issues = this.analyzeFile(file.path, file.content);
104
+ for (const issue of issues) {
105
+ issue.id = `stale-api:${globalIndex++}`;
106
+ allIssues.push(issue);
107
+ }
108
+ }
109
+ return allIssues;
110
+ }
111
+ // ─── Internal Analysis ───
112
+ analyzeFile(filePath, source) {
113
+ const issues = [];
114
+ const lines = source.split('\n');
115
+ for (const { entry, regex } of this.compiledPatterns) {
116
+ // Reset regex lastIndex for each file
117
+ regex.lastIndex = 0;
118
+ for (let i = 0; i < lines.length; i++) {
119
+ const line = lines[i];
120
+ const trimmed = line.trim();
121
+ // Skip comments
122
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*')) {
123
+ continue;
124
+ }
125
+ // Skip suppressed lines
126
+ const prevLine = i > 0 ? lines[i - 1] : '';
127
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable')) {
128
+ continue;
129
+ }
130
+ // Reset regex for each line
131
+ regex.lastIndex = 0;
132
+ const match = regex.exec(line);
133
+ if (match) {
134
+ issues.push({
135
+ id: '', // will be set in detect()
136
+ detector: this.name,
137
+ type: 'deprecated-api',
138
+ category: AIDefectCategory.STALE_KNOWLEDGE,
139
+ severity: mapSeverity(entry.severity),
140
+ message: `Deprecated API usage: '${entry.api}' (deprecated since ${entry.deprecated_since})`,
141
+ file: filePath,
142
+ line: i + 1,
143
+ column: match.index + 1,
144
+ suggestion: `Replace with: ${entry.replacement}`,
145
+ fix: {
146
+ description: `Replace '${entry.api}' with ${entry.replacement}`,
147
+ autoFixable: false,
148
+ },
149
+ references: entry.references,
150
+ confidence: 0.9,
151
+ detectionSource: 'static',
152
+ });
153
+ }
154
+ }
155
+ }
156
+ return issues;
157
+ }
158
+ }
159
+ export default StaleAPIDetector;
160
+ //# sourceMappingURL=stale-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stale-api.js","sourceRoot":"","sources":["../../src/detectors/stale-api.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Type Safety Detector (V3)
3
+ *
4
+ * TypeScript-specific type safety analysis:
5
+ * 1. Excessive `any` usage (`: any`, `as any`, `<any>`)
6
+ * 2. Missing return types on exported functions
7
+ * 3. Unsafe type assertions (`as unknown as X`)
8
+ * 4. Non-null assertion operator abuse (`!.`)
9
+ *
10
+ * AI models frequently generate TypeScript code with excessive `any` usage,
11
+ * unsafe assertions, and missing type annotations.
12
+ *
13
+ * Only operates on .ts/.tsx files.
14
+ *
15
+ * Implements the unified Detector interface.
16
+ *
17
+ * @since 0.3.0
18
+ */
19
+ import type { Detector, UnifiedIssue, FileAnalysis } from '../types.js';
20
+ /**
21
+ * TypeSafetyDetector — detects type safety issues in AI-generated TypeScript code.
22
+ *
23
+ * Analyzes:
24
+ * - `any` abuse (: any, as any, <any>)
25
+ * - Missing return type annotations on exported functions
26
+ * - Unsafe type assertions (as unknown as X)
27
+ * - Excessive non-null assertion (!) usage
28
+ */
29
+ export declare class TypeSafetyDetector implements Detector {
30
+ readonly name = "type-safety";
31
+ readonly version = "1.0.0";
32
+ readonly tier: 1;
33
+ detect(files: FileAnalysis[]): Promise<UnifiedIssue[]>;
34
+ private analyzeFile;
35
+ private detectAnyUsage;
36
+ private detectMissingReturnTypes;
37
+ private detectUnsafeAssertions;
38
+ private detectNonNullAssertions;
39
+ }
40
+ export default TypeSafetyDetector;
41
+ //# sourceMappingURL=type-safety.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-safety.d.ts","sourceRoot":"","sources":["../../src/detectors/type-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,YAAY,EAAE,YAAY,EAAY,MAAM,aAAa,CAAC;AAWlF;;;;;;;;GAQG;AACH,qBAAa,kBAAmB,YAAW,QAAQ;IACjD,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,OAAO,WAAW;IAC3B,QAAQ,CAAC,IAAI,EAAG,CAAC,CAAU;IAIrB,MAAM,CAAC,KAAK,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAoB5D,OAAO,CAAC,WAAW;IAqBnB,OAAO,CAAC,cAAc;IAsHtB,OAAO,CAAC,wBAAwB;IAoDhC,OAAO,CAAC,sBAAsB;IAqC9B,OAAO,CAAC,uBAAuB;CA8ChC;AAED,eAAe,kBAAkB,CAAC"}