@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,117 @@
1
+ /**
2
+ * Open Code Review V4 — AI Pipeline Types
3
+ *
4
+ * Type definitions for the two-stage AI scan pipeline:
5
+ * - Stage 1 (Embedding): Fast similarity-based defect detection
6
+ * - Stage 2 (LLM): Deep analysis of suspicious code blocks
7
+ *
8
+ * SLA levels control which stages run:
9
+ * - L1 Fast: Structural detectors only (no AI)
10
+ * - L2 Standard: + Embedding recall + Local LLM (Ollama)
11
+ * - L3 Deep: + Remote LLM (OpenAI/Claude)
12
+ *
13
+ * @since 0.4.0
14
+ */
15
+ import type { DetectorResult } from '../../detectors/v4/types.js';
16
+ /** Service Level Agreement — controls pipeline depth and cost */
17
+ export type SLALevel = 'L1' | 'L2' | 'L3';
18
+ /**
19
+ * Embedding provider interface.
20
+ * Generates vector embeddings from text for similarity comparison.
21
+ */
22
+ export interface EmbeddingProvider {
23
+ /** Provider name (e.g. 'local-tfidf', 'openai') */
24
+ readonly name: string;
25
+ /** Embedding vector dimension */
26
+ readonly dimension: number;
27
+ /** Generate embeddings for a batch of text chunks */
28
+ embed(texts: string[]): Promise<number[][]>;
29
+ }
30
+ /**
31
+ * LLM provider interface.
32
+ * Sends prompts to a language model and returns structured responses.
33
+ */
34
+ export interface LLMProvider {
35
+ /** Provider name (e.g. 'ollama', 'openai', 'anthropic') */
36
+ readonly name: string;
37
+ /** Send a prompt and get a completion */
38
+ complete(prompt: string, options?: LLMOptions): Promise<LLMResponse>;
39
+ /** Check if this provider is available and configured */
40
+ isAvailable(): Promise<boolean>;
41
+ }
42
+ /** Options for LLM completion requests */
43
+ export interface LLMOptions {
44
+ /** Maximum tokens to generate */
45
+ maxTokens?: number;
46
+ /** Sampling temperature (0 = deterministic, 1 = creative) */
47
+ temperature?: number;
48
+ /** System prompt for the model */
49
+ system?: string;
50
+ }
51
+ /** Response from an LLM completion request */
52
+ export interface LLMResponse {
53
+ /** Generated text content */
54
+ content: string;
55
+ /** Token usage statistics */
56
+ usage?: {
57
+ prompt: number;
58
+ completion: number;
59
+ total: number;
60
+ };
61
+ /** Response latency in milliseconds */
62
+ latencyMs: number;
63
+ }
64
+ /**
65
+ * Configuration for the AI scan pipeline.
66
+ * Controls which stages run and how they're configured.
67
+ */
68
+ export interface AIConfig {
69
+ /** SLA level determines which stages run */
70
+ sla: SLALevel;
71
+ /** Embedding provider configuration */
72
+ embedding?: {
73
+ provider: 'local' | 'openai' | 'ollama';
74
+ model?: string;
75
+ baseUrl?: string;
76
+ };
77
+ /** Local LLM configuration (Ollama) */
78
+ local?: {
79
+ provider: 'ollama';
80
+ model: string;
81
+ baseUrl?: string;
82
+ };
83
+ /** Remote LLM configuration (OpenAI / Anthropic) */
84
+ remote?: {
85
+ provider: 'openai' | 'anthropic';
86
+ model: string;
87
+ apiKey: string;
88
+ baseUrl?: string;
89
+ };
90
+ /** Maximum code blocks to send to LLM stage (default: 20) */
91
+ maxLLMBlocks?: number;
92
+ /** Embedding similarity threshold for flagging blocks (default: 0.7) */
93
+ similarityThreshold?: number;
94
+ }
95
+ /** Result from a single scan stage */
96
+ export interface ScanStageResult {
97
+ /** Which stage produced these results */
98
+ stage: 'structural' | 'embedding' | 'llm';
99
+ /** Issues detected in this stage */
100
+ issues: DetectorResult[];
101
+ /** Time taken in milliseconds */
102
+ durationMs: number;
103
+ /** Tokens consumed (LLM stages only) */
104
+ tokensUsed?: number;
105
+ }
106
+ /** Aggregate result from all pipeline stages */
107
+ export interface AIPipelineResult {
108
+ /** Results from each stage that ran */
109
+ stages: ScanStageResult[];
110
+ /** Total issues across all stages */
111
+ totalIssues: number;
112
+ /** Total time across all stages in milliseconds */
113
+ totalDurationMs: number;
114
+ /** SLA level that was used */
115
+ slaLevel: SLALevel;
116
+ }
117
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/ai/v4/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Open Code Review V4 — AI Pipeline Types
3
+ *
4
+ * Type definitions for the two-stage AI scan pipeline:
5
+ * - Stage 1 (Embedding): Fast similarity-based defect detection
6
+ * - Stage 2 (LLM): Deep analysis of suspicious code blocks
7
+ *
8
+ * SLA levels control which stages run:
9
+ * - L1 Fast: Structural detectors only (no AI)
10
+ * - L2 Standard: + Embedding recall + Local LLM (Ollama)
11
+ * - L3 Deep: + Remote LLM (OpenAI/Claude)
12
+ *
13
+ * @since 0.4.0
14
+ */
15
+ export {};
16
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/ai/v4/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * AI Healer — Prompt Builder
3
+ *
4
+ * Converts validation results into structured prompts that can be fed
5
+ * back to AI coding assistants (Copilot, Cursor, Claude) to fix issues.
6
+ */
7
+ import type { AggregateScore } from '../scorer/scoring-engine.js';
8
+ /** Generated fix prompt */
9
+ export interface FixPrompt {
10
+ file: string;
11
+ prompt: string;
12
+ priority: number;
13
+ categories: string[];
14
+ }
15
+ /**
16
+ * Build fix prompts from validation results
17
+ */
18
+ export declare class PromptBuilder {
19
+ /**
20
+ * Generate fix prompts for all files with issues
21
+ */
22
+ buildPrompts(report: AggregateScore): FixPrompt[];
23
+ /**
24
+ * Build a fix prompt for a single file
25
+ */
26
+ private buildFilePrompt;
27
+ /**
28
+ * Generate a combined prompt for all files (useful for batch fixes)
29
+ */
30
+ buildCombinedPrompt(report: AggregateScore): string;
31
+ }
32
+ export default PromptBuilder;
33
+ //# sourceMappingURL=prompt-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.d.ts","sourceRoot":"","sources":["../../src/ai-healer/prompt-builder.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAa,MAAM,6BAA6B,CAAC;AAE7E,2BAA2B;AAC3B,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,EAAE,CAAC;CACtB;AAED;;GAEG;AACH,qBAAa,aAAa;IACxB;;OAEG;IACH,YAAY,CAAC,MAAM,EAAE,cAAc,GAAG,SAAS,EAAE;IAajD;;OAEG;IACH,OAAO,CAAC,eAAe;IA+CvB;;OAEG;IACH,mBAAmB,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM;CAkBpD;AAED,eAAe,aAAa,CAAC"}
@@ -0,0 +1,89 @@
1
+ /**
2
+ * AI Healer — Prompt Builder
3
+ *
4
+ * Converts validation results into structured prompts that can be fed
5
+ * back to AI coding assistants (Copilot, Cursor, Claude) to fix issues.
6
+ */
7
+ /**
8
+ * Build fix prompts from validation results
9
+ */
10
+ export class PromptBuilder {
11
+ /**
12
+ * Generate fix prompts for all files with issues
13
+ */
14
+ buildPrompts(report) {
15
+ const prompts = [];
16
+ for (const file of report.files) {
17
+ if (file.totalScore >= 95)
18
+ continue;
19
+ const prompt = this.buildFilePrompt(file);
20
+ if (prompt)
21
+ prompts.push(prompt);
22
+ }
23
+ return prompts.sort((a, b) => b.priority - a.priority);
24
+ }
25
+ /**
26
+ * Build a fix prompt for a single file
27
+ */
28
+ buildFilePrompt(file) {
29
+ const sections = [];
30
+ const categories = [];
31
+ sections.push(`## Fix Request: ${file.file}`);
32
+ sections.push(`Current Score: ${file.totalScore}/100 (Grade: ${file.grade})`);
33
+ sections.push('');
34
+ sections.push('Please fix the following issues in this file:');
35
+ sections.push('');
36
+ const dims = [
37
+ { key: 'completeness', label: 'Hallucination Issues (Code Completeness)', dim: file.dimensions.completeness },
38
+ { key: 'coherence', label: 'Logic Gaps (Coherence)', dim: file.dimensions.coherence },
39
+ { key: 'consistency', label: 'Style Inconsistencies (Architecture Consistency)', dim: file.dimensions.consistency },
40
+ { key: 'conciseness', label: 'Duplication (Code Conciseness)', dim: file.dimensions.conciseness },
41
+ ];
42
+ for (const { key, label, dim } of dims) {
43
+ if (dim.issueCount > 0) {
44
+ categories.push(key);
45
+ sections.push(`### ${label}`);
46
+ for (const detail of dim.details) {
47
+ sections.push(`- ${detail}`);
48
+ }
49
+ sections.push('');
50
+ }
51
+ }
52
+ if (categories.length === 0)
53
+ return null;
54
+ sections.push('### Guidelines');
55
+ sections.push('- Fix each issue while preserving existing functionality');
56
+ sections.push('- Add proper error handling where missing');
57
+ sections.push('- Remove hallucinated imports/variables');
58
+ sections.push('- Standardize coding style to match the project conventions');
59
+ sections.push('- Do NOT introduce new dependencies unless absolutely necessary');
60
+ const priority = 100 - file.totalScore;
61
+ return {
62
+ file: file.file,
63
+ prompt: sections.join('\n'),
64
+ priority,
65
+ categories,
66
+ };
67
+ }
68
+ /**
69
+ * Generate a combined prompt for all files (useful for batch fixes)
70
+ */
71
+ buildCombinedPrompt(report) {
72
+ const prompts = this.buildPrompts(report);
73
+ if (prompts.length === 0) {
74
+ return 'All files passed validation. No fixes needed.';
75
+ }
76
+ const header = [
77
+ '# Open Code Review — Fix Request',
78
+ '',
79
+ `Overall Score: ${report.overallScore}/100`,
80
+ `Files needing fixes: ${prompts.length}`,
81
+ '',
82
+ '---',
83
+ '',
84
+ ].join('\n');
85
+ return header + prompts.map(p => p.prompt).join('\n---\n\n');
86
+ }
87
+ }
88
+ export default PromptBuilder;
89
+ //# sourceMappingURL=prompt-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompt-builder.js","sourceRoot":"","sources":["../../src/ai-healer/prompt-builder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Default Configuration
3
+ *
4
+ * Provides sensible defaults for all configuration options.
5
+ * Priority chain: CLI args > env vars > .aicv.yml > user global > these defaults
6
+ */
7
+ import type { AICVConfig } from './types.js';
8
+ export declare const DEFAULT_CONFIG: Readonly<AICVConfig>;
9
+ /**
10
+ * Create a complete config by merging partial user config with defaults.
11
+ * Shallow-merges each top-level section.
12
+ */
13
+ export declare function mergeWithDefaults(partial: Partial<AICVConfig>): AICVConfig;
14
+ //# sourceMappingURL=defaults.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.d.ts","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,eAAO,MAAM,cAAc,EAAE,QAAQ,CAAC,UAAU,CA6B/C,CAAC;AAEF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,UAAU,CAAC,GAAG,UAAU,CAiB1E"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Default Configuration
3
+ *
4
+ * Provides sensible defaults for all configuration options.
5
+ * Priority chain: CLI args > env vars > .aicv.yml > user global > these defaults
6
+ */
7
+ export const DEFAULT_CONFIG = {
8
+ scan: {
9
+ include: [
10
+ 'src/**/*.ts',
11
+ 'src/**/*.tsx',
12
+ 'src/**/*.js',
13
+ 'src/**/*.jsx',
14
+ ],
15
+ exclude: [
16
+ '**/*.test.*',
17
+ '**/*.spec.*',
18
+ '**/__tests__/**',
19
+ '**/node_modules/**',
20
+ '**/dist/**',
21
+ '**/build/**',
22
+ '**/.git/**',
23
+ ],
24
+ languages: [], // auto-detect
25
+ slaLevel: 'L2',
26
+ },
27
+ scoring: {
28
+ threshold: 70,
29
+ failOn: 'critical',
30
+ },
31
+ report: {
32
+ format: ['terminal'],
33
+ },
34
+ };
35
+ /**
36
+ * Create a complete config by merging partial user config with defaults.
37
+ * Shallow-merges each top-level section.
38
+ */
39
+ export function mergeWithDefaults(partial) {
40
+ return {
41
+ license: partial.license ?? DEFAULT_CONFIG.license,
42
+ scan: {
43
+ ...DEFAULT_CONFIG.scan,
44
+ ...(partial.scan ?? {}),
45
+ },
46
+ scoring: {
47
+ ...DEFAULT_CONFIG.scoring,
48
+ ...(partial.scoring ?? {}),
49
+ },
50
+ ai: partial.ai ?? DEFAULT_CONFIG.ai,
51
+ report: {
52
+ ...DEFAULT_CONFIG.report,
53
+ ...(partial.report ?? {}),
54
+ },
55
+ };
56
+ }
57
+ //# sourceMappingURL=defaults.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"defaults.js","sourceRoot":"","sources":["../../src/config/defaults.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,MAAM,CAAC,MAAM,cAAc,GAAyB;IAClD,IAAI,EAAE;QACJ,OAAO,EAAE;YACP,aAAa;YACb,cAAc;YACd,aAAa;YACb,cAAc;SACf;QACD,OAAO,EAAE;YACP,aAAa;YACb,aAAa;YACb,iBAAiB;YACjB,oBAAoB;YACpB,YAAY;YACZ,aAAa;YACb,YAAY;SACb;QACD,SAAS,EAAE,EAAE,EAAE,cAAc;QAC7B,QAAQ,EAAE,IAAI;KACf;IAED,OAAO,EAAE;QACP,SAAS,EAAE,EAAE;QACb,MAAM,EAAE,UAAU;KACnB;IAED,MAAM,EAAE;QACN,MAAM,EAAE,CAAC,UAAU,CAAC;KACrB;CACF,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAAC,OAA4B;IAC5D,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,cAAc,CAAC,OAAO;QAClD,IAAI,EAAE;YACJ,GAAG,cAAc,CAAC,IAAI;YACtB,GAAG,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;SACxB;QACD,OAAO,EAAE;YACP,GAAG,cAAc,CAAC,OAAO;YACzB,GAAG,CAAC,OAAO,CAAC,OAAO,IAAI,EAAE,CAAC;SAC3B;QACD,EAAE,EAAE,OAAO,CAAC,EAAE,IAAI,cAAc,CAAC,EAAE;QACnC,MAAM,EAAE;YACN,GAAG,cAAc,CAAC,MAAM;YACxB,GAAG,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;SAC1B;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Config Module — Public API
3
+ */
4
+ export type { AICVConfig, ScanConfig, ScoringConfig, AIConfig, AILocalConfig, AIRemoteConfig, ReportConfig, ReportFormatType, } from './types.js';
5
+ export { DEFAULT_CONFIG, mergeWithDefaults } from './defaults.js';
6
+ export { loadConfig } from './loader.js';
7
+ export type { CLIConfigOverrides, LoadConfigOptions } from './loader.js';
8
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,YAAY,EACV,UAAU,EACV,UAAU,EACV,aAAa,EACb,QAAQ,EACR,aAAa,EACb,cAAc,EACd,YAAY,EACZ,gBAAgB,GACjB,MAAM,YAAY,CAAC;AAEpB,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,YAAY,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Config Module — Public API
3
+ */
4
+ export { DEFAULT_CONFIG, mergeWithDefaults } from './defaults.js';
5
+ export { loadConfig } from './loader.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAaH,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAElE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Loads .aicv.yml with the following priority chain:
5
+ * 1. CLI args (passed directly)
6
+ * 2. Environment variables (AICV_*)
7
+ * 3. Project .aicv.yml (cwd)
8
+ * 4. User global ~/.aicv/config.yml
9
+ * 5. Built-in defaults
10
+ *
11
+ * Uses the `yaml` package for YAML parsing.
12
+ */
13
+ import type { AICVConfig } from './types.js';
14
+ export interface CLIConfigOverrides {
15
+ license?: string;
16
+ threshold?: number;
17
+ format?: string | string[];
18
+ slaLevel?: string;
19
+ failOn?: string;
20
+ output?: string;
21
+ }
22
+ export interface LoadConfigOptions {
23
+ /** Current working directory (default: process.cwd()) */
24
+ cwd?: string;
25
+ /** CLI argument overrides */
26
+ cliOverrides?: CLIConfigOverrides;
27
+ }
28
+ /**
29
+ * Load configuration with full priority chain:
30
+ * CLI args > env vars > project .aicv.yml > user global > defaults
31
+ */
32
+ export declare function loadConfig(options?: LoadConfigOptions): AICVConfig;
33
+ //# sourceMappingURL=loader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,OAAO,KAAK,EAAE,UAAU,EAAoB,MAAM,YAAY,CAAC;AAmJ/D,MAAM,WAAW,kBAAkB;IACjC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAoCD,MAAM,WAAW,iBAAiB;IAChC,yDAAyD;IACzD,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,6BAA6B;IAC7B,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,UAAU,CAmCtE"}
@@ -0,0 +1,245 @@
1
+ /**
2
+ * Configuration Loader
3
+ *
4
+ * Loads .aicv.yml with the following priority chain:
5
+ * 1. CLI args (passed directly)
6
+ * 2. Environment variables (AICV_*)
7
+ * 3. Project .aicv.yml (cwd)
8
+ * 4. User global ~/.aicv/config.yml
9
+ * 5. Built-in defaults
10
+ *
11
+ * Uses the `yaml` package for YAML parsing.
12
+ */
13
+ import { readFileSync, existsSync } from 'node:fs';
14
+ import { resolve, join } from 'node:path';
15
+ import { homedir } from 'node:os';
16
+ import { parse as parseYaml } from 'yaml';
17
+ import { mergeWithDefaults } from './defaults.js';
18
+ // ─── Config File Discovery ─────────────────────────────────────────
19
+ const CONFIG_FILENAMES = ['.ocrrc.yml', '.ocrrc.yaml', '.aicv.yml', '.aicv.yaml', 'aicv.yml', 'aicv.yaml'];
20
+ /**
21
+ * Search for a config file starting from `startDir` up to the filesystem root.
22
+ */
23
+ function findConfigFile(startDir) {
24
+ let dir = resolve(startDir);
25
+ const root = resolve('/');
26
+ while (true) {
27
+ for (const name of CONFIG_FILENAMES) {
28
+ const candidate = join(dir, name);
29
+ if (existsSync(candidate)) {
30
+ return candidate;
31
+ }
32
+ }
33
+ const parent = resolve(dir, '..');
34
+ if (parent === dir || dir === root)
35
+ break;
36
+ dir = parent;
37
+ }
38
+ return null;
39
+ }
40
+ /**
41
+ * Read and parse a YAML config file, returning a partial AICVConfig.
42
+ * Returns null if the file cannot be read or parsed.
43
+ */
44
+ function readYamlConfig(filePath) {
45
+ try {
46
+ const raw = readFileSync(filePath, 'utf-8');
47
+ const parsed = parseYaml(raw);
48
+ if (parsed && typeof parsed === 'object') {
49
+ return normalizeRawConfig(parsed);
50
+ }
51
+ return null;
52
+ }
53
+ catch {
54
+ return null;
55
+ }
56
+ }
57
+ /**
58
+ * Normalize raw YAML object into Partial<AICVConfig>.
59
+ * Handles alternate key names and type coercion.
60
+ */
61
+ function normalizeRawConfig(raw) {
62
+ const config = {};
63
+ if (typeof raw.license === 'string') {
64
+ config.license = raw.license;
65
+ }
66
+ // Scan section
67
+ if (raw.scan && typeof raw.scan === 'object') {
68
+ const s = raw.scan;
69
+ config.scan = {
70
+ include: toStringArray(s.include ?? s.paths ?? []),
71
+ exclude: toStringArray(s.exclude ?? []),
72
+ languages: toStringArray(s.languages ?? []),
73
+ slaLevel: normalizeSlaLevel(s.slaLevel ?? s.sla_level ?? 'L2'),
74
+ };
75
+ }
76
+ // Scoring section
77
+ if (raw.scoring && typeof raw.scoring === 'object') {
78
+ const sc = raw.scoring;
79
+ config.scoring = {
80
+ threshold: typeof sc.threshold === 'number' ? sc.threshold : 70,
81
+ failOn: normalizeFailOn(sc.failOn ?? sc.fail_on ?? 'critical'),
82
+ };
83
+ }
84
+ // AI section (type definition only, no runtime behavior yet)
85
+ if (raw.ai && typeof raw.ai === 'object') {
86
+ const ai = raw.ai;
87
+ config.ai = {
88
+ local: ai.local,
89
+ remote: ai.remote,
90
+ strategy: ai.strategy ?? 'local-first',
91
+ };
92
+ }
93
+ // Report section
94
+ if (raw.report && typeof raw.report === 'object') {
95
+ const r = raw.report;
96
+ config.report = {
97
+ format: normalizeFormats(r.format),
98
+ output: typeof r.output === 'string' ? r.output : undefined,
99
+ };
100
+ }
101
+ return config;
102
+ }
103
+ // ─── Env Var Extraction ────────────────────────────────────────────
104
+ /**
105
+ * Extract config overrides from environment variables.
106
+ * Supported vars:
107
+ * AICV_LICENSE
108
+ * AICV_SLA_LEVEL
109
+ * AICV_THRESHOLD
110
+ * AICV_FAIL_ON
111
+ * AICV_FORMAT
112
+ */
113
+ function configFromEnv() {
114
+ const config = {};
115
+ const env = process.env;
116
+ if (env.AICV_LICENSE) {
117
+ config.license = env.AICV_LICENSE;
118
+ }
119
+ if (env.AICV_SLA_LEVEL || env.AICV_THRESHOLD || env.AICV_FAIL_ON) {
120
+ config.scan = {};
121
+ config.scoring = {};
122
+ if (env.AICV_SLA_LEVEL) {
123
+ config.scan.slaLevel = normalizeSlaLevel(env.AICV_SLA_LEVEL);
124
+ }
125
+ if (env.AICV_THRESHOLD) {
126
+ const num = parseInt(env.AICV_THRESHOLD, 10);
127
+ if (!isNaN(num)) {
128
+ config.scoring.threshold = num;
129
+ }
130
+ }
131
+ if (env.AICV_FAIL_ON) {
132
+ config.scoring.failOn = normalizeFailOn(env.AICV_FAIL_ON);
133
+ }
134
+ }
135
+ if (env.AICV_FORMAT) {
136
+ config.report = {
137
+ format: normalizeFormats(env.AICV_FORMAT),
138
+ };
139
+ }
140
+ return config;
141
+ }
142
+ function configFromCLI(overrides) {
143
+ const config = {};
144
+ if (overrides.license) {
145
+ config.license = overrides.license;
146
+ }
147
+ if (overrides.threshold !== undefined || overrides.failOn || overrides.slaLevel) {
148
+ config.scan = {};
149
+ config.scoring = {};
150
+ if (overrides.slaLevel) {
151
+ config.scan.slaLevel = normalizeSlaLevel(overrides.slaLevel);
152
+ }
153
+ if (overrides.threshold !== undefined) {
154
+ config.scoring.threshold = overrides.threshold;
155
+ }
156
+ if (overrides.failOn) {
157
+ config.scoring.failOn = normalizeFailOn(overrides.failOn);
158
+ }
159
+ }
160
+ if (overrides.format || overrides.output) {
161
+ config.report = {
162
+ format: overrides.format ? normalizeFormats(overrides.format) : [],
163
+ output: overrides.output,
164
+ };
165
+ }
166
+ return config;
167
+ }
168
+ /**
169
+ * Load configuration with full priority chain:
170
+ * CLI args > env vars > project .aicv.yml > user global > defaults
171
+ */
172
+ export function loadConfig(options = {}) {
173
+ const cwd = options.cwd ?? process.cwd();
174
+ // Layer 5: defaults (handled by mergeWithDefaults)
175
+ // Layer 4: user global config
176
+ const globalConfigPath = join(homedir(), '.aicv', 'config.yml');
177
+ const globalConfig = existsSync(globalConfigPath)
178
+ ? readYamlConfig(globalConfigPath) ?? {}
179
+ : {};
180
+ // Layer 3: project config
181
+ const projectConfigPath = findConfigFile(cwd);
182
+ const projectConfig = projectConfigPath
183
+ ? readYamlConfig(projectConfigPath) ?? {}
184
+ : {};
185
+ // Layer 2: environment variables
186
+ const envConfig = configFromEnv();
187
+ // Layer 1: CLI args
188
+ const cliConfig = options.cliOverrides
189
+ ? configFromCLI(options.cliOverrides)
190
+ : {};
191
+ // Merge: defaults < global < project < env < cli
192
+ const merged = deepMergeConfigs({}, globalConfig, projectConfig, envConfig, cliConfig);
193
+ return mergeWithDefaults(merged);
194
+ }
195
+ // ─── Utility Helpers ───────────────────────────────────────────────
196
+ function toStringArray(val) {
197
+ if (Array.isArray(val))
198
+ return val.filter((v) => typeof v === 'string');
199
+ if (typeof val === 'string')
200
+ return [val];
201
+ return [];
202
+ }
203
+ function normalizeSlaLevel(val) {
204
+ const s = String(val).toUpperCase();
205
+ if (s === 'L1' || s === 'L2' || s === 'L3')
206
+ return s;
207
+ return 'L2';
208
+ }
209
+ function normalizeFailOn(val) {
210
+ const s = String(val).toLowerCase();
211
+ if (['critical', 'high', 'medium', 'low', 'none'].includes(s)) {
212
+ return s;
213
+ }
214
+ return 'critical';
215
+ }
216
+ const VALID_FORMATS = new Set(['terminal', 'json', 'html', 'markdown', 'sarif']);
217
+ function normalizeFormats(val) {
218
+ const arr = toStringArray(val);
219
+ const result = arr.filter((f) => VALID_FORMATS.has(f));
220
+ return result.length > 0 ? result : ['terminal'];
221
+ }
222
+ /**
223
+ * Deep-merge multiple partial configs (left to right, later wins).
224
+ */
225
+ function deepMergeConfigs(...configs) {
226
+ const result = {};
227
+ for (const cfg of configs) {
228
+ if (cfg.license !== undefined)
229
+ result.license = cfg.license;
230
+ if (cfg.scan) {
231
+ result.scan = { ...(result.scan ?? {}), ...cfg.scan };
232
+ }
233
+ if (cfg.scoring) {
234
+ result.scoring = { ...(result.scoring ?? {}), ...cfg.scoring };
235
+ }
236
+ if (cfg.ai) {
237
+ result.ai = { ...(result.ai ?? {}), ...cfg.ai };
238
+ }
239
+ if (cfg.report) {
240
+ result.report = { ...(result.report ?? {}), ...cfg.report };
241
+ }
242
+ }
243
+ return result;
244
+ }
245
+ //# sourceMappingURL=loader.js.map