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
package/dist/index.js ADDED
@@ -0,0 +1,67 @@
1
+ // grepmind-core - Core indexing library
2
+ // No MCP dependencies, no singletons
3
+ // Config types
4
+ export * from './config/types.js';
5
+ // Domain types
6
+ export * from './types.js';
7
+ // Git utilities
8
+ export * from './git.js';
9
+ // Vault utilities
10
+ export { resolveNotePath, globVaults, getVaultRoot, toRelativePath, getVaultIndex, createVaultUtils, } from './utils/vault.js';
11
+ // Indexer
12
+ export { Indexer, } from './indexer/index.js';
13
+ // Branch Indexer (overlay support for feature branches)
14
+ export { BranchIndexer, createBranchIndexer, } from './indexer/branch.js';
15
+ // Parser
16
+ export { parseNote, extractLinks, extractHashtags, extractTitle, generateContentHash, generateChunkId, } from './indexer/parser.js';
17
+ // Chunker
18
+ export { chunkNote } from './indexer/chunker.js';
19
+ // Embeddings
20
+ export { WasmEmbeddingProvider, VoyageEmbeddingProvider, OllamaEmbeddingProvider, LocalAIEmbeddingProvider, createEmbeddingProvider, getModelDimensions, } from './indexer/embeddings.js';
21
+ // Reranking
22
+ export { WasmRerankerProvider, VoyageRerankerProvider, LocalAIRerankerProvider, normalizeScores, truncateDocument, batchArray, createRerankerProvider, } from './indexer/reranking.js';
23
+ // Code indexing
24
+ export { TreeSitterParser, createTreeSitterParser, } from './indexer/code/parser.js';
25
+ export { symbolsToChunks, createFileChunk, buildEmbeddingText, smartTruncate, generateCodeChunkId, applyStableChunkIds, extractSignature, extractDocstring, } from './indexer/code/chunker.js';
26
+ export { CodeIndexWal, } from './indexer/code/wal.js';
27
+ // Unified SyncWal (for both notes and code)
28
+ export { SyncWal, FileWalStorage, createWalStorage, DEFAULT_SYNC_WAL_CONFIG, } from './indexer/wal/index.js';
29
+ // CodeIndexer
30
+ export { CodeIndexer, createCodeIndexer, normalizeIdentifiers, withIndexLock, } from './indexer/code/index.js';
31
+ // Tree indexing
32
+ export { TreeIndexer, } from './indexer/code/tree/index.js';
33
+ // Code graph indexing
34
+ export { GraphIndexer, ReverseIndexBuilder, QUALITY_PRESETS, detectChanges, } from './indexer/code/graph/index.js';
35
+ export { extractFacts, IMPORT_QUERY, EXPORT_QUERY, } from './indexer/code/graph/facts.js';
36
+ export { resolveModule, loadTSConfig, ExportMapBuilder, } from './indexer/code/graph/resolver.js';
37
+ export { analyzeFileSemantics, getImportClosure, loadTypeScript, } from './indexer/code/graph/semantic.js';
38
+ export { extractEmbedded, extractTemplateContent, parseGraphQLContent, parseCSSContent, } from './indexer/code/graph/embedded.js';
39
+ export { buildNodeEmbeddingText, hybridSearch, rerankWithGraph, } from './indexer/code/graph/queries.js';
40
+ // Code Branch Indexer (overlay support for feature branches)
41
+ export { CodeBranchIndexer, createCodeBranchIndexer, } from './indexer/code/branch.js';
42
+ export { withRetry, withRetryResult, sleep, isRetryableError, calculateBackoff, getRetryAfter, DEFAULT_RETRY_OPTIONS, } from './indexer/code/retry.js';
43
+ // Language extractors
44
+ export { languageRegistry, inferSymbolTypeFromNode, } from './indexer/code/languages/index.js';
45
+ export { genericExtractor, GenericExtractor, createGenericExtractor } from './indexer/code/languages/generic.js';
46
+ export { cssExtractor, CssExtractor } from './indexer/code/languages/css.js';
47
+ export { graphqlExtractor, GraphqlExtractor } from './indexer/code/languages/graphql.js';
48
+ export { jsonExtractor, JsonExtractor } from './indexer/code/languages/json.js';
49
+ export { yamlExtractor, YamlExtractor } from './indexer/code/languages/yaml.js';
50
+ export { htmlExtractor, HtmlExtractor } from './indexer/code/languages/html.js';
51
+ export { bashExtractor, BashExtractor } from './indexer/code/languages/bash.js';
52
+ // Watcher
53
+ export { Watcher, createWatcher, } from './indexer/watcher.js';
54
+ // Git Sync
55
+ export { GitSyncer, createGitSyncer, } from './indexer/git-sync.js';
56
+ // Search - Grep
57
+ export { escapeSqlLiteral, escapeSqlLikePattern, buildPathPrefixFilter, buildJsonStringArrayContainsAnyFilter, combineFilters, } from './search/fts.js';
58
+ export { Grep, createGrep, highlightMatches, } from './search/grep.js';
59
+ export { HybridGrep, } from './search/hybrid-grep.js';
60
+ export { executeRg, buildRgArgs, processRgMessage, } from './search/rg-executor.js';
61
+ export { parseRgQuery, resolveRegexMode, } from './search/rg-parser/index.js';
62
+ export { extractLiterals, } from './search/rg-parser/extractor.js';
63
+ export { decideStrategy, } from './search/rg-parser/strategy.js';
64
+ export { buildFtsQuery, escapeTantivyTerm, } from './search/rg-parser/fts-builder.js';
65
+ // Search - Knowledge Graph Explorer
66
+ export { KnowledgeGraphExplorer, createKnowledgeGraphExplorer, } from './search/explore.js';
67
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,121 @@
1
+ /**
2
+ * Branch-aware indexer with overlay support.
3
+ * All dependencies are passed via constructor (no singletons).
4
+ *
5
+ * Architecture:
6
+ * - Base index: Full index for main branch (.lancedb/)
7
+ * - Overlay index: Diff index for feature branches (.lancedb/overlays/{branch}/)
8
+ *
9
+ * On feature branches:
10
+ * - Only changed/new chunks are stored in overlay
11
+ * - Deleted chunk IDs are tracked separately
12
+ * - Search merges base + overlay - deleted
13
+ */
14
+ import type { IndexerConfig } from '../config/types.js';
15
+ import type { EmbeddingProvider } from './embeddings.js';
16
+ import type { VaultUtils } from '../utils/vault.js';
17
+ import type { SearchResult, NotesError } from '../types.js';
18
+ import { Indexer } from './index.js';
19
+ import { type GitInfo } from '../git.js';
20
+ /**
21
+ * Dependencies required by the BranchIndexer.
22
+ */
23
+ export interface BranchIndexerDependencies {
24
+ config: IndexerConfig;
25
+ embeddingProvider: EmbeddingProvider;
26
+ vaultUtils: VaultUtils;
27
+ indexer: Indexer;
28
+ }
29
+ /**
30
+ * BranchIndexer - branch-aware indexing with overlay support.
31
+ * All dependencies are passed via constructor (no singletons).
32
+ */
33
+ export declare class BranchIndexer {
34
+ private config;
35
+ private embeddingProvider;
36
+ private vaultUtils;
37
+ private indexer;
38
+ private db;
39
+ private overlayTable;
40
+ private deletedTable;
41
+ private gitInfo;
42
+ private initialized;
43
+ constructor(deps: BranchIndexerDependencies);
44
+ /**
45
+ * Get overlay directory for a branch.
46
+ */
47
+ private getOverlayPath;
48
+ /**
49
+ * Get embedding dimensions from provider.
50
+ */
51
+ private getDimensions;
52
+ /**
53
+ * Initialize branch indexer.
54
+ * Returns null if on main branch (use base indexer directly).
55
+ */
56
+ initialize(): Promise<GitInfo | null>;
57
+ private ensureOverlayTable;
58
+ private ensureDeletedTable;
59
+ /**
60
+ * Get all deleted chunk IDs for current branch.
61
+ */
62
+ private getDeletedIds;
63
+ /**
64
+ * Get all overlay chunk IDs.
65
+ */
66
+ private getOverlayIds;
67
+ /**
68
+ * Index a chunk in the overlay.
69
+ */
70
+ private indexOverlayChunk;
71
+ /**
72
+ * Mark chunks as deleted in overlay.
73
+ */
74
+ private markDeleted;
75
+ /**
76
+ * Index a file in the current branch context.
77
+ * - On main: indexes directly to base
78
+ * - On feature: indexes to overlay
79
+ */
80
+ indexFile(filePath: string): Promise<void | NotesError>;
81
+ /**
82
+ * Remove a file from index in current branch context.
83
+ */
84
+ removeFile(filePath: string): Promise<void>;
85
+ /**
86
+ * Search with overlay support.
87
+ * Merges results from base + overlay, excluding deleted.
88
+ */
89
+ search(query: string, options?: {
90
+ limit?: number;
91
+ threshold?: number;
92
+ tags?: string[];
93
+ }): Promise<SearchResult[] | NotesError>;
94
+ /**
95
+ * Sync overlay with current branch changes.
96
+ * Call this when switching to a feature branch.
97
+ */
98
+ syncOverlay(): Promise<{
99
+ indexed: number;
100
+ deleted: number;
101
+ errors: NotesError[];
102
+ }>;
103
+ /**
104
+ * Clear overlay for current branch.
105
+ */
106
+ clearOverlay(): Promise<void>;
107
+ /**
108
+ * Get info about current indexing context.
109
+ */
110
+ getInfo(): Promise<{
111
+ branch: string | null;
112
+ isMainBranch: boolean;
113
+ overlayChunks: number;
114
+ deletedChunks: number;
115
+ }>;
116
+ }
117
+ /**
118
+ * Factory function to create BranchIndexer.
119
+ */
120
+ export declare function createBranchIndexer(deps: BranchIndexerDependencies): BranchIndexer;
121
+ //# sourceMappingURL=branch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"branch.d.ts","sourceRoot":"","sources":["../../src/indexer/branch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAQH,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,oBAAoB,CAAC;AACxD,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,KAAK,EAAa,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAIvE,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAIL,KAAK,OAAO,EACb,MAAM,WAAW,CAAC;AAuBnB;;GAEG;AACH,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,aAAa,CAAC;IACtB,iBAAiB,EAAE,iBAAiB,CAAC;IACrC,UAAU,EAAE,UAAU,CAAC;IACvB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED;;;GAGG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,MAAM,CAAgB;IAC9B,OAAO,CAAC,iBAAiB,CAAoB;IAC7C,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,OAAO,CAAU;IAEzB,OAAO,CAAC,EAAE,CAAmC;IAC7C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,OAAO,CAAwB;IACvC,OAAO,CAAC,WAAW,CAAS;gBAEhB,IAAI,EAAE,yBAAyB;IAO3C;;OAEG;IACH,OAAO,CAAC,cAAc;IAItB;;OAEG;IACH,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACG,UAAU,IAAI,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;YA6C7B,kBAAkB;YAsBlB,kBAAkB;IAchC;;OAEG;YACW,aAAa;IAO3B;;OAEG;YACW,aAAa;IAO3B;;OAEG;YACW,iBAAiB;IA0C/B;;OAEG;YACW,WAAW;IAwBzB;;;;OAIG;IACG,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,UAAU,CAAC;IA4C7D;;OAEG;IACG,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAsCjD;;;OAGG;IACG,MAAM,CACV,KAAK,EAAE,MAAM,EACb,OAAO,GAAE;QACP,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;KACZ,GACL,OAAO,CAAC,YAAY,EAAE,GAAG,UAAU,CAAC;IA+FvC;;;OAGG;IACG,WAAW,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,UAAU,EAAE,CAAA;KAAE,CAAC;IAgCxF;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,IAAI,CAAC;IAgBnC;;OAEG;IACG,OAAO,IAAI,OAAO,CAAC;QACvB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QACtB,YAAY,EAAE,OAAO,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;QACtB,aAAa,EAAE,MAAM,CAAC;KACvB,CAAC;CAqBH;AAUD;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,yBAAyB,GAAG,aAAa,CAElF"}
@@ -0,0 +1,451 @@
1
+ /**
2
+ * Branch-aware indexer with overlay support.
3
+ * All dependencies are passed via constructor (no singletons).
4
+ *
5
+ * Architecture:
6
+ * - Base index: Full index for main branch (.lancedb/)
7
+ * - Overlay index: Diff index for feature branches (.lancedb/overlays/{branch}/)
8
+ *
9
+ * On feature branches:
10
+ * - Only changed/new chunks are stored in overlay
11
+ * - Deleted chunk IDs are tracked separately
12
+ * - Search merges base + overlay - deleted
13
+ */
14
+ import * as lancedb from '@lancedb/lancedb';
15
+ import { createHash } from 'node:crypto';
16
+ import fs from 'node:fs/promises';
17
+ import path from 'node:path';
18
+ import { createError, isError } from '../types.js';
19
+ import { parseNote, generateContentHash } from './parser.js';
20
+ import { chunkNote } from './chunker.js';
21
+ import { getGitInfo, getChangedFilesFromMain, sanitizeBranchName, } from '../git.js';
22
+ /**
23
+ * BranchIndexer - branch-aware indexing with overlay support.
24
+ * All dependencies are passed via constructor (no singletons).
25
+ */
26
+ export class BranchIndexer {
27
+ config;
28
+ embeddingProvider;
29
+ vaultUtils;
30
+ indexer;
31
+ db = null;
32
+ overlayTable = null;
33
+ deletedTable = null;
34
+ gitInfo = null;
35
+ initialized = false;
36
+ constructor(deps) {
37
+ this.config = deps.config;
38
+ this.embeddingProvider = deps.embeddingProvider;
39
+ this.vaultUtils = deps.vaultUtils;
40
+ this.indexer = deps.indexer;
41
+ }
42
+ /**
43
+ * Get overlay directory for a branch.
44
+ */
45
+ getOverlayPath(branch) {
46
+ return path.join(this.config.lancedb.dbPath, 'overlays', sanitizeBranchName(branch));
47
+ }
48
+ /**
49
+ * Get embedding dimensions from provider.
50
+ */
51
+ getDimensions() {
52
+ return this.embeddingProvider.getDimensions();
53
+ }
54
+ /**
55
+ * Initialize branch indexer.
56
+ * Returns null if on main branch (use base indexer directly).
57
+ */
58
+ async initialize() {
59
+ if (this.initialized)
60
+ return this.gitInfo;
61
+ // Ensure base indexer is initialized
62
+ await this.indexer.initialize();
63
+ // Get git info from first vault path
64
+ const vaultPath = this.config.vaultPaths[0];
65
+ this.gitInfo = getGitInfo(vaultPath);
66
+ // If not in git repo or on main branch, no overlay needed
67
+ if (!this.gitInfo || this.gitInfo.isMainBranch) {
68
+ this.initialized = true;
69
+ return this.gitInfo;
70
+ }
71
+ // Overlay mode is only supported for local LanceDB paths.
72
+ if (/^[a-z][a-z0-9+.-]*:\/\//i.test(this.config.lancedb.dbPath)) {
73
+ this.initialized = true;
74
+ return this.gitInfo;
75
+ }
76
+ // Create overlay directory
77
+ const overlayPath = this.getOverlayPath(this.gitInfo.branch);
78
+ await fs.mkdir(overlayPath, { recursive: true });
79
+ // Connect to overlay database
80
+ this.db = await lancedb.connect(overlayPath, {
81
+ storageOptions: this.config.lancedb.storageOptions,
82
+ });
83
+ const tableNames = await this.db.tableNames();
84
+ // Open or create overlay tables
85
+ if (tableNames.includes('overlay_chunks')) {
86
+ this.overlayTable = await this.db.openTable('overlay_chunks');
87
+ }
88
+ if (tableNames.includes('deleted_chunks')) {
89
+ this.deletedTable = await this.db.openTable('deleted_chunks');
90
+ }
91
+ this.initialized = true;
92
+ return this.gitInfo;
93
+ }
94
+ async ensureOverlayTable() {
95
+ if (this.overlayTable)
96
+ return this.overlayTable;
97
+ const dimensions = this.getDimensions();
98
+ const sampleData = [{
99
+ id: '__init__',
100
+ vector: new Array(dimensions).fill(0),
101
+ path: '',
102
+ section: '',
103
+ title: '',
104
+ tags: '[]',
105
+ links: '[]',
106
+ modified: 0,
107
+ content_hash: '',
108
+ content: '',
109
+ }];
110
+ this.overlayTable = await this.db.createTable('overlay_chunks', sampleData, { mode: 'overwrite' });
111
+ await this.overlayTable.delete("id = '__init__'");
112
+ return this.overlayTable;
113
+ }
114
+ async ensureDeletedTable() {
115
+ if (this.deletedTable)
116
+ return this.deletedTable;
117
+ const sampleData = [{
118
+ id: '__init__',
119
+ path: '',
120
+ deleted_at: 0,
121
+ }];
122
+ this.deletedTable = await this.db.createTable('deleted_chunks', sampleData, { mode: 'overwrite' });
123
+ await this.deletedTable.delete("id = '__init__'");
124
+ return this.deletedTable;
125
+ }
126
+ /**
127
+ * Get all deleted chunk IDs for current branch.
128
+ */
129
+ async getDeletedIds() {
130
+ if (!this.deletedTable)
131
+ return new Set();
132
+ const results = await this.deletedTable.query().select(['id']).toArray();
133
+ return new Set(results.map(r => r.id));
134
+ }
135
+ /**
136
+ * Get all overlay chunk IDs.
137
+ */
138
+ async getOverlayIds() {
139
+ if (!this.overlayTable)
140
+ return new Set();
141
+ const results = await this.overlayTable.query().select(['id']).toArray();
142
+ return new Set(results.map(r => r.id));
143
+ }
144
+ /**
145
+ * Index a chunk in the overlay.
146
+ */
147
+ async indexOverlayChunk(chunk, modified) {
148
+ const contentHash = generateContentHash(chunk.content);
149
+ const table = await this.ensureOverlayTable();
150
+ // Check if chunk already exists with same content
151
+ const existing = await table.query()
152
+ .where(`id = '${chunk.id}'`)
153
+ .toArray();
154
+ if (existing.length > 0 && existing[0].content_hash === contentHash) {
155
+ return chunk.id;
156
+ }
157
+ const embedding = await this.embeddingProvider.getEmbedding(chunk.content);
158
+ if (isError(embedding))
159
+ return embedding;
160
+ // Delete existing if present
161
+ if (existing.length > 0) {
162
+ await table.delete(`id = '${chunk.id}'`);
163
+ }
164
+ // Also remove from deleted table if it was there
165
+ const deletedTable = await this.ensureDeletedTable();
166
+ await deletedTable.delete(`id = '${chunk.id}'`);
167
+ // Insert new chunk
168
+ await table.add([{
169
+ id: chunk.id,
170
+ vector: embedding,
171
+ path: chunk.path,
172
+ section: chunk.section,
173
+ title: chunk.title,
174
+ tags: JSON.stringify(chunk.tags),
175
+ links: JSON.stringify(chunk.links),
176
+ modified,
177
+ content_hash: contentHash,
178
+ content: chunk.content,
179
+ }]);
180
+ return chunk.id;
181
+ }
182
+ /**
183
+ * Mark chunks as deleted in overlay.
184
+ */
185
+ async markDeleted(chunkIds, filePath) {
186
+ if (chunkIds.length === 0)
187
+ return;
188
+ const table = await this.ensureDeletedTable();
189
+ const now = Date.now();
190
+ for (const id of chunkIds) {
191
+ // Remove from overlay if exists
192
+ if (this.overlayTable) {
193
+ await this.overlayTable.delete(`id = '${id}'`);
194
+ }
195
+ // Check if not already marked
196
+ const existing = await table.query().where(`id = '${id}'`).toArray();
197
+ if (existing.length === 0) {
198
+ await table.add([{
199
+ id,
200
+ path: filePath,
201
+ deleted_at: now,
202
+ }]);
203
+ }
204
+ }
205
+ }
206
+ /**
207
+ * Index a file in the current branch context.
208
+ * - On main: indexes directly to base
209
+ * - On feature: indexes to overlay
210
+ */
211
+ async indexFile(filePath) {
212
+ const gitInfo = await this.initialize();
213
+ // On main branch, use base indexer
214
+ if (!gitInfo || gitInfo.isMainBranch) {
215
+ return this.indexer.indexFile(filePath);
216
+ }
217
+ // On feature branch, index to overlay
218
+ let absolutePath;
219
+ if (path.isAbsolute(filePath)) {
220
+ absolutePath = filePath;
221
+ }
222
+ else {
223
+ const resolved = this.vaultUtils.resolveNotePath(filePath);
224
+ if (!resolved) {
225
+ return createError('FILE_NOT_FOUND', `File not found in any vault: ${filePath}`);
226
+ }
227
+ absolutePath = resolved;
228
+ }
229
+ const relativePath = this.vaultUtils.toRelativePath(absolutePath);
230
+ try {
231
+ const content = await fs.readFile(absolutePath, 'utf-8');
232
+ const stat = await fs.stat(absolutePath);
233
+ const note = parseNote(relativePath, content);
234
+ const chunks = chunkNote(note, this.config.chunking);
235
+ // Remove old overlay chunks for this file
236
+ if (this.overlayTable) {
237
+ await this.overlayTable.delete(`path = '${relativePath.replace(/'/g, "''")}'`);
238
+ }
239
+ // Index new chunks to overlay
240
+ for (const chunk of chunks) {
241
+ const result = await this.indexOverlayChunk(chunk, stat.mtimeMs);
242
+ if (isError(result))
243
+ return result;
244
+ }
245
+ }
246
+ catch (err) {
247
+ return createError('INDEX_FILE_ERROR', `Failed to index ${relativePath}`, {
248
+ error: err.message,
249
+ });
250
+ }
251
+ }
252
+ /**
253
+ * Remove a file from index in current branch context.
254
+ */
255
+ async removeFile(filePath) {
256
+ const gitInfo = await this.initialize();
257
+ const relativePath = path.isAbsolute(filePath)
258
+ ? this.vaultUtils.toRelativePath(filePath)
259
+ : filePath;
260
+ // On main branch, use base indexer
261
+ if (!gitInfo || gitInfo.isMainBranch) {
262
+ return this.indexer.removeFile(filePath);
263
+ }
264
+ // On feature branch:
265
+ // 1. Remove from overlay
266
+ if (this.overlayTable) {
267
+ // Get chunk IDs before deleting
268
+ const chunks = await this.overlayTable.query()
269
+ .where(`path = '${relativePath.replace(/'/g, "''")}'`)
270
+ .select(['id'])
271
+ .toArray();
272
+ await this.overlayTable.delete(`path = '${relativePath.replace(/'/g, "''")}'`);
273
+ // Mark as deleted (they might exist in base)
274
+ const chunkIds = chunks.map(c => c.id);
275
+ await this.markDeleted(chunkIds, relativePath);
276
+ }
277
+ // 2. Also mark base chunks as deleted
278
+ // We need to find base chunk IDs for this file
279
+ // This requires querying base index - use path-based deletion marker
280
+ const deletedTable = await this.ensureDeletedTable();
281
+ await deletedTable.add([{
282
+ id: `__file__${relativePath}`,
283
+ path: relativePath,
284
+ deleted_at: Date.now(),
285
+ }]);
286
+ }
287
+ /**
288
+ * Search with overlay support.
289
+ * Merges results from base + overlay, excluding deleted.
290
+ */
291
+ async search(query, options = {}) {
292
+ const gitInfo = await this.initialize();
293
+ // On main branch, use base indexer directly
294
+ if (!gitInfo || gitInfo.isMainBranch) {
295
+ return this.indexer.search(query, options);
296
+ }
297
+ const { limit = this.config.search.defaultLimit, threshold = this.config.search.defaultThreshold, tags, } = options;
298
+ const queryEmbedding = await this.embeddingProvider.getEmbedding(query, 'query');
299
+ if (isError(queryEmbedding))
300
+ return queryEmbedding;
301
+ // Get deleted IDs and overlay IDs
302
+ const deletedIds = await this.getDeletedIds();
303
+ const overlayIds = await this.getOverlayIds();
304
+ // Get deleted file paths
305
+ const deletedPaths = new Set();
306
+ if (this.deletedTable) {
307
+ const deletedRecords = await this.deletedTable.query().toArray();
308
+ for (const r of deletedRecords) {
309
+ const id = r.id;
310
+ if (id.startsWith('__file__')) {
311
+ deletedPaths.add(id.slice(8));
312
+ }
313
+ }
314
+ }
315
+ const results = [];
316
+ // 1. Search overlay first
317
+ if (this.overlayTable) {
318
+ const count = await this.overlayTable.countRows();
319
+ if (count > 0) {
320
+ const overlayResults = await this.overlayTable
321
+ .search(queryEmbedding)
322
+ .limit(limit * 2)
323
+ .toArray();
324
+ for (const r of overlayResults) {
325
+ const distance = r._distance;
326
+ const score = 1 - (distance / 2);
327
+ if (score < threshold)
328
+ continue;
329
+ const itemTags = JSON.parse(r.tags);
330
+ const itemLinks = JSON.parse(r.links);
331
+ if (tags && tags.length > 0) {
332
+ if (!tags.some((tag) => itemTags.includes(tag)))
333
+ continue;
334
+ }
335
+ results.push({
336
+ path: r.path,
337
+ section: r.section,
338
+ score,
339
+ content: r.content,
340
+ title: r.title,
341
+ tags: itemTags,
342
+ links: itemLinks,
343
+ });
344
+ }
345
+ }
346
+ }
347
+ // 2. Search base index, excluding deleted and overlay IDs
348
+ const baseResults = await this.indexer.search(query, {
349
+ limit: limit * 2,
350
+ threshold,
351
+ tags,
352
+ });
353
+ if (isError(baseResults))
354
+ return baseResults;
355
+ for (const r of baseResults) {
356
+ // Skip if file is deleted in this branch
357
+ if (deletedPaths.has(r.path))
358
+ continue;
359
+ // Generate chunk ID to check if it's in overlay or deleted
360
+ const chunkId = generateChunkIdFromResult(r);
361
+ if (overlayIds.has(chunkId) || deletedIds.has(chunkId))
362
+ continue;
363
+ results.push(r);
364
+ }
365
+ // 3. Sort by score and limit
366
+ results.sort((a, b) => b.score - a.score);
367
+ return results.slice(0, limit);
368
+ }
369
+ /**
370
+ * Sync overlay with current branch changes.
371
+ * Call this when switching to a feature branch.
372
+ */
373
+ async syncOverlay() {
374
+ const gitInfo = await this.initialize();
375
+ if (!gitInfo || gitInfo.isMainBranch) {
376
+ return { indexed: 0, deleted: 0, errors: [] };
377
+ }
378
+ const vaultPath = this.config.vaultPaths[0];
379
+ const changes = getChangedFilesFromMain(vaultPath);
380
+ let indexed = 0;
381
+ let deleted = 0;
382
+ const errors = [];
383
+ // Index modified files
384
+ for (const file of changes.modified) {
385
+ const result = await this.indexFile(file);
386
+ if (isError(result)) {
387
+ errors.push(result);
388
+ }
389
+ else {
390
+ indexed++;
391
+ }
392
+ }
393
+ // Mark deleted files
394
+ for (const file of changes.deleted) {
395
+ await this.removeFile(file);
396
+ deleted++;
397
+ }
398
+ return { indexed, deleted, errors };
399
+ }
400
+ /**
401
+ * Clear overlay for current branch.
402
+ */
403
+ async clearOverlay() {
404
+ const gitInfo = await this.initialize();
405
+ if (!gitInfo || gitInfo.isMainBranch)
406
+ return;
407
+ const overlayPath = this.getOverlayPath(gitInfo.branch);
408
+ try {
409
+ await fs.rm(overlayPath, { recursive: true });
410
+ }
411
+ catch {
412
+ // Directory might not exist
413
+ }
414
+ this.overlayTable = null;
415
+ this.deletedTable = null;
416
+ }
417
+ /**
418
+ * Get info about current indexing context.
419
+ */
420
+ async getInfo() {
421
+ const gitInfo = await this.initialize();
422
+ let overlayChunks = 0;
423
+ let deletedChunks = 0;
424
+ if (this.overlayTable) {
425
+ overlayChunks = await this.overlayTable.countRows();
426
+ }
427
+ if (this.deletedTable) {
428
+ deletedChunks = await this.deletedTable.countRows();
429
+ }
430
+ return {
431
+ branch: gitInfo?.branch || null,
432
+ isMainBranch: gitInfo?.isMainBranch ?? true,
433
+ overlayChunks,
434
+ deletedChunks,
435
+ };
436
+ }
437
+ }
438
+ /**
439
+ * Generate chunk ID from search result (for filtering).
440
+ */
441
+ function generateChunkIdFromResult(result) {
442
+ const input = result.section ? `${result.path}#${result.section}` : result.path;
443
+ return createHash('sha256').update(input).digest('hex').slice(0, 16);
444
+ }
445
+ /**
446
+ * Factory function to create BranchIndexer.
447
+ */
448
+ export function createBranchIndexer(deps) {
449
+ return new BranchIndexer(deps);
450
+ }
451
+ //# sourceMappingURL=branch.js.map