@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,381 @@
1
+ /**
2
+ * AI Scan Pipeline Orchestrator
3
+ *
4
+ * Coordinates the two-stage AI scan pipeline:
5
+ * - Stage 0: Structural detectors (always runs, passed in)
6
+ * - Stage 1: Embedding recall (L2+)
7
+ * - Stage 2: LLM deep scan (L3)
8
+ *
9
+ * @since 0.4.0
10
+ */
11
+ import { LocalEmbeddingProvider, cosineSimilarity } from './embedding/index.js';
12
+ import { OpenAIEmbeddingProvider } from './embedding/index.js';
13
+ import { OllamaEmbeddingProvider } from './embedding/index.js';
14
+ import { OllamaLLMProvider } from './llm/index.js';
15
+ import { OpenAILLMProvider } from './llm/index.js';
16
+ import { AnthropicLLMProvider } from './llm/index.js';
17
+ import { DEFECT_PATTERNS, getPatternText, getPatternsForLanguage, } from './patterns/index.js';
18
+ /**
19
+ * Parse LLM JSON response into structured issues.
20
+ * Handles markdown code fences and malformed JSON gracefully.
21
+ */
22
+ function parseLLMResponse(content) {
23
+ try {
24
+ // Strip markdown code fences if present
25
+ let jsonText = content.trim();
26
+ if (jsonText.startsWith('```')) {
27
+ const lines = jsonText.split('\n');
28
+ // Remove first and last line if they're code fence markers
29
+ if (lines[0].startsWith('```'))
30
+ lines.shift();
31
+ if (lines[lines.length - 1].trim() === '```')
32
+ lines.pop();
33
+ jsonText = lines.join('\n');
34
+ }
35
+ const parsed = JSON.parse(jsonText);
36
+ // Handle { issues: [...] } wrapper
37
+ const issues = Array.isArray(parsed.issues)
38
+ ? parsed.issues
39
+ : Array.isArray(parsed)
40
+ ? parsed
41
+ : [];
42
+ return issues
43
+ .filter((issue) => typeof issue === 'object' &&
44
+ issue !== null &&
45
+ 'line' in issue &&
46
+ 'message' in issue)
47
+ .map((issue) => ({
48
+ line: Math.max(1, Math.floor(Number(issue.line)) || 1),
49
+ severity: normalizeSeverity(issue.severity),
50
+ message: String(issue.message),
51
+ category: issue.category ?? 'implementation',
52
+ }));
53
+ }
54
+ catch {
55
+ return [];
56
+ }
57
+ }
58
+ function normalizeSeverity(severity) {
59
+ const s = (severity ?? 'info').toLowerCase();
60
+ if (s === 'error' || s === 'critical')
61
+ return 'error';
62
+ if (s === 'warning' || s === 'warn')
63
+ return 'warning';
64
+ return 'info';
65
+ }
66
+ function normalizeCategory(category) {
67
+ const c = category.toLowerCase();
68
+ if (c.includes('faithful') || c.includes('hallucin'))
69
+ return 'ai-faithfulness';
70
+ if (c.includes('fresh') || c.includes('stale') || c.includes('deprecat'))
71
+ return 'code-freshness';
72
+ if (c.includes('coher') || c.includes('context'))
73
+ return 'context-coherence';
74
+ return 'implementation';
75
+ }
76
+ // ─── AI Scan Pipeline ──────────────────────────────────────────────
77
+ /**
78
+ * AI Scan Pipeline orchestrator.
79
+ *
80
+ * Runs the two-stage AI analysis based on SLA level configuration.
81
+ */
82
+ export class AIScanPipeline {
83
+ config;
84
+ maxLLMBlocks;
85
+ similarityThreshold;
86
+ constructor(config) {
87
+ this.config = config;
88
+ this.maxLLMBlocks = config.maxLLMBlocks ?? 20;
89
+ this.similarityThreshold = config.similarityThreshold ?? 0.7;
90
+ }
91
+ /**
92
+ * Run the full scan pipeline.
93
+ *
94
+ * @param units CodeUnits from parsing
95
+ * @param structuralResults Results from structural detectors (V4 detectors)
96
+ * @returns Combined results from all stages
97
+ */
98
+ async scan(units, structuralResults) {
99
+ const stages = [];
100
+ const totalStartTime = Date.now();
101
+ // Stage 0: Structural (already done, just include)
102
+ stages.push({
103
+ stage: 'structural',
104
+ issues: structuralResults,
105
+ durationMs: 0,
106
+ });
107
+ // L1 stops here
108
+ if (this.config.sla === 'L1') {
109
+ return this.buildResult(stages, totalStartTime);
110
+ }
111
+ // Stage 1: Embedding recall (L2 and L3)
112
+ const embeddingResults = await this.runEmbeddingStage(units);
113
+ stages.push(embeddingResults);
114
+ // Stage 2: LLM deep scan (L3 only)
115
+ if (this.config.sla === 'L3') {
116
+ const suspiciousBlocks = this.getSuspiciousBlocks(units, embeddingResults);
117
+ const llmResults = await this.runLLMStage(suspiciousBlocks);
118
+ stages.push(llmResults);
119
+ }
120
+ return this.buildResult(stages, totalStartTime);
121
+ }
122
+ /**
123
+ * Build the final result object.
124
+ */
125
+ buildResult(stages, startTime) {
126
+ const totalIssues = stages.reduce((sum, s) => sum + s.issues.length, 0);
127
+ const totalDurationMs = Date.now() - startTime;
128
+ return {
129
+ stages,
130
+ totalIssues,
131
+ totalDurationMs,
132
+ slaLevel: this.config.sla,
133
+ };
134
+ }
135
+ /**
136
+ * Stage 1: Run embedding-based recall to find suspicious code blocks.
137
+ */
138
+ async runEmbeddingStage(units) {
139
+ const startTime = Date.now();
140
+ if (units.length === 0) {
141
+ return { stage: 'embedding', issues: [], durationMs: 0 };
142
+ }
143
+ // Create embedding provider
144
+ const embeddingProvider = this.createEmbeddingProvider();
145
+ // Build corpus: pattern descriptions + code unit sources
146
+ const patternTexts = DEFECT_PATTERNS.map(getPatternText);
147
+ const codeTexts = units.map(u => this.buildCodeText(u));
148
+ const allTexts = [...patternTexts, ...codeTexts];
149
+ // Build vocabulary and generate embeddings
150
+ if (embeddingProvider instanceof LocalEmbeddingProvider) {
151
+ embeddingProvider.buildVocabulary(allTexts);
152
+ }
153
+ const embeddings = await embeddingProvider.embed(allTexts);
154
+ // Split embeddings back into patterns and code
155
+ const patternEmbeddings = embeddings.slice(0, patternTexts.length);
156
+ const codeEmbeddings = embeddings.slice(patternTexts.length);
157
+ // Find suspicious blocks by comparing code embeddings to pattern embeddings
158
+ const issues = [];
159
+ for (let i = 0; i < units.length; i++) {
160
+ const unit = units[i];
161
+ const codeEmb = codeEmbeddings[i];
162
+ if (!codeEmb)
163
+ continue;
164
+ // Get patterns applicable to this language
165
+ const applicablePatterns = getPatternsForLanguage(unit.language);
166
+ // Find matching patterns
167
+ const matches = [];
168
+ for (const pattern of applicablePatterns) {
169
+ const patternIdx = DEFECT_PATTERNS.indexOf(pattern);
170
+ if (patternIdx === -1)
171
+ continue;
172
+ const patternEmb = patternEmbeddings[patternIdx];
173
+ if (!patternEmb)
174
+ continue;
175
+ const similarity = cosineSimilarity(codeEmb, patternEmb);
176
+ if (similarity >= this.similarityThreshold) {
177
+ matches.push({ patternIdx, similarity });
178
+ }
179
+ }
180
+ // Create issues for top matches
181
+ for (const match of matches.slice(0, 3)) {
182
+ const pattern = DEFECT_PATTERNS[match.patternIdx];
183
+ if (!pattern)
184
+ continue;
185
+ issues.push({
186
+ detectorId: 'embedding-recall',
187
+ severity: pattern.severity,
188
+ category: pattern.category,
189
+ messageKey: `ai.embedding.${pattern.id}`,
190
+ message: pattern.description,
191
+ file: unit.file,
192
+ line: unit.location.startLine + 1, // Convert to 1-based
193
+ confidence: match.similarity,
194
+ metadata: {
195
+ patternId: pattern.id,
196
+ similarity: match.similarity,
197
+ },
198
+ });
199
+ }
200
+ }
201
+ return {
202
+ stage: 'embedding',
203
+ issues,
204
+ durationMs: Date.now() - startTime,
205
+ };
206
+ }
207
+ /**
208
+ * Stage 2: Run LLM deep scan on suspicious blocks.
209
+ */
210
+ async runLLMStage(suspiciousUnits) {
211
+ const startTime = Date.now();
212
+ let totalTokens = 0;
213
+ if (suspiciousUnits.length === 0) {
214
+ return { stage: 'llm', issues: [], durationMs: 0, tokensUsed: 0 };
215
+ }
216
+ // Create LLM provider (local first, fallback to remote)
217
+ const llmProvider = await this.createLLMProvider();
218
+ if (!llmProvider) {
219
+ return { stage: 'llm', issues: [], durationMs: Date.now() - startTime, tokensUsed: 0 };
220
+ }
221
+ const issues = [];
222
+ // Process suspicious blocks (limited by maxLLMBlocks)
223
+ const blocksToAnalyze = suspiciousUnits.slice(0, this.maxLLMBlocks);
224
+ for (const unit of blocksToAnalyze) {
225
+ try {
226
+ const prompt = this.buildPrompt(unit);
227
+ const response = await llmProvider.complete(prompt, {
228
+ maxTokens: 2000,
229
+ temperature: 0.1,
230
+ system: LLM_SYSTEM_PROMPT,
231
+ });
232
+ if (response.usage) {
233
+ totalTokens += response.usage.total;
234
+ }
235
+ // Parse LLM response
236
+ const llmIssues = parseLLMResponse(response.content);
237
+ // Convert to DetectorResults
238
+ for (const issue of llmIssues) {
239
+ issues.push({
240
+ detectorId: 'llm-deep-scan',
241
+ severity: issue.severity,
242
+ category: normalizeCategory(issue.category),
243
+ messageKey: 'ai.llm.detected',
244
+ message: issue.message,
245
+ file: unit.file,
246
+ line: issue.line,
247
+ confidence: 0.8, // LLM issues have high confidence
248
+ metadata: {
249
+ source: 'llm',
250
+ },
251
+ });
252
+ }
253
+ }
254
+ catch {
255
+ // Graceful degradation: skip this block on error
256
+ continue;
257
+ }
258
+ }
259
+ return {
260
+ stage: 'llm',
261
+ issues,
262
+ durationMs: Date.now() - startTime,
263
+ tokensUsed: totalTokens,
264
+ };
265
+ }
266
+ /**
267
+ * Get suspicious blocks from embedding results.
268
+ * Returns units that have embedding matches above threshold.
269
+ */
270
+ getSuspiciousBlocks(units, embeddingResults) {
271
+ // Get unique file paths with embedding issues
272
+ const suspiciousFiles = new Set(embeddingResults.issues
273
+ .filter(i => i.confidence >= this.similarityThreshold)
274
+ .map(i => i.file));
275
+ // Return units from suspicious files
276
+ return units.filter(u => suspiciousFiles.has(u.file));
277
+ }
278
+ /**
279
+ * Create embedding provider based on configuration.
280
+ */
281
+ createEmbeddingProvider() {
282
+ const embeddingConfig = this.config.embedding;
283
+ if (embeddingConfig?.provider === 'ollama') {
284
+ return new OllamaEmbeddingProvider(embeddingConfig.model ?? 'nomic-embed-text', embeddingConfig.baseUrl ?? this.config.local?.baseUrl ?? 'http://localhost:11434');
285
+ }
286
+ if (embeddingConfig?.provider === 'openai' && this.config.remote?.apiKey) {
287
+ return new OpenAIEmbeddingProvider(this.config.remote.apiKey, embeddingConfig.model ?? 'text-embedding-3-small');
288
+ }
289
+ // Default to local TF-IDF
290
+ return new LocalEmbeddingProvider(512);
291
+ }
292
+ /**
293
+ * Create LLM provider based on configuration.
294
+ * Prefers local (Ollama), falls back to remote.
295
+ */
296
+ async createLLMProvider() {
297
+ // Try local first (L2 and L3)
298
+ if (this.config.local) {
299
+ const ollama = new OllamaLLMProvider(this.config.local.model, this.config.local.baseUrl ?? 'http://localhost:11434');
300
+ if (await ollama.isAvailable()) {
301
+ return ollama;
302
+ }
303
+ }
304
+ // Fallback to remote (L3 only)
305
+ if (this.config.remote) {
306
+ if (this.config.remote.provider === 'anthropic') {
307
+ return new AnthropicLLMProvider(this.config.remote.apiKey, this.config.remote.model);
308
+ }
309
+ if (this.config.remote.provider === 'openai') {
310
+ return new OpenAILLMProvider(this.config.remote.apiKey, this.config.remote.model, this.config.remote.baseUrl);
311
+ }
312
+ }
313
+ return null;
314
+ }
315
+ /**
316
+ * Build text representation of a CodeUnit for embedding.
317
+ */
318
+ buildCodeText(unit) {
319
+ const parts = [];
320
+ // Add imports for context
321
+ for (const imp of unit.imports) {
322
+ parts.push(`import ${imp.module}`);
323
+ }
324
+ // Add function/method definitions
325
+ for (const def of unit.definitions) {
326
+ parts.push(`${def.kind} ${def.name}`);
327
+ }
328
+ // Add call sites
329
+ for (const call of unit.calls) {
330
+ parts.push(call.callee);
331
+ }
332
+ // Add source snippet (truncated)
333
+ const sourceSnippet = unit.source.slice(0, 2000);
334
+ parts.push(sourceSnippet);
335
+ return parts.join('\n');
336
+ }
337
+ /**
338
+ * Build a focused prompt for the LLM to analyze a code block.
339
+ */
340
+ buildPrompt(unit) {
341
+ return `Analyze this code for AI-generated defects.
342
+
343
+ File: ${unit.file}
344
+ Language: ${unit.language}
345
+
346
+ Code:
347
+ \`\`\`
348
+ ${unit.source.slice(0, 4000)}
349
+ \`\`\`
350
+
351
+ Check for:
352
+ - Hallucinated imports (packages that don't exist)
353
+ - Phantom APIs (methods/functions that don't exist on objects)
354
+ - Deprecated API usage
355
+ - Logic inconsistencies
356
+ - Security anti-patterns
357
+ - Incomplete implementations (TODOs, stubs)
358
+
359
+ Respond in JSON format:
360
+ {
361
+ "issues": [
362
+ { "line": <line_number>, "severity": "error|warning|info", "message": "<description>", "category": "<category>" }
363
+ ]
364
+ }
365
+
366
+ If no issues found, respond with: { "issues": [] }`;
367
+ }
368
+ }
369
+ // ─── Constants ─────────────────────────────────────────────────────
370
+ const LLM_SYSTEM_PROMPT = `You are a code quality analyzer specialized in detecting AI-generated code defects.
371
+ You analyze code and identify issues that are common in AI-generated code:
372
+ - Hallucinated packages and APIs
373
+ - Outdated/deprecated patterns
374
+ - Logic inconsistencies from context window boundaries
375
+ - Security vulnerabilities common in AI output
376
+ - Over-engineering and unnecessary complexity
377
+
378
+ Always respond with valid JSON matching the requested format.
379
+ Be precise about line numbers.
380
+ Only report issues you are confident about.`;
381
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/ai/v4/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,62 @@
1
+ /**
2
+ * SLA Router — Maps SLA levels to pipeline configuration.
3
+ *
4
+ * SLA (Service Level Agreement) levels control the depth and cost
5
+ * of the AI scan pipeline:
6
+ *
7
+ * - L1 Fast: Structural detectors only (no AI) — ~10s/100 files
8
+ * - L2 Standard: + Embedding recall + Local LLM — ~30s/100 files
9
+ * - L3 Deep: + Remote LLM — ~120s/100 files
10
+ *
11
+ * @since 0.4.0
12
+ */
13
+ import type { AIConfig, SLALevel } from './types.js';
14
+ import { AIScanPipeline } from './pipeline.js';
15
+ /**
16
+ * Human-readable descriptions for each SLA level.
17
+ */
18
+ export declare const SLA_DESCRIPTIONS: Record<SLALevel, {
19
+ name: string;
20
+ maxTime: string;
21
+ ai: string;
22
+ }>;
23
+ /**
24
+ * Default configurations for each SLA level.
25
+ * These can be overridden by user configuration.
26
+ */
27
+ export declare const DEFAULT_SLA_CONFIGS: Record<SLALevel, Partial<AIConfig>>;
28
+ /**
29
+ * Create an AI scan pipeline for the specified SLA level.
30
+ *
31
+ * @param sla SLA level (L1, L2, or L3)
32
+ * @param configOverride Override configuration (merged with defaults)
33
+ * @returns Configured AIScanPipeline instance
34
+ *
35
+ * @example
36
+ * ```ts
37
+ * const pipeline = createPipelineForSLA('L2', {
38
+ * local: { provider: 'ollama', model: 'deepseek-coder:6.7b' }
39
+ * });
40
+ * const result = await pipeline.scan(units, structuralResults);
41
+ * ```
42
+ */
43
+ export declare function createPipelineForSLA(sla: SLALevel, configOverride?: Partial<AIConfig>): AIScanPipeline;
44
+ /**
45
+ * Get recommended SLA level based on available resources.
46
+ *
47
+ * Returns:
48
+ * - L3 if remote API key is configured
49
+ * - L2 if Ollama is available
50
+ * - L1 otherwise
51
+ */
52
+ export declare function getRecommendedSLA(config?: Partial<AIConfig>): SLALevel;
53
+ /**
54
+ * Validate that a configuration is valid for the specified SLA level.
55
+ *
56
+ * @returns Object with valid flag and any error messages
57
+ */
58
+ export declare function validateSLAConfig(sla: SLALevel, config?: Partial<AIConfig>): {
59
+ valid: boolean;
60
+ errors: string[];
61
+ };
62
+ //# sourceMappingURL=sla.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sla.d.ts","sourceRoot":"","sources":["../../../src/ai/v4/sla.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACrD,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAI/C;;GAEG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CACnC,QAAQ,EACR;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,CAiB9C,CAAC;AAIF;;;GAGG;AACH,eAAO,MAAM,mBAAmB,EAAE,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,QAAQ,CAAC,CAwBnE,CAAC;AAIF;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,QAAQ,EACb,cAAc,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACjC,cAAc,CAWhB;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAatE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,GAAG,EAAE,QAAQ,EACb,MAAM,CAAC,EAAE,OAAO,CAAC,QAAQ,CAAC,GACzB;IAAE,KAAK,EAAE,OAAO,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAsBtC"}
@@ -0,0 +1,136 @@
1
+ /**
2
+ * SLA Router — Maps SLA levels to pipeline configuration.
3
+ *
4
+ * SLA (Service Level Agreement) levels control the depth and cost
5
+ * of the AI scan pipeline:
6
+ *
7
+ * - L1 Fast: Structural detectors only (no AI) — ~10s/100 files
8
+ * - L2 Standard: + Embedding recall + Local LLM — ~30s/100 files
9
+ * - L3 Deep: + Remote LLM — ~120s/100 files
10
+ *
11
+ * @since 0.4.0
12
+ */
13
+ import { AIScanPipeline } from './pipeline.js';
14
+ // ─── SLA Descriptions ──────────────────────────────────────────────
15
+ /**
16
+ * Human-readable descriptions for each SLA level.
17
+ */
18
+ export const SLA_DESCRIPTIONS = {
19
+ L1: {
20
+ name: 'Fast',
21
+ maxTime: '10s/100 files',
22
+ ai: 'None (structural only)',
23
+ },
24
+ L2: {
25
+ name: 'Standard',
26
+ maxTime: '30s/100 files',
27
+ ai: 'Embedding + Local LLM',
28
+ },
29
+ L3: {
30
+ name: 'Deep',
31
+ maxTime: '120s/100 files',
32
+ ai: 'Embedding + Remote LLM',
33
+ },
34
+ };
35
+ // ─── Default Configs by SLA ────────────────────────────────────────
36
+ /**
37
+ * Default configurations for each SLA level.
38
+ * These can be overridden by user configuration.
39
+ */
40
+ export const DEFAULT_SLA_CONFIGS = {
41
+ L1: {
42
+ sla: 'L1',
43
+ maxLLMBlocks: 0,
44
+ similarityThreshold: 0,
45
+ },
46
+ L2: {
47
+ sla: 'L2',
48
+ embedding: { provider: 'local' },
49
+ local: { provider: 'ollama', model: 'codellama:13b' },
50
+ maxLLMBlocks: 20,
51
+ similarityThreshold: 0.7,
52
+ },
53
+ L3: {
54
+ sla: 'L3',
55
+ embedding: { provider: 'openai' },
56
+ remote: {
57
+ provider: 'openai',
58
+ model: 'gpt-4o-mini',
59
+ apiKey: '',
60
+ },
61
+ maxLLMBlocks: 30,
62
+ similarityThreshold: 0.65, // Lower threshold for L3 since LLM will verify
63
+ },
64
+ };
65
+ // ─── Factory Functions ─────────────────────────────────────────────
66
+ /**
67
+ * Create an AI scan pipeline for the specified SLA level.
68
+ *
69
+ * @param sla SLA level (L1, L2, or L3)
70
+ * @param configOverride Override configuration (merged with defaults)
71
+ * @returns Configured AIScanPipeline instance
72
+ *
73
+ * @example
74
+ * ```ts
75
+ * const pipeline = createPipelineForSLA('L2', {
76
+ * local: { provider: 'ollama', model: 'deepseek-coder:6.7b' }
77
+ * });
78
+ * const result = await pipeline.scan(units, structuralResults);
79
+ * ```
80
+ */
81
+ export function createPipelineForSLA(sla, configOverride) {
82
+ const defaultConfig = DEFAULT_SLA_CONFIGS[sla];
83
+ // Merge defaults with overrides
84
+ const config = {
85
+ ...defaultConfig,
86
+ ...configOverride,
87
+ sla, // Always use the specified SLA level
88
+ };
89
+ return new AIScanPipeline(config);
90
+ }
91
+ /**
92
+ * Get recommended SLA level based on available resources.
93
+ *
94
+ * Returns:
95
+ * - L3 if remote API key is configured
96
+ * - L2 if Ollama is available
97
+ * - L1 otherwise
98
+ */
99
+ export function getRecommendedSLA(config) {
100
+ // If remote API is configured, prefer L3
101
+ if (config?.remote?.apiKey) {
102
+ return 'L3';
103
+ }
104
+ // If local LLM is configured, use L2
105
+ if (config?.local) {
106
+ return 'L2';
107
+ }
108
+ // Default to L1 (fast, no AI required)
109
+ return 'L1';
110
+ }
111
+ /**
112
+ * Validate that a configuration is valid for the specified SLA level.
113
+ *
114
+ * @returns Object with valid flag and any error messages
115
+ */
116
+ export function validateSLAConfig(sla, config) {
117
+ const errors = [];
118
+ if (sla === 'L2') {
119
+ if (!config?.local?.model) {
120
+ errors.push('L2 requires local.model to be specified');
121
+ }
122
+ }
123
+ if (sla === 'L3') {
124
+ if (!config?.remote?.apiKey) {
125
+ errors.push('L3 requires remote.apiKey to be specified');
126
+ }
127
+ if (!config?.remote?.model) {
128
+ errors.push('L3 requires remote.model to be specified');
129
+ }
130
+ }
131
+ return {
132
+ valid: errors.length === 0,
133
+ errors,
134
+ };
135
+ }
136
+ //# sourceMappingURL=sla.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sla.js","sourceRoot":"","sources":["../../../src/ai/v4/sla.ts"],"names":[],"mappings":"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"}