grepmind-core 0.1.0-alpha

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 (370) hide show
  1. package/LICENSE +190 -0
  2. package/dist/config/types.d.ts +174 -0
  3. package/dist/config/types.d.ts.map +1 -0
  4. package/dist/config/types.js +137 -0
  5. package/dist/config/types.js.map +1 -0
  6. package/dist/git.d.ts +98 -0
  7. package/dist/git.d.ts.map +1 -0
  8. package/dist/git.js +298 -0
  9. package/dist/git.js.map +1 -0
  10. package/dist/git.test.d.ts +7 -0
  11. package/dist/git.test.d.ts.map +1 -0
  12. package/dist/git.test.js +242 -0
  13. package/dist/git.test.js.map +1 -0
  14. package/dist/index.d.ts +44 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +67 -0
  17. package/dist/index.js.map +1 -0
  18. package/dist/indexer/branch.d.ts +121 -0
  19. package/dist/indexer/branch.d.ts.map +1 -0
  20. package/dist/indexer/branch.js +451 -0
  21. package/dist/indexer/branch.js.map +1 -0
  22. package/dist/indexer/chunker.d.ts +9 -0
  23. package/dist/indexer/chunker.d.ts.map +1 -0
  24. package/dist/indexer/chunker.js +70 -0
  25. package/dist/indexer/chunker.js.map +1 -0
  26. package/dist/indexer/chunker.test.d.ts +2 -0
  27. package/dist/indexer/chunker.test.d.ts.map +1 -0
  28. package/dist/indexer/chunker.test.js +180 -0
  29. package/dist/indexer/chunker.test.js.map +1 -0
  30. package/dist/indexer/code/branch.d.ts +155 -0
  31. package/dist/indexer/code/branch.d.ts.map +1 -0
  32. package/dist/indexer/code/branch.js +550 -0
  33. package/dist/indexer/code/branch.js.map +1 -0
  34. package/dist/indexer/code/branch.test.d.ts +7 -0
  35. package/dist/indexer/code/branch.test.d.ts.map +1 -0
  36. package/dist/indexer/code/branch.test.js +241 -0
  37. package/dist/indexer/code/branch.test.js.map +1 -0
  38. package/dist/indexer/code/chunker.d.ts +61 -0
  39. package/dist/indexer/code/chunker.d.ts.map +1 -0
  40. package/dist/indexer/code/chunker.js +311 -0
  41. package/dist/indexer/code/chunker.js.map +1 -0
  42. package/dist/indexer/code/chunker.test.d.ts +2 -0
  43. package/dist/indexer/code/chunker.test.d.ts.map +1 -0
  44. package/dist/indexer/code/chunker.test.js +552 -0
  45. package/dist/indexer/code/chunker.test.js.map +1 -0
  46. package/dist/indexer/code/fts.test.d.ts +2 -0
  47. package/dist/indexer/code/fts.test.d.ts.map +1 -0
  48. package/dist/indexer/code/fts.test.js +14 -0
  49. package/dist/indexer/code/fts.test.js.map +1 -0
  50. package/dist/indexer/code/graph/embedded.d.ts +11 -0
  51. package/dist/indexer/code/graph/embedded.d.ts.map +1 -0
  52. package/dist/indexer/code/graph/embedded.js +152 -0
  53. package/dist/indexer/code/graph/embedded.js.map +1 -0
  54. package/dist/indexer/code/graph/embedded.test.d.ts +2 -0
  55. package/dist/indexer/code/graph/embedded.test.d.ts.map +1 -0
  56. package/dist/indexer/code/graph/embedded.test.js +105 -0
  57. package/dist/indexer/code/graph/embedded.test.js.map +1 -0
  58. package/dist/indexer/code/graph/facts.d.ts +11 -0
  59. package/dist/indexer/code/graph/facts.d.ts.map +1 -0
  60. package/dist/indexer/code/graph/facts.js +456 -0
  61. package/dist/indexer/code/graph/facts.js.map +1 -0
  62. package/dist/indexer/code/graph/facts.test.d.ts +2 -0
  63. package/dist/indexer/code/graph/facts.test.d.ts.map +1 -0
  64. package/dist/indexer/code/graph/facts.test.js +181 -0
  65. package/dist/indexer/code/graph/facts.test.js.map +1 -0
  66. package/dist/indexer/code/graph/id.d.ts +14 -0
  67. package/dist/indexer/code/graph/id.d.ts.map +1 -0
  68. package/dist/indexer/code/graph/id.js +40 -0
  69. package/dist/indexer/code/graph/id.js.map +1 -0
  70. package/dist/indexer/code/graph/id.test.d.ts +2 -0
  71. package/dist/indexer/code/graph/id.test.d.ts.map +1 -0
  72. package/dist/indexer/code/graph/id.test.js +86 -0
  73. package/dist/indexer/code/graph/id.test.js.map +1 -0
  74. package/dist/indexer/code/graph/index.d.ts +133 -0
  75. package/dist/indexer/code/graph/index.d.ts.map +1 -0
  76. package/dist/indexer/code/graph/index.js +1876 -0
  77. package/dist/indexer/code/graph/index.js.map +1 -0
  78. package/dist/indexer/code/graph/index.test.d.ts +2 -0
  79. package/dist/indexer/code/graph/index.test.d.ts.map +1 -0
  80. package/dist/indexer/code/graph/index.test.js +210 -0
  81. package/dist/indexer/code/graph/index.test.js.map +1 -0
  82. package/dist/indexer/code/graph/queries.d.ts +22 -0
  83. package/dist/indexer/code/graph/queries.d.ts.map +1 -0
  84. package/dist/indexer/code/graph/queries.js +79 -0
  85. package/dist/indexer/code/graph/queries.js.map +1 -0
  86. package/dist/indexer/code/graph/queries.test.d.ts +2 -0
  87. package/dist/indexer/code/graph/queries.test.d.ts.map +1 -0
  88. package/dist/indexer/code/graph/queries.test.js +108 -0
  89. package/dist/indexer/code/graph/queries.test.js.map +1 -0
  90. package/dist/indexer/code/graph/resolver.d.ts +136 -0
  91. package/dist/indexer/code/graph/resolver.d.ts.map +1 -0
  92. package/dist/indexer/code/graph/resolver.js +839 -0
  93. package/dist/indexer/code/graph/resolver.js.map +1 -0
  94. package/dist/indexer/code/graph/resolver.test.d.ts +2 -0
  95. package/dist/indexer/code/graph/resolver.test.d.ts.map +1 -0
  96. package/dist/indexer/code/graph/resolver.test.js +482 -0
  97. package/dist/indexer/code/graph/resolver.test.js.map +1 -0
  98. package/dist/indexer/code/graph/semantic.d.ts +33 -0
  99. package/dist/indexer/code/graph/semantic.d.ts.map +1 -0
  100. package/dist/indexer/code/graph/semantic.js +279 -0
  101. package/dist/indexer/code/graph/semantic.js.map +1 -0
  102. package/dist/indexer/code/graph/semantic.test.d.ts +2 -0
  103. package/dist/indexer/code/graph/semantic.test.d.ts.map +1 -0
  104. package/dist/indexer/code/graph/semantic.test.js +127 -0
  105. package/dist/indexer/code/graph/semantic.test.js.map +1 -0
  106. package/dist/indexer/code/index.d.ts +404 -0
  107. package/dist/indexer/code/index.d.ts.map +1 -0
  108. package/dist/indexer/code/index.js +2070 -0
  109. package/dist/indexer/code/index.js.map +1 -0
  110. package/dist/indexer/code/languages/bash.d.ts +14 -0
  111. package/dist/indexer/code/languages/bash.d.ts.map +1 -0
  112. package/dist/indexer/code/languages/bash.js +125 -0
  113. package/dist/indexer/code/languages/bash.js.map +1 -0
  114. package/dist/indexer/code/languages/css.d.ts +16 -0
  115. package/dist/indexer/code/languages/css.d.ts.map +1 -0
  116. package/dist/indexer/code/languages/css.js +204 -0
  117. package/dist/indexer/code/languages/css.js.map +1 -0
  118. package/dist/indexer/code/languages/generic.d.ts +61 -0
  119. package/dist/indexer/code/languages/generic.d.ts.map +1 -0
  120. package/dist/indexer/code/languages/generic.js +150 -0
  121. package/dist/indexer/code/languages/generic.js.map +1 -0
  122. package/dist/indexer/code/languages/graphql.d.ts +13 -0
  123. package/dist/indexer/code/languages/graphql.d.ts.map +1 -0
  124. package/dist/indexer/code/languages/graphql.js +180 -0
  125. package/dist/indexer/code/languages/graphql.js.map +1 -0
  126. package/dist/indexer/code/languages/html.d.ts +16 -0
  127. package/dist/indexer/code/languages/html.d.ts.map +1 -0
  128. package/dist/indexer/code/languages/html.js +138 -0
  129. package/dist/indexer/code/languages/html.js.map +1 -0
  130. package/dist/indexer/code/languages/index.d.ts +9 -0
  131. package/dist/indexer/code/languages/index.d.ts.map +1 -0
  132. package/dist/indexer/code/languages/index.js +12 -0
  133. package/dist/indexer/code/languages/index.js.map +1 -0
  134. package/dist/indexer/code/languages/json.d.ts +12 -0
  135. package/dist/indexer/code/languages/json.d.ts.map +1 -0
  136. package/dist/indexer/code/languages/json.js +66 -0
  137. package/dist/indexer/code/languages/json.js.map +1 -0
  138. package/dist/indexer/code/languages/registry.d.ts +78 -0
  139. package/dist/indexer/code/languages/registry.d.ts.map +1 -0
  140. package/dist/indexer/code/languages/registry.js +72 -0
  141. package/dist/indexer/code/languages/registry.js.map +1 -0
  142. package/dist/indexer/code/languages/typescript.d.ts +39 -0
  143. package/dist/indexer/code/languages/typescript.d.ts.map +1 -0
  144. package/dist/indexer/code/languages/typescript.js +300 -0
  145. package/dist/indexer/code/languages/typescript.js.map +1 -0
  146. package/dist/indexer/code/languages/yaml.d.ts +13 -0
  147. package/dist/indexer/code/languages/yaml.d.ts.map +1 -0
  148. package/dist/indexer/code/languages/yaml.js +90 -0
  149. package/dist/indexer/code/languages/yaml.js.map +1 -0
  150. package/dist/indexer/code/parser.d.ts +26 -0
  151. package/dist/indexer/code/parser.d.ts.map +1 -0
  152. package/dist/indexer/code/parser.js +332 -0
  153. package/dist/indexer/code/parser.js.map +1 -0
  154. package/dist/indexer/code/retry.d.ts +58 -0
  155. package/dist/indexer/code/retry.d.ts.map +1 -0
  156. package/dist/indexer/code/retry.js +192 -0
  157. package/dist/indexer/code/retry.js.map +1 -0
  158. package/dist/indexer/code/tree/builder.d.ts +30 -0
  159. package/dist/indexer/code/tree/builder.d.ts.map +1 -0
  160. package/dist/indexer/code/tree/builder.js +132 -0
  161. package/dist/indexer/code/tree/builder.js.map +1 -0
  162. package/dist/indexer/code/tree/builder.test.d.ts +2 -0
  163. package/dist/indexer/code/tree/builder.test.d.ts.map +1 -0
  164. package/dist/indexer/code/tree/builder.test.js +31 -0
  165. package/dist/indexer/code/tree/builder.test.js.map +1 -0
  166. package/dist/indexer/code/tree/cache.d.ts +22 -0
  167. package/dist/indexer/code/tree/cache.d.ts.map +1 -0
  168. package/dist/indexer/code/tree/cache.js +85 -0
  169. package/dist/indexer/code/tree/cache.js.map +1 -0
  170. package/dist/indexer/code/tree/context.d.ts +32 -0
  171. package/dist/indexer/code/tree/context.d.ts.map +1 -0
  172. package/dist/indexer/code/tree/context.js +78 -0
  173. package/dist/indexer/code/tree/context.js.map +1 -0
  174. package/dist/indexer/code/tree/embedding.d.ts +9 -0
  175. package/dist/indexer/code/tree/embedding.d.ts.map +1 -0
  176. package/dist/indexer/code/tree/embedding.js +53 -0
  177. package/dist/indexer/code/tree/embedding.js.map +1 -0
  178. package/dist/indexer/code/tree/embedding.test.d.ts +2 -0
  179. package/dist/indexer/code/tree/embedding.test.d.ts.map +1 -0
  180. package/dist/indexer/code/tree/embedding.test.js +57 -0
  181. package/dist/indexer/code/tree/embedding.test.js.map +1 -0
  182. package/dist/indexer/code/tree/id.d.ts +3 -0
  183. package/dist/indexer/code/tree/id.d.ts.map +1 -0
  184. package/dist/indexer/code/tree/id.js +8 -0
  185. package/dist/indexer/code/tree/id.js.map +1 -0
  186. package/dist/indexer/code/tree/index.d.ts +113 -0
  187. package/dist/indexer/code/tree/index.d.ts.map +1 -0
  188. package/dist/indexer/code/tree/index.js +1146 -0
  189. package/dist/indexer/code/tree/index.js.map +1 -0
  190. package/dist/indexer/code/tree/rename.d.ts +13 -0
  191. package/dist/indexer/code/tree/rename.d.ts.map +1 -0
  192. package/dist/indexer/code/tree/rename.js +46 -0
  193. package/dist/indexer/code/tree/rename.js.map +1 -0
  194. package/dist/indexer/code/tree/repomap.d.ts +29 -0
  195. package/dist/indexer/code/tree/repomap.d.ts.map +1 -0
  196. package/dist/indexer/code/tree/repomap.js +95 -0
  197. package/dist/indexer/code/tree/repomap.js.map +1 -0
  198. package/dist/indexer/code/tree/repomap.test.d.ts +2 -0
  199. package/dist/indexer/code/tree/repomap.test.d.ts.map +1 -0
  200. package/dist/indexer/code/tree/repomap.test.js +93 -0
  201. package/dist/indexer/code/tree/repomap.test.js.map +1 -0
  202. package/dist/indexer/code/tree/stats.d.ts +26 -0
  203. package/dist/indexer/code/tree/stats.d.ts.map +1 -0
  204. package/dist/indexer/code/tree/stats.js +49 -0
  205. package/dist/indexer/code/tree/stats.js.map +1 -0
  206. package/dist/indexer/code/tree/types.d.ts +186 -0
  207. package/dist/indexer/code/tree/types.d.ts.map +1 -0
  208. package/dist/indexer/code/tree/types.js +10 -0
  209. package/dist/indexer/code/tree/types.js.map +1 -0
  210. package/dist/indexer/code/wal.d.ts +144 -0
  211. package/dist/indexer/code/wal.d.ts.map +1 -0
  212. package/dist/indexer/code/wal.js +283 -0
  213. package/dist/indexer/code/wal.js.map +1 -0
  214. package/dist/indexer/embeddings.d.ts +113 -0
  215. package/dist/indexer/embeddings.d.ts.map +1 -0
  216. package/dist/indexer/embeddings.js +477 -0
  217. package/dist/indexer/embeddings.js.map +1 -0
  218. package/dist/indexer/git-sync.d.ts +117 -0
  219. package/dist/indexer/git-sync.d.ts.map +1 -0
  220. package/dist/indexer/git-sync.js +398 -0
  221. package/dist/indexer/git-sync.js.map +1 -0
  222. package/dist/indexer/index.d.ts +175 -0
  223. package/dist/indexer/index.d.ts.map +1 -0
  224. package/dist/indexer/index.js +1096 -0
  225. package/dist/indexer/index.js.map +1 -0
  226. package/dist/indexer/mocks/mock-reranker.d.ts +12 -0
  227. package/dist/indexer/mocks/mock-reranker.d.ts.map +1 -0
  228. package/dist/indexer/mocks/mock-reranker.js +26 -0
  229. package/dist/indexer/mocks/mock-reranker.js.map +1 -0
  230. package/dist/indexer/parser.d.ts +8 -0
  231. package/dist/indexer/parser.d.ts.map +1 -0
  232. package/dist/indexer/parser.js +44 -0
  233. package/dist/indexer/parser.js.map +1 -0
  234. package/dist/indexer/parser.test.d.ts +2 -0
  235. package/dist/indexer/parser.test.d.ts.map +1 -0
  236. package/dist/indexer/parser.test.js +197 -0
  237. package/dist/indexer/parser.test.js.map +1 -0
  238. package/dist/indexer/reranking.d.ts +71 -0
  239. package/dist/indexer/reranking.d.ts.map +1 -0
  240. package/dist/indexer/reranking.integration.test.d.ts +2 -0
  241. package/dist/indexer/reranking.integration.test.d.ts.map +1 -0
  242. package/dist/indexer/reranking.integration.test.js +104 -0
  243. package/dist/indexer/reranking.integration.test.js.map +1 -0
  244. package/dist/indexer/reranking.js +256 -0
  245. package/dist/indexer/reranking.js.map +1 -0
  246. package/dist/indexer/reranking.test.d.ts +2 -0
  247. package/dist/indexer/reranking.test.d.ts.map +1 -0
  248. package/dist/indexer/reranking.test.js +130 -0
  249. package/dist/indexer/reranking.test.js.map +1 -0
  250. package/dist/indexer/wal/file-storage.d.ts +60 -0
  251. package/dist/indexer/wal/file-storage.d.ts.map +1 -0
  252. package/dist/indexer/wal/file-storage.js +277 -0
  253. package/dist/indexer/wal/file-storage.js.map +1 -0
  254. package/dist/indexer/wal/file-storage.test.d.ts +8 -0
  255. package/dist/indexer/wal/file-storage.test.d.ts.map +1 -0
  256. package/dist/indexer/wal/file-storage.test.js +444 -0
  257. package/dist/indexer/wal/file-storage.test.js.map +1 -0
  258. package/dist/indexer/wal/index.d.ts +41 -0
  259. package/dist/indexer/wal/index.d.ts.map +1 -0
  260. package/dist/indexer/wal/index.js +61 -0
  261. package/dist/indexer/wal/index.js.map +1 -0
  262. package/dist/indexer/wal/integration.test.d.ts +11 -0
  263. package/dist/indexer/wal/integration.test.d.ts.map +1 -0
  264. package/dist/indexer/wal/integration.test.js +378 -0
  265. package/dist/indexer/wal/integration.test.js.map +1 -0
  266. package/dist/indexer/wal/lancedb-storage.d.ts +72 -0
  267. package/dist/indexer/wal/lancedb-storage.d.ts.map +1 -0
  268. package/dist/indexer/wal/lancedb-storage.js +462 -0
  269. package/dist/indexer/wal/lancedb-storage.js.map +1 -0
  270. package/dist/indexer/wal/lancedb-storage.test.d.ts +8 -0
  271. package/dist/indexer/wal/lancedb-storage.test.d.ts.map +1 -0
  272. package/dist/indexer/wal/lancedb-storage.test.js +415 -0
  273. package/dist/indexer/wal/lancedb-storage.test.js.map +1 -0
  274. package/dist/indexer/wal/sync-wal.d.ts +144 -0
  275. package/dist/indexer/wal/sync-wal.d.ts.map +1 -0
  276. package/dist/indexer/wal/sync-wal.js +863 -0
  277. package/dist/indexer/wal/sync-wal.js.map +1 -0
  278. package/dist/indexer/wal/sync-wal.test.d.ts +8 -0
  279. package/dist/indexer/wal/sync-wal.test.d.ts.map +1 -0
  280. package/dist/indexer/wal/sync-wal.test.js +752 -0
  281. package/dist/indexer/wal/sync-wal.test.js.map +1 -0
  282. package/dist/indexer/wal/types.d.ts +167 -0
  283. package/dist/indexer/wal/types.d.ts.map +1 -0
  284. package/dist/indexer/wal/types.js +12 -0
  285. package/dist/indexer/wal/types.js.map +1 -0
  286. package/dist/indexer/watcher.d.ts +36 -0
  287. package/dist/indexer/watcher.d.ts.map +1 -0
  288. package/dist/indexer/watcher.js +110 -0
  289. package/dist/indexer/watcher.js.map +1 -0
  290. package/dist/search/explore.d.ts +62 -0
  291. package/dist/search/explore.d.ts.map +1 -0
  292. package/dist/search/explore.js +111 -0
  293. package/dist/search/explore.js.map +1 -0
  294. package/dist/search/fts.d.ts +23 -0
  295. package/dist/search/fts.d.ts.map +1 -0
  296. package/dist/search/fts.js +64 -0
  297. package/dist/search/fts.js.map +1 -0
  298. package/dist/search/fts.test.d.ts +2 -0
  299. package/dist/search/fts.test.d.ts.map +1 -0
  300. package/dist/search/fts.test.js +27 -0
  301. package/dist/search/fts.test.js.map +1 -0
  302. package/dist/search/grep.d.ts +75 -0
  303. package/dist/search/grep.d.ts.map +1 -0
  304. package/dist/search/grep.js +96 -0
  305. package/dist/search/grep.js.map +1 -0
  306. package/dist/search/grep.test.d.ts +2 -0
  307. package/dist/search/grep.test.d.ts.map +1 -0
  308. package/dist/search/grep.test.js +178 -0
  309. package/dist/search/grep.test.js.map +1 -0
  310. package/dist/search/hybrid-grep.d.ts +43 -0
  311. package/dist/search/hybrid-grep.d.ts.map +1 -0
  312. package/dist/search/hybrid-grep.js +130 -0
  313. package/dist/search/hybrid-grep.js.map +1 -0
  314. package/dist/search/hybrid-grep.test.d.ts +2 -0
  315. package/dist/search/hybrid-grep.test.d.ts.map +1 -0
  316. package/dist/search/hybrid-grep.test.js +133 -0
  317. package/dist/search/hybrid-grep.test.js.map +1 -0
  318. package/dist/search/rg-executor.d.ts +63 -0
  319. package/dist/search/rg-executor.d.ts.map +1 -0
  320. package/dist/search/rg-executor.js +146 -0
  321. package/dist/search/rg-executor.js.map +1 -0
  322. package/dist/search/rg-executor.test.d.ts +2 -0
  323. package/dist/search/rg-executor.test.d.ts.map +1 -0
  324. package/dist/search/rg-executor.test.js +104 -0
  325. package/dist/search/rg-executor.test.js.map +1 -0
  326. package/dist/search/rg-parser/extractor.d.ts +14 -0
  327. package/dist/search/rg-parser/extractor.d.ts.map +1 -0
  328. package/dist/search/rg-parser/extractor.js +82 -0
  329. package/dist/search/rg-parser/extractor.js.map +1 -0
  330. package/dist/search/rg-parser/extractor.test.d.ts +2 -0
  331. package/dist/search/rg-parser/extractor.test.d.ts.map +1 -0
  332. package/dist/search/rg-parser/extractor.test.js +35 -0
  333. package/dist/search/rg-parser/extractor.test.js.map +1 -0
  334. package/dist/search/rg-parser/fts-builder.d.ts +7 -0
  335. package/dist/search/rg-parser/fts-builder.d.ts.map +1 -0
  336. package/dist/search/rg-parser/fts-builder.js +18 -0
  337. package/dist/search/rg-parser/fts-builder.js.map +1 -0
  338. package/dist/search/rg-parser/fts-builder.test.d.ts +2 -0
  339. package/dist/search/rg-parser/fts-builder.test.d.ts.map +1 -0
  340. package/dist/search/rg-parser/fts-builder.test.js +26 -0
  341. package/dist/search/rg-parser/fts-builder.test.js.map +1 -0
  342. package/dist/search/rg-parser/index.d.ts +36 -0
  343. package/dist/search/rg-parser/index.d.ts.map +1 -0
  344. package/dist/search/rg-parser/index.js +83 -0
  345. package/dist/search/rg-parser/index.js.map +1 -0
  346. package/dist/search/rg-parser/index.test.d.ts +2 -0
  347. package/dist/search/rg-parser/index.test.d.ts.map +1 -0
  348. package/dist/search/rg-parser/index.test.js +34 -0
  349. package/dist/search/rg-parser/index.test.js.map +1 -0
  350. package/dist/search/rg-parser/strategy.d.ts +14 -0
  351. package/dist/search/rg-parser/strategy.d.ts.map +1 -0
  352. package/dist/search/rg-parser/strategy.js +31 -0
  353. package/dist/search/rg-parser/strategy.js.map +1 -0
  354. package/dist/search/rg-parser/strategy.test.d.ts +2 -0
  355. package/dist/search/rg-parser/strategy.test.d.ts.map +1 -0
  356. package/dist/search/rg-parser/strategy.test.js +29 -0
  357. package/dist/search/rg-parser/strategy.test.js.map +1 -0
  358. package/dist/types.d.ts +345 -0
  359. package/dist/types.d.ts.map +1 -0
  360. package/dist/types.js +7 -0
  361. package/dist/types.js.map +1 -0
  362. package/dist/utils/vault.d.ts +84 -0
  363. package/dist/utils/vault.d.ts.map +1 -0
  364. package/dist/utils/vault.js +138 -0
  365. package/dist/utils/vault.js.map +1 -0
  366. package/dist/utils/vault.test.d.ts +2 -0
  367. package/dist/utils/vault.test.d.ts.map +1 -0
  368. package/dist/utils/vault.test.js +153 -0
  369. package/dist/utils/vault.test.js.map +1 -0
  370. package/package.json +69 -0
@@ -0,0 +1,113 @@
1
+ import type { EmbeddingConfig } from '../config/types.js';
2
+ import { type NotesError } from '../types.js';
3
+ /**
4
+ * Get dimensions for a model, with fallback to config or default.
5
+ */
6
+ export declare function getModelDimensions(model: string, configDimensions?: number): number;
7
+ /**
8
+ * Embedding provider interface.
9
+ * All embedding providers implement this interface.
10
+ */
11
+ export interface EmbeddingProvider {
12
+ /**
13
+ * Initialize the provider (load models, connect to APIs, etc.)
14
+ */
15
+ initialize(): Promise<void>;
16
+ /**
17
+ * Get embedding for a single text.
18
+ * @param text - Text to embed
19
+ * @param inputType - 'document' for indexing, 'query' for search
20
+ */
21
+ getEmbedding(text: string, inputType?: 'document' | 'query'): Promise<number[] | NotesError>;
22
+ /**
23
+ * Get embeddings for multiple texts in a batch.
24
+ * @param texts - Array of texts to embed
25
+ * @param batchSize - Batch size for processing
26
+ * @param inputType - 'document' for indexing, 'query' for search
27
+ * @param onProgress - Optional callback for batch progress
28
+ */
29
+ getEmbeddingsBatch(texts: string[], batchSize?: number, inputType?: 'document' | 'query', onProgress?: (current: number, total: number) => void): Promise<number[][] | NotesError>;
30
+ /**
31
+ * Get the model name for this provider.
32
+ */
33
+ getModelName(): string;
34
+ /**
35
+ * Get the embedding dimensions for this provider.
36
+ */
37
+ getDimensions(): number;
38
+ }
39
+ /**
40
+ * WASM embedding provider using Xenova Transformers.js
41
+ * Runs models in Node.js via WebAssembly
42
+ */
43
+ export declare class WasmEmbeddingProvider implements EmbeddingProvider {
44
+ private config;
45
+ private dimensions;
46
+ private extractor;
47
+ private initPromise;
48
+ constructor(config: EmbeddingConfig);
49
+ initialize(): Promise<void>;
50
+ private getExtractor;
51
+ getEmbedding(text: string, inputType?: 'document' | 'query'): Promise<number[] | NotesError>;
52
+ getEmbeddingsBatch(texts: string[], batchSize?: number, inputType?: 'document' | 'query', onProgress?: (current: number, total: number) => void): Promise<number[][] | NotesError>;
53
+ getModelName(): string;
54
+ getDimensions(): number;
55
+ }
56
+ /**
57
+ * Voyage AI embedding provider.
58
+ * Uses the Voyage AI API for embeddings (recommended for code).
59
+ */
60
+ export declare class VoyageEmbeddingProvider implements EmbeddingProvider {
61
+ private config;
62
+ private dimensions;
63
+ private client;
64
+ private queue;
65
+ private dimWarningShown;
66
+ constructor(config: EmbeddingConfig);
67
+ initialize(): Promise<void>;
68
+ private getClient;
69
+ private getQueue;
70
+ private embedBatch;
71
+ getEmbedding(text: string, inputType?: 'document' | 'query'): Promise<number[] | NotesError>;
72
+ getEmbeddingsBatch(texts: string[], batchSize?: number, inputType?: 'document' | 'query', onProgress?: (current: number, total: number) => void): Promise<number[][] | NotesError>;
73
+ getModelName(): string;
74
+ getDimensions(): number;
75
+ }
76
+ /**
77
+ * Ollama embedding provider.
78
+ * Uses local Ollama server for embeddings.
79
+ */
80
+ export declare class OllamaEmbeddingProvider implements EmbeddingProvider {
81
+ private config;
82
+ private dimensions;
83
+ private baseUrl;
84
+ constructor(config: EmbeddingConfig);
85
+ initialize(): Promise<void>;
86
+ private embedBatch;
87
+ getEmbedding(text: string, inputType?: 'document' | 'query'): Promise<number[] | NotesError>;
88
+ getEmbeddingsBatch(texts: string[], batchSize?: number, // Ollama handles large batches well with GPU
89
+ inputType?: 'document' | 'query', onProgress?: (current: number, total: number) => void): Promise<number[][] | NotesError>;
90
+ getModelName(): string;
91
+ getDimensions(): number;
92
+ }
93
+ /**
94
+ * LocalAI embedding provider.
95
+ * Uses OpenAI-compatible `/v1/embeddings` endpoint.
96
+ */
97
+ export declare class LocalAIEmbeddingProvider implements EmbeddingProvider {
98
+ private config;
99
+ private dimensions;
100
+ private baseUrl;
101
+ constructor(config: EmbeddingConfig);
102
+ initialize(): Promise<void>;
103
+ private embedBatch;
104
+ getEmbedding(text: string, inputType?: 'document' | 'query'): Promise<number[] | NotesError>;
105
+ getEmbeddingsBatch(texts: string[], batchSize?: number, inputType?: 'document' | 'query', onProgress?: (current: number, total: number) => void): Promise<number[][] | NotesError>;
106
+ getModelName(): string;
107
+ getDimensions(): number;
108
+ }
109
+ /**
110
+ * Factory function to create an embedding provider based on config.
111
+ */
112
+ export declare function createEmbeddingProvider(config: EmbeddingConfig): EmbeddingProvider;
113
+ //# sourceMappingURL=embeddings.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.d.ts","sourceRoot":"","sources":["../../src/indexer/embeddings.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,477 @@
1
+ // Embedding providers for semantic search
2
+ // Supports WASM (Xenova Transformers.js), Voyage AI, Ollama, and LocalAI providers
3
+ import { pipeline, env } from '@xenova/transformers';
4
+ import { VoyageAIClient, VoyageAIError } from 'voyageai';
5
+ import PQueue from 'p-queue';
6
+ import { createError } from '../types.js';
7
+ /**
8
+ * Known model dimensions.
9
+ * Used to auto-detect dimensions when not explicitly configured.
10
+ */
11
+ const MODEL_DIMENSIONS = {
12
+ // Ollama models
13
+ 'nomic-embed-text': 768,
14
+ 'mxbai-embed-large': 1024,
15
+ 'all-minilm': 384,
16
+ 'snowflake-arctic-embed': 1024,
17
+ 'bge-m3': 1024,
18
+ 'bge-large': 1024,
19
+ // WASM / Transformers.js models
20
+ 'nomic-ai/nomic-embed-text-v1.5': 768,
21
+ 'Xenova/all-MiniLM-L6-v2': 384,
22
+ 'Xenova/bge-small-en-v1.5': 384,
23
+ 'Xenova/bge-base-en-v1.5': 768,
24
+ // Voyage models
25
+ 'voyage-3': 1024,
26
+ 'voyage-3-lite': 512,
27
+ 'voyage-code-3': 1024,
28
+ 'voyage-finance-2': 1024,
29
+ 'voyage-law-2': 1024,
30
+ };
31
+ /**
32
+ * Get dimensions for a model, with fallback to config or default.
33
+ */
34
+ export function getModelDimensions(model, configDimensions) {
35
+ return MODEL_DIMENSIONS[model] ?? configDimensions ?? 768;
36
+ }
37
+ /**
38
+ * WASM embedding provider using Xenova Transformers.js
39
+ * Runs models in Node.js via WebAssembly
40
+ */
41
+ export class WasmEmbeddingProvider {
42
+ config;
43
+ dimensions;
44
+ extractor = null;
45
+ initPromise = null;
46
+ constructor(config) {
47
+ this.config = config;
48
+ this.dimensions = getModelDimensions(config.model, config.dimensions);
49
+ // Configure transformers.js cache directory
50
+ if (config.cacheDir) {
51
+ env.cacheDir = config.cacheDir;
52
+ }
53
+ }
54
+ async initialize() {
55
+ await this.getExtractor();
56
+ }
57
+ async getExtractor() {
58
+ if (this.extractor)
59
+ return this.extractor;
60
+ if (!this.initPromise) {
61
+ this.initPromise = pipeline('feature-extraction', this.config.model, {
62
+ quantized: true,
63
+ });
64
+ }
65
+ this.extractor = await this.initPromise;
66
+ return this.extractor;
67
+ }
68
+ async getEmbedding(text, inputType = 'document') {
69
+ try {
70
+ const ext = await this.getExtractor();
71
+ const output = await ext(text, { pooling: 'mean', normalize: true });
72
+ const fullVector = Array.from(output.data);
73
+ // Apply Matryoshka dimension truncation if needed
74
+ if (this.dimensions < fullVector.length) {
75
+ return fullVector.slice(0, this.dimensions);
76
+ }
77
+ return fullVector;
78
+ }
79
+ catch (error) {
80
+ return createError('EMBEDDING_FAILED', `Failed to get embedding: ${error.message}`, { error: error.message });
81
+ }
82
+ }
83
+ async getEmbeddingsBatch(texts, batchSize = 32, inputType = 'document', onProgress) {
84
+ if (texts.length === 0)
85
+ return [];
86
+ try {
87
+ const ext = await this.getExtractor();
88
+ const allEmbeddings = [];
89
+ const totalBatches = Math.ceil(texts.length / batchSize);
90
+ for (let i = 0; i < texts.length; i += batchSize) {
91
+ const batchNum = Math.floor(i / batchSize) + 1;
92
+ const batch = texts.slice(i, i + batchSize);
93
+ if (texts.length > 50) {
94
+ process.stderr.write(`\r Embedding batch ${batchNum}/${totalBatches}...`);
95
+ }
96
+ // Call progress callback if provided
97
+ if (onProgress) {
98
+ onProgress(batchNum, totalBatches);
99
+ }
100
+ const output = await ext(batch, { pooling: 'mean', normalize: true });
101
+ const data = output.data;
102
+ const vectorSize = output.dims[1];
103
+ for (let j = 0; j < batch.length; j++) {
104
+ const start = j * vectorSize;
105
+ const end = start + vectorSize;
106
+ let vector = Array.from(data.slice(start, end));
107
+ if (this.dimensions < vector.length) {
108
+ vector = vector.slice(0, this.dimensions);
109
+ }
110
+ allEmbeddings.push(vector);
111
+ }
112
+ }
113
+ if (texts.length > 50) {
114
+ process.stderr.write('\r \r');
115
+ }
116
+ return allEmbeddings;
117
+ }
118
+ catch (error) {
119
+ return createError('EMBEDDING_FAILED', `Failed to get batch embeddings: ${error.message}`, { error: error.message });
120
+ }
121
+ }
122
+ getModelName() {
123
+ return this.config.model;
124
+ }
125
+ getDimensions() {
126
+ return this.dimensions;
127
+ }
128
+ }
129
+ // Voyage-supported output dimensions (voyage-code-3)
130
+ const VOYAGE_SUPPORTED_DIMS = [256, 512, 1024, 2048];
131
+ const VOYAGE_CODE_3_DEFAULT_DIM = 1024;
132
+ /**
133
+ * Voyage AI embedding provider.
134
+ * Uses the Voyage AI API for embeddings (recommended for code).
135
+ */
136
+ export class VoyageEmbeddingProvider {
137
+ config;
138
+ dimensions;
139
+ client = null;
140
+ queue = null;
141
+ dimWarningShown = false;
142
+ constructor(config) {
143
+ this.config = config;
144
+ this.dimensions = getModelDimensions(config.voyageModel, config.dimensions);
145
+ // Note: API key is validated lazily in getClient() to allow project opening without secrets
146
+ }
147
+ async initialize() {
148
+ // Voyage doesn't need initialization - client is created lazily on first use
149
+ }
150
+ getClient() {
151
+ if (!this.client) {
152
+ if (!this.config.voyageApiKey) {
153
+ throw new Error('VOYAGE_API_KEY is required for Voyage provider. Please add it in Settings.');
154
+ }
155
+ this.client = new VoyageAIClient({ apiKey: this.config.voyageApiKey });
156
+ }
157
+ return this.client;
158
+ }
159
+ getQueue() {
160
+ if (!this.queue) {
161
+ this.queue = new PQueue({ concurrency: this.config.voyageConcurrency });
162
+ }
163
+ return this.queue;
164
+ }
165
+ async embedBatch(texts, inputType = 'document') {
166
+ try {
167
+ const client = this.getClient();
168
+ // Determine output dimension (Voyage only supports specific values)
169
+ let outputDimension;
170
+ if (VOYAGE_SUPPORTED_DIMS.includes(this.dimensions)) {
171
+ outputDimension = this.dimensions;
172
+ }
173
+ else if (!this.dimWarningShown) {
174
+ this.dimWarningShown = true;
175
+ process.stderr.write(`Warning: dimensions=${this.dimensions} not supported by Voyage. ` +
176
+ `Using default ${VOYAGE_CODE_3_DEFAULT_DIM}. Supported: ${VOYAGE_SUPPORTED_DIMS.join(', ')}\n`);
177
+ }
178
+ const response = await client.embed({
179
+ input: texts,
180
+ model: this.config.voyageModel,
181
+ inputType: inputType,
182
+ truncation: true,
183
+ outputDimension,
184
+ });
185
+ if (!response.data) {
186
+ return createError('EMBEDDING_FAILED', 'Voyage API returned no data');
187
+ }
188
+ const sorted = [...response.data].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
189
+ const embeddings = sorted.map((item) => item.embedding ?? []);
190
+ return embeddings;
191
+ }
192
+ catch (error) {
193
+ if (error instanceof VoyageAIError) {
194
+ return createError('EMBEDDING_FAILED', `Voyage API error ${error.statusCode}: ${error.message}`);
195
+ }
196
+ return createError('EMBEDDING_FAILED', `Voyage API request failed: ${error.message}`, { error: error.message });
197
+ }
198
+ }
199
+ async getEmbedding(text, inputType = 'document') {
200
+ const result = await this.embedBatch([text], inputType);
201
+ if ('code' in result)
202
+ return result;
203
+ return result[0];
204
+ }
205
+ async getEmbeddingsBatch(texts, batchSize, inputType = 'document', onProgress) {
206
+ if (texts.length === 0)
207
+ return [];
208
+ const effectiveBatchSize = batchSize ?? this.config.voyageBatchSize;
209
+ const totalBatches = Math.ceil(texts.length / effectiveBatchSize);
210
+ const queue = this.getQueue();
211
+ // Create batches with their indices
212
+ const batches = [];
213
+ for (let i = 0; i < texts.length; i += effectiveBatchSize) {
214
+ batches.push({
215
+ index: batches.length,
216
+ texts: texts.slice(i, i + effectiveBatchSize),
217
+ });
218
+ }
219
+ // Track progress
220
+ let completed = 0;
221
+ const showProgress = texts.length > 50;
222
+ // Process batches concurrently with queue
223
+ const results = await Promise.all(batches.map((batch) => queue.add(async () => {
224
+ const result = await this.embedBatch(batch.texts, inputType);
225
+ completed++;
226
+ if (showProgress) {
227
+ process.stderr.write(`\r Voyage: ${completed}/${totalBatches} batches (${this.config.voyageConcurrency} concurrent)...`);
228
+ }
229
+ // Call progress callback if provided
230
+ if (onProgress) {
231
+ onProgress(completed, totalBatches);
232
+ }
233
+ return { index: batch.index, result };
234
+ })));
235
+ // Clear progress line
236
+ if (showProgress) {
237
+ process.stderr.write('\r \r');
238
+ }
239
+ // Check for errors and sort by original index
240
+ const sortedResults = results.sort((a, b) => a.index - b.index);
241
+ const allEmbeddings = [];
242
+ for (const item of sortedResults) {
243
+ if (!item || 'code' in item.result) {
244
+ return item?.result ?? createError('EMBEDDING_FAILED', 'Unknown error');
245
+ }
246
+ allEmbeddings.push(...item.result);
247
+ }
248
+ return allEmbeddings;
249
+ }
250
+ getModelName() {
251
+ return `voyage:${this.config.voyageModel}`;
252
+ }
253
+ getDimensions() {
254
+ return this.dimensions;
255
+ }
256
+ }
257
+ /**
258
+ * Ollama embedding provider.
259
+ * Uses local Ollama server for embeddings.
260
+ */
261
+ export class OllamaEmbeddingProvider {
262
+ config;
263
+ dimensions;
264
+ baseUrl;
265
+ constructor(config) {
266
+ this.config = config;
267
+ this.dimensions = getModelDimensions(config.ollamaModel, config.dimensions);
268
+ this.baseUrl = config.ollamaBaseUrl.replace(/\/$/, '');
269
+ }
270
+ async initialize() {
271
+ // Check server availability
272
+ try {
273
+ const response = await fetch(`${this.baseUrl}/api/tags`);
274
+ if (!response.ok) {
275
+ throw new Error(`Ollama server returned ${response.status}`);
276
+ }
277
+ }
278
+ catch (error) {
279
+ throw new Error(`Cannot connect to Ollama at ${this.baseUrl}. ` +
280
+ `Ensure Ollama is running: ${error.message}`);
281
+ }
282
+ }
283
+ async embedBatch(texts) {
284
+ try {
285
+ const startTime = Date.now();
286
+ const totalChars = texts.reduce((sum, t) => sum + t.length, 0);
287
+ const response = await fetch(`${this.baseUrl}/api/embed`, {
288
+ method: 'POST',
289
+ headers: { 'Content-Type': 'application/json' },
290
+ body: JSON.stringify({
291
+ model: this.config.ollamaModel,
292
+ input: texts,
293
+ keep_alive: '30m', // Keep model in GPU memory
294
+ }),
295
+ });
296
+ const fetchTime = Date.now() - startTime;
297
+ if (!response.ok) {
298
+ const errorText = await response.text();
299
+ return createError('EMBEDDING_FAILED', `Ollama API error ${response.status}: ${errorText}`);
300
+ }
301
+ const data = (await response.json());
302
+ if (!data.embeddings || !Array.isArray(data.embeddings)) {
303
+ return createError('EMBEDDING_FAILED', 'Ollama API returned no embeddings');
304
+ }
305
+ // Log timing info
306
+ const loadMs = data.load_duration ? Math.round(data.load_duration / 1_000_000) : 0;
307
+ const totalMs = data.total_duration ? Math.round(data.total_duration / 1_000_000) : 0;
308
+ process.stderr.write(`\n [ollama] ${texts.length} texts, ${totalChars} chars, ` +
309
+ `fetch=${fetchTime}ms, ollama_total=${totalMs}ms, load=${loadMs}ms\n`);
310
+ // Apply Matryoshka dimension truncation if needed
311
+ return data.embeddings.map((vec) => this.dimensions < vec.length ? vec.slice(0, this.dimensions) : vec);
312
+ }
313
+ catch (error) {
314
+ return createError('EMBEDDING_FAILED', `Ollama API request failed: ${error.message}`, { error: error.message });
315
+ }
316
+ }
317
+ async getEmbedding(text, inputType = 'document') {
318
+ const result = await this.embedBatch([text]);
319
+ if ('code' in result)
320
+ return result;
321
+ return result[0];
322
+ }
323
+ async getEmbeddingsBatch(texts, batchSize = 128, // Ollama handles large batches well with GPU
324
+ inputType = 'document', onProgress) {
325
+ if (texts.length === 0)
326
+ return [];
327
+ const allEmbeddings = [];
328
+ const totalBatches = Math.ceil(texts.length / batchSize);
329
+ const showProgress = texts.length > 50;
330
+ for (let i = 0; i < texts.length; i += batchSize) {
331
+ const batchNum = Math.floor(i / batchSize) + 1;
332
+ const batch = texts.slice(i, i + batchSize);
333
+ if (showProgress) {
334
+ process.stderr.write(`\r Ollama: ${batchNum}/${totalBatches} batches...`);
335
+ }
336
+ // Call progress callback if provided
337
+ if (onProgress) {
338
+ onProgress(batchNum, totalBatches);
339
+ }
340
+ const result = await this.embedBatch(batch);
341
+ if ('code' in result) {
342
+ if (showProgress) {
343
+ process.stderr.write('\r \r');
344
+ }
345
+ return result;
346
+ }
347
+ allEmbeddings.push(...result);
348
+ }
349
+ if (showProgress) {
350
+ process.stderr.write('\r \r');
351
+ }
352
+ return allEmbeddings;
353
+ }
354
+ getModelName() {
355
+ return `ollama:${this.config.ollamaModel}`;
356
+ }
357
+ getDimensions() {
358
+ return this.dimensions;
359
+ }
360
+ }
361
+ /**
362
+ * LocalAI embedding provider.
363
+ * Uses OpenAI-compatible `/v1/embeddings` endpoint.
364
+ */
365
+ export class LocalAIEmbeddingProvider {
366
+ config;
367
+ dimensions;
368
+ baseUrl;
369
+ constructor(config) {
370
+ this.config = config;
371
+ this.dimensions = getModelDimensions(config.localaiModel, config.dimensions);
372
+ this.baseUrl = config.localaiBaseUrl.replace(/\/$/, '');
373
+ }
374
+ async initialize() {
375
+ try {
376
+ const response = await fetch(`${this.baseUrl}/v1/models`);
377
+ if (!response.ok) {
378
+ throw new Error(`LocalAI server returned ${response.status}`);
379
+ }
380
+ }
381
+ catch (error) {
382
+ throw new Error(`Cannot connect to LocalAI at ${this.baseUrl}. ` +
383
+ `Ensure LocalAI is running: ${error.message}`);
384
+ }
385
+ }
386
+ async embedBatch(texts) {
387
+ try {
388
+ const headers = {
389
+ 'Content-Type': 'application/json',
390
+ };
391
+ if (this.config.localaiApiKey) {
392
+ headers.Authorization = `Bearer ${this.config.localaiApiKey}`;
393
+ }
394
+ const response = await fetch(`${this.baseUrl}/v1/embeddings`, {
395
+ method: 'POST',
396
+ headers,
397
+ body: JSON.stringify({
398
+ model: this.config.localaiModel,
399
+ input: texts,
400
+ }),
401
+ });
402
+ if (!response.ok) {
403
+ const errorText = await response.text();
404
+ return createError('EMBEDDING_FAILED', `LocalAI API error ${response.status}: ${errorText}`);
405
+ }
406
+ const data = (await response.json());
407
+ if (!data.data || !Array.isArray(data.data)) {
408
+ return createError('EMBEDDING_FAILED', 'LocalAI API returned no embeddings');
409
+ }
410
+ const sorted = [...data.data].sort((a, b) => (a.index ?? 0) - (b.index ?? 0));
411
+ return sorted.map((item) => {
412
+ const vector = item.embedding ?? [];
413
+ return this.dimensions < vector.length ? vector.slice(0, this.dimensions) : vector;
414
+ });
415
+ }
416
+ catch (error) {
417
+ return createError('EMBEDDING_FAILED', `LocalAI API request failed: ${error.message}`, { error: error.message });
418
+ }
419
+ }
420
+ async getEmbedding(text, inputType = 'document') {
421
+ const result = await this.embedBatch([text]);
422
+ if ('code' in result)
423
+ return result;
424
+ return result[0];
425
+ }
426
+ async getEmbeddingsBatch(texts, batchSize = 128, inputType = 'document', onProgress) {
427
+ if (texts.length === 0)
428
+ return [];
429
+ const allEmbeddings = [];
430
+ const totalBatches = Math.ceil(texts.length / batchSize);
431
+ const showProgress = texts.length > 50;
432
+ for (let i = 0; i < texts.length; i += batchSize) {
433
+ const batchNum = Math.floor(i / batchSize) + 1;
434
+ const batch = texts.slice(i, i + batchSize);
435
+ if (showProgress) {
436
+ process.stderr.write(`\r LocalAI: ${batchNum}/${totalBatches} batches...`);
437
+ }
438
+ if (onProgress) {
439
+ onProgress(batchNum, totalBatches);
440
+ }
441
+ const result = await this.embedBatch(batch);
442
+ if ('code' in result) {
443
+ if (showProgress) {
444
+ process.stderr.write('\r \r');
445
+ }
446
+ return result;
447
+ }
448
+ allEmbeddings.push(...result);
449
+ }
450
+ if (showProgress) {
451
+ process.stderr.write('\r \r');
452
+ }
453
+ return allEmbeddings;
454
+ }
455
+ getModelName() {
456
+ return `localai:${this.config.localaiModel}`;
457
+ }
458
+ getDimensions() {
459
+ return this.dimensions;
460
+ }
461
+ }
462
+ /**
463
+ * Factory function to create an embedding provider based on config.
464
+ */
465
+ export function createEmbeddingProvider(config) {
466
+ if (config.provider === 'voyage') {
467
+ return new VoyageEmbeddingProvider(config);
468
+ }
469
+ if (config.provider === 'ollama') {
470
+ return new OllamaEmbeddingProvider(config);
471
+ }
472
+ if (config.provider === 'localai') {
473
+ return new LocalAIEmbeddingProvider(config);
474
+ }
475
+ return new WasmEmbeddingProvider(config);
476
+ }
477
+ //# sourceMappingURL=embeddings.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embeddings.js","sourceRoot":"","sources":["../../src/indexer/embeddings.ts"],"names":[],"mappings":"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"}