@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,10 @@
1
+ /**
2
+ * Embedding providers for the V4 AI pipeline Stage 1.
3
+ *
4
+ * @since 0.4.0
5
+ */
6
+ export { LocalEmbeddingProvider, tokenize, cosineSimilarity } from './local.js';
7
+ export { findTopMatches } from './similarity.js';
8
+ export { OpenAIEmbeddingProvider } from './openai.js';
9
+ export { OllamaEmbeddingProvider } from './ollama.js';
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,sBAAsB,EAAE,QAAQ,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Local Embedding Provider — TF-IDF Based
3
+ *
4
+ * For V4 MVP, we use a simple but effective approach:
5
+ * - TF-IDF vectorization of code blocks
6
+ * - Cosine similarity against defect pattern vectors
7
+ * - No external model dependency (zero binary deps)
8
+ *
9
+ * This can be upgraded to ONNX-based embedding (e.g. all-MiniLM-L6-v2)
10
+ * in the future without changing the EmbeddingProvider interface.
11
+ *
12
+ * @since 0.4.0
13
+ */
14
+ import type { EmbeddingProvider } from '../types.js';
15
+ /**
16
+ * Tokenize source code into meaningful tokens.
17
+ *
18
+ * Handles:
19
+ * - camelCase splitting: "readFile" → ["read", "file"]
20
+ * - snake_case splitting: "read_file" → ["read", "file"]
21
+ * - Punctuation removal
22
+ * - Number handling
23
+ * - Lowercasing
24
+ */
25
+ export declare function tokenize(text: string): string[];
26
+ /**
27
+ * Compute cosine similarity between two vectors.
28
+ * Returns a value in [0, 1] where 1 = identical direction.
29
+ */
30
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
31
+ export declare class LocalEmbeddingProvider implements EmbeddingProvider {
32
+ private maxDimension;
33
+ readonly name = "local-tfidf";
34
+ readonly dimension: number;
35
+ private vocabulary;
36
+ private idfScores;
37
+ private vocabularyBuilt;
38
+ /**
39
+ * @param maxDimension Maximum vocabulary size (vector dimension).
40
+ * Defaults to 512. Vocabulary is truncated to this size by IDF rank.
41
+ */
42
+ constructor(maxDimension?: number);
43
+ /**
44
+ * Build vocabulary and IDF scores from a corpus of texts.
45
+ * Must be called before embed() to produce meaningful vectors.
46
+ *
47
+ * @param texts Corpus of text documents to build vocabulary from
48
+ */
49
+ buildVocabulary(texts: string[]): void;
50
+ /**
51
+ * Generate TF-IDF embedding vectors for the given texts.
52
+ *
53
+ * If vocabulary hasn't been built, it will be auto-built from the input texts.
54
+ *
55
+ * @param texts Array of text documents to embed
56
+ * @returns Array of normalized TF-IDF vectors (one per text)
57
+ */
58
+ embed(texts: string[]): Promise<number[][]>;
59
+ /**
60
+ * Generate a normalized TF-IDF vector for a single text.
61
+ */
62
+ private embedSingle;
63
+ /**
64
+ * L2-normalize a vector (unit length).
65
+ */
66
+ private normalize;
67
+ }
68
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/local.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIrD;;;;;;;;;GASG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,CAW/C;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBjE;AAID,qBAAa,sBAAuB,YAAW,iBAAiB;IAYlD,OAAO,CAAC,YAAY;IAXhC,QAAQ,CAAC,IAAI,iBAAiB;IAC9B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAE3B,OAAO,CAAC,UAAU,CAAkC;IACpD,OAAO,CAAC,SAAS,CAAkC;IACnD,OAAO,CAAC,eAAe,CAAS;IAEhC;;;OAGG;gBACiB,YAAY,GAAE,MAAY;IAI9C;;;;;OAKG;IACH,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI;IAyCtC;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAQjD;;OAEG;IACH,OAAO,CAAC,WAAW;IA0BnB;;OAEG;IACH,OAAO,CAAC,SAAS;CAWlB"}
@@ -0,0 +1,167 @@
1
+ /**
2
+ * Local Embedding Provider — TF-IDF Based
3
+ *
4
+ * For V4 MVP, we use a simple but effective approach:
5
+ * - TF-IDF vectorization of code blocks
6
+ * - Cosine similarity against defect pattern vectors
7
+ * - No external model dependency (zero binary deps)
8
+ *
9
+ * This can be upgraded to ONNX-based embedding (e.g. all-MiniLM-L6-v2)
10
+ * in the future without changing the EmbeddingProvider interface.
11
+ *
12
+ * @since 0.4.0
13
+ */
14
+ // ─── Tokenization ──────────────────────────────────────────────────
15
+ /**
16
+ * Tokenize source code into meaningful tokens.
17
+ *
18
+ * Handles:
19
+ * - camelCase splitting: "readFile" → ["read", "file"]
20
+ * - snake_case splitting: "read_file" → ["read", "file"]
21
+ * - Punctuation removal
22
+ * - Number handling
23
+ * - Lowercasing
24
+ */
25
+ export function tokenize(text) {
26
+ // Split camelCase and PascalCase
27
+ const camelSplit = text.replace(/([a-z])([A-Z])/g, '$1 $2');
28
+ // Split snake_case
29
+ const snakeSplit = camelSplit.replace(/_/g, ' ');
30
+ // Split on non-alphanumeric characters, lowercase, filter empty
31
+ const tokens = snakeSplit
32
+ .split(/[^a-zA-Z0-9]+/)
33
+ .map(t => t.toLowerCase())
34
+ .filter(t => t.length > 1); // Filter single characters
35
+ return tokens;
36
+ }
37
+ // ─── Cosine Similarity ─────────────────────────────────────────────
38
+ /**
39
+ * Compute cosine similarity between two vectors.
40
+ * Returns a value in [0, 1] where 1 = identical direction.
41
+ */
42
+ export function cosineSimilarity(a, b) {
43
+ if (a.length !== b.length || a.length === 0)
44
+ return 0;
45
+ let dotProduct = 0;
46
+ let normA = 0;
47
+ let normB = 0;
48
+ for (let i = 0; i < a.length; i++) {
49
+ dotProduct += a[i] * b[i];
50
+ normA += a[i] * a[i];
51
+ normB += b[i] * b[i];
52
+ }
53
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
54
+ if (denominator === 0)
55
+ return 0;
56
+ return dotProduct / denominator;
57
+ }
58
+ // ─── Local TF-IDF Embedding Provider ───────────────────────────────
59
+ export class LocalEmbeddingProvider {
60
+ maxDimension;
61
+ name = 'local-tfidf';
62
+ dimension;
63
+ vocabulary = new Map();
64
+ idfScores = new Map();
65
+ vocabularyBuilt = false;
66
+ /**
67
+ * @param maxDimension Maximum vocabulary size (vector dimension).
68
+ * Defaults to 512. Vocabulary is truncated to this size by IDF rank.
69
+ */
70
+ constructor(maxDimension = 512) {
71
+ this.maxDimension = maxDimension;
72
+ this.dimension = maxDimension;
73
+ }
74
+ /**
75
+ * Build vocabulary and IDF scores from a corpus of texts.
76
+ * Must be called before embed() to produce meaningful vectors.
77
+ *
78
+ * @param texts Corpus of text documents to build vocabulary from
79
+ */
80
+ buildVocabulary(texts) {
81
+ if (texts.length === 0) {
82
+ this.vocabularyBuilt = true;
83
+ return;
84
+ }
85
+ // Tokenize all documents
86
+ const docTokenSets = texts.map(text => new Set(tokenize(text)));
87
+ // Count document frequency for each token
88
+ const docFreq = new Map();
89
+ for (const tokenSet of docTokenSets) {
90
+ for (const token of tokenSet) {
91
+ docFreq.set(token, (docFreq.get(token) ?? 0) + 1);
92
+ }
93
+ }
94
+ // Compute IDF: log(N / df)
95
+ const N = texts.length;
96
+ const idfEntries = [];
97
+ for (const [token, df] of docFreq.entries()) {
98
+ const idf = Math.log((N + 1) / (df + 1)) + 1; // smoothed IDF
99
+ idfEntries.push([token, idf]);
100
+ }
101
+ // Sort by IDF descending (most discriminative first), take top maxDimension
102
+ idfEntries.sort((a, b) => b[1] - a[1]);
103
+ const selected = idfEntries.slice(0, this.maxDimension);
104
+ // Build vocabulary mapping: token → index
105
+ this.vocabulary.clear();
106
+ this.idfScores.clear();
107
+ for (let i = 0; i < selected.length; i++) {
108
+ const [token, idf] = selected[i];
109
+ this.vocabulary.set(token, i);
110
+ this.idfScores.set(token, idf);
111
+ }
112
+ this.vocabularyBuilt = true;
113
+ }
114
+ /**
115
+ * Generate TF-IDF embedding vectors for the given texts.
116
+ *
117
+ * If vocabulary hasn't been built, it will be auto-built from the input texts.
118
+ *
119
+ * @param texts Array of text documents to embed
120
+ * @returns Array of normalized TF-IDF vectors (one per text)
121
+ */
122
+ async embed(texts) {
123
+ if (!this.vocabularyBuilt) {
124
+ this.buildVocabulary(texts);
125
+ }
126
+ return texts.map(text => this.embedSingle(text));
127
+ }
128
+ /**
129
+ * Generate a normalized TF-IDF vector for a single text.
130
+ */
131
+ embedSingle(text) {
132
+ const tokens = tokenize(text);
133
+ const vector = new Array(this.dimension).fill(0);
134
+ if (tokens.length === 0)
135
+ return vector;
136
+ // Count term frequencies
137
+ const tf = new Map();
138
+ for (const token of tokens) {
139
+ tf.set(token, (tf.get(token) ?? 0) + 1);
140
+ }
141
+ // Build TF-IDF vector
142
+ for (const [token, count] of tf.entries()) {
143
+ const idx = this.vocabulary.get(token);
144
+ if (idx !== undefined) {
145
+ const termFreq = count / tokens.length; // normalized TF
146
+ const idf = this.idfScores.get(token) ?? 1;
147
+ vector[idx] = termFreq * idf;
148
+ }
149
+ }
150
+ // L2 normalize
151
+ return this.normalize(vector);
152
+ }
153
+ /**
154
+ * L2-normalize a vector (unit length).
155
+ */
156
+ normalize(vector) {
157
+ let norm = 0;
158
+ for (const v of vector) {
159
+ norm += v * v;
160
+ }
161
+ norm = Math.sqrt(norm);
162
+ if (norm === 0)
163
+ return vector;
164
+ return vector.map(v => v / norm);
165
+ }
166
+ }
167
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/local.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Ollama Embedding Provider
3
+ *
4
+ * Uses Ollama's /api/embed batch API for local embedding generation.
5
+ * Designed for L2 SLA level where a local Ollama server is available.
6
+ *
7
+ * Recommended model: nomic-embed-text (0.3GB, 768 dims, ~0.14s/5 texts batch)
8
+ *
9
+ * @since 0.4.1
10
+ */
11
+ import type { EmbeddingProvider } from '../types.js';
12
+ /**
13
+ * Ollama embedding provider using the /api/embed batch API.
14
+ *
15
+ * Requires a running Ollama server with an embedding model pulled.
16
+ * Uses batch API (input as array) for efficient embedding generation.
17
+ *
18
+ * @example
19
+ * ```ts
20
+ * const provider = new OllamaEmbeddingProvider('nomic-embed-text', 'http://localhost:11434');
21
+ * const embeddings = await provider.embed(['hello world', 'foo bar']);
22
+ * ```
23
+ */
24
+ export declare class OllamaEmbeddingProvider implements EmbeddingProvider {
25
+ private model;
26
+ private baseUrl;
27
+ readonly name = "ollama";
28
+ private _dimension;
29
+ /**
30
+ * @param model Ollama embedding model name (default: nomic-embed-text)
31
+ * @param baseUrl Ollama server base URL (default: http://localhost:11434)
32
+ */
33
+ constructor(model?: string, baseUrl?: string);
34
+ /**
35
+ * Embedding vector dimension.
36
+ * Inferred from the first successful API response.
37
+ * Returns 0 before the first embed() call.
38
+ */
39
+ get dimension(): number;
40
+ /**
41
+ * Generate embeddings for a batch of texts via Ollama API.
42
+ *
43
+ * Uses the batch /api/embed endpoint with input as an array.
44
+ * Automatically splits into sub-batches of MAX_BATCH_SIZE to avoid timeouts.
45
+ *
46
+ * @param texts Array of text strings to embed
47
+ * @returns Array of embedding vectors (one per text)
48
+ */
49
+ embed(texts: string[]): Promise<number[][]>;
50
+ /**
51
+ * Send a single batch to the Ollama /api/embed endpoint.
52
+ *
53
+ * Uses the batch API: input is an array of strings,
54
+ * response contains embeddings array matching input order.
55
+ */
56
+ private embedBatch;
57
+ }
58
+ //# sourceMappingURL=ollama.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD;;;;;;;;;;;GAWG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAS7D,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IATjB,QAAQ,CAAC,IAAI,YAAY;IACzB,OAAO,CAAC,UAAU,CAAK;IAEvB;;;OAGG;gBAEO,KAAK,GAAE,MAA2B,EAClC,OAAO,GAAE,MAAiC;IAGpD;;;;OAIG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;;;;;;;OAQG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAejD;;;;;OAKG;YACW,UAAU;CAuCzB"}
@@ -0,0 +1,101 @@
1
+ /**
2
+ * Ollama Embedding Provider
3
+ *
4
+ * Uses Ollama's /api/embed batch API for local embedding generation.
5
+ * Designed for L2 SLA level where a local Ollama server is available.
6
+ *
7
+ * Recommended model: nomic-embed-text (0.3GB, 768 dims, ~0.14s/5 texts batch)
8
+ *
9
+ * @since 0.4.1
10
+ */
11
+ /** Maximum texts per batch to avoid timeouts */
12
+ const MAX_BATCH_SIZE = 10;
13
+ /**
14
+ * Ollama embedding provider using the /api/embed batch API.
15
+ *
16
+ * Requires a running Ollama server with an embedding model pulled.
17
+ * Uses batch API (input as array) for efficient embedding generation.
18
+ *
19
+ * @example
20
+ * ```ts
21
+ * const provider = new OllamaEmbeddingProvider('nomic-embed-text', 'http://localhost:11434');
22
+ * const embeddings = await provider.embed(['hello world', 'foo bar']);
23
+ * ```
24
+ */
25
+ export class OllamaEmbeddingProvider {
26
+ model;
27
+ baseUrl;
28
+ name = 'ollama';
29
+ _dimension = 0;
30
+ /**
31
+ * @param model Ollama embedding model name (default: nomic-embed-text)
32
+ * @param baseUrl Ollama server base URL (default: http://localhost:11434)
33
+ */
34
+ constructor(model = 'nomic-embed-text', baseUrl = 'http://localhost:11434') {
35
+ this.model = model;
36
+ this.baseUrl = baseUrl;
37
+ }
38
+ /**
39
+ * Embedding vector dimension.
40
+ * Inferred from the first successful API response.
41
+ * Returns 0 before the first embed() call.
42
+ */
43
+ get dimension() {
44
+ return this._dimension;
45
+ }
46
+ /**
47
+ * Generate embeddings for a batch of texts via Ollama API.
48
+ *
49
+ * Uses the batch /api/embed endpoint with input as an array.
50
+ * Automatically splits into sub-batches of MAX_BATCH_SIZE to avoid timeouts.
51
+ *
52
+ * @param texts Array of text strings to embed
53
+ * @returns Array of embedding vectors (one per text)
54
+ */
55
+ async embed(texts) {
56
+ if (texts.length === 0)
57
+ return [];
58
+ const results = [];
59
+ // Process in batches of MAX_BATCH_SIZE
60
+ for (let i = 0; i < texts.length; i += MAX_BATCH_SIZE) {
61
+ const batch = texts.slice(i, i + MAX_BATCH_SIZE);
62
+ const batchResults = await this.embedBatch(batch);
63
+ results.push(...batchResults);
64
+ }
65
+ return results;
66
+ }
67
+ /**
68
+ * Send a single batch to the Ollama /api/embed endpoint.
69
+ *
70
+ * Uses the batch API: input is an array of strings,
71
+ * response contains embeddings array matching input order.
72
+ */
73
+ async embedBatch(texts) {
74
+ const url = `${this.baseUrl.replace(/\/+$/, '')}/api/embed`;
75
+ const response = await fetch(url, {
76
+ method: 'POST',
77
+ headers: {
78
+ 'Content-Type': 'application/json',
79
+ },
80
+ body: JSON.stringify({
81
+ model: this.model,
82
+ input: texts,
83
+ }),
84
+ signal: AbortSignal.timeout(60_000),
85
+ });
86
+ if (!response.ok) {
87
+ const errorBody = await response.text().catch(() => 'unknown error');
88
+ throw new Error(`Ollama embed API error (${response.status}): ${errorBody}`);
89
+ }
90
+ const data = (await response.json());
91
+ if (!data.embeddings || !Array.isArray(data.embeddings)) {
92
+ throw new Error('Ollama embed API returned unexpected format: missing embeddings array');
93
+ }
94
+ // Infer dimension from first result
95
+ if (this._dimension === 0 && data.embeddings.length > 0 && data.embeddings[0]) {
96
+ this._dimension = data.embeddings[0].length;
97
+ }
98
+ return data.embeddings;
99
+ }
100
+ }
101
+ //# sourceMappingURL=ollama.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ollama.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/ollama.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,gDAAgD;AAChD,MAAM,cAAc,GAAG,EAAE,CAAC;AAE1B;;;;;;;;;;;GAWG;AACH,MAAM,OAAO,uBAAuB;IASxB;IACA;IATD,IAAI,GAAG,QAAQ,CAAC;IACjB,UAAU,GAAG,CAAC,CAAC;IAEvB;;;OAGG;IACH,YACU,QAAgB,kBAAkB,EAClC,UAAkB,wBAAwB;QAD1C,UAAK,GAAL,KAAK,CAA6B;QAClC,YAAO,GAAP,OAAO,CAAmC;IACjD,CAAC;IAEJ;;;;OAIG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;IAED;;;;;;;;OAQG;IACH,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,uCAAuC;QACvC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,YAAY,CAAC;QAE5D,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,2BAA2B,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CAC5D,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,IAAI,CAAC,IAAI,CAAC,UAAU,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;YACxD,MAAM,IAAI,KAAK,CACb,uEAAuE,CACxE,CAAC;QACJ,CAAC;QAED,oCAAoC;QACpC,IAAI,IAAI,CAAC,UAAU,KAAK,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9E,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9C,CAAC;QAED,OAAO,IAAI,CAAC,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * OpenAI Embedding Provider
3
+ *
4
+ * Uses OpenAI's text-embedding API for high-quality vector embeddings.
5
+ * Designed for L3 SLA level where remote API calls are acceptable.
6
+ *
7
+ * @since 0.4.0
8
+ */
9
+ import type { EmbeddingProvider } from '../types.js';
10
+ /**
11
+ * OpenAI embedding provider using the text-embedding-3-small model.
12
+ *
13
+ * Requires an API key. Batches requests to stay within API limits.
14
+ */
15
+ export declare class OpenAIEmbeddingProvider implements EmbeddingProvider {
16
+ private apiKey;
17
+ private model;
18
+ private baseUrl;
19
+ readonly name = "openai";
20
+ readonly dimension: number;
21
+ constructor(apiKey: string, model?: string, baseUrl?: string);
22
+ /**
23
+ * Generate embeddings for a batch of texts via OpenAI API.
24
+ *
25
+ * Automatically splits into sub-batches if texts exceed MAX_BATCH_SIZE.
26
+ *
27
+ * @param texts Array of text strings to embed
28
+ * @returns Array of embedding vectors (one per text)
29
+ */
30
+ embed(texts: string[]): Promise<number[][]>;
31
+ /**
32
+ * Send a single batch to the OpenAI embeddings API.
33
+ */
34
+ private embedBatch;
35
+ }
36
+ //# sourceMappingURL=openai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAKrD;;;;GAIG;AACH,qBAAa,uBAAwB,YAAW,iBAAiB;IAK7D,OAAO,CAAC,MAAM;IACd,OAAO,CAAC,KAAK;IACb,OAAO,CAAC,OAAO;IANjB,QAAQ,CAAC,IAAI,YAAY;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;gBAGjB,MAAM,EAAE,MAAM,EACd,KAAK,GAAE,MAAiC,EACxC,OAAO,GAAE,MAAoC;IAMvD;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAejD;;OAEG;YACW,UAAU;CA+BzB"}
@@ -0,0 +1,76 @@
1
+ /**
2
+ * OpenAI Embedding Provider
3
+ *
4
+ * Uses OpenAI's text-embedding API for high-quality vector embeddings.
5
+ * Designed for L3 SLA level where remote API calls are acceptable.
6
+ *
7
+ * @since 0.4.0
8
+ */
9
+ /** Maximum texts per batch request to OpenAI embeddings API */
10
+ const MAX_BATCH_SIZE = 2048;
11
+ /**
12
+ * OpenAI embedding provider using the text-embedding-3-small model.
13
+ *
14
+ * Requires an API key. Batches requests to stay within API limits.
15
+ */
16
+ export class OpenAIEmbeddingProvider {
17
+ apiKey;
18
+ model;
19
+ baseUrl;
20
+ name = 'openai';
21
+ dimension;
22
+ constructor(apiKey, model = 'text-embedding-3-small', baseUrl = 'https://api.openai.com/v1') {
23
+ this.apiKey = apiKey;
24
+ this.model = model;
25
+ this.baseUrl = baseUrl;
26
+ // text-embedding-3-small = 1536, text-embedding-3-large = 3072
27
+ this.dimension = model.includes('large') ? 3072 : 1536;
28
+ }
29
+ /**
30
+ * Generate embeddings for a batch of texts via OpenAI API.
31
+ *
32
+ * Automatically splits into sub-batches if texts exceed MAX_BATCH_SIZE.
33
+ *
34
+ * @param texts Array of text strings to embed
35
+ * @returns Array of embedding vectors (one per text)
36
+ */
37
+ async embed(texts) {
38
+ if (texts.length === 0)
39
+ return [];
40
+ const results = [];
41
+ // Process in batches
42
+ for (let i = 0; i < texts.length; i += MAX_BATCH_SIZE) {
43
+ const batch = texts.slice(i, i + MAX_BATCH_SIZE);
44
+ const batchResults = await this.embedBatch(batch);
45
+ results.push(...batchResults);
46
+ }
47
+ return results;
48
+ }
49
+ /**
50
+ * Send a single batch to the OpenAI embeddings API.
51
+ */
52
+ async embedBatch(texts) {
53
+ const url = `${this.baseUrl}/embeddings`;
54
+ const response = await fetch(url, {
55
+ method: 'POST',
56
+ headers: {
57
+ 'Content-Type': 'application/json',
58
+ Authorization: `Bearer ${this.apiKey}`,
59
+ },
60
+ body: JSON.stringify({
61
+ model: this.model,
62
+ input: texts,
63
+ }),
64
+ signal: AbortSignal.timeout(30_000),
65
+ });
66
+ if (!response.ok) {
67
+ const errorBody = await response.text().catch(() => 'unknown error');
68
+ throw new Error(`OpenAI embeddings API error (${response.status}): ${errorBody}`);
69
+ }
70
+ const data = (await response.json());
71
+ // Sort by index to ensure order matches input
72
+ const sorted = data.data.sort((a, b) => a.index - b.index);
73
+ return sorted.map(d => d.embedding);
74
+ }
75
+ }
76
+ //# sourceMappingURL=openai.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/openai.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,+DAA+D;AAC/D,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B;;;;GAIG;AACH,MAAM,OAAO,uBAAuB;IAKxB;IACA;IACA;IAND,IAAI,GAAG,QAAQ,CAAC;IAChB,SAAS,CAAS;IAE3B,YACU,MAAc,EACd,QAAgB,wBAAwB,EACxC,UAAkB,2BAA2B;QAF7C,WAAM,GAAN,MAAM,CAAQ;QACd,UAAK,GAAL,KAAK,CAAmC;QACxC,YAAO,GAAP,OAAO,CAAsC;QAErD,+DAA+D;QAC/D,IAAI,CAAC,SAAS,GAAG,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;IACzD,CAAC;IAED;;;;;;;OAOG;IACH,KAAK,CAAC,KAAK,CAAC,KAAe;QACzB,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QAElC,MAAM,OAAO,GAAe,EAAE,CAAC;QAE/B,qBAAqB;QACrB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,cAAc,EAAE,CAAC;YACtD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,cAAc,CAAC,CAAC;YACjD,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;YAClD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;QAChC,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,UAAU,CAAC,KAAe;QACtC,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,aAAa,CAAC;QAEzC,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE;YAChC,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;gBAClC,aAAa,EAAE,UAAU,IAAI,CAAC,MAAM,EAAE;aACvC;YACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;gBACnB,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,KAAK,EAAE,KAAK;aACb,CAAC;YACF,MAAM,EAAE,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC;SACpC,CAAC,CAAC;QAEH,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,eAAe,CAAC,CAAC;YACrE,MAAM,IAAI,KAAK,CACb,gCAAgC,QAAQ,CAAC,MAAM,MAAM,SAAS,EAAE,CACjE,CAAC;QACJ,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAElC,CAAC;QAEF,8CAA8C;QAC9C,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;QAC3D,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;CACF"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Cosine Similarity Utilities
3
+ *
4
+ * Vector similarity functions for the embedding recall stage.
5
+ * Used to compare code block embeddings against defect pattern embeddings.
6
+ *
7
+ * @since 0.4.0
8
+ */
9
+ /**
10
+ * Compute cosine similarity between two vectors.
11
+ * Returns a value in [-1, 1] where 1 = identical direction, 0 = orthogonal.
12
+ *
13
+ * For TF-IDF vectors (non-negative), range is [0, 1].
14
+ *
15
+ * @param a First vector
16
+ * @param b Second vector
17
+ * @returns Cosine similarity score
18
+ */
19
+ export declare function cosineSimilarity(a: number[], b: number[]): number;
20
+ /**
21
+ * Find the top-K most similar candidates to a query vector.
22
+ *
23
+ * Returns candidates that exceed the similarity threshold, sorted by
24
+ * descending similarity score, limited to topK results.
25
+ *
26
+ * @param query Query embedding vector
27
+ * @param candidates Array of candidate embedding vectors
28
+ * @param topK Maximum number of results to return
29
+ * @param threshold Minimum similarity score to include (0-1)
30
+ * @returns Array of { index, score } sorted by descending score
31
+ */
32
+ export declare function findTopMatches(query: number[], candidates: number[][], topK: number, threshold: number): {
33
+ index: number;
34
+ score: number;
35
+ }[];
36
+ //# sourceMappingURL=similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAiBjE;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,MAAM,EAAE,EAAE,EACtB,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,MAAM,GAChB;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,EAAE,CAepC"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * Cosine Similarity Utilities
3
+ *
4
+ * Vector similarity functions for the embedding recall stage.
5
+ * Used to compare code block embeddings against defect pattern embeddings.
6
+ *
7
+ * @since 0.4.0
8
+ */
9
+ /**
10
+ * Compute cosine similarity between two vectors.
11
+ * Returns a value in [-1, 1] where 1 = identical direction, 0 = orthogonal.
12
+ *
13
+ * For TF-IDF vectors (non-negative), range is [0, 1].
14
+ *
15
+ * @param a First vector
16
+ * @param b Second vector
17
+ * @returns Cosine similarity score
18
+ */
19
+ export function cosineSimilarity(a, b) {
20
+ if (a.length !== b.length || a.length === 0)
21
+ return 0;
22
+ let dotProduct = 0;
23
+ let normA = 0;
24
+ let normB = 0;
25
+ for (let i = 0; i < a.length; i++) {
26
+ dotProduct += a[i] * b[i];
27
+ normA += a[i] * a[i];
28
+ normB += b[i] * b[i];
29
+ }
30
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
31
+ if (denominator === 0)
32
+ return 0;
33
+ return dotProduct / denominator;
34
+ }
35
+ /**
36
+ * Find the top-K most similar candidates to a query vector.
37
+ *
38
+ * Returns candidates that exceed the similarity threshold, sorted by
39
+ * descending similarity score, limited to topK results.
40
+ *
41
+ * @param query Query embedding vector
42
+ * @param candidates Array of candidate embedding vectors
43
+ * @param topK Maximum number of results to return
44
+ * @param threshold Minimum similarity score to include (0-1)
45
+ * @returns Array of { index, score } sorted by descending score
46
+ */
47
+ export function findTopMatches(query, candidates, topK, threshold) {
48
+ const matches = [];
49
+ for (let i = 0; i < candidates.length; i++) {
50
+ const score = cosineSimilarity(query, candidates[i]);
51
+ if (score >= threshold) {
52
+ matches.push({ index: i, score });
53
+ }
54
+ }
55
+ // Sort by score descending
56
+ matches.sort((a, b) => b.score - a.score);
57
+ // Return top-K
58
+ return matches.slice(0, topK);
59
+ }
60
+ //# sourceMappingURL=similarity.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.js","sourceRoot":"","sources":["../../../../src/ai/v4/embedding/similarity.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH;;;;;;;;;GASG;AACH,MAAM,UAAU,gBAAgB,CAAC,CAAW,EAAE,CAAW;IACvD,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEtD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,UAAU,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1B,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACrB,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IACxD,IAAI,WAAW,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAEhC,OAAO,UAAU,GAAG,WAAW,CAAC;AAClC,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,cAAc,CAC5B,KAAe,EACf,UAAsB,EACtB,IAAY,EACZ,SAAiB;IAEjB,MAAM,OAAO,GAAuC,EAAE,CAAC;IAEvD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,gBAAgB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QACrD,IAAI,KAAK,IAAI,SAAS,EAAE,CAAC;YACvB,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;IACH,CAAC;IAED,2BAA2B;IAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAE1C,eAAe;IACf,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC"}