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,444 @@
1
+ /**
2
+ * FileWalStorage Tests
3
+ *
4
+ * Tests for file-based WAL storage implementation.
5
+ * Covers: lock operations, WAL operations, checkpoint, manifest, and atomicity.
6
+ */
7
+ import { describe, it, expect, beforeEach, afterEach } from 'vitest';
8
+ import * as fs from 'node:fs/promises';
9
+ import * as path from 'node:path';
10
+ import * as os from 'node:os';
11
+ import { FileWalStorage } from './file-storage.js';
12
+ describe('FileWalStorage', () => {
13
+ let tempDir;
14
+ let storage;
15
+ beforeEach(async () => {
16
+ // Create temp directory for tests
17
+ tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'wal-test-'));
18
+ storage = new FileWalStorage(tempDir);
19
+ });
20
+ afterEach(async () => {
21
+ // Cleanup temp directory
22
+ await fs.rm(tempDir, { recursive: true, force: true });
23
+ });
24
+ // ═══════════════════════════════════════════════════════════════════════════
25
+ // LOCK OPERATIONS
26
+ // ═══════════════════════════════════════════════════════════════════════════
27
+ describe('Lock Operations', () => {
28
+ const createLock = (id = 'test-task-id') => ({
29
+ id,
30
+ type: 'notes',
31
+ pid: process.pid,
32
+ startedAt: Date.now(),
33
+ heartbeat: Date.now(),
34
+ });
35
+ it('should acquire lock when no lock exists', async () => {
36
+ const lock = createLock();
37
+ const acquired = await storage.acquireLock(lock);
38
+ expect(acquired).toBe(true);
39
+ const readLock = await storage.getLock();
40
+ expect(readLock).not.toBeNull();
41
+ expect(readLock?.id).toBe(lock.id);
42
+ });
43
+ it('should fail to acquire lock when lock already exists', async () => {
44
+ const lock1 = createLock('task-1');
45
+ const lock2 = createLock('task-2');
46
+ const acquired1 = await storage.acquireLock(lock1);
47
+ const acquired2 = await storage.acquireLock(lock2);
48
+ expect(acquired1).toBe(true);
49
+ expect(acquired2).toBe(false);
50
+ // Original lock should still be present
51
+ const readLock = await storage.getLock();
52
+ expect(readLock?.id).toBe('task-1');
53
+ });
54
+ it('should release lock by ID', async () => {
55
+ const lock = createLock('my-task');
56
+ await storage.acquireLock(lock);
57
+ await storage.releaseLock('my-task');
58
+ const readLock = await storage.getLock();
59
+ expect(readLock).toBeNull();
60
+ });
61
+ it('should not release lock with wrong ID', async () => {
62
+ const lock = createLock('task-1');
63
+ await storage.acquireLock(lock);
64
+ await storage.releaseLock('wrong-id');
65
+ const readLock = await storage.getLock();
66
+ expect(readLock).not.toBeNull();
67
+ expect(readLock?.id).toBe('task-1');
68
+ });
69
+ it('should return null when no lock exists', async () => {
70
+ const lock = await storage.getLock();
71
+ expect(lock).toBeNull();
72
+ });
73
+ it('should update heartbeat for matching lock', async () => {
74
+ const lock = createLock('my-task');
75
+ const originalHeartbeat = lock.heartbeat;
76
+ await storage.acquireLock(lock);
77
+ // Wait a bit to ensure time difference
78
+ await new Promise((resolve) => setTimeout(resolve, 10));
79
+ await storage.updateHeartbeat('my-task');
80
+ const readLock = await storage.getLock();
81
+ expect(readLock).not.toBeNull();
82
+ expect(readLock.heartbeat).toBeGreaterThan(originalHeartbeat);
83
+ });
84
+ it('should not update heartbeat for non-matching lock', async () => {
85
+ const lock = createLock('task-1');
86
+ await storage.acquireLock(lock);
87
+ const originalHeartbeat = lock.heartbeat;
88
+ await storage.updateHeartbeat('wrong-task');
89
+ const readLock = await storage.getLock();
90
+ expect(readLock.heartbeat).toBe(originalHeartbeat);
91
+ });
92
+ it('should force clear lock', async () => {
93
+ const lock = createLock();
94
+ await storage.acquireLock(lock);
95
+ await storage.forceClearLock();
96
+ const readLock = await storage.getLock();
97
+ expect(readLock).toBeNull();
98
+ });
99
+ it('should handle force clear when no lock exists', async () => {
100
+ // Should not throw
101
+ await expect(storage.forceClearLock()).resolves.not.toThrow();
102
+ });
103
+ describe('compareAndClearLock', () => {
104
+ it('should clear lock when it matches expected state', async () => {
105
+ const lock = createLock('task-1');
106
+ await storage.acquireLock(lock);
107
+ const cleared = await storage.compareAndClearLock(lock);
108
+ expect(cleared).toBe(true);
109
+ expect(await storage.getLock()).toBeNull();
110
+ });
111
+ it('should not clear lock when ID differs', async () => {
112
+ const lock = createLock('task-1');
113
+ await storage.acquireLock(lock);
114
+ const fakeLock = { ...lock, id: 'different-id' };
115
+ const cleared = await storage.compareAndClearLock(fakeLock);
116
+ expect(cleared).toBe(false);
117
+ expect((await storage.getLock())?.id).toBe('task-1');
118
+ });
119
+ it('should not clear lock when startedAt differs', async () => {
120
+ const lock = createLock('task-1');
121
+ await storage.acquireLock(lock);
122
+ const fakeLock = { ...lock, startedAt: lock.startedAt + 1000 };
123
+ const cleared = await storage.compareAndClearLock(fakeLock);
124
+ expect(cleared).toBe(false);
125
+ expect((await storage.getLock())?.id).toBe('task-1');
126
+ });
127
+ it('should return true when no lock exists', async () => {
128
+ const lock = createLock('task-1');
129
+ const cleared = await storage.compareAndClearLock(lock);
130
+ expect(cleared).toBe(true);
131
+ });
132
+ });
133
+ });
134
+ // ═══════════════════════════════════════════════════════════════════════════
135
+ // WAL OPERATIONS
136
+ // ═══════════════════════════════════════════════════════════════════════════
137
+ describe('WAL Operations', () => {
138
+ const createEntry = (lsn, op = 'file:done') => ({
139
+ lsn,
140
+ ts: Date.now(),
141
+ op: op,
142
+ taskId: 'test-task',
143
+ data: { path: `/file-${lsn}.md`, chunks: 1 },
144
+ });
145
+ it('should append entry to WAL', async () => {
146
+ const entry = createEntry(1);
147
+ await storage.appendEntry(entry);
148
+ const entries = await storage.getEntriesFromLsn(0);
149
+ expect(entries).toHaveLength(1);
150
+ expect(entries[0].lsn).toBe(1);
151
+ });
152
+ it('should append multiple entries', async () => {
153
+ await storage.appendEntry(createEntry(1));
154
+ await storage.appendEntry(createEntry(2));
155
+ await storage.appendEntry(createEntry(3));
156
+ const entries = await storage.getEntriesFromLsn(0);
157
+ expect(entries).toHaveLength(3);
158
+ expect(entries.map((e) => e.lsn)).toEqual([1, 2, 3]);
159
+ });
160
+ it('should filter entries by LSN', async () => {
161
+ await storage.appendEntry(createEntry(1));
162
+ await storage.appendEntry(createEntry(2));
163
+ await storage.appendEntry(createEntry(3));
164
+ await storage.appendEntry(createEntry(4));
165
+ const entries = await storage.getEntriesFromLsn(3);
166
+ expect(entries).toHaveLength(2);
167
+ expect(entries.map((e) => e.lsn)).toEqual([3, 4]);
168
+ });
169
+ it('should return empty array when WAL does not exist', async () => {
170
+ const entries = await storage.getEntriesFromLsn(0);
171
+ expect(entries).toEqual([]);
172
+ });
173
+ it('should get all entries', async () => {
174
+ await storage.appendEntry(createEntry(1));
175
+ await storage.appendEntry(createEntry(2));
176
+ const entries = await storage.getAllEntries();
177
+ expect(entries).toHaveLength(2);
178
+ });
179
+ it('should truncate entries before LSN', async () => {
180
+ await storage.appendEntry(createEntry(1));
181
+ await storage.appendEntry(createEntry(2));
182
+ await storage.appendEntry(createEntry(3));
183
+ await storage.appendEntry(createEntry(4));
184
+ await storage.truncateBeforeLsn(3);
185
+ const entries = await storage.getAllEntries();
186
+ expect(entries).toHaveLength(2);
187
+ expect(entries.map((e) => e.lsn)).toEqual([3, 4]);
188
+ });
189
+ it('should handle truncating all entries', async () => {
190
+ await storage.appendEntry(createEntry(1));
191
+ await storage.appendEntry(createEntry(2));
192
+ await storage.truncateBeforeLsn(100);
193
+ const entries = await storage.getAllEntries();
194
+ expect(entries).toHaveLength(0);
195
+ });
196
+ it('should skip corrupted WAL lines gracefully', async () => {
197
+ // Write valid entry
198
+ await storage.appendEntry(createEntry(1));
199
+ // Append corrupted line directly to WAL file
200
+ const paths = storage.getPaths();
201
+ await fs.appendFile(paths.wal, 'corrupted json line\n');
202
+ // Write another valid entry
203
+ await storage.appendEntry(createEntry(2));
204
+ // Should skip corrupted line and return valid entries
205
+ const entries = await storage.getAllEntries();
206
+ expect(entries).toHaveLength(2);
207
+ expect(entries.map((e) => e.lsn)).toEqual([1, 2]);
208
+ });
209
+ it('should clear WAL', async () => {
210
+ await storage.appendEntry(createEntry(1));
211
+ await storage.appendEntry(createEntry(2));
212
+ await storage.clearWal();
213
+ const entries = await storage.getAllEntries();
214
+ expect(entries).toHaveLength(0);
215
+ });
216
+ it('should preserve entry data through roundtrip', async () => {
217
+ const entry = {
218
+ lsn: 42,
219
+ ts: 1234567890,
220
+ op: 'file:done',
221
+ taskId: 'task-123',
222
+ data: {
223
+ path: '/some/path.md',
224
+ chunks: 5,
225
+ },
226
+ };
227
+ await storage.appendEntry(entry);
228
+ const entries = await storage.getAllEntries();
229
+ expect(entries[0]).toEqual(entry);
230
+ });
231
+ });
232
+ // ═══════════════════════════════════════════════════════════════════════════
233
+ // CHECKPOINT OPERATIONS
234
+ // ═══════════════════════════════════════════════════════════════════════════
235
+ describe('Checkpoint Operations', () => {
236
+ const createCheckpoint = (lsn = 100) => ({
237
+ version: 1,
238
+ lsn,
239
+ createdAt: Date.now(),
240
+ task: {
241
+ id: 'task-123',
242
+ type: 'notes',
243
+ status: 'running',
244
+ startedAt: Date.now() - 10000,
245
+ totalFiles: 1000,
246
+ processedCount: lsn,
247
+ manifestHash: 'abc123',
248
+ },
249
+ stats: {
250
+ added: 50,
251
+ updated: 30,
252
+ deleted: 10,
253
+ failed: [],
254
+ },
255
+ });
256
+ it('should write and read checkpoint', async () => {
257
+ const checkpoint = createCheckpoint(100);
258
+ await storage.writeCheckpoint(checkpoint);
259
+ const readCheckpoint = await storage.getCheckpoint();
260
+ expect(readCheckpoint).toEqual(checkpoint);
261
+ });
262
+ it('should return null when checkpoint does not exist', async () => {
263
+ const checkpoint = await storage.getCheckpoint();
264
+ expect(checkpoint).toBeNull();
265
+ });
266
+ it('should overwrite existing checkpoint', async () => {
267
+ await storage.writeCheckpoint(createCheckpoint(100));
268
+ await storage.writeCheckpoint(createCheckpoint(200));
269
+ const checkpoint = await storage.getCheckpoint();
270
+ expect(checkpoint?.lsn).toBe(200);
271
+ expect(checkpoint?.task.processedCount).toBe(200);
272
+ });
273
+ it('should clear checkpoint', async () => {
274
+ await storage.writeCheckpoint(createCheckpoint());
275
+ await storage.clearCheckpoint();
276
+ const checkpoint = await storage.getCheckpoint();
277
+ expect(checkpoint).toBeNull();
278
+ });
279
+ it('should handle checkpoint with failed files', async () => {
280
+ const checkpoint = createCheckpoint();
281
+ checkpoint.stats.failed = [
282
+ { path: '/fail1.md', error: 'Error 1', retries: 3 },
283
+ { path: '/fail2.md', error: 'Error 2', retries: 2 },
284
+ ];
285
+ await storage.writeCheckpoint(checkpoint);
286
+ const read = await storage.getCheckpoint();
287
+ expect(read?.stats.failed).toHaveLength(2);
288
+ expect(read?.stats.failed[0].path).toBe('/fail1.md');
289
+ });
290
+ it('should write checkpoint atomically', async () => {
291
+ const checkpoint = createCheckpoint();
292
+ // Write checkpoint multiple times sequentially
293
+ // (concurrent writes to same file can race)
294
+ for (let i = 0; i < 10; i++) {
295
+ await storage.writeCheckpoint({ ...checkpoint, lsn: i });
296
+ }
297
+ // Checkpoint should be valid JSON
298
+ const read = await storage.getCheckpoint();
299
+ expect(read).not.toBeNull();
300
+ expect(typeof read?.lsn).toBe('number');
301
+ // Last write wins
302
+ expect(read?.lsn).toBe(9);
303
+ });
304
+ });
305
+ // ═══════════════════════════════════════════════════════════════════════════
306
+ // MANIFEST OPERATIONS
307
+ // ═══════════════════════════════════════════════════════════════════════════
308
+ describe('Manifest Operations', () => {
309
+ const createManifest = () => ({
310
+ version: 1,
311
+ current: {
312
+ id: 'task-123',
313
+ type: 'notes',
314
+ status: 'running',
315
+ startedAt: Date.now() - 10000,
316
+ updatedAt: Date.now(),
317
+ phase: 'indexing',
318
+ totalFiles: 1000,
319
+ processedFiles: 500,
320
+ currentFile: '/current.md',
321
+ added: 100,
322
+ updated: 50,
323
+ deleted: 10,
324
+ failedFiles: [],
325
+ manifestHash: 'hash123',
326
+ lastCheckpointLsn: 100,
327
+ },
328
+ lastCompleted: null,
329
+ walLsn: 150,
330
+ lastCheckpointLsn: 100,
331
+ });
332
+ it('should write and read manifest', async () => {
333
+ const manifest = createManifest();
334
+ await storage.writeManifest(manifest);
335
+ const read = await storage.getManifest();
336
+ expect(read).toEqual(manifest);
337
+ });
338
+ it('should return null when manifest does not exist', async () => {
339
+ const manifest = await storage.getManifest();
340
+ expect(manifest).toBeNull();
341
+ });
342
+ it('should update manifest', async () => {
343
+ const manifest = createManifest();
344
+ await storage.writeManifest(manifest);
345
+ manifest.current.processedFiles = 600;
346
+ await storage.writeManifest(manifest);
347
+ const read = await storage.getManifest();
348
+ expect(read?.current?.processedFiles).toBe(600);
349
+ });
350
+ it('should clear manifest', async () => {
351
+ await storage.writeManifest(createManifest());
352
+ await storage.clearManifest();
353
+ const manifest = await storage.getManifest();
354
+ expect(manifest).toBeNull();
355
+ });
356
+ it('should handle manifest with lastCompleted', async () => {
357
+ const manifest = createManifest();
358
+ manifest.current = null;
359
+ manifest.lastCompleted = {
360
+ id: 'old-task',
361
+ type: 'code',
362
+ status: 'completed',
363
+ startedAt: Date.now() - 100000,
364
+ completedAt: Date.now() - 50000,
365
+ totalFiles: 500,
366
+ stats: { added: 200, updated: 100, deleted: 50 },
367
+ failedCount: 0,
368
+ };
369
+ await storage.writeManifest(manifest);
370
+ const read = await storage.getManifest();
371
+ expect(read?.lastCompleted?.id).toBe('old-task');
372
+ expect(read?.lastCompleted?.status).toBe('completed');
373
+ });
374
+ });
375
+ // ═══════════════════════════════════════════════════════════════════════════
376
+ // CLEANUP
377
+ // ═══════════════════════════════════════════════════════════════════════════
378
+ describe('Cleanup', () => {
379
+ it('should clear all files', async () => {
380
+ // Create all files
381
+ await storage.acquireLock({
382
+ id: 'task',
383
+ type: 'notes',
384
+ pid: process.pid,
385
+ startedAt: Date.now(),
386
+ heartbeat: Date.now(),
387
+ });
388
+ await storage.appendEntry({
389
+ lsn: 1,
390
+ ts: Date.now(),
391
+ op: 'file:done',
392
+ taskId: 'task',
393
+ });
394
+ await storage.writeCheckpoint({
395
+ version: 1,
396
+ lsn: 1,
397
+ createdAt: Date.now(),
398
+ task: {
399
+ id: 'task',
400
+ type: 'notes',
401
+ status: 'running',
402
+ startedAt: Date.now(),
403
+ totalFiles: 100,
404
+ processedCount: 1,
405
+ },
406
+ stats: { added: 0, updated: 0, deleted: 0, failed: [] },
407
+ });
408
+ await storage.writeManifest({
409
+ version: 1,
410
+ current: null,
411
+ lastCompleted: null,
412
+ walLsn: 1,
413
+ lastCheckpointLsn: 1,
414
+ });
415
+ // Clear all
416
+ await storage.clear();
417
+ // All should be null/empty
418
+ expect(await storage.getLock()).toBeNull();
419
+ expect(await storage.getAllEntries()).toHaveLength(0);
420
+ expect(await storage.getCheckpoint()).toBeNull();
421
+ expect(await storage.getManifest()).toBeNull();
422
+ });
423
+ });
424
+ // ═══════════════════════════════════════════════════════════════════════════
425
+ // UTILITY METHODS
426
+ // ═══════════════════════════════════════════════════════════════════════════
427
+ describe('Utility Methods', () => {
428
+ it('should detect current process as running', () => {
429
+ expect(FileWalStorage.isPidRunning(process.pid)).toBe(true);
430
+ });
431
+ it('should detect non-existent PID as not running', () => {
432
+ // Use a very high PID that's unlikely to exist
433
+ expect(FileWalStorage.isPidRunning(999999999)).toBe(false);
434
+ });
435
+ it('should return correct paths', () => {
436
+ const paths = storage.getPaths();
437
+ expect(paths.lock).toBe(path.join(tempDir, 'sync.lock'));
438
+ expect(paths.wal).toBe(path.join(tempDir, 'sync.wal'));
439
+ expect(paths.checkpoint).toBe(path.join(tempDir, 'sync.checkpoint'));
440
+ expect(paths.manifest).toBe(path.join(tempDir, 'sync.manifest'));
441
+ });
442
+ });
443
+ });
444
+ //# sourceMappingURL=file-storage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file-storage.test.js","sourceRoot":"","sources":["../../../src/indexer/wal/file-storage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * Unified Sync WAL - Factory and Exports
3
+ *
4
+ * Example usage:
5
+ *
6
+ * ```typescript
7
+ * import { createWalStorage, SyncWal } from 'grepmind-core/indexer/wal';
8
+ *
9
+ * // Option 1: LanceDB storage (recommended - all data in LanceDB)
10
+ * const storage = createWalStorage({ type: 'lancedb', dbPath: '.lancedb' });
11
+ *
12
+ * // Option 2: File storage (separate files for WAL state)
13
+ * // const storage = createWalStorage({ type: 'file', dir: '.lancedb' });
14
+ *
15
+ * const syncWal = new SyncWal(storage);
16
+ *
17
+ * // Start a sync task
18
+ * const taskId = await syncWal.startTask('notes', 1000, manifestHash);
19
+ *
20
+ * // Process files
21
+ * for (const file of files) {
22
+ * await syncWal.fileProcessed(taskId, file.path, file.chunks);
23
+ * }
24
+ *
25
+ * // Complete task
26
+ * await syncWal.completeTask(taskId);
27
+ * ```
28
+ */
29
+ import type { WalStorage } from './types.js';
30
+ export interface WalStorageConfig {
31
+ type: 'file' | 'lancedb' | 'postgres';
32
+ dir?: string;
33
+ dbPath?: string;
34
+ storageOptions?: Record<string, string>;
35
+ }
36
+ export declare function createWalStorage(config: WalStorageConfig): WalStorage;
37
+ export * from './types.js';
38
+ export { FileWalStorage } from './file-storage.js';
39
+ export { LanceDbWalStorage } from './lancedb-storage.js';
40
+ export { SyncWal } from './sync-wal.js';
41
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/indexer/wal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAQ7C,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC;IAEtC,GAAG,CAAC,EAAE,MAAM,CAAC;IAEb,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAIzC;AAMD,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,GAAG,UAAU,CAqBrE;AAOD,cAAc,YAAY,CAAC;AAG3B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAGzD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * Unified Sync WAL - Factory and Exports
3
+ *
4
+ * Example usage:
5
+ *
6
+ * ```typescript
7
+ * import { createWalStorage, SyncWal } from 'grepmind-core/indexer/wal';
8
+ *
9
+ * // Option 1: LanceDB storage (recommended - all data in LanceDB)
10
+ * const storage = createWalStorage({ type: 'lancedb', dbPath: '.lancedb' });
11
+ *
12
+ * // Option 2: File storage (separate files for WAL state)
13
+ * // const storage = createWalStorage({ type: 'file', dir: '.lancedb' });
14
+ *
15
+ * const syncWal = new SyncWal(storage);
16
+ *
17
+ * // Start a sync task
18
+ * const taskId = await syncWal.startTask('notes', 1000, manifestHash);
19
+ *
20
+ * // Process files
21
+ * for (const file of files) {
22
+ * await syncWal.fileProcessed(taskId, file.path, file.chunks);
23
+ * }
24
+ *
25
+ * // Complete task
26
+ * await syncWal.completeTask(taskId);
27
+ * ```
28
+ */
29
+ import { FileWalStorage } from './file-storage.js';
30
+ import { LanceDbWalStorage } from './lancedb-storage.js';
31
+ // ═══════════════════════════════════════════════════════════════════════════
32
+ // FACTORY FUNCTION
33
+ // ═══════════════════════════════════════════════════════════════════════════
34
+ export function createWalStorage(config) {
35
+ if (config.type === 'postgres') {
36
+ throw new Error('Postgres storage not implemented yet. See docs/sync-wal-design.md for schema.');
37
+ // Future: return new PostgresWalStorage(config.db!, config.projectId!);
38
+ }
39
+ if (config.type === 'lancedb') {
40
+ if (!config.dbPath) {
41
+ throw new Error('dbPath is required for LanceDB storage');
42
+ }
43
+ return new LanceDbWalStorage(config.dbPath, config.storageOptions);
44
+ }
45
+ // Default: file storage
46
+ if (!config.dir) {
47
+ throw new Error('dir is required for file storage');
48
+ }
49
+ return new FileWalStorage(config.dir);
50
+ }
51
+ // ═══════════════════════════════════════════════════════════════════════════
52
+ // EXPORTS
53
+ // ═══════════════════════════════════════════════════════════════════════════
54
+ // Types
55
+ export * from './types.js';
56
+ // Storage implementations
57
+ export { FileWalStorage } from './file-storage.js';
58
+ export { LanceDbWalStorage } from './lancedb-storage.js';
59
+ // SyncWal business logic
60
+ export { SyncWal } from './sync-wal.js';
61
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/indexer/wal/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAGH,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAkBzD,8EAA8E;AAC9E,mBAAmB;AACnB,8EAA8E;AAE9E,MAAM,UAAU,gBAAgB,CAAC,MAAwB;IACvD,IAAI,MAAM,CAAC,IAAI,KAAK,UAAU,EAAE,CAAC;QAC/B,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAC;QACF,wEAAwE;IAC1E,CAAC;IAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC9B,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACnB,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;QACD,OAAO,IAAI,iBAAiB,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,cAAc,CAAC,CAAC;IACrE,CAAC;IAED,wBAAwB;IACxB,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,kCAAkC,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,IAAI,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACxC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,0BAA0B;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAEzD,yBAAyB;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Integration Tests for Sync WAL
3
+ *
4
+ * Tests that verify complete workflows and edge cases:
5
+ * - Full sync cycle
6
+ * - Recovery scenarios
7
+ * - Multiple sync sessions
8
+ * - Stress testing
9
+ */
10
+ export {};
11
+ //# sourceMappingURL=integration.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"integration.test.d.ts","sourceRoot":"","sources":["../../../src/indexer/wal/integration.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG"}