kirograph 0.12.1

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 (434) hide show
  1. package/README.md +1171 -0
  2. package/dist/architecture/index.d.ts +11 -0
  3. package/dist/architecture/index.d.ts.map +1 -0
  4. package/dist/architecture/index.js +207 -0
  5. package/dist/architecture/index.js.map +7 -0
  6. package/dist/architecture/layers/csharp.d.ts +6 -0
  7. package/dist/architecture/layers/csharp.d.ts.map +1 -0
  8. package/dist/architecture/layers/csharp.js +100 -0
  9. package/dist/architecture/layers/csharp.js.map +7 -0
  10. package/dist/architecture/layers/elixir.js +116 -0
  11. package/dist/architecture/layers/elixir.js.map +7 -0
  12. package/dist/architecture/layers/go.d.ts +7 -0
  13. package/dist/architecture/layers/go.d.ts.map +1 -0
  14. package/dist/architecture/layers/go.js +117 -0
  15. package/dist/architecture/layers/go.js.map +7 -0
  16. package/dist/architecture/layers/index.d.ts +30 -0
  17. package/dist/architecture/layers/index.d.ts.map +1 -0
  18. package/dist/architecture/layers/index.js +100 -0
  19. package/dist/architecture/layers/index.js.map +7 -0
  20. package/dist/architecture/layers/java.d.ts +7 -0
  21. package/dist/architecture/layers/java.d.ts.map +1 -0
  22. package/dist/architecture/layers/java.js +119 -0
  23. package/dist/architecture/layers/java.js.map +7 -0
  24. package/dist/architecture/layers/python.d.ts +7 -0
  25. package/dist/architecture/layers/python.d.ts.map +1 -0
  26. package/dist/architecture/layers/python.js +111 -0
  27. package/dist/architecture/layers/python.js.map +7 -0
  28. package/dist/architecture/layers/ruby.d.ts +6 -0
  29. package/dist/architecture/layers/ruby.d.ts.map +1 -0
  30. package/dist/architecture/layers/ruby.js +95 -0
  31. package/dist/architecture/layers/ruby.js.map +7 -0
  32. package/dist/architecture/layers/rust.d.ts +6 -0
  33. package/dist/architecture/layers/rust.d.ts.map +1 -0
  34. package/dist/architecture/layers/rust.js +98 -0
  35. package/dist/architecture/layers/rust.js.map +7 -0
  36. package/dist/architecture/layers/types.d.ts +2 -0
  37. package/dist/architecture/layers/types.d.ts.map +1 -0
  38. package/dist/architecture/layers/types.js +17 -0
  39. package/dist/architecture/layers/types.js.map +7 -0
  40. package/dist/architecture/layers/typescript.d.ts +9 -0
  41. package/dist/architecture/layers/typescript.d.ts.map +1 -0
  42. package/dist/architecture/layers/typescript.js +143 -0
  43. package/dist/architecture/layers/typescript.js.map +7 -0
  44. package/dist/architecture/manifest/cargo.d.ts +3 -0
  45. package/dist/architecture/manifest/cargo.d.ts.map +1 -0
  46. package/dist/architecture/manifest/cargo.js +94 -0
  47. package/dist/architecture/manifest/cargo.js.map +7 -0
  48. package/dist/architecture/manifest/csproj.d.ts +3 -0
  49. package/dist/architecture/manifest/csproj.d.ts.map +1 -0
  50. package/dist/architecture/manifest/csproj.js +75 -0
  51. package/dist/architecture/manifest/csproj.js.map +7 -0
  52. package/dist/architecture/manifest/go.d.ts +3 -0
  53. package/dist/architecture/manifest/go.d.ts.map +1 -0
  54. package/dist/architecture/manifest/go.js +85 -0
  55. package/dist/architecture/manifest/go.js.map +7 -0
  56. package/dist/architecture/manifest/gradle.d.ts +3 -0
  57. package/dist/architecture/manifest/gradle.d.ts.map +1 -0
  58. package/dist/architecture/manifest/gradle.js +80 -0
  59. package/dist/architecture/manifest/gradle.js.map +7 -0
  60. package/dist/architecture/manifest/index.d.ts +12 -0
  61. package/dist/architecture/manifest/index.d.ts.map +1 -0
  62. package/dist/architecture/manifest/index.js +130 -0
  63. package/dist/architecture/manifest/index.js.map +7 -0
  64. package/dist/architecture/manifest/maven.d.ts +3 -0
  65. package/dist/architecture/manifest/maven.d.ts.map +1 -0
  66. package/dist/architecture/manifest/maven.js +76 -0
  67. package/dist/architecture/manifest/maven.js.map +7 -0
  68. package/dist/architecture/manifest/npm.d.ts +3 -0
  69. package/dist/architecture/manifest/npm.d.ts.map +1 -0
  70. package/dist/architecture/manifest/npm.js +103 -0
  71. package/dist/architecture/manifest/npm.js.map +7 -0
  72. package/dist/architecture/manifest/python.d.ts +3 -0
  73. package/dist/architecture/manifest/python.d.ts.map +1 -0
  74. package/dist/architecture/manifest/python.js +105 -0
  75. package/dist/architecture/manifest/python.js.map +7 -0
  76. package/dist/architecture/manifest/types.d.ts +2 -0
  77. package/dist/architecture/manifest/types.d.ts.map +1 -0
  78. package/dist/architecture/manifest/types.js +17 -0
  79. package/dist/architecture/manifest/types.js.map +7 -0
  80. package/dist/architecture/types.d.ts +91 -0
  81. package/dist/architecture/types.d.ts.map +1 -0
  82. package/dist/architecture/types.js +17 -0
  83. package/dist/architecture/types.js.map +7 -0
  84. package/dist/assets/logo.png +0 -0
  85. package/dist/banner.d.ts +6 -0
  86. package/dist/banner.d.ts.map +1 -0
  87. package/dist/banner.js +67 -0
  88. package/dist/banner.js.map +1 -0
  89. package/dist/bin/banner.d.ts +6 -0
  90. package/dist/bin/banner.d.ts.map +1 -0
  91. package/dist/bin/banner.js +88 -0
  92. package/dist/bin/banner.js.map +7 -0
  93. package/dist/bin/commands/affected.d.ts +3 -0
  94. package/dist/bin/commands/affected.d.ts.map +1 -0
  95. package/dist/bin/commands/affected.js +78 -0
  96. package/dist/bin/commands/affected.js.map +7 -0
  97. package/dist/bin/commands/architecture.d.ts +3 -0
  98. package/dist/bin/commands/architecture.d.ts.map +1 -0
  99. package/dist/bin/commands/architecture.js +125 -0
  100. package/dist/bin/commands/architecture.js.map +7 -0
  101. package/dist/bin/commands/caveman.js +136 -0
  102. package/dist/bin/commands/caveman.js.map +7 -0
  103. package/dist/bin/commands/context.d.ts +3 -0
  104. package/dist/bin/commands/context.d.ts.map +1 -0
  105. package/dist/bin/commands/context.js +81 -0
  106. package/dist/bin/commands/context.js.map +7 -0
  107. package/dist/bin/commands/coupling.d.ts +3 -0
  108. package/dist/bin/commands/coupling.d.ts.map +1 -0
  109. package/dist/bin/commands/coupling.js +164 -0
  110. package/dist/bin/commands/coupling.js.map +7 -0
  111. package/dist/bin/commands/dashboard.d.ts +3 -0
  112. package/dist/bin/commands/dashboard.d.ts.map +1 -0
  113. package/dist/bin/commands/dashboard.js +209 -0
  114. package/dist/bin/commands/dashboard.js.map +7 -0
  115. package/dist/bin/commands/dead-code.js +77 -0
  116. package/dist/bin/commands/dead-code.js.map +7 -0
  117. package/dist/bin/commands/export.js +2620 -0
  118. package/dist/bin/commands/export.js.map +7 -0
  119. package/dist/bin/commands/files.d.ts +3 -0
  120. package/dist/bin/commands/files.d.ts.map +1 -0
  121. package/dist/bin/commands/files.js +104 -0
  122. package/dist/bin/commands/files.js.map +7 -0
  123. package/dist/bin/commands/help.d.ts +4 -0
  124. package/dist/bin/commands/help.d.ts.map +1 -0
  125. package/dist/bin/commands/help.js +212 -0
  126. package/dist/bin/commands/help.js.map +7 -0
  127. package/dist/bin/commands/hotspots.js +77 -0
  128. package/dist/bin/commands/hotspots.js.map +7 -0
  129. package/dist/bin/commands/index.d.ts +3 -0
  130. package/dist/bin/commands/index.d.ts.map +1 -0
  131. package/dist/bin/commands/index.js +58 -0
  132. package/dist/bin/commands/index.js.map +7 -0
  133. package/dist/bin/commands/init.d.ts +3 -0
  134. package/dist/bin/commands/init.d.ts.map +1 -0
  135. package/dist/bin/commands/init.js +68 -0
  136. package/dist/bin/commands/init.js.map +7 -0
  137. package/dist/bin/commands/install.d.ts +3 -0
  138. package/dist/bin/commands/install.d.ts.map +1 -0
  139. package/dist/bin/commands/install.js +34 -0
  140. package/dist/bin/commands/install.js.map +7 -0
  141. package/dist/bin/commands/mark-dirty.d.ts +3 -0
  142. package/dist/bin/commands/mark-dirty.d.ts.map +1 -0
  143. package/dist/bin/commands/mark-dirty.js +51 -0
  144. package/dist/bin/commands/mark-dirty.js.map +7 -0
  145. package/dist/bin/commands/package.d.ts +3 -0
  146. package/dist/bin/commands/package.d.ts.map +1 -0
  147. package/dist/bin/commands/package.js +139 -0
  148. package/dist/bin/commands/package.js.map +7 -0
  149. package/dist/bin/commands/path.js +93 -0
  150. package/dist/bin/commands/path.js.map +7 -0
  151. package/dist/bin/commands/qdrant.d.ts +3 -0
  152. package/dist/bin/commands/qdrant.d.ts.map +1 -0
  153. package/dist/bin/commands/qdrant.js +159 -0
  154. package/dist/bin/commands/qdrant.js.map +1 -0
  155. package/dist/bin/commands/query.d.ts +3 -0
  156. package/dist/bin/commands/query.d.ts.map +1 -0
  157. package/dist/bin/commands/query.js +47 -0
  158. package/dist/bin/commands/query.js.map +7 -0
  159. package/dist/bin/commands/serve.d.ts +3 -0
  160. package/dist/bin/commands/serve.d.ts.map +1 -0
  161. package/dist/bin/commands/serve.js +59 -0
  162. package/dist/bin/commands/serve.js.map +7 -0
  163. package/dist/bin/commands/snapshot.js +122 -0
  164. package/dist/bin/commands/snapshot.js.map +7 -0
  165. package/dist/bin/commands/status.d.ts +3 -0
  166. package/dist/bin/commands/status.d.ts.map +1 -0
  167. package/dist/bin/commands/status.js +107 -0
  168. package/dist/bin/commands/status.js.map +7 -0
  169. package/dist/bin/commands/stop.d.ts +3 -0
  170. package/dist/bin/commands/stop.d.ts.map +1 -0
  171. package/dist/bin/commands/stop.js +81 -0
  172. package/dist/bin/commands/stop.js.map +1 -0
  173. package/dist/bin/commands/surprising.js +79 -0
  174. package/dist/bin/commands/surprising.js.map +7 -0
  175. package/dist/bin/commands/sync-if-dirty.d.ts +3 -0
  176. package/dist/bin/commands/sync-if-dirty.d.ts.map +1 -0
  177. package/dist/bin/commands/sync-if-dirty.js +67 -0
  178. package/dist/bin/commands/sync-if-dirty.js.map +7 -0
  179. package/dist/bin/commands/sync.d.ts +3 -0
  180. package/dist/bin/commands/sync.d.ts.map +1 -0
  181. package/dist/bin/commands/sync.js +81 -0
  182. package/dist/bin/commands/sync.js.map +7 -0
  183. package/dist/bin/commands/typesense.d.ts +3 -0
  184. package/dist/bin/commands/typesense.d.ts.map +1 -0
  185. package/dist/bin/commands/typesense.js +126 -0
  186. package/dist/bin/commands/typesense.js.map +1 -0
  187. package/dist/bin/commands/uninit.d.ts +4 -0
  188. package/dist/bin/commands/uninit.d.ts.map +1 -0
  189. package/dist/bin/commands/uninit.js +123 -0
  190. package/dist/bin/commands/uninit.js.map +7 -0
  191. package/dist/bin/commands/unlock.d.ts +3 -0
  192. package/dist/bin/commands/unlock.d.ts.map +1 -0
  193. package/dist/bin/commands/unlock.js +53 -0
  194. package/dist/bin/commands/unlock.js.map +7 -0
  195. package/dist/bin/commands/utils.d.ts +12 -0
  196. package/dist/bin/commands/utils.d.ts.map +1 -0
  197. package/dist/bin/commands/utils.js +56 -0
  198. package/dist/bin/commands/utils.js.map +7 -0
  199. package/dist/bin/installer/archive.js +230 -0
  200. package/dist/bin/installer/archive.js.map +7 -0
  201. package/dist/bin/installer/caveman.js +57 -0
  202. package/dist/bin/installer/caveman.js.map +7 -0
  203. package/dist/bin/installer/cli-agent.d.ts +15 -0
  204. package/dist/bin/installer/cli-agent.d.ts.map +1 -0
  205. package/dist/bin/installer/cli-agent.js +89 -0
  206. package/dist/bin/installer/cli-agent.js.map +7 -0
  207. package/dist/bin/installer/config-prompt.d.ts +13 -0
  208. package/dist/bin/installer/config-prompt.d.ts.map +1 -0
  209. package/dist/bin/installer/config-prompt.js +158 -0
  210. package/dist/bin/installer/config-prompt.js.map +7 -0
  211. package/dist/bin/installer/dashboard.d.ts +3 -0
  212. package/dist/bin/installer/dashboard.d.ts.map +1 -0
  213. package/dist/bin/installer/dashboard.js +149 -0
  214. package/dist/bin/installer/dashboard.js.map +7 -0
  215. package/dist/bin/installer/hooks.d.ts +5 -0
  216. package/dist/bin/installer/hooks.d.ts.map +1 -0
  217. package/dist/bin/installer/hooks.js +155 -0
  218. package/dist/bin/installer/hooks.js.map +7 -0
  219. package/dist/bin/installer/index.d.ts +11 -0
  220. package/dist/bin/installer/index.d.ts.map +1 -0
  221. package/dist/bin/installer/index.js +228 -0
  222. package/dist/bin/installer/index.js.map +7 -0
  223. package/dist/bin/installer/mcp.d.ts +5 -0
  224. package/dist/bin/installer/mcp.d.ts.map +1 -0
  225. package/dist/bin/installer/mcp.js +80 -0
  226. package/dist/bin/installer/mcp.js.map +7 -0
  227. package/dist/bin/installer/prompts.d.ts +28 -0
  228. package/dist/bin/installer/prompts.d.ts.map +1 -0
  229. package/dist/bin/installer/prompts.js +134 -0
  230. package/dist/bin/installer/prompts.js.map +7 -0
  231. package/dist/bin/installer/qdrant-dashboard.d.ts +4 -0
  232. package/dist/bin/installer/qdrant-dashboard.d.ts.map +1 -0
  233. package/dist/bin/installer/qdrant-dashboard.js +115 -0
  234. package/dist/bin/installer/qdrant-dashboard.js.map +7 -0
  235. package/dist/bin/installer/steering.d.ts +5 -0
  236. package/dist/bin/installer/steering.d.ts.map +1 -0
  237. package/dist/bin/installer/steering.js +283 -0
  238. package/dist/bin/installer/steering.js.map +7 -0
  239. package/dist/bin/kirograph.d.ts +6 -0
  240. package/dist/bin/kirograph.d.ts.map +1 -0
  241. package/dist/bin/kirograph.js +95 -0
  242. package/dist/bin/kirograph.js.map +7 -0
  243. package/dist/bin/progress.d.ts +14 -0
  244. package/dist/bin/progress.d.ts.map +1 -0
  245. package/dist/bin/progress.js +201 -0
  246. package/dist/bin/progress.js.map +7 -0
  247. package/dist/bin/ui.d.ts +11 -0
  248. package/dist/bin/ui.d.ts.map +1 -0
  249. package/dist/bin/ui.js +71 -0
  250. package/dist/bin/ui.js.map +7 -0
  251. package/dist/config.d.ts +48 -0
  252. package/dist/config.d.ts.map +1 -0
  253. package/dist/config.js +273 -0
  254. package/dist/config.js.map +7 -0
  255. package/dist/context/index.d.ts +61 -0
  256. package/dist/context/index.d.ts.map +1 -0
  257. package/dist/context/index.js +224 -0
  258. package/dist/context/index.js.map +7 -0
  259. package/dist/core/file-tree.d.ts +15 -0
  260. package/dist/core/file-tree.d.ts.map +1 -0
  261. package/dist/core/file-tree.js +69 -0
  262. package/dist/core/file-tree.js.map +7 -0
  263. package/dist/core/lock-manager.d.ts +20 -0
  264. package/dist/core/lock-manager.d.ts.map +1 -0
  265. package/dist/core/lock-manager.js +120 -0
  266. package/dist/core/lock-manager.js.map +7 -0
  267. package/dist/core/pipeline.d.ts +37 -0
  268. package/dist/core/pipeline.d.ts.map +1 -0
  269. package/dist/core/pipeline.js +375 -0
  270. package/dist/core/pipeline.js.map +7 -0
  271. package/dist/core/snapshot.js +141 -0
  272. package/dist/core/snapshot.js.map +7 -0
  273. package/dist/db/database.d.ts +133 -0
  274. package/dist/db/database.d.ts.map +1 -0
  275. package/dist/db/database.js +929 -0
  276. package/dist/db/database.js.map +7 -0
  277. package/dist/db/schema.sql +174 -0
  278. package/dist/errors.d.ts +49 -0
  279. package/dist/errors.d.ts.map +1 -0
  280. package/dist/errors.js +160 -0
  281. package/dist/errors.js.map +7 -0
  282. package/dist/extraction/extractor.d.ts +29 -0
  283. package/dist/extraction/extractor.d.ts.map +1 -0
  284. package/dist/extraction/extractor.js +764 -0
  285. package/dist/extraction/extractor.js.map +7 -0
  286. package/dist/extraction/grammars.d.ts +48 -0
  287. package/dist/extraction/grammars.d.ts.map +1 -0
  288. package/dist/extraction/grammars.js +166 -0
  289. package/dist/extraction/grammars.js.map +7 -0
  290. package/dist/extraction/languages.d.ts +9 -0
  291. package/dist/extraction/languages.d.ts.map +1 -0
  292. package/dist/extraction/languages.js +103 -0
  293. package/dist/extraction/languages.js.map +7 -0
  294. package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
  295. package/dist/frameworks/csharp.d.ts +8 -0
  296. package/dist/frameworks/csharp.d.ts.map +1 -0
  297. package/dist/frameworks/csharp.js +93 -0
  298. package/dist/frameworks/csharp.js.map +7 -0
  299. package/dist/frameworks/elixir.js +142 -0
  300. package/dist/frameworks/elixir.js.map +7 -0
  301. package/dist/frameworks/express.d.ts +8 -0
  302. package/dist/frameworks/express.d.ts.map +1 -0
  303. package/dist/frameworks/express.js +143 -0
  304. package/dist/frameworks/express.js.map +7 -0
  305. package/dist/frameworks/go.d.ts +8 -0
  306. package/dist/frameworks/go.d.ts.map +1 -0
  307. package/dist/frameworks/go.js +85 -0
  308. package/dist/frameworks/go.js.map +7 -0
  309. package/dist/frameworks/index.d.ts +30 -0
  310. package/dist/frameworks/index.d.ts.map +1 -0
  311. package/dist/frameworks/index.js +243 -0
  312. package/dist/frameworks/index.js.map +7 -0
  313. package/dist/frameworks/java.d.ts +8 -0
  314. package/dist/frameworks/java.d.ts.map +1 -0
  315. package/dist/frameworks/java.js +87 -0
  316. package/dist/frameworks/java.js.map +7 -0
  317. package/dist/frameworks/laravel.d.ts +9 -0
  318. package/dist/frameworks/laravel.d.ts.map +1 -0
  319. package/dist/frameworks/laravel.js +115 -0
  320. package/dist/frameworks/laravel.js.map +7 -0
  321. package/dist/frameworks/python.d.ts +10 -0
  322. package/dist/frameworks/python.d.ts.map +1 -0
  323. package/dist/frameworks/python.js +158 -0
  324. package/dist/frameworks/python.js.map +7 -0
  325. package/dist/frameworks/react.d.ts +9 -0
  326. package/dist/frameworks/react.d.ts.map +1 -0
  327. package/dist/frameworks/react.js +230 -0
  328. package/dist/frameworks/react.js.map +7 -0
  329. package/dist/frameworks/ruby.d.ts +8 -0
  330. package/dist/frameworks/ruby.d.ts.map +1 -0
  331. package/dist/frameworks/ruby.js +136 -0
  332. package/dist/frameworks/ruby.js.map +7 -0
  333. package/dist/frameworks/rust.d.ts +8 -0
  334. package/dist/frameworks/rust.d.ts.map +1 -0
  335. package/dist/frameworks/rust.js +82 -0
  336. package/dist/frameworks/rust.js.map +7 -0
  337. package/dist/frameworks/svelte.d.ts +8 -0
  338. package/dist/frameworks/svelte.d.ts.map +1 -0
  339. package/dist/frameworks/svelte.js +174 -0
  340. package/dist/frameworks/svelte.js.map +7 -0
  341. package/dist/frameworks/swift.d.ts +10 -0
  342. package/dist/frameworks/swift.d.ts.map +1 -0
  343. package/dist/frameworks/swift.js +151 -0
  344. package/dist/frameworks/swift.js.map +7 -0
  345. package/dist/frameworks/types.d.ts +37 -0
  346. package/dist/frameworks/types.d.ts.map +1 -0
  347. package/dist/frameworks/types.js +17 -0
  348. package/dist/frameworks/types.js.map +7 -0
  349. package/dist/graph/queries.d.ts +53 -0
  350. package/dist/graph/queries.d.ts.map +1 -0
  351. package/dist/graph/queries.js +224 -0
  352. package/dist/graph/queries.js.map +7 -0
  353. package/dist/graph/traversal.d.ts +35 -0
  354. package/dist/graph/traversal.d.ts.map +1 -0
  355. package/dist/graph/traversal.js +148 -0
  356. package/dist/graph/traversal.js.map +7 -0
  357. package/dist/index.d.ts +102 -0
  358. package/dist/index.d.ts.map +1 -0
  359. package/dist/index.js +303 -0
  360. package/dist/index.js.map +7 -0
  361. package/dist/installer/index.d.ts +10 -0
  362. package/dist/installer/index.d.ts.map +1 -0
  363. package/dist/installer/index.js +526 -0
  364. package/dist/installer/index.js.map +1 -0
  365. package/dist/mcp/server.d.ts +16 -0
  366. package/dist/mcp/server.d.ts.map +1 -0
  367. package/dist/mcp/server.js +116 -0
  368. package/dist/mcp/server.js.map +7 -0
  369. package/dist/mcp/tools.d.ts +37 -0
  370. package/dist/mcp/tools.d.ts.map +1 -0
  371. package/dist/mcp/tools.js +779 -0
  372. package/dist/mcp/tools.js.map +7 -0
  373. package/dist/mcp/transport.d.ts +29 -0
  374. package/dist/mcp/transport.d.ts.map +1 -0
  375. package/dist/mcp/transport.js +70 -0
  376. package/dist/mcp/transport.js.map +7 -0
  377. package/dist/resolution/index.d.ts +56 -0
  378. package/dist/resolution/index.d.ts.map +1 -0
  379. package/dist/resolution/index.js +384 -0
  380. package/dist/resolution/index.js.map +7 -0
  381. package/dist/resolution/name-matcher.d.ts +25 -0
  382. package/dist/resolution/name-matcher.d.ts.map +1 -0
  383. package/dist/resolution/name-matcher.js +60 -0
  384. package/dist/resolution/name-matcher.js.map +7 -0
  385. package/dist/scripts/postinstall.js +64 -0
  386. package/dist/search/query-utils.d.ts +21 -0
  387. package/dist/search/query-utils.d.ts.map +1 -0
  388. package/dist/search/query-utils.js +219 -0
  389. package/dist/search/query-utils.js.map +7 -0
  390. package/dist/search/searcher.d.ts +15 -0
  391. package/dist/search/searcher.d.ts.map +1 -0
  392. package/dist/search/searcher.js +49 -0
  393. package/dist/search/searcher.js.map +7 -0
  394. package/dist/sync/index.d.ts +33 -0
  395. package/dist/sync/index.d.ts.map +1 -0
  396. package/dist/sync/index.js +200 -0
  397. package/dist/sync/index.js.map +7 -0
  398. package/dist/types.d.ts +131 -0
  399. package/dist/types.d.ts.map +1 -0
  400. package/dist/types.js +37 -0
  401. package/dist/types.js.map +7 -0
  402. package/dist/utils.d.ts +52 -0
  403. package/dist/utils.d.ts.map +1 -0
  404. package/dist/utils.js +254 -0
  405. package/dist/utils.js.map +7 -0
  406. package/dist/vectors/index.d.ts +71 -0
  407. package/dist/vectors/index.d.ts.map +1 -0
  408. package/dist/vectors/index.js +480 -0
  409. package/dist/vectors/index.js.map +7 -0
  410. package/dist/vectors/lancedb-index.d.ts +50 -0
  411. package/dist/vectors/lancedb-index.d.ts.map +1 -0
  412. package/dist/vectors/lancedb-index.js +153 -0
  413. package/dist/vectors/lancedb-index.js.map +7 -0
  414. package/dist/vectors/orama-index.d.ts +54 -0
  415. package/dist/vectors/orama-index.d.ts.map +1 -0
  416. package/dist/vectors/orama-index.js +213 -0
  417. package/dist/vectors/orama-index.js.map +7 -0
  418. package/dist/vectors/pglite-index.d.ts +53 -0
  419. package/dist/vectors/pglite-index.d.ts.map +1 -0
  420. package/dist/vectors/pglite-index.js +194 -0
  421. package/dist/vectors/pglite-index.js.map +7 -0
  422. package/dist/vectors/qdrant-index.d.ts +70 -0
  423. package/dist/vectors/qdrant-index.d.ts.map +1 -0
  424. package/dist/vectors/qdrant-index.js +364 -0
  425. package/dist/vectors/qdrant-index.js.map +7 -0
  426. package/dist/vectors/typesense-index.d.ts +75 -0
  427. package/dist/vectors/typesense-index.d.ts.map +1 -0
  428. package/dist/vectors/typesense-index.js +453 -0
  429. package/dist/vectors/typesense-index.js.map +7 -0
  430. package/dist/vectors/vec-index.d.ts +52 -0
  431. package/dist/vectors/vec-index.d.ts.map +1 -0
  432. package/dist/vectors/vec-index.js +198 -0
  433. package/dist/vectors/vec-index.js.map +7 -0
  434. package/package.json +67 -0
@@ -0,0 +1,153 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var lancedb_index_exports = {};
30
+ __export(lancedb_index_exports, {
31
+ LanceDBIndex: () => LanceDBIndex
32
+ });
33
+ module.exports = __toCommonJS(lancedb_index_exports);
34
+ var path = __toESM(require("path"));
35
+ var import_errors = require("../errors");
36
+ const DEFAULT_DIM = 768;
37
+ const DB_DIR = "lancedb";
38
+ const TABLE_NAME = "kg_nodes";
39
+ class LanceDBIndex {
40
+ constructor(kirographDir, dim = DEFAULT_DIM) {
41
+ this.kirographDir = kirographDir;
42
+ this.dim = dim;
43
+ this.db = null;
44
+ this.table = null;
45
+ this._available = false;
46
+ this.dbPath = path.join(kirographDir, DB_DIR);
47
+ }
48
+ isAvailable() {
49
+ return this._available;
50
+ }
51
+ /**
52
+ * Load @lancedb/lancedb, open the file-persisted database, and open or create
53
+ * the kg_nodes table. Silent no-op when the optional dep is missing.
54
+ */
55
+ async initialize() {
56
+ if (this._available) return;
57
+ let lancedb;
58
+ try {
59
+ lancedb = require("@lancedb/lancedb");
60
+ } catch {
61
+ (0, import_errors.logDebug)("LanceDBIndex: @lancedb/lancedb not installed \u2014 LanceDB engine unavailable");
62
+ return;
63
+ }
64
+ try {
65
+ this.db = await lancedb.connect(this.dbPath);
66
+ const existingTables = await this.db.tableNames();
67
+ if (existingTables.includes(TABLE_NAME)) {
68
+ this.table = await this.db.openTable(TABLE_NAME);
69
+ } else {
70
+ this.table = await this.db.createTable(TABLE_NAME, [{
71
+ node_id: "__init__",
72
+ name: "__init__",
73
+ kind: "function",
74
+ file_path: "",
75
+ signature: "",
76
+ vector: new Float32Array(this.dim)
77
+ }]);
78
+ await this.table.delete(`node_id = '__init__'`);
79
+ }
80
+ this._available = true;
81
+ (0, import_errors.logDebug)("LanceDBIndex: ready", { path: this.dbPath, dim: this.dim });
82
+ } catch (err) {
83
+ (0, import_errors.logError)("LanceDBIndex: initialization failed", { error: String(err) });
84
+ }
85
+ }
86
+ /**
87
+ * Insert or update a node using LanceDB's native mergeInsert — a single
88
+ * round-trip that updates the row if node_id exists, inserts it otherwise.
89
+ */
90
+ async upsert(node, embedding) {
91
+ if (!this._available || !this.table) return;
92
+ try {
93
+ await this.table.mergeInsert("node_id").whenMatchedUpdateAll().whenNotMatchedInsertAll().execute([{
94
+ node_id: node.id,
95
+ name: node.name,
96
+ kind: node.kind,
97
+ file_path: node.filePath,
98
+ signature: node.signature ?? "",
99
+ vector: embedding
100
+ }]);
101
+ } catch (err) {
102
+ (0, import_errors.logWarn)("LanceDBIndex: upsert failed", { nodeId: node.id, error: String(err) });
103
+ }
104
+ }
105
+ /**
106
+ * Remove a node's record from the index.
107
+ */
108
+ async delete(nodeId) {
109
+ if (!this._available || !this.table) return;
110
+ try {
111
+ await this.table.delete(`node_id = '${nodeId.replace(/'/g, "''")}'`);
112
+ } catch (err) {
113
+ (0, import_errors.logWarn)("LanceDBIndex: delete failed", { nodeId, error: String(err) });
114
+ }
115
+ }
116
+ /**
117
+ * ANN vector search. Returns node IDs ordered by cosine similarity (descending).
118
+ */
119
+ async search(queryVec, topN = 10) {
120
+ if (!this._available || !this.table) return [];
121
+ try {
122
+ const results = await this.table.search(queryVec).distanceType("cosine").limit(topN).toArray();
123
+ return results.map((row) => row.node_id);
124
+ } catch (err) {
125
+ (0, import_errors.logWarn)("LanceDBIndex: search failed", { error: String(err) });
126
+ return [];
127
+ }
128
+ }
129
+ /** Return all node IDs currently stored in the index. */
130
+ async getEmbeddedNodeIds() {
131
+ if (!this._available || !this.table) return [];
132
+ try {
133
+ const rows = await this.table.query().select(["node_id"]).toArray();
134
+ return rows.map((row) => row.node_id);
135
+ } catch {
136
+ return [];
137
+ }
138
+ }
139
+ /** Number of records currently in the index. */
140
+ async count() {
141
+ if (!this._available || !this.table) return 0;
142
+ try {
143
+ return await this.table.countRows();
144
+ } catch {
145
+ return 0;
146
+ }
147
+ }
148
+ }
149
+ // Annotate the CommonJS export names for ESM import in node:
150
+ 0 && (module.exports = {
151
+ LanceDBIndex
152
+ });
153
+ //# sourceMappingURL=lancedb-index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/vectors/lancedb-index.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph LanceDB Index\n *\n * ANN vector search backed by @lancedb/lancedb (Apache Arrow / Lance format).\n * The database is persisted to .kirograph/lancedb/ (Lance columnar file storage).\n *\n * Opt-in: set config.semanticEngine = 'lancedb'\n * Required optional dependency (not installed by default):\n * npm install @lancedb/lancedb\n *\n * Key characteristics:\n * - Pure JS/WASM, no native compilation required\n * - Columnar storage (Apache Lance format) \u2014 efficient for batch reads/writes\n * - ANN search via IVF-PQ or HNSW index for sub-linear query time\n * - Native upsert via mergeInsert (single round-trip, no delete+insert dance)\n */\n\nimport * as path from 'path';\nimport { logDebug, logWarn, logError } from '../errors';\nimport type { Node } from '../types';\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst DEFAULT_DIM = 768;\nconst DB_DIR = 'lancedb';\nconst TABLE_NAME = 'kg_nodes';\n\n// \u2500\u2500 LanceDBIndex \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class LanceDBIndex {\n private db: any = null;\n private table: any = null;\n private _available = false;\n private dbPath: string;\n\n constructor(\n private readonly kirographDir: string,\n private readonly dim = DEFAULT_DIM,\n ) {\n this.dbPath = path.join(kirographDir, DB_DIR);\n }\n\n isAvailable(): boolean {\n return this._available;\n }\n\n /**\n * Load @lancedb/lancedb, open the file-persisted database, and open or create\n * the kg_nodes table. Silent no-op when the optional dep is missing.\n */\n async initialize(): Promise<void> {\n if (this._available) return;\n\n let lancedb: any;\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n lancedb = require('@lancedb/lancedb');\n } catch {\n logDebug('LanceDBIndex: @lancedb/lancedb not installed \u2014 LanceDB engine unavailable');\n return;\n }\n\n try {\n this.db = await lancedb.connect(this.dbPath);\n\n const existingTables: string[] = await this.db.tableNames();\n if (existingTables.includes(TABLE_NAME)) {\n this.table = await this.db.openTable(TABLE_NAME);\n } else {\n // Create table with a dummy record so LanceDB knows the schema, then delete it.\n this.table = await this.db.createTable(TABLE_NAME, [{\n node_id: '__init__',\n name: '__init__',\n kind: 'function',\n file_path: '',\n signature: '',\n vector: new Float32Array(this.dim),\n }]);\n await this.table.delete(`node_id = '__init__'`);\n }\n\n this._available = true;\n logDebug('LanceDBIndex: ready', { path: this.dbPath, dim: this.dim });\n } catch (err) {\n logError('LanceDBIndex: initialization failed', { error: String(err) });\n }\n }\n\n /**\n * Insert or update a node using LanceDB's native mergeInsert \u2014 a single\n * round-trip that updates the row if node_id exists, inserts it otherwise.\n */\n async upsert(node: Node, embedding: Float32Array): Promise<void> {\n if (!this._available || !this.table) return;\n\n try {\n await this.table\n .mergeInsert('node_id')\n .whenMatchedUpdateAll()\n .whenNotMatchedInsertAll()\n .execute([{\n node_id: node.id,\n name: node.name,\n kind: node.kind,\n file_path: node.filePath,\n signature: node.signature ?? '',\n vector: embedding,\n }]);\n } catch (err) {\n logWarn('LanceDBIndex: upsert failed', { nodeId: node.id, error: String(err) });\n }\n }\n\n /**\n * Remove a node's record from the index.\n */\n async delete(nodeId: string): Promise<void> {\n if (!this._available || !this.table) return;\n\n try {\n await this.table.delete(`node_id = '${nodeId.replace(/'/g, \"''\")}'`);\n } catch (err) {\n logWarn('LanceDBIndex: delete failed', { nodeId, error: String(err) });\n }\n }\n\n /**\n * ANN vector search. Returns node IDs ordered by cosine similarity (descending).\n */\n async search(queryVec: Float32Array, topN = 10): Promise<string[]> {\n if (!this._available || !this.table) return [];\n\n try {\n const results = await this.table\n .search(queryVec)\n .distanceType('cosine')\n .limit(topN)\n .toArray();\n\n return results.map((row: any) => row.node_id as string);\n } catch (err) {\n logWarn('LanceDBIndex: search failed', { error: String(err) });\n return [];\n }\n }\n\n /** Return all node IDs currently stored in the index. */\n async getEmbeddedNodeIds(): Promise<string[]> {\n if (!this._available || !this.table) return [];\n try {\n const rows = await this.table.query().select(['node_id']).toArray();\n return rows.map((row: any) => row.node_id as string);\n } catch {\n return [];\n }\n }\n\n /** Number of records currently in the index. */\n async count(): Promise<number> {\n if (!this._available || !this.table) return 0;\n try {\n return await this.table.countRows();\n } catch {\n return 0;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,54 @@
1
+ /**
2
+ * KiroGraph Orama Index
3
+ *
4
+ * Hybrid search (full-text + vector) backed by @orama/orama.
5
+ * The index is persisted to .kirograph/orama.json via @orama/plugin-data-persistence.
6
+ *
7
+ * Opt-in: set config.semanticEngine = 'orama'
8
+ * Required optional dependencies (not installed by default):
9
+ * npm install @orama/orama @orama/plugin-data-persistence
10
+ *
11
+ * Key advantage over cosine/sqlite-vec: Orama combines full-text relevance and
12
+ * vector similarity in a single hybrid query, producing higher-quality results
13
+ * than running the two searches separately and merging by priority.
14
+ */
15
+ import type { Node } from '../types';
16
+ export declare class OramaIndex {
17
+ private readonly kirographDir;
18
+ private readonly dim;
19
+ private db;
20
+ private _available;
21
+ private indexPath;
22
+ private orama;
23
+ private persistence;
24
+ constructor(kirographDir: string, dim?: number);
25
+ isAvailable(): boolean;
26
+ /**
27
+ * Load @orama/orama + @orama/plugin-data-persistence, then either restore
28
+ * the persisted index from orama.json or create a fresh one.
29
+ * Silent no-op when optional deps are missing.
30
+ */
31
+ initialize(): Promise<void>;
32
+ /**
33
+ * Insert or replace a node's document in the index.
34
+ * Orama has no native upsert, so we remove any existing doc first.
35
+ */
36
+ upsert(node: Node, embedding: Float32Array): Promise<void>;
37
+ /**
38
+ * Remove a node's document from the index.
39
+ */
40
+ delete(nodeId: string): Promise<void>;
41
+ /**
42
+ * Hybrid search: combines full-text relevance on name/kind/filePath/signature
43
+ * with vector similarity on the embedding field.
44
+ * Returns node IDs ordered by Orama's combined score (best first).
45
+ */
46
+ search(queryText: string, queryVec: Float32Array, topN?: number): Promise<string[]>;
47
+ /** Persist the in-memory index to .kirograph/orama.json. */
48
+ save(): Promise<void>;
49
+ /** Return all node IDs currently stored in the index. */
50
+ getEmbeddedNodeIds(): Promise<string[]>;
51
+ /** Number of documents currently in the index. */
52
+ count(): Promise<number>;
53
+ }
54
+ //# sourceMappingURL=orama-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"orama-index.d.ts","sourceRoot":"","sources":["../../src/vectors/orama-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAKH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AASrC,qBAAa,UAAU;IAmBnB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IAnBtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,SAAS,CAAS;IAG1B,OAAO,CAAC,KAAK,CAMG;IAChB,OAAO,CAAC,WAAW,CAGH;gBAGG,YAAY,EAAE,MAAM,EACpB,GAAG,SAAc;IAKpC,WAAW,IAAI,OAAO;IAItB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAsDjC;;;OAGG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA6BhE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAmB3C;;;;OAIG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAsBrF,4DAA4D;IACtD,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAW3B,yDAAyD;IACnD,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU7C,kDAAkD;IAC5C,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAQ/B"}
@@ -0,0 +1,213 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var orama_index_exports = {};
30
+ __export(orama_index_exports, {
31
+ OramaIndex: () => OramaIndex
32
+ });
33
+ module.exports = __toCommonJS(orama_index_exports);
34
+ var path = __toESM(require("path"));
35
+ var fs = __toESM(require("fs"));
36
+ var import_errors = require("../errors");
37
+ const DEFAULT_DIM = 768;
38
+ const INDEX_FILE = "orama.json";
39
+ class OramaIndex {
40
+ constructor(kirographDir, dim = DEFAULT_DIM) {
41
+ this.kirographDir = kirographDir;
42
+ this.dim = dim;
43
+ this.db = null;
44
+ this._available = false;
45
+ // Lazily-loaded Orama functions
46
+ this.orama = null;
47
+ this.persistence = null;
48
+ this.indexPath = path.join(kirographDir, INDEX_FILE);
49
+ }
50
+ isAvailable() {
51
+ return this._available;
52
+ }
53
+ /**
54
+ * Load @orama/orama + @orama/plugin-data-persistence, then either restore
55
+ * the persisted index from orama.json or create a fresh one.
56
+ * Silent no-op when optional deps are missing.
57
+ */
58
+ async initialize() {
59
+ if (this._available) return;
60
+ try {
61
+ const oramaModule = require("@orama/orama");
62
+ this.orama = {
63
+ create: oramaModule.create,
64
+ insert: oramaModule.insert,
65
+ remove: oramaModule.remove,
66
+ search: oramaModule.search,
67
+ count: oramaModule.count
68
+ };
69
+ } catch {
70
+ (0, import_errors.logDebug)("OramaIndex: @orama/orama not installed \u2014 Orama engine unavailable");
71
+ return;
72
+ }
73
+ try {
74
+ const persistModule = require("@orama/plugin-data-persistence/server");
75
+ this.persistence = {
76
+ persistToFile: persistModule.persistToFile,
77
+ restoreFromFile: persistModule.restoreFromFile
78
+ };
79
+ } catch {
80
+ (0, import_errors.logDebug)("OramaIndex: @orama/plugin-data-persistence not installed \u2014 Orama engine unavailable");
81
+ return;
82
+ }
83
+ try {
84
+ if (fs.existsSync(this.indexPath)) {
85
+ this.db = await this.persistence.restoreFromFile("json", this.indexPath);
86
+ (0, import_errors.logDebug)("OramaIndex: restored from disk", { path: this.indexPath });
87
+ } else {
88
+ this.db = await this.orama.create({
89
+ schema: {
90
+ nodeId: "enum",
91
+ // exact-match filterable field (not full-text indexed)
92
+ name: "string",
93
+ kind: "string",
94
+ filePath: "string",
95
+ signature: "string",
96
+ embedding: `vector[${this.dim}]`
97
+ }
98
+ });
99
+ (0, import_errors.logDebug)("OramaIndex: created fresh index", { dim: this.dim });
100
+ }
101
+ this._available = true;
102
+ } catch (err) {
103
+ (0, import_errors.logError)("OramaIndex: initialization failed", { error: String(err) });
104
+ }
105
+ }
106
+ /**
107
+ * Insert or replace a node's document in the index.
108
+ * Orama has no native upsert, so we remove any existing doc first.
109
+ */
110
+ async upsert(node, embedding) {
111
+ if (!this._available || !this.db) return;
112
+ try {
113
+ const existing = await this.orama.search(this.db, {
114
+ term: "",
115
+ where: { nodeId: { eq: node.id } },
116
+ limit: 1
117
+ });
118
+ if (existing?.hits?.length > 0) {
119
+ for (const hit of existing.hits) {
120
+ await this.orama.remove(this.db, hit.id);
121
+ }
122
+ }
123
+ await this.orama.insert(this.db, {
124
+ nodeId: node.id,
125
+ name: node.name,
126
+ kind: node.kind,
127
+ filePath: node.filePath,
128
+ signature: node.signature ?? "",
129
+ embedding: Array.from(embedding)
130
+ });
131
+ } catch (err) {
132
+ (0, import_errors.logWarn)("OramaIndex: upsert failed", { nodeId: node.id, error: String(err) });
133
+ }
134
+ }
135
+ /**
136
+ * Remove a node's document from the index.
137
+ */
138
+ async delete(nodeId) {
139
+ if (!this._available || !this.db) return;
140
+ try {
141
+ const existing = await this.orama.search(this.db, {
142
+ term: "",
143
+ where: { nodeId: { eq: nodeId } },
144
+ limit: 1
145
+ });
146
+ if (existing?.hits?.length > 0) {
147
+ for (const hit of existing.hits) {
148
+ await this.orama.remove(this.db, hit.id);
149
+ }
150
+ }
151
+ } catch (err) {
152
+ (0, import_errors.logWarn)("OramaIndex: delete failed", { nodeId, error: String(err) });
153
+ }
154
+ }
155
+ /**
156
+ * Hybrid search: combines full-text relevance on name/kind/filePath/signature
157
+ * with vector similarity on the embedding field.
158
+ * Returns node IDs ordered by Orama's combined score (best first).
159
+ */
160
+ async search(queryText, queryVec, topN = 10) {
161
+ if (!this._available || !this.db) return [];
162
+ try {
163
+ const results = await this.orama.search(this.db, {
164
+ term: queryText,
165
+ mode: "hybrid",
166
+ vector: {
167
+ value: Array.from(queryVec),
168
+ property: "embedding"
169
+ },
170
+ limit: topN,
171
+ similarity: 0.3
172
+ });
173
+ return (results?.hits ?? []).map((hit) => hit.document.nodeId);
174
+ } catch (err) {
175
+ (0, import_errors.logWarn)("OramaIndex: search failed", { error: String(err) });
176
+ return [];
177
+ }
178
+ }
179
+ /** Persist the in-memory index to .kirograph/orama.json. */
180
+ async save() {
181
+ if (!this._available || !this.db || !this.persistence) return;
182
+ try {
183
+ await this.persistence.persistToFile(this.db, "json", this.indexPath);
184
+ (0, import_errors.logDebug)("OramaIndex: saved to disk", { path: this.indexPath });
185
+ } catch (err) {
186
+ (0, import_errors.logWarn)("OramaIndex: save failed", { error: String(err) });
187
+ }
188
+ }
189
+ /** Return all node IDs currently stored in the index. */
190
+ async getEmbeddedNodeIds() {
191
+ if (!this._available || !this.db) return [];
192
+ try {
193
+ const results = await this.orama.search(this.db, { term: "", limit: 1e6, includeVectors: false });
194
+ return (results?.hits ?? []).map((hit) => hit.document.nodeId);
195
+ } catch {
196
+ return [];
197
+ }
198
+ }
199
+ /** Number of documents currently in the index. */
200
+ async count() {
201
+ if (!this._available || !this.db) return 0;
202
+ try {
203
+ return await this.orama.count(this.db);
204
+ } catch {
205
+ return 0;
206
+ }
207
+ }
208
+ }
209
+ // Annotate the CommonJS export names for ESM import in node:
210
+ 0 && (module.exports = {
211
+ OramaIndex
212
+ });
213
+ //# sourceMappingURL=orama-index.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/vectors/orama-index.ts"],
4
+ "sourcesContent": ["/**\n * KiroGraph Orama Index\n *\n * Hybrid search (full-text + vector) backed by @orama/orama.\n * The index is persisted to .kirograph/orama.json via @orama/plugin-data-persistence.\n *\n * Opt-in: set config.semanticEngine = 'orama'\n * Required optional dependencies (not installed by default):\n * npm install @orama/orama @orama/plugin-data-persistence\n *\n * Key advantage over cosine/sqlite-vec: Orama combines full-text relevance and\n * vector similarity in a single hybrid query, producing higher-quality results\n * than running the two searches separately and merging by priority.\n */\n\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { logDebug, logWarn, logError } from '../errors';\nimport type { Node } from '../types';\n\n// \u2500\u2500 Constants \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nconst DEFAULT_DIM = 768;\nconst INDEX_FILE = 'orama.json';\n\n// \u2500\u2500 OramaIndex \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nexport class OramaIndex {\n private db: any = null;\n private _available = false;\n private indexPath: string;\n\n // Lazily-loaded Orama functions\n private orama: {\n create: Function;\n insert: Function;\n remove: Function;\n search: Function;\n count: Function;\n } | null = null;\n private persistence: {\n persistToFile: Function;\n restoreFromFile: Function;\n } | null = null;\n\n constructor(\n private readonly kirographDir: string,\n private readonly dim = DEFAULT_DIM,\n ) {\n this.indexPath = path.join(kirographDir, INDEX_FILE);\n }\n\n isAvailable(): boolean {\n return this._available;\n }\n\n /**\n * Load @orama/orama + @orama/plugin-data-persistence, then either restore\n * the persisted index from orama.json or create a fresh one.\n * Silent no-op when optional deps are missing.\n */\n async initialize(): Promise<void> {\n if (this._available) return;\n\n try {\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const oramaModule = require('@orama/orama');\n this.orama = {\n create: oramaModule.create,\n insert: oramaModule.insert,\n remove: oramaModule.remove,\n search: oramaModule.search,\n count: oramaModule.count,\n };\n } catch {\n logDebug('OramaIndex: @orama/orama not installed \u2014 Orama engine unavailable');\n return;\n }\n\n try {\n // persistToFile / restoreFromFile live in the /server subpath (Node.js only)\n // eslint-disable-next-line @typescript-eslint/no-require-imports\n const persistModule = require('@orama/plugin-data-persistence/server');\n this.persistence = {\n persistToFile: persistModule.persistToFile,\n restoreFromFile: persistModule.restoreFromFile,\n };\n } catch {\n logDebug('OramaIndex: @orama/plugin-data-persistence not installed \u2014 Orama engine unavailable');\n return;\n }\n\n try {\n if (fs.existsSync(this.indexPath)) {\n this.db = await this.persistence!.restoreFromFile('json', this.indexPath);\n logDebug('OramaIndex: restored from disk', { path: this.indexPath });\n } else {\n this.db = await this.orama!.create({\n schema: {\n nodeId: 'enum', // exact-match filterable field (not full-text indexed)\n name: 'string',\n kind: 'string',\n filePath: 'string',\n signature: 'string',\n embedding: `vector[${this.dim}]`,\n },\n });\n logDebug('OramaIndex: created fresh index', { dim: this.dim });\n }\n this._available = true;\n } catch (err) {\n logError('OramaIndex: initialization failed', { error: String(err) });\n }\n }\n\n /**\n * Insert or replace a node's document in the index.\n * Orama has no native upsert, so we remove any existing doc first.\n */\n async upsert(node: Node, embedding: Float32Array): Promise<void> {\n if (!this._available || !this.db) return;\n\n try {\n // Remove existing document if present (exact match on enum field \u2014 no full-text)\n const existing = await this.orama!.search(this.db, {\n term: '',\n where: { nodeId: { eq: node.id } },\n limit: 1,\n });\n if (existing?.hits?.length > 0) {\n for (const hit of existing.hits) {\n await this.orama!.remove(this.db, hit.id);\n }\n }\n\n await this.orama!.insert(this.db, {\n nodeId: node.id,\n name: node.name,\n kind: node.kind,\n filePath: node.filePath,\n signature: node.signature ?? '',\n embedding: Array.from(embedding),\n });\n } catch (err) {\n logWarn('OramaIndex: upsert failed', { nodeId: node.id, error: String(err) });\n }\n }\n\n /**\n * Remove a node's document from the index.\n */\n async delete(nodeId: string): Promise<void> {\n if (!this._available || !this.db) return;\n\n try {\n const existing = await this.orama!.search(this.db, {\n term: '',\n where: { nodeId: { eq: nodeId } },\n limit: 1,\n });\n if (existing?.hits?.length > 0) {\n for (const hit of existing.hits) {\n await this.orama!.remove(this.db, hit.id);\n }\n }\n } catch (err) {\n logWarn('OramaIndex: delete failed', { nodeId, error: String(err) });\n }\n }\n\n /**\n * Hybrid search: combines full-text relevance on name/kind/filePath/signature\n * with vector similarity on the embedding field.\n * Returns node IDs ordered by Orama's combined score (best first).\n */\n async search(queryText: string, queryVec: Float32Array, topN = 10): Promise<string[]> {\n if (!this._available || !this.db) return [];\n\n try {\n const results = await this.orama!.search(this.db, {\n term: queryText,\n mode: 'hybrid',\n vector: {\n value: Array.from(queryVec),\n property: 'embedding',\n },\n limit: topN,\n similarity: 0.3,\n });\n\n return (results?.hits ?? []).map((hit: any) => hit.document.nodeId as string);\n } catch (err) {\n logWarn('OramaIndex: search failed', { error: String(err) });\n return [];\n }\n }\n\n /** Persist the in-memory index to .kirograph/orama.json. */\n async save(): Promise<void> {\n if (!this._available || !this.db || !this.persistence) return;\n\n try {\n await this.persistence.persistToFile(this.db, 'json', this.indexPath);\n logDebug('OramaIndex: saved to disk', { path: this.indexPath });\n } catch (err) {\n logWarn('OramaIndex: save failed', { error: String(err) });\n }\n }\n\n /** Return all node IDs currently stored in the index. */\n async getEmbeddedNodeIds(): Promise<string[]> {\n if (!this._available || !this.db) return [];\n try {\n const results = await this.orama!.search(this.db, { term: '', limit: 1_000_000, includeVectors: false });\n return (results?.hits ?? []).map((hit: any) => hit.document.nodeId as string);\n } catch {\n return [];\n }\n }\n\n /** Number of documents currently in the index. */\n async count(): Promise<number> {\n if (!this._available || !this.db) return 0;\n try {\n return await this.orama!.count(this.db);\n } catch {\n return 0;\n }\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,53 @@
1
+ /**
2
+ * KiroGraph PGLite Index
3
+ *
4
+ * Hybrid search (full-text + exact vector) backed by @electric-sql/pglite + pgvector.
5
+ * The database is persisted to .kirograph/pglite/ (PGLite's WAL-based file storage).
6
+ *
7
+ * Opt-in: set config.semanticEngine = 'pglite'
8
+ * Required optional dependency (not installed by default):
9
+ * npm install @electric-sql/pglite
10
+ *
11
+ * Key advantages over other engines:
12
+ * - Pure WASM, no native compilation required (unlike sqlite-vec)
13
+ * - Exact nearest-neighbour search (deterministic, unlike ANN approximation)
14
+ * - Native SQL upsert via ON CONFLICT — no remove+insert dance (unlike Orama)
15
+ * - HNSW index for fast approximate search when the table grows large
16
+ * - Full-text search via PostgreSQL tsvector + ts_rank combined in one query
17
+ */
18
+ import type { Node } from '../types';
19
+ export declare class PGliteIndex {
20
+ private readonly kirographDir;
21
+ private readonly dim;
22
+ private db;
23
+ private _available;
24
+ private dbPath;
25
+ constructor(kirographDir: string, dim?: number);
26
+ isAvailable(): boolean;
27
+ /**
28
+ * Load @electric-sql/pglite, open the file-persisted database, enable pgvector,
29
+ * and apply the schema (idempotent — safe to call on every startup).
30
+ * Silent no-op when the optional dep is missing.
31
+ */
32
+ initialize(): Promise<void>;
33
+ /**
34
+ * Insert or update a node's record using PostgreSQL's native ON CONFLICT upsert.
35
+ */
36
+ upsert(node: Node, embedding: Float32Array): Promise<void>;
37
+ /**
38
+ * Remove a node's record from the index.
39
+ */
40
+ delete(nodeId: string): Promise<void>;
41
+ /**
42
+ * Hybrid search: combines pgvector cosine distance with PostgreSQL full-text
43
+ * ranking in a single SQL query. Returns node IDs ordered by combined score.
44
+ *
45
+ * Score = VECTOR_WEIGHT × (1 - cosine_distance) + FTS_WEIGHT × ts_rank
46
+ */
47
+ search(queryText: string, queryVec: Float32Array, topN?: number): Promise<string[]>;
48
+ /** Return all node IDs currently stored in the index. */
49
+ getEmbeddedNodeIds(): Promise<string[]>;
50
+ /** Number of documents currently in the index. */
51
+ count(): Promise<number>;
52
+ }
53
+ //# sourceMappingURL=pglite-index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pglite-index.d.ts","sourceRoot":"","sources":["../../src/vectors/pglite-index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAIH,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAarC,qBAAa,WAAW;IAMpB,OAAO,CAAC,QAAQ,CAAC,YAAY;IAC7B,OAAO,CAAC,QAAQ,CAAC,GAAG;IANtB,OAAO,CAAC,EAAE,CAAa;IACvB,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;gBAGJ,YAAY,EAAE,MAAM,EACpB,GAAG,SAAc;IAKpC,WAAW,IAAI,OAAO;IAItB;;;;OAIG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAqDjC;;OAEG;IACG,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC;IA2BhE;;OAEG;IACG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAU3C;;;;;OAKG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,EAAE,IAAI,SAAK,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IA0BrF,yDAAyD;IACnD,kBAAkB,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAU7C,kDAAkD;IAC5C,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;CAS/B"}