@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,306 @@
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 { AIDefectCategory } from '../types.js';
20
+ // ─── Helpers ───
21
+ function isTypeScriptFile(filePath) {
22
+ return /\.(ts|tsx)$/.test(filePath);
23
+ }
24
+ // ─── Main Detector ───
25
+ /**
26
+ * TypeSafetyDetector — detects type safety issues in AI-generated TypeScript code.
27
+ *
28
+ * Analyzes:
29
+ * - `any` abuse (: any, as any, <any>)
30
+ * - Missing return type annotations on exported functions
31
+ * - Unsafe type assertions (as unknown as X)
32
+ * - Excessive non-null assertion (!) usage
33
+ */
34
+ export class TypeSafetyDetector {
35
+ name = 'type-safety';
36
+ version = '1.0.0';
37
+ tier = 1;
38
+ // ─── V3 Unified Interface ───
39
+ async detect(files) {
40
+ const allIssues = [];
41
+ let globalIndex = 0;
42
+ for (const file of files) {
43
+ // Only analyze TypeScript files
44
+ if (!isTypeScriptFile(file.path))
45
+ continue;
46
+ const issues = this.analyzeFile(file.path, file.content);
47
+ for (const issue of issues) {
48
+ issue.id = `type-safety:${globalIndex++}`;
49
+ allIssues.push(issue);
50
+ }
51
+ }
52
+ return allIssues;
53
+ }
54
+ // ─── Internal Analysis ───
55
+ analyzeFile(filePath, source) {
56
+ const issues = [];
57
+ const lines = source.split('\n');
58
+ // 1. Detect `any` usage
59
+ this.detectAnyUsage(filePath, lines, issues);
60
+ // 2. Detect missing return types on exported functions
61
+ this.detectMissingReturnTypes(filePath, lines, issues);
62
+ // 3. Detect unsafe type assertions
63
+ this.detectUnsafeAssertions(filePath, lines, issues);
64
+ // 4. Detect non-null assertion abuse
65
+ this.detectNonNullAssertions(filePath, lines, issues);
66
+ return issues;
67
+ }
68
+ // ─── 1. Any Usage Detection ───
69
+ detectAnyUsage(filePath, lines, issues) {
70
+ const anyLocations = [];
71
+ for (let i = 0; i < lines.length; i++) {
72
+ const line = lines[i];
73
+ const trimmed = line.trim();
74
+ // Skip comments
75
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
76
+ continue;
77
+ // Skip suppressed lines
78
+ const prevLine = i > 0 ? lines[i - 1] : '';
79
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
80
+ continue;
81
+ // Detect `: any` (type annotation)
82
+ const colonAny = line.match(/:\s*any\b/g);
83
+ if (colonAny) {
84
+ for (const _m of colonAny) {
85
+ anyLocations.push({ line: i + 1, kind: ': any' });
86
+ }
87
+ }
88
+ // Detect `as any` (type assertion)
89
+ const asAny = line.match(/\bas\s+any\b/g);
90
+ if (asAny) {
91
+ for (const _m of asAny) {
92
+ anyLocations.push({ line: i + 1, kind: 'as any' });
93
+ }
94
+ }
95
+ // Detect `<any>` (type parameter / old-style assertion)
96
+ const angleBracketAny = line.match(/<any>/g);
97
+ if (angleBracketAny) {
98
+ for (const _m of angleBracketAny) {
99
+ anyLocations.push({ line: i + 1, kind: '<any>' });
100
+ }
101
+ }
102
+ }
103
+ const anyCount = anyLocations.length;
104
+ if (anyCount === 0)
105
+ return;
106
+ // Determine severity based on count
107
+ let severity;
108
+ if (anyCount > 8) {
109
+ severity = 'medium';
110
+ }
111
+ else if (anyCount >= 4) {
112
+ severity = 'low';
113
+ }
114
+ else {
115
+ severity = 'info';
116
+ }
117
+ // Report per-location for the first few, then summary
118
+ if (anyCount <= 5) {
119
+ for (const loc of anyLocations) {
120
+ issues.push({
121
+ id: '',
122
+ detector: this.name,
123
+ type: 'any-usage',
124
+ category: AIDefectCategory.TYPE_SAFETY,
125
+ severity,
126
+ message: `Unsafe '${loc.kind}' usage — weakens TypeScript type checking`,
127
+ file: filePath,
128
+ line: loc.line,
129
+ suggestion: 'Replace `any` with a specific type, `unknown`, or a generic type parameter.',
130
+ fix: {
131
+ description: 'Replace `any` with proper type annotation',
132
+ autoFixable: false,
133
+ },
134
+ confidence: 0.9,
135
+ detectionSource: 'static',
136
+ });
137
+ }
138
+ }
139
+ else {
140
+ // Report first 3 locations individually
141
+ for (const loc of anyLocations.slice(0, 3)) {
142
+ issues.push({
143
+ id: '',
144
+ detector: this.name,
145
+ type: 'any-usage',
146
+ category: AIDefectCategory.TYPE_SAFETY,
147
+ severity,
148
+ message: `Unsafe '${loc.kind}' usage — weakens TypeScript type checking`,
149
+ file: filePath,
150
+ line: loc.line,
151
+ suggestion: 'Replace `any` with a specific type, `unknown`, or a generic type parameter.',
152
+ fix: {
153
+ description: 'Replace `any` with proper type annotation',
154
+ autoFixable: false,
155
+ },
156
+ confidence: 0.9,
157
+ detectionSource: 'static',
158
+ });
159
+ }
160
+ // Summary issue
161
+ issues.push({
162
+ id: '',
163
+ detector: this.name,
164
+ type: 'any-abuse',
165
+ category: AIDefectCategory.TYPE_SAFETY,
166
+ severity,
167
+ message: `Excessive 'any' usage: ${anyCount} occurrences found in file. AI-generated code often over-uses 'any' to bypass type errors.`,
168
+ file: filePath,
169
+ line: 1,
170
+ suggestion: `Review and replace 'any' types with proper type annotations. Consider using \`unknown\` with type guards.`,
171
+ fix: {
172
+ description: `Replace ${anyCount} 'any' usages with proper types`,
173
+ autoFixable: false,
174
+ },
175
+ confidence: 0.9,
176
+ detectionSource: 'static',
177
+ });
178
+ }
179
+ }
180
+ // ─── 2. Missing Return Types ───
181
+ detectMissingReturnTypes(filePath, lines, issues) {
182
+ for (let i = 0; i < lines.length; i++) {
183
+ const line = lines[i];
184
+ const trimmed = line.trim();
185
+ // Skip comments
186
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
187
+ continue;
188
+ // Skip suppressed lines
189
+ const prevLine = i > 0 ? lines[i - 1] : '';
190
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
191
+ continue;
192
+ // Match exported function declarations
193
+ const exportFuncMatch = trimmed.match(/^export\s+(?:default\s+)?(?:async\s+)?function\s+(\w+)\s*\(([^)]*)\)\s*\{/);
194
+ if (exportFuncMatch) {
195
+ const funcName = exportFuncMatch[1];
196
+ // Check if there's a return type annotation between ) and {
197
+ const fullLine = line;
198
+ const closeParen = fullLine.lastIndexOf(')');
199
+ const openBrace = fullLine.indexOf('{', closeParen);
200
+ if (closeParen >= 0 && openBrace >= 0) {
201
+ const between = fullLine.substring(closeParen + 1, openBrace).trim();
202
+ // Should have `: SomeType` between ) and {
203
+ if (!between.startsWith(':')) {
204
+ issues.push({
205
+ id: '',
206
+ detector: this.name,
207
+ type: 'missing-return-type',
208
+ category: AIDefectCategory.TYPE_SAFETY,
209
+ severity: 'low',
210
+ message: `Exported function '${funcName}' is missing a return type annotation`,
211
+ file: filePath,
212
+ line: i + 1,
213
+ suggestion: `Add an explicit return type: function ${funcName}(...): ReturnType { ... }`,
214
+ fix: {
215
+ description: `Add return type annotation to '${funcName}'`,
216
+ autoFixable: false,
217
+ },
218
+ confidence: 0.85,
219
+ detectionSource: 'static',
220
+ });
221
+ }
222
+ }
223
+ }
224
+ }
225
+ }
226
+ // ─── 3. Unsafe Type Assertions ───
227
+ detectUnsafeAssertions(filePath, lines, issues) {
228
+ for (let i = 0; i < lines.length; i++) {
229
+ const line = lines[i];
230
+ const trimmed = line.trim();
231
+ // Skip comments
232
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
233
+ continue;
234
+ // Skip suppressed lines
235
+ const prevLine = i > 0 ? lines[i - 1] : '';
236
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
237
+ continue;
238
+ // Detect `as unknown as X` pattern
239
+ if (/\bas\s+unknown\s+as\s+\w/.test(line)) {
240
+ issues.push({
241
+ id: '',
242
+ detector: this.name,
243
+ type: 'unsafe-assertion',
244
+ category: AIDefectCategory.TYPE_SAFETY,
245
+ severity: 'medium',
246
+ message: `Unsafe double assertion 'as unknown as X' bypasses type checking entirely`,
247
+ file: filePath,
248
+ line: i + 1,
249
+ suggestion: 'Avoid double assertions. Use proper type narrowing (type guards) or fix the underlying type mismatch.',
250
+ fix: {
251
+ description: 'Replace double assertion with proper type narrowing',
252
+ autoFixable: false,
253
+ },
254
+ confidence: 0.95,
255
+ detectionSource: 'static',
256
+ });
257
+ }
258
+ }
259
+ }
260
+ // ─── 4. Non-null Assertion Abuse ───
261
+ detectNonNullAssertions(filePath, lines, issues) {
262
+ const nonNullLocations = [];
263
+ for (let i = 0; i < lines.length; i++) {
264
+ const line = lines[i];
265
+ const trimmed = line.trim();
266
+ // Skip comments
267
+ if (trimmed.startsWith('//') || trimmed.startsWith('*') || trimmed.startsWith('/*'))
268
+ continue;
269
+ // Skip suppressed lines
270
+ const prevLine = i > 0 ? lines[i - 1] : '';
271
+ if (prevLine.includes('// ai-validator-ignore') || prevLine.includes('// ai-validator-disable'))
272
+ continue;
273
+ // Detect `!.` and `!;` and `!)` — non-null assertion operator
274
+ // Be careful not to match !== or != or regular !boolean
275
+ const nonNullMatches = line.match(/\w+!\./g) || [];
276
+ const nonNullEnd = line.match(/\w+!(?:[;,)\]\s]|$)/g) || [];
277
+ // Filter out != and !==
278
+ const filtered = [...nonNullMatches, ...nonNullEnd].filter(m => !m.includes('!='));
279
+ if (filtered.length > 0) {
280
+ nonNullLocations.push(i + 1);
281
+ }
282
+ }
283
+ // Only flag if there are many non-null assertions (>3 per file = noteworthy)
284
+ if (nonNullLocations.length > 5) {
285
+ issues.push({
286
+ id: '',
287
+ detector: this.name,
288
+ type: 'non-null-assertion-abuse',
289
+ category: AIDefectCategory.TYPE_SAFETY,
290
+ severity: 'low',
291
+ message: `Excessive non-null assertion (!) usage: ${nonNullLocations.length} occurrences. AI often uses '!' to suppress null checks instead of proper handling.`,
292
+ file: filePath,
293
+ line: nonNullLocations[0],
294
+ suggestion: 'Use optional chaining (?.), nullish coalescing (??), or proper null checks instead of non-null assertions.',
295
+ fix: {
296
+ description: 'Replace non-null assertions with safe null handling',
297
+ autoFixable: false,
298
+ },
299
+ confidence: 0.75,
300
+ detectionSource: 'static',
301
+ });
302
+ }
303
+ }
304
+ }
305
+ export default TypeSafetyDetector;
306
+ //# sourceMappingURL=type-safety.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-safety.js","sourceRoot":"","sources":["../../src/detectors/type-safety.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAE/C,kBAAkB;AAElB,SAAS,gBAAgB,CAAC,QAAgB;IACxC,OAAO,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AACtC,CAAC;AAED,wBAAwB;AAExB;;;;;;;;GAQG;AACH,MAAM,OAAO,kBAAkB;IACpB,IAAI,GAAG,aAAa,CAAC;IACrB,OAAO,GAAG,OAAO,CAAC;IAClB,IAAI,GAAG,CAAU,CAAC;IAE3B,+BAA+B;IAE/B,KAAK,CAAC,MAAM,CAAC,KAAqB;QAChC,MAAM,SAAS,GAAmB,EAAE,CAAC;QACrC,IAAI,WAAW,GAAG,CAAC,CAAC;QAEpB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,gCAAgC;YAChC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE3C,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;YACzD,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,KAAK,CAAC,EAAE,GAAG,eAAe,WAAW,EAAE,EAAE,CAAC;gBAC1C,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxB,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,4BAA4B;IAEpB,WAAW,CAAC,QAAgB,EAAE,MAAc;QAClD,MAAM,MAAM,GAAmB,EAAE,CAAC;QAClC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAEjC,wBAAwB;QACxB,IAAI,CAAC,cAAc,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAE7C,uDAAuD;QACvD,IAAI,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEvD,mCAAmC;QACnC,IAAI,CAAC,sBAAsB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAErD,qCAAqC;QACrC,IAAI,CAAC,uBAAuB,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;QAEtD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,iCAAiC;IAEzB,cAAc,CAAC,QAAgB,EAAE,KAAe,EAAE,MAAsB;QAC9E,MAAM,YAAY,GAA0C,EAAE,CAAC;QAE/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gBAAgB;YAChB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,wBAAwB;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAAE,SAAS;YAE1G,mCAAmC;YACnC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,CAAC;YAC1C,IAAI,QAAQ,EAAE,CAAC;gBACb,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;oBAC1B,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;YAED,mCAAmC;YACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;YAC1C,IAAI,KAAK,EAAE,CAAC;gBACV,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;oBACvB,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;gBACrD,CAAC;YACH,CAAC;YAED,wDAAwD;YACxD,MAAM,eAAe,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC7C,IAAI,eAAe,EAAE,CAAC;gBACpB,KAAK,MAAM,EAAE,IAAI,eAAe,EAAE,CAAC;oBACjC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC;QACrC,IAAI,QAAQ,KAAK,CAAC;YAAE,OAAO;QAE3B,oCAAoC;QACpC,IAAI,QAAkB,CAAC;QACvB,IAAI,QAAQ,GAAG,CAAC,EAAE,CAAC;YACjB,QAAQ,GAAG,QAAQ,CAAC;QACtB,CAAC;aAAM,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YACzB,QAAQ,GAAG,KAAK,CAAC;QACnB,CAAC;aAAM,CAAC;YACN,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;QAED,sDAAsD;QACtD,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;YAClB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,gBAAgB,CAAC,WAAW;oBACtC,QAAQ;oBACR,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,4CAA4C;oBACxE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU,EAAE,6EAA6E;oBACzF,GAAG,EAAE;wBACH,WAAW,EAAE,2CAA2C;wBACxD,WAAW,EAAE,KAAK;qBACnB;oBACD,UAAU,EAAE,GAAG;oBACf,eAAe,EAAE,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;aAAM,CAAC;YACN,wCAAwC;YACxC,KAAK,MAAM,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;gBAC3C,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,WAAW;oBACjB,QAAQ,EAAE,gBAAgB,CAAC,WAAW;oBACtC,QAAQ;oBACR,OAAO,EAAE,WAAW,GAAG,CAAC,IAAI,4CAA4C;oBACxE,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,GAAG,CAAC,IAAI;oBACd,UAAU,EAAE,6EAA6E;oBACzF,GAAG,EAAE;wBACH,WAAW,EAAE,2CAA2C;wBACxD,WAAW,EAAE,KAAK;qBACnB;oBACD,UAAU,EAAE,GAAG;oBACf,eAAe,EAAE,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;YAED,gBAAgB;YAChB,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,EAAE;gBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,IAAI,EAAE,WAAW;gBACjB,QAAQ,EAAE,gBAAgB,CAAC,WAAW;gBACtC,QAAQ;gBACR,OAAO,EAAE,0BAA0B,QAAQ,4FAA4F;gBACvI,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,CAAC;gBACP,UAAU,EAAE,2GAA2G;gBACvH,GAAG,EAAE;oBACH,WAAW,EAAE,WAAW,QAAQ,iCAAiC;oBACjE,WAAW,EAAE,KAAK;iBACnB;gBACD,UAAU,EAAE,GAAG;gBACf,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,kCAAkC;IAE1B,wBAAwB,CAAC,QAAgB,EAAE,KAAe,EAAE,MAAsB;QACxF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gBAAgB;YAChB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,wBAAwB;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAAE,SAAS;YAE1G,uCAAuC;YACvC,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CACnC,2EAA2E,CAC5E,CAAC;YAEF,IAAI,eAAe,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,CAAC,CAAC;gBACpC,4DAA4D;gBAC5D,MAAM,QAAQ,GAAG,IAAI,CAAC;gBACtB,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBAC7C,MAAM,SAAS,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;gBACpD,IAAI,UAAU,IAAI,CAAC,IAAI,SAAS,IAAI,CAAC,EAAE,CAAC;oBACtC,MAAM,OAAO,GAAG,QAAQ,CAAC,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;oBACrE,2CAA2C;oBAC3C,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;wBAC7B,MAAM,CAAC,IAAI,CAAC;4BACV,EAAE,EAAE,EAAE;4BACN,QAAQ,EAAE,IAAI,CAAC,IAAI;4BACnB,IAAI,EAAE,qBAAqB;4BAC3B,QAAQ,EAAE,gBAAgB,CAAC,WAAW;4BACtC,QAAQ,EAAE,KAAK;4BACf,OAAO,EAAE,sBAAsB,QAAQ,uCAAuC;4BAC9E,IAAI,EAAE,QAAQ;4BACd,IAAI,EAAE,CAAC,GAAG,CAAC;4BACX,UAAU,EAAE,yCAAyC,QAAQ,2BAA2B;4BACxF,GAAG,EAAE;gCACH,WAAW,EAAE,kCAAkC,QAAQ,GAAG;gCAC1D,WAAW,EAAE,KAAK;6BACnB;4BACD,UAAU,EAAE,IAAI;4BAChB,eAAe,EAAE,QAAQ;yBAC1B,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IAE5B,sBAAsB,CAAC,QAAgB,EAAE,KAAe,EAAE,MAAsB;QACtF,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gBAAgB;YAChB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,wBAAwB;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAAE,SAAS;YAE1G,mCAAmC;YACnC,IAAI,0BAA0B,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,IAAI,CAAC;oBACV,EAAE,EAAE,EAAE;oBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;oBACnB,IAAI,EAAE,kBAAkB;oBACxB,QAAQ,EAAE,gBAAgB,CAAC,WAAW;oBACtC,QAAQ,EAAE,QAAQ;oBAClB,OAAO,EAAE,2EAA2E;oBACpF,IAAI,EAAE,QAAQ;oBACd,IAAI,EAAE,CAAC,GAAG,CAAC;oBACX,UAAU,EAAE,uGAAuG;oBACnH,GAAG,EAAE;wBACH,WAAW,EAAE,qDAAqD;wBAClE,WAAW,EAAE,KAAK;qBACnB;oBACD,UAAU,EAAE,IAAI;oBAChB,eAAe,EAAE,QAAQ;iBAC1B,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,sCAAsC;IAE9B,uBAAuB,CAAC,QAAgB,EAAE,KAAe,EAAE,MAAsB;QACvF,MAAM,gBAAgB,GAAa,EAAE,CAAC;QAEtC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAE5B,gBAAgB;YAChB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC;gBAAE,SAAS;YAE9F,wBAAwB;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC3C,IAAI,QAAQ,CAAC,QAAQ,CAAC,wBAAwB,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,yBAAyB,CAAC;gBAAE,SAAS;YAE1G,8DAA8D;YAC9D,wDAAwD;YACxD,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;YACnD,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,CAAC;YAC5D,wBAAwB;YACxB,MAAM,QAAQ,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,UAAU,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;YACnF,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACxB,gBAAgB,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YAC/B,CAAC;QACH,CAAC;QAED,6EAA6E;QAC7E,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE,EAAE,EAAE;gBACN,QAAQ,EAAE,IAAI,CAAC,IAAI;gBACnB,IAAI,EAAE,0BAA0B;gBAChC,QAAQ,EAAE,gBAAgB,CAAC,WAAW;gBACtC,QAAQ,EAAE,KAAK;gBACf,OAAO,EAAE,2CAA2C,gBAAgB,CAAC,MAAM,qFAAqF;gBAChK,IAAI,EAAE,QAAQ;gBACd,IAAI,EAAE,gBAAgB,CAAC,CAAC,CAAC;gBACzB,UAAU,EAAE,4GAA4G;gBACxH,GAAG,EAAE;oBACH,WAAW,EAAE,qDAAqD;oBAClE,WAAW,EAAE,KAAK;iBACnB;gBACD,UAAU,EAAE,IAAI;gBAChB,eAAe,EAAE,QAAQ;aAC1B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;CACF;AAED,eAAe,kBAAkB,CAAC"}
@@ -0,0 +1,67 @@
1
+ /**
2
+ * ContextCoherenceDetector — V4 detector for AI context window issues.
3
+ *
4
+ * Detects logic inconsistencies that arise from AI context window limitations.
5
+ * When AI models generate long code, they lose track of what they've already
6
+ * defined, used, or imported — leading to coherence issues.
7
+ *
8
+ * V4 improvements over V3:
9
+ * - Operates on CodeUnit IR (definitions, references, imports) instead of regex
10
+ * - Cross-unit analysis for referenced-but-undefined symbols
11
+ * - Structural analysis using definitions/references instead of source text
12
+ * - Dramatically reduced false positives
13
+ *
14
+ * @since 0.4.0
15
+ */
16
+ import type { CodeUnit, SupportedLanguage } from '../../ir/types.js';
17
+ import type { V4Detector, DetectorResult, DetectorCategory, DetectorContext } from './types.js';
18
+ export declare class ContextCoherenceDetector implements V4Detector {
19
+ readonly id = "context-coherence";
20
+ readonly name = "Context Coherence Detector";
21
+ readonly category: DetectorCategory;
22
+ readonly supportedLanguages: SupportedLanguage[];
23
+ detect(units: CodeUnit[], context: DetectorContext): Promise<DetectorResult[]>;
24
+ /**
25
+ * Analysis 1: Detect functions/classes/types defined but never used and not exported.
26
+ *
27
+ * AI models sometimes define helper functions that are never called,
28
+ * or define types/interfaces that are never used — a sign of context loss.
29
+ */
30
+ private detectUnusedDefinitions;
31
+ /**
32
+ * Analysis 2: Detect inconsistent import patterns within the same file.
33
+ *
34
+ * When AI loses context mid-generation, it may import the same functionality
35
+ * from different modules in different parts of the file. For example:
36
+ * - import { readFile } from 'fs' AND import { readFile } from 'fs/promises'
37
+ * - import lodash AND import underscore (same purpose)
38
+ */
39
+ private detectInconsistentImports;
40
+ /**
41
+ * Analysis 3: Detect duplicate function names in the same scope.
42
+ *
43
+ * AI may re-define the same function name multiple times in a file
44
+ * when it loses track of what it has already generated.
45
+ */
46
+ private detectDuplicateFunctionNames;
47
+ /** Group code units by their function/method definition names. */
48
+ private groupByFunctionName;
49
+ /** Report duplicate function definitions within the same scope. */
50
+ private reportDuplicates;
51
+ /**
52
+ * Analysis 4: Detect referenced but undefined symbols across units within a file.
53
+ *
54
+ * If a symbol is referenced but never defined (and not imported),
55
+ * the AI may have "forgotten" to include the definition.
56
+ */
57
+ private detectUndefinedReferences;
58
+ /**
59
+ * Check if a name is a well-known global (e.g., console, window, process).
60
+ */
61
+ private isWellKnownGlobal;
62
+ /**
63
+ * Capitalize a symbol kind for display.
64
+ */
65
+ private capitalizeKind;
66
+ }
67
+ //# sourceMappingURL=context-coherence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-coherence.d.ts","sourceRoot":"","sources":["../../../src/detectors/v4/context-coherence.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAIhG,qBAAa,wBAAyB,YAAW,UAAU;IACzD,QAAQ,CAAC,EAAE,uBAAuB;IAClC,QAAQ,CAAC,IAAI,gCAAgC;IAC7C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,CAAuB;IAC1D,QAAQ,CAAC,kBAAkB,EAAE,iBAAiB,EAAE,CAAM;IAEhD,MAAM,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IAkBpF;;;;;OAKG;IACH,OAAO,CAAC,uBAAuB;IAwD/B;;;;;;;OAOG;IACH,OAAO,CAAC,yBAAyB;IAyCjC;;;;;OAKG;IACH,OAAO,CAAC,4BAA4B;IAqBpC,kEAAkE;IAClE,OAAO,CAAC,mBAAmB;IAY3B,mEAAmE;IACnE,OAAO,CAAC,gBAAgB;IA2BxB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA6DjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IA4CzB;;OAEG;IACH,OAAO,CAAC,cAAc;CAGvB"}