vectra 0.12.2 → 0.14.0

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 (392) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +92 -100
  3. package/bin/vectra.js +3 -0
  4. package/lib/BrowserWebFetcher.d.ts +75 -0
  5. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  6. package/lib/BrowserWebFetcher.js +290 -0
  7. package/lib/BrowserWebFetcher.js.map +1 -0
  8. package/lib/FileFetcher.d.ts +5 -0
  9. package/lib/FileFetcher.d.ts.map +1 -0
  10. package/lib/FileFetcher.js +89 -0
  11. package/lib/FileFetcher.js.map +1 -0
  12. package/lib/FileFetcher.spec.d.ts +2 -0
  13. package/lib/FileFetcher.spec.d.ts.map +1 -0
  14. package/lib/FileFetcher.spec.js +244 -0
  15. package/lib/FileFetcher.spec.js.map +1 -0
  16. package/lib/FolderWatcher.d.ts +91 -0
  17. package/lib/FolderWatcher.d.ts.map +1 -0
  18. package/lib/FolderWatcher.js +304 -0
  19. package/lib/FolderWatcher.js.map +1 -0
  20. package/lib/FolderWatcher.spec.d.ts +2 -0
  21. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  22. package/lib/FolderWatcher.spec.js +308 -0
  23. package/lib/FolderWatcher.spec.js.map +1 -0
  24. package/lib/GPT3Tokenizer.d.ts +9 -0
  25. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  26. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  27. package/lib/GPT3Tokenizer.spec.js +45 -0
  28. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  29. package/lib/ItemSelector.d.ts +41 -0
  30. package/lib/ItemSelector.d.ts.map +1 -0
  31. package/lib/ItemSelector.js +179 -0
  32. package/lib/ItemSelector.js.map +1 -0
  33. package/lib/ItemSelector.spec.d.ts +2 -0
  34. package/lib/ItemSelector.spec.d.ts.map +1 -0
  35. package/lib/ItemSelector.spec.js +204 -0
  36. package/lib/ItemSelector.spec.js.map +1 -0
  37. package/lib/LocalDocument.d.ts +54 -0
  38. package/lib/LocalDocument.d.ts.map +1 -1
  39. package/lib/LocalDocument.js +116 -0
  40. package/lib/LocalDocument.js.map +1 -0
  41. package/lib/LocalDocument.spec.d.ts +2 -0
  42. package/lib/LocalDocument.spec.d.ts.map +1 -0
  43. package/lib/LocalDocument.spec.js +214 -0
  44. package/lib/LocalDocument.spec.js.map +1 -0
  45. package/lib/LocalDocumentIndex.d.ts +152 -0
  46. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  47. package/lib/LocalDocumentIndex.js +420 -0
  48. package/lib/LocalDocumentIndex.js.map +1 -0
  49. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  50. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  51. package/lib/LocalDocumentIndex.spec.js +494 -0
  52. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  53. package/lib/LocalDocumentResult.d.ts +66 -0
  54. package/lib/LocalDocumentResult.d.ts.map +1 -1
  55. package/lib/LocalDocumentResult.js +376 -0
  56. package/lib/LocalDocumentResult.js.map +1 -0
  57. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  58. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  59. package/lib/LocalDocumentResult.spec.js +373 -0
  60. package/lib/LocalDocumentResult.spec.js.map +1 -0
  61. package/lib/LocalEmbeddings.d.ts +59 -0
  62. package/lib/LocalEmbeddings.d.ts.map +1 -0
  63. package/lib/LocalEmbeddings.js +101 -0
  64. package/lib/LocalEmbeddings.js.map +1 -0
  65. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  66. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  67. package/lib/LocalEmbeddings.spec.js +155 -0
  68. package/lib/LocalEmbeddings.spec.js.map +1 -0
  69. package/lib/LocalIndex.d.ts +159 -0
  70. package/lib/LocalIndex.d.ts.map +1 -1
  71. package/lib/LocalIndex.js +519 -0
  72. package/lib/LocalIndex.js.map +1 -0
  73. package/lib/LocalIndex.spec.d.ts +2 -0
  74. package/lib/LocalIndex.spec.js +611 -9
  75. package/lib/LocalIndex.spec.js.map +1 -1
  76. package/lib/OpenAIEmbeddings.d.ts +124 -0
  77. package/lib/OpenAIEmbeddings.d.ts.map +1 -0
  78. package/lib/OpenAIEmbeddings.js +166 -0
  79. package/lib/OpenAIEmbeddings.js.map +1 -0
  80. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  81. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  82. package/lib/OpenAIEmbeddings.spec.js +298 -0
  83. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  84. package/lib/TextSplitter.d.ts +21 -0
  85. package/lib/TextSplitter.d.ts.map +1 -1
  86. package/lib/TextSplitter.js +500 -0
  87. package/lib/TextSplitter.js.map +1 -0
  88. package/lib/TextSplitter.spec.d.ts +2 -0
  89. package/lib/TextSplitter.spec.d.ts.map +1 -0
  90. package/lib/TextSplitter.spec.js +337 -0
  91. package/lib/TextSplitter.spec.js.map +1 -0
  92. package/lib/TransformersEmbeddings.d.ts +121 -0
  93. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  94. package/lib/TransformersEmbeddings.js +176 -0
  95. package/lib/TransformersEmbeddings.js.map +1 -0
  96. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  97. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  98. package/lib/TransformersEmbeddings.spec.js +198 -0
  99. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  100. package/lib/TransformersTokenizer.d.ts +33 -0
  101. package/lib/TransformersTokenizer.d.ts.map +1 -0
  102. package/lib/TransformersTokenizer.js +44 -0
  103. package/lib/TransformersTokenizer.js.map +1 -0
  104. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  105. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  106. package/lib/TransformersTokenizer.spec.js +112 -0
  107. package/lib/TransformersTokenizer.spec.js.map +1 -0
  108. package/lib/WebFetcher.d.ts +14 -0
  109. package/lib/WebFetcher.d.ts.map +1 -0
  110. package/lib/WebFetcher.js +238 -0
  111. package/lib/WebFetcher.js.map +1 -0
  112. package/lib/WebFetcher.spec.d.ts +2 -0
  113. package/lib/WebFetcher.spec.d.ts.map +1 -0
  114. package/lib/WebFetcher.spec.js +263 -0
  115. package/lib/WebFetcher.spec.js.map +1 -0
  116. package/lib/browser.d.ts +30 -0
  117. package/lib/browser.d.ts.map +1 -0
  118. package/lib/browser.js +52 -0
  119. package/lib/browser.js.map +1 -0
  120. package/lib/codecs/IndexCodec.d.ts +37 -0
  121. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  122. package/lib/codecs/IndexCodec.js +3 -0
  123. package/lib/codecs/IndexCodec.js.map +1 -0
  124. package/lib/codecs/JsonCodec.d.ts +19 -0
  125. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  126. package/lib/codecs/JsonCodec.js +35 -0
  127. package/lib/codecs/JsonCodec.js.map +1 -0
  128. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  129. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  130. package/lib/codecs/JsonCodec.spec.js +66 -0
  131. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  132. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  133. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  134. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  135. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  136. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  137. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  138. package/lib/codecs/ProtobufCodec.js +225 -0
  139. package/lib/codecs/ProtobufCodec.js.map +1 -0
  140. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  141. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  142. package/lib/codecs/ProtobufCodec.spec.js +155 -0
  143. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  144. package/lib/codecs/index.d.ts +5 -0
  145. package/lib/codecs/index.d.ts.map +1 -0
  146. package/lib/codecs/index.js +21 -0
  147. package/lib/codecs/index.js.map +1 -0
  148. package/lib/codecs/migrateIndex.d.ts +24 -0
  149. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  150. package/lib/codecs/migrateIndex.js +119 -0
  151. package/lib/codecs/migrateIndex.js.map +1 -0
  152. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  153. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  154. package/lib/codecs/migrateIndex.spec.js +151 -0
  155. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  156. package/lib/codecs/schemas/index.proto +34 -0
  157. package/lib/index.d.ts +20 -0
  158. package/lib/index.d.ts.map +1 -1
  159. package/lib/index.js +36 -0
  160. package/lib/index.js.map +1 -0
  161. package/lib/internals/Colorize.d.ts +14 -0
  162. package/lib/internals/Colorize.d.ts.map +1 -0
  163. package/lib/internals/Colorize.js +69 -0
  164. package/lib/internals/Colorize.js.map +1 -0
  165. package/lib/internals/index.d.ts +3 -0
  166. package/lib/internals/index.d.ts.map +1 -0
  167. package/lib/internals/index.js +19 -0
  168. package/lib/internals/index.js.map +1 -0
  169. package/lib/internals/types.d.ts +43 -0
  170. package/lib/internals/types.d.ts.map +1 -0
  171. package/lib/internals/types.js +3 -0
  172. package/lib/internals/types.js.map +1 -0
  173. package/lib/server/IndexManager.d.ts +78 -0
  174. package/lib/server/IndexManager.d.ts.map +1 -0
  175. package/lib/server/IndexManager.js +259 -0
  176. package/lib/server/IndexManager.js.map +1 -0
  177. package/lib/server/VectraServer.d.ts +40 -0
  178. package/lib/server/VectraServer.d.ts.map +1 -0
  179. package/lib/server/VectraServer.js +151 -0
  180. package/lib/server/VectraServer.js.map +1 -0
  181. package/lib/server/VectraServer.spec.d.ts +2 -0
  182. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  183. package/lib/server/VectraServer.spec.js +322 -0
  184. package/lib/server/VectraServer.spec.js.map +1 -0
  185. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  186. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  187. package/lib/server/handlers/documentHandlers.js +95 -0
  188. package/lib/server/handlers/documentHandlers.js.map +1 -0
  189. package/lib/server/handlers/helpers.d.ts +23 -0
  190. package/lib/server/handlers/helpers.d.ts.map +1 -0
  191. package/lib/server/handlers/helpers.js +138 -0
  192. package/lib/server/handlers/helpers.js.map +1 -0
  193. package/lib/server/handlers/index.d.ts +8 -0
  194. package/lib/server/handlers/index.d.ts.map +1 -0
  195. package/lib/server/handlers/index.js +22 -0
  196. package/lib/server/handlers/index.js.map +1 -0
  197. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  198. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  199. package/lib/server/handlers/indexHandlers.js +85 -0
  200. package/lib/server/handlers/indexHandlers.js.map +1 -0
  201. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  202. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  203. package/lib/server/handlers/itemHandlers.js +166 -0
  204. package/lib/server/handlers/itemHandlers.js.map +1 -0
  205. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  206. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  207. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  208. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  209. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  210. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  211. package/lib/server/handlers/queryHandlers.js +135 -0
  212. package/lib/server/handlers/queryHandlers.js.map +1 -0
  213. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  214. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  215. package/lib/server/handlers/statsHandlers.js +81 -0
  216. package/lib/server/handlers/statsHandlers.js.map +1 -0
  217. package/lib/server/index.d.ts +4 -0
  218. package/lib/server/index.d.ts.map +1 -0
  219. package/lib/server/index.js +23 -0
  220. package/lib/server/index.js.map +1 -0
  221. package/lib/storage/FileStorage.d.ts +92 -0
  222. package/lib/storage/FileStorage.d.ts.map +1 -0
  223. package/lib/storage/FileStorage.js +3 -0
  224. package/lib/storage/FileStorage.js.map +1 -0
  225. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  226. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  227. package/lib/storage/FileStorageUtilities.js +91 -0
  228. package/lib/storage/FileStorageUtilities.js.map +1 -0
  229. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  230. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  231. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  232. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  233. package/lib/storage/FileType.d.ts +29 -0
  234. package/lib/storage/FileType.d.ts.map +1 -0
  235. package/lib/storage/FileType.js +38 -0
  236. package/lib/storage/FileType.js.map +1 -0
  237. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  238. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  239. package/lib/storage/IndexedDBStorage.js +347 -0
  240. package/lib/storage/IndexedDBStorage.js.map +1 -0
  241. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  242. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  243. package/lib/storage/LocalFileStorage.browser.js +43 -0
  244. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  245. package/lib/storage/LocalFileStorage.d.ts +23 -0
  246. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  247. package/lib/storage/LocalFileStorage.js +152 -0
  248. package/lib/storage/LocalFileStorage.js.map +1 -0
  249. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  250. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  251. package/lib/storage/LocalFileStorage.spec.js +249 -0
  252. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  253. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  254. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  255. package/lib/storage/VirtualFileStorage.js +178 -0
  256. package/lib/storage/VirtualFileStorage.js.map +1 -0
  257. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  258. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  259. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  260. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  261. package/lib/storage/index.d.ts +6 -0
  262. package/lib/storage/index.d.ts.map +1 -0
  263. package/lib/storage/index.js +22 -0
  264. package/lib/storage/index.js.map +1 -0
  265. package/lib/templates/templates/csharp/README.md +48 -0
  266. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  267. package/lib/templates/templates/go/README.md +71 -0
  268. package/lib/templates/templates/go/vectra_client.go +322 -0
  269. package/lib/templates/templates/java/README.md +81 -0
  270. package/lib/templates/templates/java/VectraClient.java +232 -0
  271. package/lib/templates/templates/python/README.md +37 -0
  272. package/lib/templates/templates/python/vectra_client.py +279 -0
  273. package/lib/templates/templates/rust/Cargo.toml +14 -0
  274. package/lib/templates/templates/rust/README.md +39 -0
  275. package/lib/templates/templates/rust/build.rs +4 -0
  276. package/lib/templates/templates/rust/lib.rs +284 -0
  277. package/lib/templates/templates/typescript/README.md +96 -0
  278. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  279. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  280. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  281. package/lib/templates/typescript/VectraClient.js +328 -0
  282. package/lib/templates/typescript/VectraClient.js.map +1 -0
  283. package/lib/types.d.ts +153 -0
  284. package/lib/types.d.ts.map +1 -0
  285. package/lib/types.js +3 -0
  286. package/lib/types.js.map +1 -0
  287. package/lib/utils/index.d.ts +2 -0
  288. package/lib/utils/index.d.ts.map +1 -0
  289. package/lib/utils/index.js +18 -0
  290. package/lib/utils/index.js.map +1 -0
  291. package/lib/utils/pathUtils.d.ts +40 -0
  292. package/lib/utils/pathUtils.d.ts.map +1 -0
  293. package/lib/utils/pathUtils.js +98 -0
  294. package/lib/utils/pathUtils.js.map +1 -0
  295. package/lib/vectra-cli.d.ts +2 -0
  296. package/lib/vectra-cli.d.ts.map +1 -1
  297. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  298. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  299. package/lib/vectra-cli.generate.spec.js +112 -0
  300. package/lib/vectra-cli.generate.spec.js.map +1 -0
  301. package/lib/vectra-cli.js +760 -0
  302. package/lib/vectra-cli.js.map +1 -0
  303. package/lib/vectra-cli.spec.d.ts +1 -0
  304. package/lib/vectra-cli.spec.d.ts.map +1 -0
  305. package/lib/vectra-cli.spec.js +2 -0
  306. package/lib/vectra-cli.spec.js.map +1 -0
  307. package/package.json +91 -16
  308. package/proto/vectra_service.proto +276 -0
  309. package/src/BrowserWebFetcher.ts +345 -0
  310. package/src/FileFetcher.spec.ts +234 -0
  311. package/src/FileFetcher.ts +37 -25
  312. package/src/FolderWatcher.spec.ts +288 -0
  313. package/src/FolderWatcher.ts +304 -0
  314. package/src/GPT3Tokenizer.spec.ts +50 -0
  315. package/src/ItemSelector.spec.ts +252 -0
  316. package/src/ItemSelector.ts +163 -150
  317. package/src/LocalDocument.spec.ts +211 -0
  318. package/src/LocalDocument.ts +88 -94
  319. package/src/LocalDocumentIndex.spec.ts +481 -0
  320. package/src/LocalDocumentIndex.ts +39 -40
  321. package/src/LocalDocumentResult.spec.ts +373 -0
  322. package/src/LocalDocumentResult.ts +489 -319
  323. package/src/LocalEmbeddings.spec.ts +138 -0
  324. package/src/LocalEmbeddings.ts +120 -0
  325. package/src/LocalIndex.spec.ts +808 -66
  326. package/src/LocalIndex.ts +479 -429
  327. package/src/OpenAIEmbeddings.spec.ts +354 -0
  328. package/src/OpenAIEmbeddings.ts +26 -27
  329. package/src/TextSplitter.spec.ts +342 -0
  330. package/src/TextSplitter.ts +517 -532
  331. package/src/TransformersEmbeddings.spec.ts +188 -0
  332. package/src/TransformersEmbeddings.ts +232 -0
  333. package/src/TransformersTokenizer.spec.ts +143 -0
  334. package/src/TransformersTokenizer.ts +45 -0
  335. package/src/WebFetcher.spec.ts +288 -0
  336. package/src/WebFetcher.ts +184 -186
  337. package/src/browser.ts +69 -0
  338. package/src/codecs/IndexCodec.ts +40 -0
  339. package/src/codecs/JsonCodec.spec.ts +70 -0
  340. package/src/codecs/JsonCodec.ts +37 -0
  341. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  342. package/src/codecs/ProtobufCodec.spec.ts +166 -0
  343. package/src/codecs/ProtobufCodec.ts +193 -0
  344. package/src/codecs/index.ts +4 -0
  345. package/src/codecs/migrateIndex.spec.ts +176 -0
  346. package/src/codecs/migrateIndex.ts +125 -0
  347. package/src/codecs/schemas/index.proto +34 -0
  348. package/src/index.ts +9 -1
  349. package/src/internals/Colorize.ts +19 -16
  350. package/src/server/IndexManager.ts +243 -0
  351. package/src/server/VectraServer.spec.ts +303 -0
  352. package/src/server/VectraServer.ts +156 -0
  353. package/src/server/handlers/documentHandlers.ts +59 -0
  354. package/src/server/handlers/helpers.ts +93 -0
  355. package/src/server/handlers/index.ts +7 -0
  356. package/src/server/handlers/indexHandlers.ts +44 -0
  357. package/src/server/handlers/itemHandlers.ts +140 -0
  358. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  359. package/src/server/handlers/queryHandlers.ts +96 -0
  360. package/src/server/handlers/statsHandlers.ts +38 -0
  361. package/src/server/index.ts +3 -0
  362. package/src/storage/FileStorage.ts +105 -0
  363. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  364. package/src/storage/FileStorageUtilities.ts +77 -0
  365. package/src/storage/FileType.ts +61 -0
  366. package/src/storage/IndexedDBStorage.ts +365 -0
  367. package/src/storage/LocalFileStorage.browser.ts +52 -0
  368. package/src/storage/LocalFileStorage.spec.ts +292 -0
  369. package/src/storage/LocalFileStorage.ts +98 -0
  370. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  371. package/src/storage/VirtualFileStorage.ts +169 -0
  372. package/src/storage/index.ts +5 -0
  373. package/src/templates/csharp/README.md +48 -0
  374. package/src/templates/csharp/VectraClient.cs +234 -0
  375. package/src/templates/go/README.md +71 -0
  376. package/src/templates/go/vectra_client.go +322 -0
  377. package/src/templates/java/README.md +81 -0
  378. package/src/templates/java/VectraClient.java +232 -0
  379. package/src/templates/python/README.md +37 -0
  380. package/src/templates/python/vectra_client.py +279 -0
  381. package/src/templates/rust/Cargo.toml +14 -0
  382. package/src/templates/rust/README.md +39 -0
  383. package/src/templates/rust/build.rs +4 -0
  384. package/src/templates/rust/lib.rs +284 -0
  385. package/src/templates/typescript/README.md +96 -0
  386. package/src/templates/typescript/VectraClient.ts +374 -0
  387. package/src/types.ts +131 -123
  388. package/src/utils/index.ts +1 -0
  389. package/src/utils/pathUtils.ts +106 -0
  390. package/src/vectra-cli.generate.spec.ts +72 -0
  391. package/src/vectra-cli.spec.ts +0 -0
  392. package/src/vectra-cli.ts +687 -246
@@ -0,0 +1,125 @@
1
+ import { pathUtils as path } from '../utils/pathUtils';
2
+ import { FileStorage, LocalFileStorage } from '../storage';
3
+ import { IndexCodec } from './IndexCodec';
4
+ import { JsonCodec } from './JsonCodec';
5
+ import { ProtobufCodec } from './ProtobufCodec';
6
+
7
+ export type FormatName = 'json' | 'protobuf';
8
+
9
+ function codecForFormat(format: FormatName): IndexCodec {
10
+ return format === 'protobuf' ? new ProtobufCodec() : new JsonCodec();
11
+ }
12
+
13
+ /**
14
+ * Detects the codec in use for an existing index folder.
15
+ * @remarks
16
+ * Checks for `index.json` and `index.pb` files. If both exist, throws an
17
+ * error directing the user to re-run migration. If neither exists, throws.
18
+ * @param folderPath Path to the index folder.
19
+ * @param storage Storage backend to use.
20
+ * @returns The detected codec.
21
+ */
22
+ export async function detectCodec(folderPath: string, storage: FileStorage): Promise<IndexCodec> {
23
+ const hasJson = await storage.pathExists(path.join(folderPath, 'index.json'));
24
+ const hasPb = await storage.pathExists(path.join(folderPath, 'index.pb'));
25
+
26
+ if (hasJson && hasPb) {
27
+ throw new Error(
28
+ 'Both index.json and index.pb found — the index may be in a partially migrated state. ' +
29
+ 'Run `vectra migrate` or `migrateIndex()` to complete the migration.'
30
+ );
31
+ }
32
+ if (hasPb) return new ProtobufCodec();
33
+ if (hasJson) return new JsonCodec();
34
+ throw new Error('No index file found (expected index.json or index.pb).');
35
+ }
36
+
37
+ export interface MigrateOptions {
38
+ to: FormatName;
39
+ storage?: FileStorage;
40
+ }
41
+
42
+ /**
43
+ * Migrates an index folder from one serialization format to another.
44
+ * @param folderPath Path to the index folder.
45
+ * @param options Migration options.
46
+ */
47
+ export async function migrateIndex(folderPath: string, options: MigrateOptions): Promise<void> {
48
+ const storage = options.storage || new LocalFileStorage();
49
+ const targetCodec = codecForFormat(options.to);
50
+
51
+ // Detect current format
52
+ const sourceCodec = await detectCodec(folderPath, storage);
53
+
54
+ if (sourceCodec.extension === targetCodec.extension) {
55
+ return; // Already in target format
56
+ }
57
+
58
+ // --- Migrate index file ---
59
+ const sourceIndexPath = path.join(folderPath, `index${sourceCodec.extension}`);
60
+ const targetIndexPath = path.join(folderPath, `index${targetCodec.extension}`);
61
+ const indexBuffer = await storage.readFile(sourceIndexPath);
62
+ const indexData = sourceCodec.deserializeIndex(indexBuffer);
63
+
64
+ // Rewrite external metadata file references
65
+ for (const item of indexData.items) {
66
+ if (item.metadataFile && item.metadataFile.endsWith(sourceCodec.extension)) {
67
+ const baseName = item.metadataFile.slice(0, -sourceCodec.extension.length);
68
+ const oldMetaPath = path.join(folderPath, item.metadataFile);
69
+ const newMetaFile = `${baseName}${targetCodec.extension}`;
70
+ const newMetaPath = path.join(folderPath, newMetaFile);
71
+
72
+ // Read, re-serialize, write
73
+ const metaBuf = await storage.readFile(oldMetaPath);
74
+ const metadata = sourceCodec.deserializeMetadata(metaBuf);
75
+ await storage.upsertFile(newMetaPath, targetCodec.serializeMetadata(metadata));
76
+
77
+ // Update reference
78
+ item.metadataFile = newMetaFile;
79
+ }
80
+ }
81
+
82
+ // Write new index
83
+ await storage.upsertFile(targetIndexPath, targetCodec.serializeIndex(indexData));
84
+
85
+ // --- Migrate catalog if present ---
86
+ const sourceCatalogPath = path.join(folderPath, `catalog${sourceCodec.extension}`);
87
+ const targetCatalogPath = path.join(folderPath, `catalog${targetCodec.extension}`);
88
+ if (await storage.pathExists(sourceCatalogPath)) {
89
+ const catalogBuffer = await storage.readFile(sourceCatalogPath);
90
+ const catalog = sourceCodec.deserializeCatalog(catalogBuffer);
91
+
92
+ // Migrate per-document metadata files
93
+ for (const docId of Object.values(catalog.idToUri ? catalog.idToUri : {})) {
94
+ // Document metadata uses documentId as filename base
95
+ }
96
+ // Actually the document IDs are the keys of idToUri
97
+ for (const docId of Object.keys(catalog.idToUri)) {
98
+ const oldDocMetaPath = path.join(folderPath, `${docId}${sourceCodec.extension}`);
99
+ if (await storage.pathExists(oldDocMetaPath)) {
100
+ const docMetaBuf = await storage.readFile(oldDocMetaPath);
101
+ const docMeta = sourceCodec.deserializeMetadata(docMetaBuf);
102
+ const newDocMetaPath = path.join(folderPath, `${docId}${targetCodec.extension}`);
103
+ await storage.upsertFile(newDocMetaPath, targetCodec.serializeMetadata(docMeta));
104
+ await storage.deleteFile(oldDocMetaPath);
105
+ }
106
+ }
107
+
108
+ await storage.upsertFile(targetCatalogPath, targetCodec.serializeCatalog(catalog));
109
+ await storage.deleteFile(sourceCatalogPath);
110
+ }
111
+
112
+ // --- Clean up old files (after new files are safely written) ---
113
+ // Delete old external metadata files
114
+ for (const item of sourceCodec.deserializeIndex(indexBuffer).items) {
115
+ if (item.metadataFile) {
116
+ const oldMetaPath = path.join(folderPath, item.metadataFile);
117
+ if (await storage.pathExists(oldMetaPath)) {
118
+ await storage.deleteFile(oldMetaPath);
119
+ }
120
+ }
121
+ }
122
+
123
+ // Delete old index file last
124
+ await storage.deleteFile(sourceIndexPath);
125
+ }
@@ -0,0 +1,34 @@
1
+ syntax = "proto3";
2
+
3
+ message IndexData {
4
+ uint32 version = 1;
5
+ MetadataConfig metadata_config = 2;
6
+ repeated IndexItem items = 3;
7
+ }
8
+
9
+ message MetadataConfig {
10
+ repeated string indexed = 1;
11
+ }
12
+
13
+ message IndexItem {
14
+ string id = 1;
15
+ map<string, MetadataValue> metadata = 2;
16
+ repeated float vector = 3 [packed = true];
17
+ double norm = 4;
18
+ optional string metadata_file = 5;
19
+ }
20
+
21
+ message MetadataValue {
22
+ oneof value {
23
+ string string_value = 1;
24
+ double number_value = 2;
25
+ bool bool_value = 3;
26
+ }
27
+ }
28
+
29
+ message DocumentCatalog {
30
+ uint32 version = 1;
31
+ uint32 count = 2;
32
+ map<string, string> uri_to_id = 3;
33
+ map<string, string> id_to_uri = 4;
34
+ }
package/src/index.ts CHANGED
@@ -1,11 +1,19 @@
1
+ export * from './codecs';
2
+ export * from './storage';
1
3
  export * from './FileFetcher';
4
+ export * from './FolderWatcher';
2
5
  export * from './GPT3Tokenizer';
3
6
  export * from './ItemSelector';
7
+ export * from './LocalEmbeddings';
4
8
  export * from './LocalIndex';
5
9
  export * from './LocalDocument';
6
10
  export * from './LocalDocumentIndex';
7
11
  export * from './LocalDocumentResult';
8
- export * from './OpenAIEmbeddings';
9
12
  export * from './TextSplitter';
13
+ export * from './OpenAIEmbeddings';
14
+ export * from './TransformersEmbeddings';
15
+ export * from './TransformersTokenizer';
10
16
  export * from './types';
11
17
  export * from './WebFetcher';
18
+ export * from './server';
19
+ export * from './utils/pathUtils';
@@ -1,4 +1,5 @@
1
- const colorizer = require('json-colorizer');
1
+ const colorizerModule = require('json-colorizer');
2
+ const colorizeFn = colorizerModule?.default ?? colorizerModule;
2
3
 
3
4
  /**
4
5
  * @private
@@ -20,20 +21,23 @@ export class Colorize {
20
21
  if (typeof output === 'string') {
21
22
  return isBm25 ? `\x1b[34m${quote}${output}${quote}\x1b[0m` : `\x1b[32m${quote}${output}${quote}\x1b[0m`;
22
23
  } else if (typeof output === 'object' && output !== null) {
23
- return colorizer(output, {
24
- pretty: true,
25
- colors: {
26
- BRACE: 'white',
27
- BRACKET: 'white',
28
- COLON: 'white',
29
- COMMA: 'white',
30
- STRING_KEY: 'white',
31
- STRING_LITERAL: 'green',
32
- NUMBER_LITERAL: 'blue',
33
- BOOLEAN_LITERAL: 'blue',
34
- NULL_LITERAL: 'blue'
35
- }
36
- });
24
+ if (typeof colorizeFn === 'function') {
25
+ return colorizeFn(output, {
26
+ pretty: true,
27
+ colors: {
28
+ BRACE: 'white',
29
+ BRACKET: 'white',
30
+ COLON: 'white',
31
+ COMMA: 'white',
32
+ STRING_KEY: 'white',
33
+ STRING_LITERAL: 'green',
34
+ NUMBER_LITERAL: 'blue',
35
+ BOOLEAN_LITERAL: 'blue',
36
+ NULL_LITERAL: 'blue'
37
+ }
38
+ });
39
+ }
40
+ return JSON.stringify(output, null, 2);
37
41
  } else if (typeof output == 'number') {
38
42
  return `\x1b[34m${output}${units}\x1b[0m`;
39
43
  } else {
@@ -59,6 +63,5 @@ export class Colorize {
59
63
 
60
64
  public static warning(warning: string): string {
61
65
  return `\x1b[33m${warning}\x1b[0m`;
62
-
63
66
  }
64
67
  }
@@ -0,0 +1,243 @@
1
+ import * as path from 'path';
2
+ import * as fs from 'fs';
3
+ import { LocalIndex, CreateIndexConfig } from '../LocalIndex';
4
+ import { LocalDocumentIndex, LocalDocumentIndexConfig } from '../LocalDocumentIndex';
5
+ import { LocalFileStorage } from '../storage/LocalFileStorage';
6
+ import { FileStorage } from '../storage';
7
+ import { EmbeddingsModel, MetadataTypes } from '../types';
8
+ import { detectCodec, IndexCodec, JsonCodec, ProtobufCodec } from '../codecs';
9
+
10
+ export interface ManagedIndex {
11
+ name: string;
12
+ index: LocalIndex | LocalDocumentIndex;
13
+ isDocumentIndex: boolean;
14
+ format: string;
15
+ }
16
+
17
+ export interface IndexManagerConfig {
18
+ /** Single index path (mutually exclusive with rootDir). */
19
+ indexPath?: string;
20
+ /** Root directory containing multiple index subdirectories. */
21
+ rootDir?: string;
22
+ /** Embeddings model for server-side embedding computation. */
23
+ embeddings?: EmbeddingsModel;
24
+ /** Polling interval in ms for auto-detecting new indexes (default: 3000). */
25
+ scanInterval?: number;
26
+ }
27
+
28
+ /**
29
+ * Manages loaded indexes for the gRPC server.
30
+ * Supports single-index and multi-index modes with auto-detection of new indexes.
31
+ */
32
+ export class IndexManager {
33
+ private readonly _config: IndexManagerConfig;
34
+ private readonly _indexes: Map<string, ManagedIndex> = new Map();
35
+ private _scanTimer?: ReturnType<typeof setInterval>;
36
+ private _singleMode: boolean;
37
+
38
+ constructor(config: IndexManagerConfig) {
39
+ this._config = config;
40
+ this._singleMode = !!config.indexPath;
41
+ }
42
+
43
+ /** Returns all currently loaded indexes. */
44
+ public get indexes(): Map<string, ManagedIndex> {
45
+ return this._indexes;
46
+ }
47
+
48
+ /** Returns true if running in single-index mode. */
49
+ public get isSingleMode(): boolean {
50
+ return this._singleMode;
51
+ }
52
+
53
+ /**
54
+ * Initializes the index manager: loads existing indexes and starts auto-detection.
55
+ */
56
+ public async initialize(): Promise<void> {
57
+ if (this._singleMode && this._config.indexPath) {
58
+ await this.loadSingleIndex(this._config.indexPath);
59
+ } else if (this._config.rootDir) {
60
+ await this.scanRootDir();
61
+ // Start periodic scanning for new indexes
62
+ const interval = this._config.scanInterval ?? 3000;
63
+ this._scanTimer = setInterval(() => {
64
+ this.scanRootDir().catch(() => {/* ignore scan errors */});
65
+ }, interval);
66
+ }
67
+ }
68
+
69
+ /**
70
+ * Shuts down the index manager: stops scanning and flushes all indexes.
71
+ */
72
+ public async shutdown(): Promise<void> {
73
+ if (this._scanTimer) {
74
+ clearInterval(this._scanTimer);
75
+ this._scanTimer = undefined;
76
+ }
77
+ // No special flush needed — LocalIndex writes on endUpdate()
78
+ this._indexes.clear();
79
+ }
80
+
81
+ /**
82
+ * Gets a managed index by name.
83
+ * In single-index mode, any name (or empty string) returns the single index.
84
+ */
85
+ public getIndex(name: string): ManagedIndex | undefined {
86
+ if (this._singleMode) {
87
+ // Return the single loaded index regardless of the name provided
88
+ const entries = Array.from(this._indexes.values());
89
+ return entries[0];
90
+ }
91
+ return this._indexes.get(name);
92
+ }
93
+
94
+ /**
95
+ * Gets a managed index, throwing NOT_FOUND-appropriate error if missing.
96
+ */
97
+ public requireIndex(name: string): ManagedIndex {
98
+ const managed = this.getIndex(name);
99
+ if (!managed) {
100
+ throw new Error(`Index not found: ${name}`);
101
+ }
102
+ return managed;
103
+ }
104
+
105
+ /**
106
+ * Gets a managed document index, throwing if missing or not a document index.
107
+ */
108
+ public requireDocumentIndex(name: string): { managed: ManagedIndex; docIndex: LocalDocumentIndex } {
109
+ const managed = this.requireIndex(name);
110
+ if (!managed.isDocumentIndex) {
111
+ throw new Error(`Index "${name}" is not a document index`);
112
+ }
113
+ return { managed, docIndex: managed.index as LocalDocumentIndex };
114
+ }
115
+
116
+ /**
117
+ * Creates a new index on disk and loads it.
118
+ */
119
+ public async createIndex(
120
+ name: string,
121
+ format: string,
122
+ isDocumentIndex: boolean,
123
+ documentConfig?: { version?: number; chunkSize?: number; chunkOverlap?: number }
124
+ ): Promise<ManagedIndex> {
125
+ if (this._indexes.has(name)) {
126
+ throw new Error(`Index already exists: ${name}`);
127
+ }
128
+
129
+ const rootDir = this._config.rootDir;
130
+ if (!rootDir && !this._singleMode) {
131
+ throw new Error('Cannot create index: no root directory configured');
132
+ }
133
+
134
+ const folderPath = rootDir ? path.join(rootDir, name) : name;
135
+ const storage = new LocalFileStorage();
136
+ const codec = format === 'protobuf' ? new ProtobufCodec() : new JsonCodec();
137
+
138
+ let index: LocalIndex | LocalDocumentIndex;
139
+ if (isDocumentIndex) {
140
+ const config: LocalDocumentIndexConfig = {
141
+ folderPath,
142
+ storage,
143
+ codec,
144
+ embeddings: this._config.embeddings,
145
+ chunkingConfig: {
146
+ chunkSize: documentConfig?.chunkSize || 512,
147
+ chunkOverlap: documentConfig?.chunkOverlap || 0,
148
+ },
149
+ };
150
+ index = new LocalDocumentIndex(config);
151
+ } else {
152
+ index = new LocalIndex(folderPath, undefined, storage, codec);
153
+ }
154
+
155
+ const createConfig: CreateIndexConfig = {
156
+ version: documentConfig?.version || 1,
157
+ deleteIfExists: false,
158
+ };
159
+ await index.createIndex(createConfig);
160
+
161
+ const managed: ManagedIndex = {
162
+ name,
163
+ index,
164
+ isDocumentIndex,
165
+ format: format || 'json',
166
+ };
167
+ this._indexes.set(name, managed);
168
+ return managed;
169
+ }
170
+
171
+ /**
172
+ * Deletes an index from disk and unloads it.
173
+ */
174
+ public async deleteIndex(name: string): Promise<void> {
175
+ const managed = this.requireIndex(name);
176
+ await managed.index.deleteIndex();
177
+ this._indexes.delete(name);
178
+ }
179
+
180
+ /**
181
+ * Lists all loaded indexes.
182
+ */
183
+ public listIndexes(): ManagedIndex[] {
184
+ return Array.from(this._indexes.values());
185
+ }
186
+
187
+ private async loadSingleIndex(indexPath: string): Promise<void> {
188
+ const name = path.basename(indexPath);
189
+ await this.loadIndex(name, indexPath);
190
+ }
191
+
192
+ private async scanRootDir(): Promise<void> {
193
+ const rootDir = this._config.rootDir!;
194
+ if (!fs.existsSync(rootDir)) return;
195
+
196
+ const entries = fs.readdirSync(rootDir, { withFileTypes: true });
197
+ for (const entry of entries) {
198
+ if (!entry.isDirectory()) continue;
199
+ if (entry.name.startsWith('.')) continue;
200
+ if (this._indexes.has(entry.name)) continue;
201
+
202
+ const folderPath = path.join(rootDir, entry.name);
203
+ try {
204
+ await this.loadIndex(entry.name, folderPath);
205
+ } catch {
206
+ // Skip directories that aren't valid indexes
207
+ }
208
+ }
209
+ }
210
+
211
+ private async loadIndex(name: string, folderPath: string): Promise<void> {
212
+ const storage = new LocalFileStorage();
213
+
214
+ // Detect codec — throws if no index file found
215
+ const codec = await detectCodec(folderPath, storage);
216
+ const format = codec.extension === '.pb' ? 'protobuf' : 'json';
217
+
218
+ // Detect if it's a document index (has catalog file)
219
+ const hasCatalogJson = await storage.pathExists(path.join(folderPath, 'catalog.json'));
220
+ const hasCatalogPb = await storage.pathExists(path.join(folderPath, 'catalog.pb'));
221
+ const isDocumentIndex = hasCatalogJson || hasCatalogPb;
222
+
223
+ let index: LocalIndex | LocalDocumentIndex;
224
+ if (isDocumentIndex) {
225
+ index = new LocalDocumentIndex({
226
+ folderPath,
227
+ storage,
228
+ codec,
229
+ embeddings: this._config.embeddings,
230
+ });
231
+ } else {
232
+ index = new LocalIndex(folderPath, undefined, storage, codec);
233
+ }
234
+
235
+ const managed: ManagedIndex = {
236
+ name,
237
+ index,
238
+ isDocumentIndex,
239
+ format,
240
+ };
241
+ this._indexes.set(name, managed);
242
+ }
243
+ }