vectra 0.12.3 → 0.15.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 (430) hide show
  1. package/README.md +68 -75
  2. package/lib/BrowserWebFetcher.d.ts +75 -0
  3. package/lib/BrowserWebFetcher.d.ts.map +1 -0
  4. package/lib/BrowserWebFetcher.js +290 -0
  5. package/lib/BrowserWebFetcher.js.map +1 -0
  6. package/lib/FileFetcher.d.ts.map +1 -1
  7. package/lib/FileFetcher.js +25 -15
  8. package/lib/FileFetcher.js.map +1 -1
  9. package/lib/FileFetcher.spec.d.ts +2 -0
  10. package/lib/FileFetcher.spec.d.ts.map +1 -0
  11. package/lib/FileFetcher.spec.js +244 -0
  12. package/lib/FileFetcher.spec.js.map +1 -0
  13. package/lib/FolderWatcher.d.ts +111 -0
  14. package/lib/FolderWatcher.d.ts.map +1 -0
  15. package/lib/FolderWatcher.js +431 -0
  16. package/lib/FolderWatcher.js.map +1 -0
  17. package/lib/FolderWatcher.spec.d.ts +2 -0
  18. package/lib/FolderWatcher.spec.d.ts.map +1 -0
  19. package/lib/FolderWatcher.spec.js +542 -0
  20. package/lib/FolderWatcher.spec.js.map +1 -0
  21. package/lib/GPT3Tokenizer.spec.d.ts +2 -0
  22. package/lib/GPT3Tokenizer.spec.d.ts.map +1 -0
  23. package/lib/GPT3Tokenizer.spec.js +45 -0
  24. package/lib/GPT3Tokenizer.spec.js.map +1 -0
  25. package/lib/ItemSelector.d.ts.map +1 -1
  26. package/lib/ItemSelector.js +19 -8
  27. package/lib/ItemSelector.js.map +1 -1
  28. package/lib/ItemSelector.spec.d.ts +2 -0
  29. package/lib/ItemSelector.spec.d.ts.map +1 -0
  30. package/lib/ItemSelector.spec.js +204 -0
  31. package/lib/ItemSelector.spec.js.map +1 -0
  32. package/lib/LocalDocument.d.ts +1 -1
  33. package/lib/LocalDocument.d.ts.map +1 -1
  34. package/lib/LocalDocument.js +5 -45
  35. package/lib/LocalDocument.js.map +1 -1
  36. package/lib/LocalDocument.spec.d.ts +2 -0
  37. package/lib/LocalDocument.spec.d.ts.map +1 -0
  38. package/lib/LocalDocument.spec.js +214 -0
  39. package/lib/LocalDocument.spec.js.map +1 -0
  40. package/lib/LocalDocumentIndex.d.ts +29 -3
  41. package/lib/LocalDocumentIndex.d.ts.map +1 -1
  42. package/lib/LocalDocumentIndex.js +42 -60
  43. package/lib/LocalDocumentIndex.js.map +1 -1
  44. package/lib/LocalDocumentIndex.spec.d.ts +2 -0
  45. package/lib/LocalDocumentIndex.spec.d.ts.map +1 -0
  46. package/lib/LocalDocumentIndex.spec.js +612 -0
  47. package/lib/LocalDocumentIndex.spec.js.map +1 -0
  48. package/lib/LocalDocumentResult.d.ts +32 -11
  49. package/lib/LocalDocumentResult.d.ts.map +1 -1
  50. package/lib/LocalDocumentResult.js +305 -257
  51. package/lib/LocalDocumentResult.js.map +1 -1
  52. package/lib/LocalDocumentResult.spec.d.ts +2 -0
  53. package/lib/LocalDocumentResult.spec.d.ts.map +1 -0
  54. package/lib/LocalDocumentResult.spec.js +373 -0
  55. package/lib/LocalDocumentResult.spec.js.map +1 -0
  56. package/lib/LocalEmbeddings.d.ts +59 -0
  57. package/lib/LocalEmbeddings.d.ts.map +1 -0
  58. package/lib/LocalEmbeddings.js +101 -0
  59. package/lib/LocalEmbeddings.js.map +1 -0
  60. package/lib/LocalEmbeddings.spec.d.ts +2 -0
  61. package/lib/LocalEmbeddings.spec.d.ts.map +1 -0
  62. package/lib/LocalEmbeddings.spec.js +155 -0
  63. package/lib/LocalEmbeddings.spec.js.map +1 -0
  64. package/lib/LocalIndex.d.ts +37 -18
  65. package/lib/LocalIndex.d.ts.map +1 -1
  66. package/lib/LocalIndex.js +206 -131
  67. package/lib/LocalIndex.js.map +1 -1
  68. package/lib/LocalIndex.spec.js +519 -43
  69. package/lib/LocalIndex.spec.js.map +1 -1
  70. package/lib/OpenAIEmbeddings.d.ts +4 -6
  71. package/lib/OpenAIEmbeddings.d.ts.map +1 -1
  72. package/lib/OpenAIEmbeddings.js +16 -24
  73. package/lib/OpenAIEmbeddings.js.map +1 -1
  74. package/lib/OpenAIEmbeddings.spec.d.ts +2 -0
  75. package/lib/OpenAIEmbeddings.spec.d.ts.map +1 -0
  76. package/lib/OpenAIEmbeddings.spec.js +298 -0
  77. package/lib/OpenAIEmbeddings.spec.js.map +1 -0
  78. package/lib/TextSplitter.d.ts +2 -0
  79. package/lib/TextSplitter.d.ts.map +1 -1
  80. package/lib/TextSplitter.js +154 -111
  81. package/lib/TextSplitter.js.map +1 -1
  82. package/lib/TextSplitter.spec.js +289 -61
  83. package/lib/TextSplitter.spec.js.map +1 -1
  84. package/lib/TransformersEmbeddings.d.ts +121 -0
  85. package/lib/TransformersEmbeddings.d.ts.map +1 -0
  86. package/lib/TransformersEmbeddings.js +139 -0
  87. package/lib/TransformersEmbeddings.js.map +1 -0
  88. package/lib/TransformersEmbeddings.spec.d.ts +2 -0
  89. package/lib/TransformersEmbeddings.spec.d.ts.map +1 -0
  90. package/lib/TransformersEmbeddings.spec.js +202 -0
  91. package/lib/TransformersEmbeddings.spec.js.map +1 -0
  92. package/lib/TransformersTokenizer.d.ts +33 -0
  93. package/lib/TransformersTokenizer.d.ts.map +1 -0
  94. package/lib/TransformersTokenizer.js +44 -0
  95. package/lib/TransformersTokenizer.js.map +1 -0
  96. package/lib/TransformersTokenizer.spec.d.ts +2 -0
  97. package/lib/TransformersTokenizer.spec.d.ts.map +1 -0
  98. package/lib/TransformersTokenizer.spec.js +112 -0
  99. package/lib/TransformersTokenizer.spec.js.map +1 -0
  100. package/lib/WebFetcher.d.ts +1 -2
  101. package/lib/WebFetcher.d.ts.map +1 -1
  102. package/lib/WebFetcher.js +58 -54
  103. package/lib/WebFetcher.js.map +1 -1
  104. package/lib/WebFetcher.spec.d.ts +2 -0
  105. package/lib/WebFetcher.spec.d.ts.map +1 -0
  106. package/lib/WebFetcher.spec.js +263 -0
  107. package/lib/WebFetcher.spec.js.map +1 -0
  108. package/lib/browser.d.ts +30 -0
  109. package/lib/browser.d.ts.map +1 -0
  110. package/lib/browser.js +52 -0
  111. package/lib/browser.js.map +1 -0
  112. package/lib/codecs/IndexCodec.d.ts +47 -0
  113. package/lib/codecs/IndexCodec.d.ts.map +1 -0
  114. package/lib/codecs/IndexCodec.js +3 -0
  115. package/lib/codecs/IndexCodec.js.map +1 -0
  116. package/lib/codecs/JsonCodec.d.ts +19 -0
  117. package/lib/codecs/JsonCodec.d.ts.map +1 -0
  118. package/lib/codecs/JsonCodec.js +35 -0
  119. package/lib/codecs/JsonCodec.js.map +1 -0
  120. package/lib/codecs/JsonCodec.spec.d.ts +2 -0
  121. package/lib/codecs/JsonCodec.spec.d.ts.map +1 -0
  122. package/lib/codecs/JsonCodec.spec.js +87 -0
  123. package/lib/codecs/JsonCodec.spec.js.map +1 -0
  124. package/lib/codecs/LocalIndex.protobuf.spec.d.ts +2 -0
  125. package/lib/codecs/LocalIndex.protobuf.spec.d.ts.map +1 -0
  126. package/lib/codecs/LocalIndex.protobuf.spec.js +108 -0
  127. package/lib/codecs/LocalIndex.protobuf.spec.js.map +1 -0
  128. package/lib/codecs/ProtobufCodec.d.ts +20 -0
  129. package/lib/codecs/ProtobufCodec.d.ts.map +1 -0
  130. package/lib/codecs/ProtobufCodec.js +232 -0
  131. package/lib/codecs/ProtobufCodec.js.map +1 -0
  132. package/lib/codecs/ProtobufCodec.spec.d.ts +2 -0
  133. package/lib/codecs/ProtobufCodec.spec.d.ts.map +1 -0
  134. package/lib/codecs/ProtobufCodec.spec.js +176 -0
  135. package/lib/codecs/ProtobufCodec.spec.js.map +1 -0
  136. package/lib/codecs/index.d.ts +5 -0
  137. package/lib/codecs/index.d.ts.map +1 -0
  138. package/lib/codecs/index.js +21 -0
  139. package/lib/codecs/index.js.map +1 -0
  140. package/lib/codecs/migrateIndex.d.ts +24 -0
  141. package/lib/codecs/migrateIndex.d.ts.map +1 -0
  142. package/lib/codecs/migrateIndex.js +119 -0
  143. package/lib/codecs/migrateIndex.js.map +1 -0
  144. package/lib/codecs/migrateIndex.spec.d.ts +2 -0
  145. package/lib/codecs/migrateIndex.spec.d.ts.map +1 -0
  146. package/lib/codecs/migrateIndex.spec.js +151 -0
  147. package/lib/codecs/migrateIndex.spec.js.map +1 -0
  148. package/lib/codecs/schemas/index.proto +35 -0
  149. package/lib/index.d.ts +9 -1
  150. package/lib/index.d.ts.map +1 -1
  151. package/lib/index.js +9 -1
  152. package/lib/index.js.map +1 -1
  153. package/lib/internals/Colorize.d.ts.map +1 -1
  154. package/lib/internals/Colorize.js +20 -15
  155. package/lib/internals/Colorize.js.map +1 -1
  156. package/lib/internals/contentHash.d.ts +14 -0
  157. package/lib/internals/contentHash.d.ts.map +1 -0
  158. package/lib/internals/contentHash.js +39 -0
  159. package/lib/internals/contentHash.js.map +1 -0
  160. package/lib/internals/contentHash.spec.d.ts +2 -0
  161. package/lib/internals/contentHash.spec.d.ts.map +1 -0
  162. package/lib/internals/contentHash.spec.js +53 -0
  163. package/lib/internals/contentHash.spec.js.map +1 -0
  164. package/lib/internals/transformersLoader.d.ts +25 -0
  165. package/lib/internals/transformersLoader.d.ts.map +1 -0
  166. package/lib/internals/transformersLoader.js +86 -0
  167. package/lib/internals/transformersLoader.js.map +1 -0
  168. package/lib/server/IndexManager.d.ts +78 -0
  169. package/lib/server/IndexManager.d.ts.map +1 -0
  170. package/lib/server/IndexManager.js +259 -0
  171. package/lib/server/IndexManager.js.map +1 -0
  172. package/lib/server/IndexManager.spec.d.ts +2 -0
  173. package/lib/server/IndexManager.spec.d.ts.map +1 -0
  174. package/lib/server/IndexManager.spec.js +303 -0
  175. package/lib/server/IndexManager.spec.js.map +1 -0
  176. package/lib/server/VectraServer.d.ts +40 -0
  177. package/lib/server/VectraServer.d.ts.map +1 -0
  178. package/lib/server/VectraServer.js +151 -0
  179. package/lib/server/VectraServer.js.map +1 -0
  180. package/lib/server/VectraServer.spec.d.ts +2 -0
  181. package/lib/server/VectraServer.spec.d.ts.map +1 -0
  182. package/lib/server/VectraServer.spec.js +420 -0
  183. package/lib/server/VectraServer.spec.js.map +1 -0
  184. package/lib/server/handlers/documentHandlers.d.ts +15 -0
  185. package/lib/server/handlers/documentHandlers.d.ts.map +1 -0
  186. package/lib/server/handlers/documentHandlers.js +95 -0
  187. package/lib/server/handlers/documentHandlers.js.map +1 -0
  188. package/lib/server/handlers/documentHandlers.spec.d.ts +2 -0
  189. package/lib/server/handlers/documentHandlers.spec.d.ts.map +1 -0
  190. package/lib/server/handlers/documentHandlers.spec.js +227 -0
  191. package/lib/server/handlers/documentHandlers.spec.js.map +1 -0
  192. package/lib/server/handlers/helpers.d.ts +23 -0
  193. package/lib/server/handlers/helpers.d.ts.map +1 -0
  194. package/lib/server/handlers/helpers.js +138 -0
  195. package/lib/server/handlers/helpers.js.map +1 -0
  196. package/lib/server/handlers/helpers.spec.d.ts +2 -0
  197. package/lib/server/handlers/helpers.spec.d.ts.map +1 -0
  198. package/lib/server/handlers/helpers.spec.js +241 -0
  199. package/lib/server/handlers/helpers.spec.js.map +1 -0
  200. package/lib/server/handlers/index.d.ts +8 -0
  201. package/lib/server/handlers/index.d.ts.map +1 -0
  202. package/lib/server/handlers/index.js +22 -0
  203. package/lib/server/handlers/index.js.map +1 -0
  204. package/lib/server/handlers/indexHandlers.d.ts +14 -0
  205. package/lib/server/handlers/indexHandlers.d.ts.map +1 -0
  206. package/lib/server/handlers/indexHandlers.js +85 -0
  207. package/lib/server/handlers/indexHandlers.js.map +1 -0
  208. package/lib/server/handlers/itemHandlers.d.ts +34 -0
  209. package/lib/server/handlers/itemHandlers.d.ts.map +1 -0
  210. package/lib/server/handlers/itemHandlers.js +166 -0
  211. package/lib/server/handlers/itemHandlers.js.map +1 -0
  212. package/lib/server/handlers/itemHandlers.spec.d.ts +2 -0
  213. package/lib/server/handlers/itemHandlers.spec.d.ts.map +1 -0
  214. package/lib/server/handlers/itemHandlers.spec.js +366 -0
  215. package/lib/server/handlers/itemHandlers.spec.js.map +1 -0
  216. package/lib/server/handlers/lifecycleHandlers.d.ts +11 -0
  217. package/lib/server/handlers/lifecycleHandlers.d.ts.map +1 -0
  218. package/lib/server/handlers/lifecycleHandlers.js +31 -0
  219. package/lib/server/handlers/lifecycleHandlers.js.map +1 -0
  220. package/lib/server/handlers/lifecycleHandlers.spec.d.ts +2 -0
  221. package/lib/server/handlers/lifecycleHandlers.spec.d.ts.map +1 -0
  222. package/lib/server/handlers/lifecycleHandlers.spec.js +97 -0
  223. package/lib/server/handlers/lifecycleHandlers.spec.js.map +1 -0
  224. package/lib/server/handlers/queryHandlers.d.ts +27 -0
  225. package/lib/server/handlers/queryHandlers.d.ts.map +1 -0
  226. package/lib/server/handlers/queryHandlers.js +135 -0
  227. package/lib/server/handlers/queryHandlers.js.map +1 -0
  228. package/lib/server/handlers/queryHandlers.spec.d.ts +2 -0
  229. package/lib/server/handlers/queryHandlers.spec.d.ts.map +1 -0
  230. package/lib/server/handlers/queryHandlers.spec.js +296 -0
  231. package/lib/server/handlers/queryHandlers.spec.js.map +1 -0
  232. package/lib/server/handlers/statsHandlers.d.ts +17 -0
  233. package/lib/server/handlers/statsHandlers.d.ts.map +1 -0
  234. package/lib/server/handlers/statsHandlers.js +81 -0
  235. package/lib/server/handlers/statsHandlers.js.map +1 -0
  236. package/lib/server/handlers/statsHandlers.spec.d.ts +2 -0
  237. package/lib/server/handlers/statsHandlers.spec.d.ts.map +1 -0
  238. package/lib/server/handlers/statsHandlers.spec.js +138 -0
  239. package/lib/server/handlers/statsHandlers.spec.js.map +1 -0
  240. package/lib/server/index.d.ts +4 -0
  241. package/lib/server/index.d.ts.map +1 -0
  242. package/lib/server/index.js +23 -0
  243. package/lib/server/index.js.map +1 -0
  244. package/lib/storage/FileStorage.d.ts +92 -0
  245. package/lib/storage/FileStorage.d.ts.map +1 -0
  246. package/lib/storage/FileStorage.js +3 -0
  247. package/lib/storage/FileStorage.js.map +1 -0
  248. package/lib/storage/FileStorageUtilities.d.ts +36 -0
  249. package/lib/storage/FileStorageUtilities.d.ts.map +1 -0
  250. package/lib/storage/FileStorageUtilities.js +91 -0
  251. package/lib/storage/FileStorageUtilities.js.map +1 -0
  252. package/lib/storage/FileStorageUtilities.spec.d.ts +2 -0
  253. package/lib/storage/FileStorageUtilities.spec.d.ts.map +1 -0
  254. package/lib/storage/FileStorageUtilities.spec.js +98 -0
  255. package/lib/storage/FileStorageUtilities.spec.js.map +1 -0
  256. package/lib/storage/FileType.d.ts +29 -0
  257. package/lib/storage/FileType.d.ts.map +1 -0
  258. package/lib/storage/FileType.js +38 -0
  259. package/lib/storage/FileType.js.map +1 -0
  260. package/lib/storage/IndexedDBStorage.d.ts +47 -0
  261. package/lib/storage/IndexedDBStorage.d.ts.map +1 -0
  262. package/lib/storage/IndexedDBStorage.js +347 -0
  263. package/lib/storage/IndexedDBStorage.js.map +1 -0
  264. package/lib/storage/LocalFileStorage.browser.d.ts +19 -0
  265. package/lib/storage/LocalFileStorage.browser.d.ts.map +1 -0
  266. package/lib/storage/LocalFileStorage.browser.js +43 -0
  267. package/lib/storage/LocalFileStorage.browser.js.map +1 -0
  268. package/lib/storage/LocalFileStorage.d.ts +23 -0
  269. package/lib/storage/LocalFileStorage.d.ts.map +1 -0
  270. package/lib/storage/LocalFileStorage.js +152 -0
  271. package/lib/storage/LocalFileStorage.js.map +1 -0
  272. package/lib/storage/LocalFileStorage.spec.d.ts +2 -0
  273. package/lib/storage/LocalFileStorage.spec.d.ts.map +1 -0
  274. package/lib/storage/LocalFileStorage.spec.js +249 -0
  275. package/lib/storage/LocalFileStorage.spec.js.map +1 -0
  276. package/lib/storage/VirtualFileStorage.d.ts +18 -0
  277. package/lib/storage/VirtualFileStorage.d.ts.map +1 -0
  278. package/lib/storage/VirtualFileStorage.js +178 -0
  279. package/lib/storage/VirtualFileStorage.js.map +1 -0
  280. package/lib/storage/VirtualFileStorage.spec.d.ts +2 -0
  281. package/lib/storage/VirtualFileStorage.spec.d.ts.map +1 -0
  282. package/lib/storage/VirtualFileStorage.spec.js +302 -0
  283. package/lib/storage/VirtualFileStorage.spec.js.map +1 -0
  284. package/lib/storage/index.d.ts +6 -0
  285. package/lib/storage/index.d.ts.map +1 -0
  286. package/lib/storage/index.js +22 -0
  287. package/lib/storage/index.js.map +1 -0
  288. package/lib/templates/templates/csharp/README.md +48 -0
  289. package/lib/templates/templates/csharp/VectraClient.cs +234 -0
  290. package/lib/templates/templates/go/README.md +71 -0
  291. package/lib/templates/templates/go/vectra_client.go +322 -0
  292. package/lib/templates/templates/java/README.md +81 -0
  293. package/lib/templates/templates/java/VectraClient.java +232 -0
  294. package/lib/templates/templates/python/README.md +37 -0
  295. package/lib/templates/templates/python/vectra_client.py +279 -0
  296. package/lib/templates/templates/rust/Cargo.toml +14 -0
  297. package/lib/templates/templates/rust/README.md +39 -0
  298. package/lib/templates/templates/rust/build.rs +4 -0
  299. package/lib/templates/templates/rust/lib.rs +284 -0
  300. package/lib/templates/templates/typescript/README.md +96 -0
  301. package/lib/templates/templates/typescript/VectraClient.ts +374 -0
  302. package/lib/templates/typescript/VectraClient.d.ts +114 -0
  303. package/lib/templates/typescript/VectraClient.d.ts.map +1 -0
  304. package/lib/templates/typescript/VectraClient.js +328 -0
  305. package/lib/templates/typescript/VectraClient.js.map +1 -0
  306. package/lib/types.d.ts +7 -0
  307. package/lib/types.d.ts.map +1 -1
  308. package/lib/utils/index.d.ts +2 -0
  309. package/lib/utils/index.d.ts.map +1 -0
  310. package/lib/utils/index.js +18 -0
  311. package/lib/utils/index.js.map +1 -0
  312. package/lib/utils/pathUtils.d.ts +40 -0
  313. package/lib/utils/pathUtils.d.ts.map +1 -0
  314. package/lib/utils/pathUtils.js +98 -0
  315. package/lib/utils/pathUtils.js.map +1 -0
  316. package/lib/utils/pathUtils.spec.d.ts +2 -0
  317. package/lib/utils/pathUtils.spec.d.ts.map +1 -0
  318. package/lib/utils/pathUtils.spec.js +152 -0
  319. package/lib/utils/pathUtils.spec.js.map +1 -0
  320. package/lib/vectra-cli.d.ts.map +1 -1
  321. package/lib/vectra-cli.generate.spec.d.ts +2 -0
  322. package/lib/vectra-cli.generate.spec.d.ts.map +1 -0
  323. package/lib/vectra-cli.generate.spec.js +112 -0
  324. package/lib/vectra-cli.generate.spec.js.map +1 -0
  325. package/lib/vectra-cli.js +446 -9
  326. package/lib/vectra-cli.js.map +1 -1
  327. package/lib/vectra-cli.spec.d.ts +1 -0
  328. package/lib/vectra-cli.spec.d.ts.map +1 -0
  329. package/lib/vectra-cli.spec.js +2 -0
  330. package/lib/vectra-cli.spec.js.map +1 -0
  331. package/package.json +98 -25
  332. package/proto/vectra_service.proto +276 -0
  333. package/src/BrowserWebFetcher.ts +345 -0
  334. package/src/FileFetcher.spec.ts +234 -0
  335. package/src/FileFetcher.ts +37 -25
  336. package/src/FolderWatcher.spec.ts +542 -0
  337. package/src/FolderWatcher.ts +418 -0
  338. package/src/GPT3Tokenizer.spec.ts +50 -0
  339. package/src/ItemSelector.spec.ts +252 -0
  340. package/src/ItemSelector.ts +163 -150
  341. package/src/LocalDocument.spec.ts +211 -0
  342. package/src/LocalDocument.ts +88 -94
  343. package/src/LocalDocumentIndex.spec.ts +613 -0
  344. package/src/LocalDocumentIndex.ts +65 -48
  345. package/src/LocalDocumentResult.spec.ts +373 -0
  346. package/src/LocalDocumentResult.ts +489 -319
  347. package/src/LocalEmbeddings.spec.ts +138 -0
  348. package/src/LocalEmbeddings.ts +120 -0
  349. package/src/LocalIndex.spec.ts +741 -163
  350. package/src/LocalIndex.ts +546 -431
  351. package/src/OpenAIEmbeddings.spec.ts +354 -0
  352. package/src/OpenAIEmbeddings.ts +26 -27
  353. package/src/TextSplitter.spec.ts +320 -65
  354. package/src/TextSplitter.ts +172 -115
  355. package/src/TransformersEmbeddings.spec.ts +192 -0
  356. package/src/TransformersEmbeddings.ts +219 -0
  357. package/src/TransformersTokenizer.spec.ts +143 -0
  358. package/src/TransformersTokenizer.ts +45 -0
  359. package/src/WebFetcher.spec.ts +288 -0
  360. package/src/WebFetcher.ts +184 -186
  361. package/src/browser.ts +69 -0
  362. package/src/codecs/IndexCodec.ts +48 -0
  363. package/src/codecs/JsonCodec.spec.ts +93 -0
  364. package/src/codecs/JsonCodec.ts +37 -0
  365. package/src/codecs/LocalIndex.protobuf.spec.ts +115 -0
  366. package/src/codecs/ProtobufCodec.spec.ts +189 -0
  367. package/src/codecs/ProtobufCodec.ts +200 -0
  368. package/src/codecs/index.ts +4 -0
  369. package/src/codecs/migrateIndex.spec.ts +176 -0
  370. package/src/codecs/migrateIndex.ts +125 -0
  371. package/src/codecs/schemas/index.proto +35 -0
  372. package/src/index.ts +9 -1
  373. package/src/internals/Colorize.ts +19 -16
  374. package/src/internals/contentHash.spec.ts +59 -0
  375. package/src/internals/contentHash.ts +42 -0
  376. package/src/internals/transformersLoader.ts +55 -0
  377. package/src/server/IndexManager.spec.ts +278 -0
  378. package/src/server/IndexManager.ts +243 -0
  379. package/src/server/VectraServer.spec.ts +399 -0
  380. package/src/server/VectraServer.ts +156 -0
  381. package/src/server/handlers/documentHandlers.spec.ts +202 -0
  382. package/src/server/handlers/documentHandlers.ts +59 -0
  383. package/src/server/handlers/helpers.spec.ts +234 -0
  384. package/src/server/handlers/helpers.ts +93 -0
  385. package/src/server/handlers/index.ts +7 -0
  386. package/src/server/handlers/indexHandlers.ts +44 -0
  387. package/src/server/handlers/itemHandlers.spec.ts +358 -0
  388. package/src/server/handlers/itemHandlers.ts +140 -0
  389. package/src/server/handlers/lifecycleHandlers.spec.ts +60 -0
  390. package/src/server/handlers/lifecycleHandlers.ts +26 -0
  391. package/src/server/handlers/queryHandlers.spec.ts +280 -0
  392. package/src/server/handlers/queryHandlers.ts +96 -0
  393. package/src/server/handlers/statsHandlers.spec.ts +104 -0
  394. package/src/server/handlers/statsHandlers.ts +38 -0
  395. package/src/server/index.ts +3 -0
  396. package/src/storage/FileStorage.ts +105 -0
  397. package/src/storage/FileStorageUtilities.spec.ts +106 -0
  398. package/src/storage/FileStorageUtilities.ts +77 -0
  399. package/src/storage/FileType.ts +61 -0
  400. package/src/storage/IndexedDBStorage.ts +365 -0
  401. package/src/storage/LocalFileStorage.browser.ts +52 -0
  402. package/src/storage/LocalFileStorage.spec.ts +292 -0
  403. package/src/storage/LocalFileStorage.ts +98 -0
  404. package/src/storage/VirtualFileStorage.spec.ts +307 -0
  405. package/src/storage/VirtualFileStorage.ts +169 -0
  406. package/src/storage/index.ts +5 -0
  407. package/src/templates/csharp/README.md +48 -0
  408. package/src/templates/csharp/VectraClient.cs +234 -0
  409. package/src/templates/go/README.md +71 -0
  410. package/src/templates/go/vectra_client.go +322 -0
  411. package/src/templates/java/README.md +81 -0
  412. package/src/templates/java/VectraClient.java +232 -0
  413. package/src/templates/python/README.md +37 -0
  414. package/src/templates/python/vectra_client.py +279 -0
  415. package/src/templates/rust/Cargo.toml +14 -0
  416. package/src/templates/rust/README.md +39 -0
  417. package/src/templates/rust/build.rs +4 -0
  418. package/src/templates/rust/lib.rs +284 -0
  419. package/src/templates/typescript/README.md +96 -0
  420. package/src/templates/typescript/VectraClient.ts +374 -0
  421. package/src/types.ts +131 -123
  422. package/src/utils/index.ts +1 -0
  423. package/src/utils/pathUtils.spec.ts +148 -0
  424. package/src/utils/pathUtils.ts +106 -0
  425. package/src/vectra-cli.generate.spec.ts +72 -0
  426. package/src/vectra-cli.spec.ts +0 -0
  427. package/src/vectra-cli.ts +687 -246
  428. package/README.draft.md +0 -499
  429. package/README.draft.outline.md +0 -160
  430. package/README.research.md +0 -2159
package/README.md CHANGED
@@ -1,100 +1,93 @@
1
- # Vectra
1
+ # Vectra: a local vector database
2
2
 
3
- Vectra is a local vector database for Node.js with features similar to [Pinecone](https://www.pinecone.io/) or [Qdrant](https://qdrant.tech/) but built using local files. Each Vectra index is a folder on disk. There's an `index.json` file in the folder that contains all the vectors for the index along with any indexed metadata. When you create an index you can specify which metadata properties to index and only those fields will be stored in the `index.json` file. All of the other metadata for an item will be stored on disk in a separate file keyed by a GUID.
3
+ [![npm version](https://img.shields.io/npm/v/vectra.svg)](https://www.npmjs.com/package/vectra)
4
+ [![Build](https://github.com/Stevenic/vectra/actions/workflows/ci.yml/badge.svg)](https://github.com/Stevenic/vectra/actions/workflows/ci.yml)
5
+ [![Coverage Status](https://coveralls.io/repos/github/Stevenic/vectra/badge.svg?branch=main)](https://coveralls.io/github/Stevenic/vectra?branch=main)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![Agent Ready](https://img.shields.io/badge/Agent-Ready-blue.svg)](#agent-ready)
4
8
 
5
- When queryng Vectra you'll be able to use the same subset of [Mongo DB query operators](https://www.mongodb.com/docs/manual/reference/operator/query/) that Pinecone supports and the results will be returned sorted by simularity. Every item in the index will first be filtered by metadata and then ranked for simularity. Even though every item is evaluated its all in memory so it should by nearly instantanious. Likely 1ms - 2ms for even a rather large index. Smaller indexes should be <1ms.
9
+ Vectra is a local, file-backed, in-memory vector database with an optional gRPC server for cross-language access. Each index is a folder on disk queries use MongoDB-style metadata filtering and cosine similarity ranking, with sub-millisecond latency for small indexes.
6
10
 
7
- Keep in mind that your entire Vectra index is loaded into memory so it's not well suited for scenarios like long term chat bot memory. Use a real vector DB for that. Vectra is intended to be used in scenarios where you have a small corpus of mostly static data that you'd like to include in your prompt. Infinite few shot examples would be a great use case for Vectra or even just a single document you want to ask questions over.
11
+ ## What's New in Vectra 0.14+
8
12
 
9
- Pinecone style namespaces aren't directly supported but you could easily mimic them by creating a separate Vectra index (and folder) for each namespace.
13
+ - **Browser & Electron support** `vectra/browser` entry point with `IndexedDBStorage` and `TransformersEmbeddings`
14
+ - **Local embeddings** — `LocalEmbeddings` and `TransformersEmbeddings` run HuggingFace models with no API key
15
+ - **Protocol Buffers** — opt-in binary format, 40-50% smaller files
16
+ - **gRPC server** — `vectra serve` exposes 19 RPCs for cross-language access
17
+ - **FolderWatcher** — auto-sync directories into a document index
18
+ - **Language bindings** — `vectra generate` scaffolds clients for 6 languages
19
+ - **0.15: Performance improvements** — skip-if-unchanged document upserts, shallow-clone transactional snapshots, heap-based top-K query ranking, parallel metadata loads, and O(N) batch chunk deletion
10
20
 
11
- ## Other Language Bindings
21
+ See the [Changelog](https://stevenic.github.io/vectra/changelog) for breaking changes and migration details.
12
22
 
13
- This repo contains the TypeScript/JavaScript binding for Vectra but other language bindings are being created. Since Vectra is file based, any language binding can be used to read or write a Vectra index. That means you can build a Vectra index using JS and then read it using Python.
14
-
15
- - [vectra-py](https://github.com/BMS-geodev/vectra-py) - Python version of Vectra.
16
-
17
- ## Installation
23
+ ## Install
18
24
 
19
- ```
20
- $ npm install vectra
25
+ ```sh
26
+ npm install vectra
21
27
  ```
22
28
 
23
- ## Usage
29
+ ## Quick Example
24
30
 
25
- First create an instance of `LocalIndex` with the path to the folder where you want you're items stored:
31
+ ```ts
32
+ import { LocalDocumentIndex, OpenAIEmbeddings } from 'vectra';
26
33
 
27
- ```typescript
28
- import { LocalIndex } from 'vectra';
34
+ const docs = new LocalDocumentIndex({
35
+ folderPath: './my-index',
36
+ embeddings: new OpenAIEmbeddings({
37
+ apiKey: process.env.OPENAI_API_KEY!,
38
+ model: 'text-embedding-3-small',
39
+ maxTokens: 8000,
40
+ }),
41
+ });
29
42
 
30
- const index = new LocalIndex(path.join(__dirname, '..', 'index'));
31
- ```
43
+ if (!(await docs.isIndexCreated())) {
44
+ await docs.createIndex({ version: 1 });
45
+ }
32
46
 
33
- Next, from inside an async function, create your index:
47
+ await docs.upsertDocument('doc://readme', 'Vectra is a local vector database...', 'md');
34
48
 
35
- ```typescript
36
- if (!(await index.isIndexCreated())) {
37
- await index.createIndex();
49
+ const results = await docs.queryDocuments('What is Vectra?', { maxDocuments: 5 });
50
+ if (results.length > 0) {
51
+ const sections = await results[0].renderSections(2000, 1, true);
52
+ console.log(sections[0].text);
38
53
  }
39
54
  ```
40
55
 
41
- Add some items to your index:
56
+ ## Documentation
42
57
 
43
- ```typescript
44
- import { OpenAI } from 'openai';
58
+ Full docs at **[stevenic.github.io/vectra](https://stevenic.github.io/vectra/)**:
45
59
 
46
- const openai = new OpenAI({
47
- apiKey: `<YOUR_KEY>`,
48
- });
60
+ | Guide | Description |
61
+ |-------|-------------|
62
+ | [Getting Started](https://stevenic.github.io/vectra/getting-started) | Install, requirements, quick start with both index types |
63
+ | [Core Concepts](https://stevenic.github.io/vectra/core-concepts) | Index types, metadata filtering, on-disk layout |
64
+ | [Embeddings Guide](https://stevenic.github.io/vectra/embeddings) | Choose and configure an embeddings provider |
65
+ | [Document Indexing](https://stevenic.github.io/vectra/documents) | Chunking, retrieval, hybrid search, FolderWatcher |
66
+ | [CLI Reference](https://stevenic.github.io/vectra/cli) | All CLI commands, flags, and provider config |
67
+ | [API Reference](https://stevenic.github.io/vectra/api-reference) | TypeScript API overview |
68
+ | [Best Practices](https://stevenic.github.io/vectra/best-practices) | Performance tuning, troubleshooting |
69
+ | [Storage](https://stevenic.github.io/vectra/storage) | Pluggable backends, browser/IndexedDB, serialization formats |
70
+ | [gRPC Server](https://stevenic.github.io/vectra/grpc) | Cross-language access and language bindings |
71
+ | [Changelog](https://stevenic.github.io/vectra/changelog) | Breaking changes and migration guides |
72
+ | [Tutorials](https://stevenic.github.io/vectra/tutorials/) | RAG pipeline, browser app, gRPC, custom storage, folder sync |
73
+ | [Samples](./samples/) | Runnable examples: quickstart, RAG, browser, SQLite storage, gRPC, folder watcher |
49
74
 
50
- async function getVector(text: string) {
51
- const response = await openai.embeddings.create({
52
- 'model': 'text-embedding-ada-002',
53
- 'input': text,
54
- });
55
- return response.data[0].embedding;
56
- }
75
+ ## Agent Ready
57
76
 
58
- async function addItem(text: string) {
59
- await index.insertItem({
60
- vector: await getVector(text),
61
- metadata: { text },
62
- });
63
- }
77
+ Vectra ships an [`llms.txt`](https://github.com/Stevenic/vectra/blob/main/llms.txt) file that gives coding agents everything they need to integrate Vectra into your project. Point your agent at it and let it do the work:
64
78
 
65
- // Add items
66
- await addItem('apple');
67
- await addItem('oranges');
68
- await addItem('red');
69
- await addItem('blue');
79
+ ```
80
+ Read the llms.txt file at https://raw.githubusercontent.com/Stevenic/vectra/main/llms.txt
81
+ and then add Vectra support to this project. Use LocalDocumentIndex for document
82
+ storage and retrieval.
70
83
  ```
71
84
 
72
- Then query for items:
73
-
74
- ```typescript
75
- async function query(text: string) {
76
- const vector = await getVector(text);
77
- const results = await index.queryItems(vector, 3);
78
- if (results.length > 0) {
79
- for (const result of results) {
80
- console.log(`[${result.score}] ${result.item.metadata.text}`);
81
- }
82
- } else {
83
- console.log(`No results found.`);
84
- }
85
- }
85
+ The `llms.txt` file covers all exports, index types, CLI commands, gRPC bindings, and on-disk format — enough for any coding agent to scaffold a working integration without browsing docs.
86
86
 
87
- await query('green');
88
- /*
89
- [0.9036569942401076] blue
90
- [0.8758153664568566] red
91
- [0.8323828606103998] apple
92
- */
93
-
94
- await query('banana');
95
- /*
96
- [0.9033128691220631] apple
97
- [0.8493374123092652] oranges
98
- [0.8415324469533297] blue
99
- */
100
- ```
87
+ ## License
88
+
89
+ MIT License. See [LICENSE](LICENSE).
90
+
91
+ ## Contributing
92
+
93
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. Please review our [Code of Conduct](CODE_OF_CONDUCT.md).
@@ -0,0 +1,75 @@
1
+ import { TextFetcher } from './types';
2
+ /**
3
+ * Configuration options for BrowserWebFetcher.
4
+ */
5
+ export interface BrowserWebFetcherConfig {
6
+ /**
7
+ * Optional. Whether to convert HTML to a simplified text/markdown format.
8
+ * @remarks
9
+ * Defaults to `true`.
10
+ */
11
+ htmlToMarkdown?: boolean;
12
+ /**
13
+ * Optional. Additional headers to include in requests.
14
+ */
15
+ headers?: Record<string, string>;
16
+ /**
17
+ * Optional. Request mode for fetch.
18
+ * @remarks
19
+ * Defaults to 'cors'.
20
+ */
21
+ mode?: RequestMode;
22
+ /**
23
+ * Optional. Credentials mode for fetch.
24
+ * @remarks
25
+ * Defaults to 'same-origin'.
26
+ */
27
+ credentials?: RequestCredentials;
28
+ }
29
+ /**
30
+ * Browser-compatible web fetcher using the native Fetch API.
31
+ * @remarks
32
+ * This fetcher works in browsers and Electron renderer processes.
33
+ * Uses DOMParser instead of cheerio for HTML parsing.
34
+ */
35
+ export declare class BrowserWebFetcher implements TextFetcher {
36
+ private readonly _config;
37
+ private static readonly ALLOWED_CONTENT_TYPES;
38
+ /**
39
+ * Creates a new `BrowserWebFetcher` instance.
40
+ * @param config Optional configuration options.
41
+ */
42
+ constructor(config?: BrowserWebFetcherConfig);
43
+ /**
44
+ * Fetches content from a URL and passes it to the document handler.
45
+ * @param uri URL to fetch.
46
+ * @param onDocument Callback to handle the fetched document.
47
+ * @returns Promise that resolves to the return value of onDocument.
48
+ */
49
+ fetch(uri: string, onDocument: (uri: string, text: string, docType?: string) => Promise<boolean>): Promise<boolean>;
50
+ /**
51
+ * Converts HTML to a simplified markdown-like format using DOMParser.
52
+ */
53
+ private htmlToMarkdown;
54
+ /**
55
+ * Recursively processes DOM nodes to extract text content.
56
+ */
57
+ private processNode;
58
+ /**
59
+ * Processes child nodes of an element.
60
+ */
61
+ private processChildren;
62
+ /**
63
+ * Gets clean text content from an element.
64
+ */
65
+ private getTextContent;
66
+ /**
67
+ * Processes a table element to markdown format.
68
+ */
69
+ private processTable;
70
+ /**
71
+ * Maps MIME type to document type.
72
+ */
73
+ private getDocTypeFromMime;
74
+ }
75
+ //# sourceMappingURL=BrowserWebFetcher.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWebFetcher.d.ts","sourceRoot":"","sources":["../src/BrowserWebFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAEtC;;GAEG;AACH,MAAM,WAAW,uBAAuB;IACpC;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IAEzB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAEjC;;;;OAIG;IACH,IAAI,CAAC,EAAE,WAAW,CAAC;IAEnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,kBAAkB,CAAC;CACpC;AAED;;;;;GAKG;AACH,qBAAa,iBAAkB,YAAW,WAAW;IACjD,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA0B;IAElD,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,qBAAqB,CAQ3C;IAEF;;;OAGG;gBACS,MAAM,CAAC,EAAE,uBAAuB;IAS5C;;;;;OAKG;IACG,KAAK,CACP,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,KAAK,OAAO,CAAC,OAAO,CAAC,GAC9E,OAAO,CAAC,OAAO,CAAC;IAiCnB;;OAEG;IACH,OAAO,CAAC,cAAc;IA2CtB;;OAEG;IACH,OAAO,CAAC,WAAW;IA2HnB;;OAEG;IACH,OAAO,CAAC,eAAe;IAMvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,YAAY;IAwBpB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAmB7B"}
@@ -0,0 +1,290 @@
1
+ "use strict";
2
+ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
3
+ function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
4
+ return new (P || (P = Promise))(function (resolve, reject) {
5
+ function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
6
+ function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
7
+ function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
8
+ step((generator = generator.apply(thisArg, _arguments || [])).next());
9
+ });
10
+ };
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.BrowserWebFetcher = void 0;
13
+ /**
14
+ * Browser-compatible web fetcher using the native Fetch API.
15
+ * @remarks
16
+ * This fetcher works in browsers and Electron renderer processes.
17
+ * Uses DOMParser instead of cheerio for HTML parsing.
18
+ */
19
+ class BrowserWebFetcher {
20
+ /**
21
+ * Creates a new `BrowserWebFetcher` instance.
22
+ * @param config Optional configuration options.
23
+ */
24
+ constructor(config) {
25
+ this._config = Object.assign({ htmlToMarkdown: true, mode: 'cors', credentials: 'same-origin' }, config);
26
+ }
27
+ /**
28
+ * Fetches content from a URL and passes it to the document handler.
29
+ * @param uri URL to fetch.
30
+ * @param onDocument Callback to handle the fetched document.
31
+ * @returns Promise that resolves to the return value of onDocument.
32
+ */
33
+ fetch(uri, onDocument) {
34
+ return __awaiter(this, void 0, void 0, function* () {
35
+ const response = yield fetch(uri, {
36
+ method: 'GET',
37
+ headers: this._config.headers,
38
+ mode: this._config.mode,
39
+ credentials: this._config.credentials
40
+ });
41
+ if (!response.ok) {
42
+ throw new Error(`HTTP ${response.status}: ${response.statusText}`);
43
+ }
44
+ const contentType = response.headers.get('content-type') || 'text/plain';
45
+ const mimeType = contentType.split(';')[0].trim().toLowerCase();
46
+ // Validate content type
47
+ if (!BrowserWebFetcher.ALLOWED_CONTENT_TYPES.some(allowed => mimeType.includes(allowed))) {
48
+ throw new Error(`Unsupported content type: ${contentType}`);
49
+ }
50
+ const text = yield response.text();
51
+ // Handle HTML content
52
+ if (mimeType.includes('text/html') && this._config.htmlToMarkdown) {
53
+ const markdown = this.htmlToMarkdown(text, uri);
54
+ return onDocument(uri, markdown, 'md');
55
+ }
56
+ // Determine doc type from content type
57
+ const docType = this.getDocTypeFromMime(mimeType);
58
+ return onDocument(uri, text, docType);
59
+ });
60
+ }
61
+ /**
62
+ * Converts HTML to a simplified markdown-like format using DOMParser.
63
+ */
64
+ htmlToMarkdown(html, baseUrl) {
65
+ const parser = new DOMParser();
66
+ const doc = parser.parseFromString(html, 'text/html');
67
+ // Remove unwanted elements
68
+ const removeSelectors = ['script', 'style', 'noscript', 'iframe', 'svg', 'canvas'];
69
+ removeSelectors.forEach(selector => {
70
+ doc.querySelectorAll(selector).forEach(el => el.remove());
71
+ });
72
+ // Convert relative URLs to absolute
73
+ doc.querySelectorAll('a[href]').forEach(el => {
74
+ const href = el.getAttribute('href');
75
+ if (href && !href.startsWith('http') && !href.startsWith('//') && !href.startsWith('#')) {
76
+ try {
77
+ el.setAttribute('href', new URL(href, baseUrl).toString());
78
+ }
79
+ catch (_a) {
80
+ // Leave as-is if URL parsing fails
81
+ }
82
+ }
83
+ });
84
+ // Process the body
85
+ const body = doc.body;
86
+ if (!body) {
87
+ return html;
88
+ }
89
+ const lines = [];
90
+ this.processNode(body, lines);
91
+ // Clean up the result
92
+ let result = lines.join('\n');
93
+ // Remove excessive newlines
94
+ result = result.replace(/\n{3,}/g, '\n\n');
95
+ // Trim leading/trailing whitespace
96
+ result = result.trim();
97
+ return result;
98
+ }
99
+ /**
100
+ * Recursively processes DOM nodes to extract text content.
101
+ */
102
+ processNode(node, lines) {
103
+ var _a;
104
+ if (node.nodeType === Node.TEXT_NODE) {
105
+ const text = (_a = node.textContent) === null || _a === void 0 ? void 0 : _a.trim();
106
+ if (text) {
107
+ lines.push(text);
108
+ }
109
+ return;
110
+ }
111
+ if (node.nodeType !== Node.ELEMENT_NODE) {
112
+ return;
113
+ }
114
+ const el = node;
115
+ const tagName = el.tagName.toLowerCase();
116
+ // Handle specific elements
117
+ switch (tagName) {
118
+ case 'h1':
119
+ lines.push('');
120
+ lines.push(`# ${this.getTextContent(el)}`);
121
+ lines.push('');
122
+ return;
123
+ case 'h2':
124
+ lines.push('');
125
+ lines.push(`## ${this.getTextContent(el)}`);
126
+ lines.push('');
127
+ return;
128
+ case 'h3':
129
+ lines.push('');
130
+ lines.push(`### ${this.getTextContent(el)}`);
131
+ lines.push('');
132
+ return;
133
+ case 'h4':
134
+ lines.push('');
135
+ lines.push(`#### ${this.getTextContent(el)}`);
136
+ lines.push('');
137
+ return;
138
+ case 'h5':
139
+ lines.push('');
140
+ lines.push(`##### ${this.getTextContent(el)}`);
141
+ lines.push('');
142
+ return;
143
+ case 'h6':
144
+ lines.push('');
145
+ lines.push(`###### ${this.getTextContent(el)}`);
146
+ lines.push('');
147
+ return;
148
+ case 'p':
149
+ lines.push('');
150
+ this.processChildren(el, lines);
151
+ lines.push('');
152
+ return;
153
+ case 'br':
154
+ lines.push('');
155
+ return;
156
+ case 'hr':
157
+ lines.push('');
158
+ lines.push('---');
159
+ lines.push('');
160
+ return;
161
+ case 'a':
162
+ const href = el.getAttribute('href');
163
+ const text = this.getTextContent(el);
164
+ if (href && text) {
165
+ lines.push(`[${text}](${href})`);
166
+ }
167
+ else if (text) {
168
+ lines.push(text);
169
+ }
170
+ return;
171
+ case 'strong':
172
+ case 'b':
173
+ lines.push(`**${this.getTextContent(el)}**`);
174
+ return;
175
+ case 'em':
176
+ case 'i':
177
+ lines.push(`*${this.getTextContent(el)}*`);
178
+ return;
179
+ case 'code':
180
+ lines.push(`\`${this.getTextContent(el)}\``);
181
+ return;
182
+ case 'pre':
183
+ lines.push('');
184
+ lines.push('```');
185
+ lines.push(this.getTextContent(el));
186
+ lines.push('```');
187
+ lines.push('');
188
+ return;
189
+ case 'blockquote':
190
+ lines.push('');
191
+ const quoteText = this.getTextContent(el);
192
+ quoteText.split('\n').forEach(line => {
193
+ lines.push(`> ${line}`);
194
+ });
195
+ lines.push('');
196
+ return;
197
+ case 'ul':
198
+ case 'ol':
199
+ lines.push('');
200
+ el.querySelectorAll(':scope > li').forEach((li, index) => {
201
+ const prefix = tagName === 'ol' ? `${index + 1}.` : '-';
202
+ lines.push(`${prefix} ${this.getTextContent(li)}`);
203
+ });
204
+ lines.push('');
205
+ return;
206
+ case 'table':
207
+ lines.push('');
208
+ this.processTable(el, lines);
209
+ lines.push('');
210
+ return;
211
+ case 'img':
212
+ const alt = el.getAttribute('alt') || 'image';
213
+ const src = el.getAttribute('src');
214
+ if (src) {
215
+ lines.push(`![${alt}](${src})`);
216
+ }
217
+ return;
218
+ default:
219
+ // For other elements, process children
220
+ this.processChildren(el, lines);
221
+ }
222
+ }
223
+ /**
224
+ * Processes child nodes of an element.
225
+ */
226
+ processChildren(el, lines) {
227
+ el.childNodes.forEach(child => {
228
+ this.processNode(child, lines);
229
+ });
230
+ }
231
+ /**
232
+ * Gets clean text content from an element.
233
+ */
234
+ getTextContent(el) {
235
+ return (el.textContent || '').replace(/\s+/g, ' ').trim();
236
+ }
237
+ /**
238
+ * Processes a table element to markdown format.
239
+ */
240
+ processTable(table, lines) {
241
+ const rows = table.querySelectorAll('tr');
242
+ let isFirstRow = true;
243
+ rows.forEach(row => {
244
+ const cells = row.querySelectorAll('th, td');
245
+ const cellContents = [];
246
+ cells.forEach(cell => {
247
+ cellContents.push(this.getTextContent(cell));
248
+ });
249
+ if (cellContents.length > 0) {
250
+ lines.push(`| ${cellContents.join(' | ')} |`);
251
+ // Add separator after header row
252
+ if (isFirstRow) {
253
+ lines.push(`| ${cellContents.map(() => '---').join(' | ')} |`);
254
+ isFirstRow = false;
255
+ }
256
+ }
257
+ });
258
+ }
259
+ /**
260
+ * Maps MIME type to document type.
261
+ */
262
+ getDocTypeFromMime(mimeType) {
263
+ const mimeMap = {
264
+ 'text/html': 'html',
265
+ 'text/plain': undefined,
266
+ 'text/markdown': 'md',
267
+ 'text/xml': 'xml',
268
+ 'application/json': 'json',
269
+ 'application/xml': 'xml',
270
+ 'application/javascript': 'js'
271
+ };
272
+ for (const [mime, docType] of Object.entries(mimeMap)) {
273
+ if (mimeType.includes(mime)) {
274
+ return docType;
275
+ }
276
+ }
277
+ return undefined;
278
+ }
279
+ }
280
+ exports.BrowserWebFetcher = BrowserWebFetcher;
281
+ BrowserWebFetcher.ALLOWED_CONTENT_TYPES = [
282
+ 'text/html',
283
+ 'application/json',
284
+ 'application/xml',
285
+ 'application/javascript',
286
+ 'text/plain',
287
+ 'text/markdown',
288
+ 'text/xml'
289
+ ];
290
+ //# sourceMappingURL=BrowserWebFetcher.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"BrowserWebFetcher.js","sourceRoot":"","sources":["../src/BrowserWebFetcher.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileFetcher.d.ts","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,qBAAa,WAAY,YAAW,WAAW;IAC9B,KAAK,CAAC,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;CAyB/I"}
1
+ {"version":3,"file":"FileFetcher.d.ts","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAItC,qBAAa,WAAY,YAAW,WAAW;IAChC,KAAK,CAChB,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,KAAK,OAAO,CAAC,OAAO,CAAC,GACxF,OAAO,CAAC,OAAO,CAAC;CAkCpB"}
@@ -41,36 +41,46 @@ var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, ge
41
41
  step((generator = generator.apply(thisArg, _arguments || [])).next());
42
42
  });
43
43
  };
44
+ var __importDefault = (this && this.__importDefault) || function (mod) {
45
+ return (mod && mod.__esModule) ? mod : { "default": mod };
46
+ };
44
47
  Object.defineProperty(exports, "__esModule", { value: true });
45
48
  exports.FileFetcher = void 0;
46
- const fs = __importStar(require("fs/promises"));
47
- const path = __importStar(require("path"));
49
+ const node_fs_1 = __importDefault(require("node:fs"));
50
+ const path = __importStar(require("node:path"));
48
51
  class FileFetcher {
49
52
  fetch(uri, onDocument) {
50
53
  return __awaiter(this, void 0, void 0, function* () {
51
54
  // Does path exist and is it a directory?
52
- let isDirectory;
55
+ let stat;
53
56
  try {
54
- const stat = yield fs.stat(uri);
55
- isDirectory = stat.isDirectory();
57
+ stat = yield node_fs_1.default.promises.stat(uri);
56
58
  }
57
59
  catch (_a) {
60
+ // Non-existent path: treat as no-op success
58
61
  return true;
59
62
  }
60
- // If directory, read all files and recurse
61
- if (isDirectory) {
62
- const files = yield fs.readdir(uri);
63
- for (const file of files) {
63
+ if (stat.isDirectory()) {
64
+ // Read directory and recurse. If any child returns false, aggregate to false.
65
+ const entries = yield node_fs_1.default.promises.readdir(uri);
66
+ let allOk = true;
67
+ for (const file of entries) {
64
68
  const filePath = path.join(uri, file);
65
- yield this.fetch(filePath, onDocument);
69
+ const ok = yield this.fetch(filePath, onDocument);
70
+ if (!ok) {
71
+ allOk = false;
72
+ }
66
73
  }
67
- return true;
74
+ return allOk;
68
75
  }
69
76
  else {
70
- // Read file and call onDocument
71
- const text = yield fs.readFile(uri, 'utf8');
72
- const parts = uri.split('.');
73
- return yield onDocument(uri, text, parts.length > 0 ? parts[parts.length - 1].toLowerCase() : undefined);
77
+ // Read file and invoke onDocument
78
+ const text = yield node_fs_1.default.promises.readFile(uri, 'utf8');
79
+ const ext = path.extname(uri);
80
+ const docType = ext && ext.length > 1
81
+ ? ext.slice(1).toLowerCase()
82
+ : path.basename(uri).toLowerCase();
83
+ return yield onDocument(uri, text, docType);
74
84
  }
75
85
  });
76
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"FileFetcher.js","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,gDAAkC;AAClC,2CAA6B;AAE7B,MAAa,WAAW;IACP,KAAK,CAAC,GAAW,EAAE,UAAyF;;YACrH,yCAAyC;YACzC,IAAI,WAAoB,CAAC;YACzB,IAAI,CAAC;gBACD,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAChC,WAAW,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;YACrC,CAAC;YAAC,WAAM,CAAC;gBACL,OAAO,IAAI,CAAC;YAChB,CAAC;YAED,2CAA2C;YAC3C,IAAI,WAAW,EAAE,CAAC;gBACd,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACvB,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACtC,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;gBAC3C,CAAC;gBACD,OAAO,IAAI,CAAC;YAChB,CAAC;iBAAM,CAAC;gBACJ,gCAAgC;gBAChC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBAC5C,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,OAAO,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;YAC7G,CAAC;QACL,CAAC;KAAA;CACJ;AA1BD,kCA0BC"}
1
+ {"version":3,"file":"FileFetcher.js","sourceRoot":"","sources":["../src/FileFetcher.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,sDAAyB;AACzB,gDAAkC;AAElC,MAAa,WAAW;IACT,KAAK,CAChB,GAAW,EACX,UAAyF;;YAEzF,yCAAyC;YACzC,IAAI,IAAI,CAAC;YACT,IAAI,CAAC;gBACH,IAAI,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACrC,CAAC;YAAC,WAAM,CAAC;gBACP,4CAA4C;gBAC5C,OAAO,IAAI,CAAC;YACd,CAAC;YAED,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,8EAA8E;gBAC9E,MAAM,OAAO,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC/C,IAAI,KAAK,GAAG,IAAI,CAAC;gBACjB,KAAK,MAAM,IAAI,IAAI,OAAO,EAAE,CAAC;oBAC3B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;oBACtC,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;oBAClD,IAAI,CAAC,EAAE,EAAE,CAAC;wBACR,KAAK,GAAG,KAAK,CAAC;oBAChB,CAAC;gBACH,CAAC;gBACD,OAAO,KAAK,CAAC;YACf,CAAC;iBAAM,CAAC;gBACN,kCAAkC;gBAClC,MAAM,IAAI,GAAG,MAAM,iBAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;gBACrD,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;gBAC9B,MAAM,OAAO,GACX,GAAG,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC;oBACnB,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE;oBAC5B,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;gBAEvC,OAAO,MAAM,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;KAAA;CACF;AAtCD,kCAsCC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=FileFetcher.spec.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"FileFetcher.spec.d.ts","sourceRoot":"","sources":["../src/FileFetcher.spec.ts"],"names":[],"mappings":""}