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,415 @@
1
+ /**
2
+ * LanceDbWalStorage Tests
3
+ *
4
+ * Tests for LanceDB-based WAL storage implementation.
5
+ * Covers: lock operations, WAL operations, checkpoint, manifest.
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 { LanceDbWalStorage } from './lancedb-storage.js';
12
+ describe('LanceDbWalStorage', () => {
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-lancedb-test-'));
18
+ storage = new LanceDbWalStorage(tempDir);
19
+ await storage.initialize();
20
+ });
21
+ afterEach(async () => {
22
+ // Cleanup temp directory
23
+ await fs.rm(tempDir, { recursive: true, force: true });
24
+ });
25
+ // ═══════════════════════════════════════════════════════════════════════════
26
+ // LOCK OPERATIONS
27
+ // ═══════════════════════════════════════════════════════════════════════════
28
+ describe('Lock Operations', () => {
29
+ const createLock = (id = 'test-task-id') => ({
30
+ id,
31
+ type: 'notes',
32
+ pid: process.pid,
33
+ startedAt: Date.now(),
34
+ heartbeat: Date.now(),
35
+ });
36
+ it('should acquire lock when no lock exists', async () => {
37
+ const lock = createLock();
38
+ const acquired = await storage.acquireLock(lock);
39
+ expect(acquired).toBe(true);
40
+ const readLock = await storage.getLock();
41
+ expect(readLock).not.toBeNull();
42
+ expect(readLock?.type).toBe(lock.type);
43
+ expect(readLock?.pid).toBe(lock.pid);
44
+ });
45
+ it('should fail to acquire lock when lock already exists', async () => {
46
+ const lock1 = createLock('task-1');
47
+ const lock2 = createLock('task-2');
48
+ const acquired1 = await storage.acquireLock(lock1);
49
+ const acquired2 = await storage.acquireLock(lock2);
50
+ expect(acquired1).toBe(true);
51
+ expect(acquired2).toBe(false);
52
+ });
53
+ it('should release lock by ID', async () => {
54
+ const lock = createLock('my-task');
55
+ await storage.acquireLock(lock);
56
+ await storage.releaseLock('my-task');
57
+ const readLock = await storage.getLock();
58
+ expect(readLock).toBeNull();
59
+ });
60
+ it('should not release lock with wrong ID', async () => {
61
+ const lock = createLock('task-1');
62
+ await storage.acquireLock(lock);
63
+ await storage.releaseLock('wrong-id');
64
+ const readLock = await storage.getLock();
65
+ expect(readLock).not.toBeNull();
66
+ });
67
+ it('should return null when no lock exists', async () => {
68
+ const lock = await storage.getLock();
69
+ expect(lock).toBeNull();
70
+ });
71
+ it('should update heartbeat for matching lock', async () => {
72
+ const lock = createLock('my-task');
73
+ const originalHeartbeat = lock.heartbeat;
74
+ await storage.acquireLock(lock);
75
+ // Wait a bit to ensure time difference
76
+ await new Promise((resolve) => setTimeout(resolve, 10));
77
+ await storage.updateHeartbeat('my-task');
78
+ const readLock = await storage.getLock();
79
+ expect(readLock).not.toBeNull();
80
+ expect(readLock.heartbeat).toBeGreaterThan(originalHeartbeat);
81
+ });
82
+ it('should not update heartbeat for non-matching lock', async () => {
83
+ const lock = createLock('task-1');
84
+ await storage.acquireLock(lock);
85
+ const originalHeartbeat = lock.heartbeat;
86
+ await storage.updateHeartbeat('wrong-task');
87
+ const readLock = await storage.getLock();
88
+ expect(readLock.heartbeat).toBe(originalHeartbeat);
89
+ });
90
+ it('should force clear lock', async () => {
91
+ const lock = createLock();
92
+ await storage.acquireLock(lock);
93
+ await storage.forceClearLock();
94
+ const readLock = await storage.getLock();
95
+ expect(readLock).toBeNull();
96
+ });
97
+ it('should handle force clear when no lock exists', async () => {
98
+ // Should not throw
99
+ await expect(storage.forceClearLock()).resolves.not.toThrow();
100
+ });
101
+ describe('compareAndClearLock', () => {
102
+ it('should clear lock when it matches expected state', async () => {
103
+ const lock = createLock('task-1');
104
+ await storage.acquireLock(lock);
105
+ const cleared = await storage.compareAndClearLock(lock);
106
+ expect(cleared).toBe(true);
107
+ expect(await storage.getLock()).toBeNull();
108
+ });
109
+ it('should not clear lock when startedAt differs', async () => {
110
+ const lock = createLock('task-1');
111
+ await storage.acquireLock(lock);
112
+ const fakeLock = {
113
+ ...lock,
114
+ id: 'global',
115
+ startedAt: lock.startedAt + 1000,
116
+ };
117
+ const cleared = await storage.compareAndClearLock(fakeLock);
118
+ expect(cleared).toBe(false);
119
+ expect(await storage.getLock()).not.toBeNull();
120
+ });
121
+ it('should return true when no lock exists', async () => {
122
+ const lock = createLock('task-1');
123
+ const cleared = await storage.compareAndClearLock(lock);
124
+ expect(cleared).toBe(true);
125
+ });
126
+ });
127
+ });
128
+ // ═══════════════════════════════════════════════════════════════════════════
129
+ // WAL OPERATIONS
130
+ // ═══════════════════════════════════════════════════════════════════════════
131
+ describe('WAL Operations', () => {
132
+ const createEntry = (lsn, op = 'file:done') => ({
133
+ lsn,
134
+ ts: Date.now(),
135
+ op: op,
136
+ taskId: 'test-task',
137
+ data: { path: `/file-${lsn}.md`, chunks: 1 },
138
+ });
139
+ it('should append entry to WAL', async () => {
140
+ const entry = createEntry(1);
141
+ await storage.appendEntry(entry);
142
+ const entries = await storage.getEntriesFromLsn(0);
143
+ expect(entries).toHaveLength(1);
144
+ expect(entries[0].lsn).toBe(1);
145
+ });
146
+ it('should append multiple entries', async () => {
147
+ await storage.appendEntry(createEntry(1));
148
+ await storage.appendEntry(createEntry(2));
149
+ await storage.appendEntry(createEntry(3));
150
+ const entries = await storage.getEntriesFromLsn(0);
151
+ expect(entries).toHaveLength(3);
152
+ expect(entries.map((e) => e.lsn).sort()).toEqual([1, 2, 3]);
153
+ });
154
+ it('should filter entries by LSN', async () => {
155
+ await storage.appendEntry(createEntry(1));
156
+ await storage.appendEntry(createEntry(2));
157
+ await storage.appendEntry(createEntry(3));
158
+ await storage.appendEntry(createEntry(4));
159
+ const entries = await storage.getEntriesFromLsn(3);
160
+ expect(entries).toHaveLength(2);
161
+ expect(entries.map((e) => e.lsn).sort()).toEqual([3, 4]);
162
+ });
163
+ it('should return empty array when WAL does not exist', async () => {
164
+ const entries = await storage.getEntriesFromLsn(0);
165
+ expect(entries).toEqual([]);
166
+ });
167
+ it('should get all entries', async () => {
168
+ await storage.appendEntry(createEntry(1));
169
+ await storage.appendEntry(createEntry(2));
170
+ const entries = await storage.getAllEntries();
171
+ expect(entries).toHaveLength(2);
172
+ });
173
+ it('should truncate entries before LSN', async () => {
174
+ await storage.appendEntry(createEntry(1));
175
+ await storage.appendEntry(createEntry(2));
176
+ await storage.appendEntry(createEntry(3));
177
+ await storage.appendEntry(createEntry(4));
178
+ await storage.truncateBeforeLsn(3);
179
+ const entries = await storage.getAllEntries();
180
+ expect(entries).toHaveLength(2);
181
+ expect(entries.map((e) => e.lsn).sort()).toEqual([3, 4]);
182
+ });
183
+ it('should handle truncating all entries', async () => {
184
+ await storage.appendEntry(createEntry(1));
185
+ await storage.appendEntry(createEntry(2));
186
+ await storage.truncateBeforeLsn(100);
187
+ const entries = await storage.getAllEntries();
188
+ expect(entries).toHaveLength(0);
189
+ });
190
+ it('should clear WAL', async () => {
191
+ await storage.appendEntry(createEntry(1));
192
+ await storage.appendEntry(createEntry(2));
193
+ await storage.clearWal();
194
+ const entries = await storage.getAllEntries();
195
+ expect(entries).toHaveLength(0);
196
+ });
197
+ it('should preserve entry data through roundtrip', async () => {
198
+ const entry = {
199
+ lsn: 42,
200
+ ts: 1234567890,
201
+ op: 'file:done',
202
+ taskId: 'task-123',
203
+ data: {
204
+ path: '/some/path.md',
205
+ chunks: 5,
206
+ },
207
+ };
208
+ await storage.appendEntry(entry);
209
+ const entries = await storage.getAllEntries();
210
+ expect(entries[0].lsn).toEqual(entry.lsn);
211
+ expect(entries[0].ts).toEqual(entry.ts);
212
+ expect(entries[0].op).toEqual(entry.op);
213
+ expect(entries[0].taskId).toEqual(entry.taskId);
214
+ expect(entries[0].data).toEqual(entry.data);
215
+ });
216
+ });
217
+ // ═══════════════════════════════════════════════════════════════════════════
218
+ // CHECKPOINT OPERATIONS
219
+ // ═══════════════════════════════════════════════════════════════════════════
220
+ describe('Checkpoint Operations', () => {
221
+ const createCheckpoint = (lsn = 100) => ({
222
+ version: 1,
223
+ lsn,
224
+ createdAt: Date.now(),
225
+ task: {
226
+ id: 'task-123',
227
+ type: 'notes',
228
+ status: 'running',
229
+ startedAt: Date.now() - 10000,
230
+ totalFiles: 1000,
231
+ processedCount: lsn,
232
+ manifestHash: 'abc123',
233
+ },
234
+ stats: {
235
+ added: 50,
236
+ updated: 30,
237
+ deleted: 10,
238
+ failed: [],
239
+ },
240
+ });
241
+ it('should write and read checkpoint', async () => {
242
+ const checkpoint = createCheckpoint(100);
243
+ await storage.writeCheckpoint(checkpoint);
244
+ const readCheckpoint = await storage.getCheckpoint();
245
+ expect(readCheckpoint).toEqual(checkpoint);
246
+ });
247
+ it('should return null when checkpoint does not exist', async () => {
248
+ const checkpoint = await storage.getCheckpoint();
249
+ expect(checkpoint).toBeNull();
250
+ });
251
+ it('should overwrite existing checkpoint', async () => {
252
+ await storage.writeCheckpoint(createCheckpoint(100));
253
+ await storage.writeCheckpoint(createCheckpoint(200));
254
+ const checkpoint = await storage.getCheckpoint();
255
+ expect(checkpoint?.lsn).toBe(200);
256
+ expect(checkpoint?.task.processedCount).toBe(200);
257
+ });
258
+ it('should clear checkpoint', async () => {
259
+ await storage.writeCheckpoint(createCheckpoint());
260
+ await storage.clearCheckpoint();
261
+ const checkpoint = await storage.getCheckpoint();
262
+ expect(checkpoint).toBeNull();
263
+ });
264
+ it('should handle checkpoint with failed files', async () => {
265
+ const checkpoint = createCheckpoint();
266
+ checkpoint.stats.failed = [
267
+ { path: '/fail1.md', error: 'Error 1', retries: 3 },
268
+ { path: '/fail2.md', error: 'Error 2', retries: 2 },
269
+ ];
270
+ await storage.writeCheckpoint(checkpoint);
271
+ const read = await storage.getCheckpoint();
272
+ expect(read?.stats.failed).toHaveLength(2);
273
+ expect(read?.stats.failed[0].path).toBe('/fail1.md');
274
+ });
275
+ });
276
+ // ═══════════════════════════════════════════════════════════════════════════
277
+ // MANIFEST OPERATIONS
278
+ // ═══════════════════════════════════════════════════════════════════════════
279
+ describe('Manifest Operations', () => {
280
+ const createManifest = () => ({
281
+ version: 1,
282
+ current: {
283
+ id: 'task-123',
284
+ type: 'notes',
285
+ status: 'running',
286
+ startedAt: Date.now() - 10000,
287
+ updatedAt: Date.now(),
288
+ phase: 'indexing',
289
+ totalFiles: 1000,
290
+ processedFiles: 500,
291
+ currentFile: '/current.md',
292
+ added: 100,
293
+ updated: 50,
294
+ deleted: 10,
295
+ failedFiles: [],
296
+ manifestHash: 'hash123',
297
+ lastCheckpointLsn: 100,
298
+ },
299
+ lastCompleted: null,
300
+ walLsn: 150,
301
+ lastCheckpointLsn: 100,
302
+ });
303
+ it('should write and read manifest', async () => {
304
+ const manifest = createManifest();
305
+ await storage.writeManifest(manifest);
306
+ const read = await storage.getManifest();
307
+ expect(read).toEqual(manifest);
308
+ });
309
+ it('should return null when manifest does not exist', async () => {
310
+ const manifest = await storage.getManifest();
311
+ expect(manifest).toBeNull();
312
+ });
313
+ it('should update manifest', async () => {
314
+ const manifest = createManifest();
315
+ await storage.writeManifest(manifest);
316
+ manifest.current.processedFiles = 600;
317
+ await storage.writeManifest(manifest);
318
+ const read = await storage.getManifest();
319
+ expect(read?.current?.processedFiles).toBe(600);
320
+ });
321
+ it('should clear manifest', async () => {
322
+ await storage.writeManifest(createManifest());
323
+ await storage.clearManifest();
324
+ const manifest = await storage.getManifest();
325
+ expect(manifest).toBeNull();
326
+ });
327
+ it('should handle manifest with lastCompleted', async () => {
328
+ const manifest = createManifest();
329
+ manifest.current = null;
330
+ manifest.lastCompleted = {
331
+ id: 'old-task',
332
+ type: 'code',
333
+ status: 'completed',
334
+ startedAt: Date.now() - 100000,
335
+ completedAt: Date.now() - 50000,
336
+ totalFiles: 500,
337
+ stats: { added: 200, updated: 100, deleted: 50 },
338
+ failedCount: 0,
339
+ };
340
+ await storage.writeManifest(manifest);
341
+ const read = await storage.getManifest();
342
+ expect(read?.lastCompleted?.id).toBe('old-task');
343
+ expect(read?.lastCompleted?.status).toBe('completed');
344
+ });
345
+ });
346
+ // ═══════════════════════════════════════════════════════════════════════════
347
+ // CLEANUP
348
+ // ═══════════════════════════════════════════════════════════════════════════
349
+ describe('Cleanup', () => {
350
+ it('should clear all tables', async () => {
351
+ // Create all data
352
+ await storage.acquireLock({
353
+ id: 'task',
354
+ type: 'notes',
355
+ pid: process.pid,
356
+ startedAt: Date.now(),
357
+ heartbeat: Date.now(),
358
+ });
359
+ await storage.appendEntry({
360
+ lsn: 1,
361
+ ts: Date.now(),
362
+ op: 'file:done',
363
+ taskId: 'task',
364
+ });
365
+ await storage.writeCheckpoint({
366
+ version: 1,
367
+ lsn: 1,
368
+ createdAt: Date.now(),
369
+ task: {
370
+ id: 'task',
371
+ type: 'notes',
372
+ status: 'running',
373
+ startedAt: Date.now(),
374
+ totalFiles: 100,
375
+ processedCount: 1,
376
+ },
377
+ stats: { added: 0, updated: 0, deleted: 0, failed: [] },
378
+ });
379
+ await storage.writeManifest({
380
+ version: 1,
381
+ current: null,
382
+ lastCompleted: null,
383
+ walLsn: 1,
384
+ lastCheckpointLsn: 1,
385
+ });
386
+ // Clear all
387
+ await storage.clear();
388
+ // All should be null/empty
389
+ expect(await storage.getLock()).toBeNull();
390
+ expect(await storage.getAllEntries()).toHaveLength(0);
391
+ expect(await storage.getCheckpoint()).toBeNull();
392
+ expect(await storage.getManifest()).toBeNull();
393
+ });
394
+ });
395
+ // ═══════════════════════════════════════════════════════════════════════════
396
+ // UTILITY METHODS
397
+ // ═══════════════════════════════════════════════════════════════════════════
398
+ describe('Utility Methods', () => {
399
+ it('should detect current process as running', () => {
400
+ expect(LanceDbWalStorage.isPidRunning(process.pid)).toBe(true);
401
+ });
402
+ it('should detect non-existent PID as not running', () => {
403
+ // Use a very high PID that's unlikely to exist
404
+ expect(LanceDbWalStorage.isPidRunning(999999999)).toBe(false);
405
+ });
406
+ it('should return correct table names', () => {
407
+ const names = storage.getTableNames();
408
+ expect(names.lock).toBe('sync_lock');
409
+ expect(names.wal).toBe('sync_wal');
410
+ expect(names.checkpoint).toBe('sync_checkpoint');
411
+ expect(names.manifest).toBe('sync_manifest');
412
+ });
413
+ });
414
+ });
415
+ //# sourceMappingURL=lancedb-storage.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lancedb-storage.test.js","sourceRoot":"","sources":["../../../src/indexer/wal/lancedb-storage.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * SyncWal - Unified Write-Ahead Log for Sync Tasks
3
+ *
4
+ * PostgreSQL-inspired WAL with:
5
+ * - LSN (Log Sequence Number) for recovery positioning
6
+ * - Checkpoint + truncate for bounded WAL size
7
+ * - Offset-based recovery (no paths stored)
8
+ * - Global lock with heartbeat for stale detection
9
+ * - Cancellation support
10
+ */
11
+ import type { WalStorage, ManifestData, SyncType, TaskPhase, SyncTask, SyncTaskSummary, RecoveryPlan, SyncProgress, LockStatus, SyncWalConfig } from './types.js';
12
+ export declare class SyncWal {
13
+ private storage;
14
+ private config;
15
+ private currentLsn;
16
+ private currentTaskId;
17
+ private currentTaskType;
18
+ private totalFiles;
19
+ private manifestHash;
20
+ private startedAt;
21
+ private phase;
22
+ private currentFile;
23
+ private memtable;
24
+ private filesSinceCheckpoint;
25
+ private checkpointProcessedCount;
26
+ private lastCheckpointLsn;
27
+ private heartbeatInterval?;
28
+ private cancelRequested;
29
+ private pauseRequested;
30
+ private isPaused;
31
+ private onProgressCallback?;
32
+ private onEmbeddingProgressCallback?;
33
+ private onSubPhaseProgressCallback?;
34
+ constructor(storage: WalStorage, config?: Partial<SyncWalConfig>);
35
+ /**
36
+ * Initialize SyncWal - call on server start
37
+ * Handles stale lock detection and recovery
38
+ */
39
+ initialize(): Promise<RecoveryPlan | null>;
40
+ /**
41
+ * Start a new sync task
42
+ */
43
+ startTask(type: SyncType, totalFiles: number, manifestHash?: string): Promise<string>;
44
+ /**
45
+ * Mark a file as successfully processed
46
+ */
47
+ fileProcessed(taskId: string, path: string, chunks: number, action?: 'added' | 'updated'): Promise<void>;
48
+ /**
49
+ * Mark a file as failed
50
+ */
51
+ fileFailed(taskId: string, path: string, error: string, retries: number): Promise<void>;
52
+ /**
53
+ * Mark file as deleted
54
+ */
55
+ fileDeleted(taskId: string, path: string): Promise<void>;
56
+ /**
57
+ * Complete the sync task
58
+ */
59
+ completeTask(taskId: string): Promise<void>;
60
+ /**
61
+ * Fail the sync task
62
+ */
63
+ failTask(taskId: string, error: string): Promise<void>;
64
+ /**
65
+ * Cancel the sync task
66
+ */
67
+ cancelTask(taskId: string): Promise<void>;
68
+ /**
69
+ * Set task phase
70
+ */
71
+ setPhase(phase: TaskPhase): void;
72
+ checkpoint(): Promise<void>;
73
+ /**
74
+ * Check for incomplete task and return recovery plan
75
+ */
76
+ recover(): Promise<RecoveryPlan | null>;
77
+ /**
78
+ * Resume a task from recovery plan
79
+ */
80
+ resumeTask(plan: RecoveryPlan): Promise<void>;
81
+ getManifest(): Promise<ManifestData | null>;
82
+ getCurrentTask(): Promise<SyncTask | null>;
83
+ getLastCompleted(): Promise<SyncTaskSummary | null>;
84
+ getProgress(): SyncProgress | null;
85
+ private acquireLock;
86
+ releaseLock(): Promise<void>;
87
+ isLocked(): Promise<LockStatus>;
88
+ forceClearStaleLock(): Promise<boolean>;
89
+ /**
90
+ * Clear all WAL state (lock, checkpoint, WAL entries, manifest).
91
+ * Use this to reset sync state when stuck in recovery loop.
92
+ * WARNING: This will lose any recovery information for incomplete syncs.
93
+ */
94
+ clear(): Promise<void>;
95
+ startHeartbeat(): void;
96
+ stopHeartbeat(): void;
97
+ requestCancel(taskId: string): Promise<void>;
98
+ isCancelled(taskId: string): boolean;
99
+ /**
100
+ * Request pause for the current sync task
101
+ */
102
+ requestPause(taskId: string): void;
103
+ /**
104
+ * Resume a paused sync task
105
+ */
106
+ requestResume(taskId: string): void;
107
+ /**
108
+ * Check if task should pause (call from indexer loop)
109
+ */
110
+ shouldPause(taskId: string): boolean;
111
+ /**
112
+ * Wait while paused (call from indexer loop)
113
+ * Returns true if resumed, false if cancelled during pause
114
+ */
115
+ waitWhilePaused(taskId: string): Promise<boolean>;
116
+ /**
117
+ * Check if currently paused
118
+ */
119
+ isPausedNow(): boolean;
120
+ onProgress(callback: (progress: SyncProgress) => void): void;
121
+ onEmbeddingProgress(callback: (current: number, total: number) => void): void;
122
+ /**
123
+ * Get callback for embedding progress (to pass to embedding provider)
124
+ */
125
+ getEmbeddingProgressCallback(): ((current: number, total: number) => void) | undefined;
126
+ onSubPhaseProgress(callback: (current: number, total: number, subPhase: string) => void): void;
127
+ /**
128
+ * Emit sub-phase progress (for graph/tree building phases)
129
+ */
130
+ emitSubPhaseProgress(current: number, total: number, subPhase: string): void;
131
+ private emitProgress;
132
+ shutdown(): Promise<void>;
133
+ private getCumulativeStats;
134
+ private cleanup;
135
+ /**
136
+ * Get current task ID (for external use)
137
+ */
138
+ getCurrentTaskId(): string | null;
139
+ /**
140
+ * Check if sync is currently running
141
+ */
142
+ isRunning(): boolean;
143
+ }
144
+ //# sourceMappingURL=sync-wal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sync-wal.d.ts","sourceRoot":"","sources":["../../../src/indexer/wal/sync-wal.ts"],"names":[],"mappings":"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"}