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,186 @@
1
+ import type { CodeChunk } from '../../../types.js';
2
+ export interface TreeDir {
3
+ id: string;
4
+ path: string;
5
+ name: string;
6
+ parent_id: string | null;
7
+ depth: number;
8
+ file_count: number;
9
+ dir_count: number;
10
+ total_files: number;
11
+ total_symbols: number;
12
+ modified: number;
13
+ indexed_at?: number;
14
+ }
15
+ export interface TreeFile {
16
+ id: string;
17
+ previous_id?: string;
18
+ path: string;
19
+ name: string;
20
+ dir_id: string;
21
+ ext: string;
22
+ language: string;
23
+ size: number;
24
+ content_hash: string;
25
+ symbol_count: number;
26
+ import_count: number;
27
+ export_count: number;
28
+ modified: number;
29
+ indexed_at: number;
30
+ vector?: number[];
31
+ key_symbols?: string;
32
+ import_specs?: string;
33
+ }
34
+ export interface TreeFileRecord extends TreeFile {
35
+ previous_id: string;
36
+ key_symbols: string;
37
+ import_specs: string;
38
+ vector: number[];
39
+ [key: string]: unknown;
40
+ }
41
+ export interface TreeIndexerDeps {
42
+ getSymbols: (path: string) => Promise<CodeChunk[]>;
43
+ getFileRecord: (path: string) => Promise<{
44
+ mtime: number;
45
+ content_hash: string;
46
+ language: string;
47
+ } | null>;
48
+ }
49
+ export interface TreeStats {
50
+ totalDirs: number;
51
+ totalFiles: number;
52
+ maxDepth: number;
53
+ buildTimeMs: number;
54
+ }
55
+ export type TreePhase = 'loading' | 'building' | 'indexing' | 'embedding' | 'stats';
56
+ export type TreeProgressCallback = (current: number, total: number, phase: TreePhase) => void;
57
+ export interface TreeBuildOptions {
58
+ onProgress?: TreeProgressCallback;
59
+ }
60
+ export interface PaginationOptions {
61
+ limit?: number;
62
+ offset?: number;
63
+ }
64
+ export interface ChildrenOptions extends PaginationOptions {
65
+ sort_by?: 'name' | 'modified' | 'size';
66
+ sort_order?: 'asc' | 'desc';
67
+ }
68
+ export interface SymbolsOptions extends PaginationOptions {
69
+ types?: string[];
70
+ }
71
+ export interface FreshnessInfo {
72
+ indexVersion: number;
73
+ indexed_at: number;
74
+ isStale: boolean;
75
+ staleReason?: 'sync_pending' | 'wal_recovery_pending' | 'disabled' | 'unknown';
76
+ }
77
+ export interface BudgetInfo {
78
+ estimatedTokens: number;
79
+ budgetTokens: number;
80
+ truncated: boolean;
81
+ truncationReason?: 'token_budget' | 'max_files' | 'max_depth' | 'max_symbols';
82
+ }
83
+ export interface RetrievalContext<T> {
84
+ items: T[];
85
+ freshness: FreshnessInfo;
86
+ budget?: BudgetInfo;
87
+ }
88
+ export interface TreeContextOptions {
89
+ ancestorLevels?: number;
90
+ includeSiblings?: boolean;
91
+ maxFilesPerDir?: number;
92
+ budgetTokens?: number;
93
+ includeFreshness?: boolean;
94
+ }
95
+ export interface TreeSearchOptions {
96
+ limit?: number;
97
+ threshold?: number;
98
+ dir_id?: string;
99
+ budgetTokens?: number;
100
+ }
101
+ export interface TreeConfig {
102
+ enabled: boolean;
103
+ embedFiles: boolean;
104
+ repoMapMaxDepth: number;
105
+ repoMapMaxSymbols: number;
106
+ retrievalBudgetTokens: number;
107
+ staleAfterMs: number;
108
+ }
109
+ export interface CacheConfig {
110
+ repoMap: {
111
+ enabled: boolean;
112
+ invalidateOnChange: boolean;
113
+ maxEntries: number;
114
+ };
115
+ tree: {
116
+ enabled: boolean;
117
+ maxEntries: number;
118
+ ttlMs: number;
119
+ };
120
+ }
121
+ export interface RepoMapOptions {
122
+ dirId?: string;
123
+ maxDepth?: number;
124
+ maxFilesPerDir?: number;
125
+ maxSymbolsPerFile?: number;
126
+ includeSignatures?: boolean;
127
+ sort_by?: 'name' | 'modified';
128
+ budgetTokens?: number;
129
+ }
130
+ export interface RepoMapResult {
131
+ text: string;
132
+ freshness: FreshnessInfo;
133
+ budget: BudgetInfo;
134
+ }
135
+ export interface TreeLimits {
136
+ maxFilesPerIndex: number;
137
+ maxDepth: number;
138
+ maxFilesPerDir: number;
139
+ maxSymbolsPerFile: number;
140
+ lazyLoadThreshold: number;
141
+ defaultContextBudgetTokens: number;
142
+ maxContextBudgetTokens: number;
143
+ }
144
+ export declare const TREE_LIMITS: TreeLimits;
145
+ export interface SymbolSummary {
146
+ name: string;
147
+ type: 'class' | 'function' | 'method' | 'interface' | 'type';
148
+ signature?: string;
149
+ description?: string;
150
+ }
151
+ export interface FileEntry {
152
+ name: string;
153
+ matched: boolean;
154
+ fileContext?: string;
155
+ symbols?: SymbolSummary[];
156
+ }
157
+ export interface DirGroup {
158
+ files: FileEntry[];
159
+ truncatedFiles?: number;
160
+ }
161
+ export interface TreeSymbolsResult {
162
+ ok: true;
163
+ root: string;
164
+ groups: Record<string, DirGroup>;
165
+ orderedDirs: string[];
166
+ matchedFiles: number;
167
+ totalSymbols: number;
168
+ }
169
+ export interface TreeSymbolsError {
170
+ ok: false;
171
+ error: string;
172
+ hint?: string;
173
+ }
174
+ export type TreeSymbolsResponse = TreeSymbolsResult | TreeSymbolsError;
175
+ export interface TreeSymbolsOptions {
176
+ query: string;
177
+ dirPath?: string;
178
+ limit?: number;
179
+ threshold?: number;
180
+ symbolsPerFile?: number;
181
+ exportedOnly?: boolean;
182
+ includeFileContext?: boolean;
183
+ maxSiblingsFiles?: number;
184
+ maxSiblingsDirs?: number;
185
+ }
186
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/indexer/code/tree/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export const TREE_LIMITS = {
2
+ maxFilesPerIndex: 50_000,
3
+ maxDepth: 20,
4
+ maxFilesPerDir: 1_000,
5
+ maxSymbolsPerFile: 100,
6
+ lazyLoadThreshold: 100,
7
+ defaultContextBudgetTokens: 3_000,
8
+ maxContextBudgetTokens: 12_000,
9
+ };
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../../src/indexer/code/tree/types.ts"],"names":[],"mappings":"AA0KA,MAAM,CAAC,MAAM,WAAW,GAAe;IACrC,gBAAgB,EAAE,MAAM;IACxB,QAAQ,EAAE,EAAE;IACZ,cAAc,EAAE,KAAK;IACrB,iBAAiB,EAAE,GAAG;IACtB,iBAAiB,EAAE,GAAG;IACtB,0BAA0B,EAAE,KAAK;IACjC,sBAAsB,EAAE,MAAM;CAC/B,CAAC"}
@@ -0,0 +1,144 @@
1
+ /**
2
+ * WAL entry types
3
+ */
4
+ export type WalOp = 'start' | 'done' | 'fail' | 'batch_start' | 'batch_done';
5
+ /**
6
+ * WAL entry structure
7
+ */
8
+ export interface WalEntry {
9
+ ts: number;
10
+ op: WalOp;
11
+ path?: string;
12
+ batch?: string;
13
+ chunks?: number;
14
+ error?: string;
15
+ retry?: number;
16
+ files?: string[];
17
+ indexed?: number;
18
+ failed?: number;
19
+ }
20
+ /**
21
+ * Information about a failed file
22
+ */
23
+ export interface FailedFile {
24
+ path: string;
25
+ error: string;
26
+ retryCount: number;
27
+ lastAttempt: number;
28
+ }
29
+ /**
30
+ * Batch statistics
31
+ */
32
+ export interface BatchStats {
33
+ indexed: number;
34
+ failed: number;
35
+ }
36
+ /**
37
+ * Recovery plan from WAL analysis
38
+ */
39
+ export interface RecoveryPlan {
40
+ /** Files with 'start' but no 'done'/'fail' */
41
+ pending: string[];
42
+ /** Files with 'fail' as last op */
43
+ failed: FailedFile[];
44
+ /** Incomplete batch ID if any */
45
+ incompleteBatch: string | null;
46
+ /** Files from incomplete batch that need indexing */
47
+ incompleteBatchFiles: string[];
48
+ }
49
+ /**
50
+ * WAL status summary
51
+ */
52
+ export interface WalStatus {
53
+ totalEntries: number;
54
+ pendingFiles: number;
55
+ failedFiles: number;
56
+ incompleteBatch: string | null;
57
+ lastActivity: number | null;
58
+ }
59
+ /**
60
+ * CodeIndexWal - Write-Ahead Log for code indexing durability
61
+ *
62
+ * Provides recovery from crashes, rate limits, and network errors.
63
+ * Uses append-only JSONL format for crash safety.
64
+ */
65
+ export declare class CodeIndexWal {
66
+ private walPath;
67
+ /**
68
+ * @param dbPath - Path to the LanceDB directory (e.g., .lancedb)
69
+ */
70
+ constructor(dbPath: string);
71
+ /**
72
+ * Ensure parent directory exists
73
+ */
74
+ private ensureDir;
75
+ /**
76
+ * Append entry to WAL (synchronous for durability)
77
+ */
78
+ private appendEntry;
79
+ /**
80
+ * Log start of file indexing
81
+ */
82
+ start(filePath: string, batchId?: string): Promise<void>;
83
+ /**
84
+ * Log successful file indexing
85
+ */
86
+ done(filePath: string, chunks: number): Promise<void>;
87
+ /**
88
+ * Log failed file indexing
89
+ */
90
+ fail(filePath: string, error: string, retryCount: number): Promise<void>;
91
+ /**
92
+ * Log start of batch operation (reindex)
93
+ */
94
+ batchStart(batchId: string, files: string[]): Promise<void>;
95
+ /**
96
+ * Log end of batch operation
97
+ */
98
+ batchDone(batchId: string, stats: BatchStats): Promise<void>;
99
+ /**
100
+ * Read all WAL entries
101
+ */
102
+ private readEntries;
103
+ /**
104
+ * Analyze WAL and build recovery plan
105
+ */
106
+ recover(): Promise<RecoveryPlan>;
107
+ /**
108
+ * Get WAL status summary
109
+ */
110
+ getStatus(): Promise<WalStatus>;
111
+ /**
112
+ * Get retry count for a file from WAL
113
+ */
114
+ getRetryCount(filePath: string): Promise<number>;
115
+ /**
116
+ * Compact WAL by keeping only essential state
117
+ *
118
+ * Removes:
119
+ * - Completed files (with 'done' as final state)
120
+ * - Old batch entries for completed batches
121
+ *
122
+ * Keeps:
123
+ * - Failed files (for retry tracking)
124
+ * - Pending files (started but not completed)
125
+ * - Active batch information
126
+ */
127
+ compact(): Promise<{
128
+ before: number;
129
+ after: number;
130
+ }>;
131
+ /**
132
+ * Clear WAL completely
133
+ */
134
+ clear(): Promise<void>;
135
+ /**
136
+ * Check if WAL exists and has entries
137
+ */
138
+ exists(): boolean;
139
+ /**
140
+ * Get WAL file path (for debugging)
141
+ */
142
+ getPath(): string;
143
+ }
144
+ //# sourceMappingURL=wal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../../../src/indexer/code/wal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,283 @@
1
+ // Write-Ahead Log for code indexing recovery
2
+ import fs from 'node:fs/promises';
3
+ import { existsSync, appendFileSync, readFileSync, writeFileSync } from 'node:fs';
4
+ import path from 'node:path';
5
+ /**
6
+ * CodeIndexWal - Write-Ahead Log for code indexing durability
7
+ *
8
+ * Provides recovery from crashes, rate limits, and network errors.
9
+ * Uses append-only JSONL format for crash safety.
10
+ */
11
+ export class CodeIndexWal {
12
+ walPath;
13
+ /**
14
+ * @param dbPath - Path to the LanceDB directory (e.g., .lancedb)
15
+ */
16
+ constructor(dbPath) {
17
+ this.walPath = path.join(dbPath, 'code_index.wal');
18
+ }
19
+ /**
20
+ * Ensure parent directory exists
21
+ */
22
+ async ensureDir() {
23
+ const dir = path.dirname(this.walPath);
24
+ await fs.mkdir(dir, { recursive: true });
25
+ }
26
+ /**
27
+ * Append entry to WAL (synchronous for durability)
28
+ */
29
+ appendEntry(entry) {
30
+ const line = JSON.stringify(entry) + '\n';
31
+ appendFileSync(this.walPath, line, 'utf-8');
32
+ }
33
+ /**
34
+ * Log start of file indexing
35
+ */
36
+ async start(filePath, batchId) {
37
+ await this.ensureDir();
38
+ const entry = {
39
+ ts: Date.now(),
40
+ op: 'start',
41
+ path: filePath,
42
+ ...(batchId && { batch: batchId }),
43
+ };
44
+ this.appendEntry(entry);
45
+ }
46
+ /**
47
+ * Log successful file indexing
48
+ */
49
+ async done(filePath, chunks) {
50
+ const entry = {
51
+ ts: Date.now(),
52
+ op: 'done',
53
+ path: filePath,
54
+ chunks,
55
+ };
56
+ this.appendEntry(entry);
57
+ }
58
+ /**
59
+ * Log failed file indexing
60
+ */
61
+ async fail(filePath, error, retryCount) {
62
+ const entry = {
63
+ ts: Date.now(),
64
+ op: 'fail',
65
+ path: filePath,
66
+ error,
67
+ retry: retryCount,
68
+ };
69
+ this.appendEntry(entry);
70
+ }
71
+ /**
72
+ * Log start of batch operation (reindex)
73
+ */
74
+ async batchStart(batchId, files) {
75
+ await this.ensureDir();
76
+ const entry = {
77
+ ts: Date.now(),
78
+ op: 'batch_start',
79
+ batch: batchId,
80
+ files,
81
+ };
82
+ this.appendEntry(entry);
83
+ }
84
+ /**
85
+ * Log end of batch operation
86
+ */
87
+ async batchDone(batchId, stats) {
88
+ const entry = {
89
+ ts: Date.now(),
90
+ op: 'batch_done',
91
+ batch: batchId,
92
+ indexed: stats.indexed,
93
+ failed: stats.failed,
94
+ };
95
+ this.appendEntry(entry);
96
+ }
97
+ /**
98
+ * Read all WAL entries
99
+ */
100
+ readEntries() {
101
+ if (!existsSync(this.walPath)) {
102
+ return [];
103
+ }
104
+ const content = readFileSync(this.walPath, 'utf-8');
105
+ const entries = [];
106
+ for (const line of content.split('\n')) {
107
+ if (!line.trim())
108
+ continue;
109
+ try {
110
+ entries.push(JSON.parse(line));
111
+ }
112
+ catch {
113
+ // Skip corrupted lines, log warning
114
+ console.warn(`[code-wal] Skipping corrupted WAL entry: ${line.substring(0, 50)}...`);
115
+ }
116
+ }
117
+ return entries;
118
+ }
119
+ /**
120
+ * Analyze WAL and build recovery plan
121
+ */
122
+ async recover() {
123
+ const entries = this.readEntries();
124
+ // Track file states
125
+ const fileStates = new Map();
126
+ // Track batches
127
+ let currentBatch = null;
128
+ const completedBatches = new Set();
129
+ for (const entry of entries) {
130
+ if (entry.op === 'batch_start' && entry.batch && entry.files) {
131
+ currentBatch = { id: entry.batch, files: entry.files };
132
+ }
133
+ else if (entry.op === 'batch_done' && entry.batch) {
134
+ completedBatches.add(entry.batch);
135
+ if (currentBatch?.id === entry.batch) {
136
+ currentBatch = null;
137
+ }
138
+ }
139
+ else if (entry.path) {
140
+ fileStates.set(entry.path, { op: entry.op, entry });
141
+ }
142
+ }
143
+ // Build recovery plan
144
+ const pending = [];
145
+ const failed = [];
146
+ for (const [filePath, state] of fileStates) {
147
+ if (state.op === 'start') {
148
+ // File started but never completed - needs re-indexing
149
+ pending.push(filePath);
150
+ }
151
+ else if (state.op === 'fail') {
152
+ failed.push({
153
+ path: filePath,
154
+ error: state.entry.error || 'Unknown error',
155
+ retryCount: state.entry.retry || 0,
156
+ lastAttempt: state.entry.ts,
157
+ });
158
+ }
159
+ // 'done' files are complete, ignore them
160
+ }
161
+ // Check for incomplete batch
162
+ let incompleteBatch = null;
163
+ let incompleteBatchFiles = [];
164
+ if (currentBatch && !completedBatches.has(currentBatch.id)) {
165
+ incompleteBatch = currentBatch.id;
166
+ // Find files from batch that weren't successfully indexed
167
+ incompleteBatchFiles = currentBatch.files.filter(f => {
168
+ const state = fileStates.get(f);
169
+ return !state || state.op !== 'done';
170
+ });
171
+ }
172
+ return {
173
+ pending,
174
+ failed,
175
+ incompleteBatch,
176
+ incompleteBatchFiles,
177
+ };
178
+ }
179
+ /**
180
+ * Get WAL status summary
181
+ */
182
+ async getStatus() {
183
+ const entries = this.readEntries();
184
+ const recovery = await this.recover();
185
+ return {
186
+ totalEntries: entries.length,
187
+ pendingFiles: recovery.pending.length,
188
+ failedFiles: recovery.failed.length,
189
+ incompleteBatch: recovery.incompleteBatch,
190
+ lastActivity: entries.length > 0 ? entries[entries.length - 1].ts : null,
191
+ };
192
+ }
193
+ /**
194
+ * Get retry count for a file from WAL
195
+ */
196
+ async getRetryCount(filePath) {
197
+ const entries = this.readEntries();
198
+ let maxRetry = 0;
199
+ for (const entry of entries) {
200
+ if (entry.path === filePath && entry.op === 'fail' && entry.retry) {
201
+ maxRetry = Math.max(maxRetry, entry.retry);
202
+ }
203
+ }
204
+ return maxRetry;
205
+ }
206
+ /**
207
+ * Compact WAL by keeping only essential state
208
+ *
209
+ * Removes:
210
+ * - Completed files (with 'done' as final state)
211
+ * - Old batch entries for completed batches
212
+ *
213
+ * Keeps:
214
+ * - Failed files (for retry tracking)
215
+ * - Pending files (started but not completed)
216
+ * - Active batch information
217
+ */
218
+ async compact() {
219
+ const entries = this.readEntries();
220
+ const before = entries.length;
221
+ if (before === 0) {
222
+ return { before: 0, after: 0 };
223
+ }
224
+ // Analyze final states
225
+ const fileStates = new Map();
226
+ const completedBatches = new Set();
227
+ let activeBatch = null;
228
+ for (const entry of entries) {
229
+ if (entry.op === 'batch_done' && entry.batch) {
230
+ completedBatches.add(entry.batch);
231
+ if (activeBatch?.batch === entry.batch) {
232
+ activeBatch = null;
233
+ }
234
+ }
235
+ else if (entry.op === 'batch_start') {
236
+ activeBatch = entry;
237
+ }
238
+ else if (entry.path) {
239
+ fileStates.set(entry.path, entry);
240
+ }
241
+ }
242
+ // Build compacted entries
243
+ const compacted = [];
244
+ // Keep failed files and pending (started but not done)
245
+ for (const [, entry] of fileStates) {
246
+ if (entry.op === 'fail' || entry.op === 'start') {
247
+ compacted.push(entry);
248
+ }
249
+ }
250
+ // Keep active batch if any
251
+ if (activeBatch && !completedBatches.has(activeBatch.batch)) {
252
+ compacted.push(activeBatch);
253
+ }
254
+ // Sort by timestamp
255
+ compacted.sort((a, b) => a.ts - b.ts);
256
+ // Write compacted WAL
257
+ await this.ensureDir();
258
+ const content = compacted.map(e => JSON.stringify(e)).join('\n') + (compacted.length > 0 ? '\n' : '');
259
+ writeFileSync(this.walPath, content, 'utf-8');
260
+ return { before, after: compacted.length };
261
+ }
262
+ /**
263
+ * Clear WAL completely
264
+ */
265
+ async clear() {
266
+ if (existsSync(this.walPath)) {
267
+ await fs.unlink(this.walPath);
268
+ }
269
+ }
270
+ /**
271
+ * Check if WAL exists and has entries
272
+ */
273
+ exists() {
274
+ return existsSync(this.walPath);
275
+ }
276
+ /**
277
+ * Get WAL file path (for debugging)
278
+ */
279
+ getPath() {
280
+ return this.walPath;
281
+ }
282
+ }
283
+ //# sourceMappingURL=wal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wal.js","sourceRoot":"","sources":["../../../src/indexer/code/wal.ts"],"names":[],"mappings":"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"}