@vpxa/kb 0.1.13 → 0.1.16

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 (490) hide show
  1. package/README.md +65 -12
  2. package/package.json +14 -7
  3. package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -21
  4. package/packages/analyzers/dist/blast-radius-analyzer.js +5 -12
  5. package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -28
  6. package/packages/analyzers/dist/dependency-analyzer.js +6 -9
  7. package/packages/analyzers/dist/diagram-generator.d.ts +12 -9
  8. package/packages/analyzers/dist/diagram-generator.js +2 -4
  9. package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -36
  10. package/packages/analyzers/dist/entry-point-analyzer.js +4 -6
  11. package/packages/analyzers/dist/index.d.ts +12 -14
  12. package/packages/analyzers/dist/index.js +1 -1
  13. package/packages/analyzers/dist/knowledge-producer.d.ts +34 -26
  14. package/packages/analyzers/dist/knowledge-producer.js +17 -15
  15. package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -11
  16. package/packages/analyzers/dist/pattern-analyzer.js +2 -5
  17. package/packages/analyzers/dist/regex-call-graph.d.ts +6 -13
  18. package/packages/analyzers/dist/regex-call-graph.js +1 -1
  19. package/packages/analyzers/dist/structure-analyzer.d.ts +13 -10
  20. package/packages/analyzers/dist/structure-analyzer.js +2 -4
  21. package/packages/analyzers/dist/symbol-analyzer.d.ts +13 -9
  22. package/packages/analyzers/dist/symbol-analyzer.js +9 -13
  23. package/packages/analyzers/dist/ts-call-graph.d.ts +16 -14
  24. package/packages/analyzers/dist/ts-call-graph.js +1 -1
  25. package/packages/analyzers/dist/types.d.ts +82 -80
  26. package/packages/analyzers/dist/types.js +1 -0
  27. package/packages/chunker/dist/call-graph-extractor.d.ts +15 -12
  28. package/packages/chunker/dist/call-graph-extractor.js +1 -1
  29. package/packages/chunker/dist/chunker-factory.d.ts +16 -4
  30. package/packages/chunker/dist/chunker-factory.js +1 -1
  31. package/packages/chunker/dist/chunker.interface.d.ts +8 -5
  32. package/packages/chunker/dist/chunker.interface.js +1 -0
  33. package/packages/chunker/dist/code-chunker.d.ts +16 -13
  34. package/packages/chunker/dist/code-chunker.js +11 -14
  35. package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
  36. package/packages/chunker/dist/extractors/call-extractor.js +1 -0
  37. package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
  38. package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
  39. package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
  40. package/packages/chunker/dist/extractors/import-extractor.js +1 -0
  41. package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
  42. package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
  43. package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
  44. package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
  45. package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
  46. package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
  47. package/packages/chunker/dist/extractors/types.d.ts +36 -0
  48. package/packages/chunker/dist/extractors/types.js +1 -0
  49. package/packages/chunker/dist/generic-chunker.d.ts +14 -11
  50. package/packages/chunker/dist/generic-chunker.js +5 -5
  51. package/packages/chunker/dist/index.d.ts +19 -8
  52. package/packages/chunker/dist/index.js +1 -1
  53. package/packages/chunker/dist/markdown-chunker.d.ts +16 -13
  54. package/packages/chunker/dist/markdown-chunker.js +3 -10
  55. package/packages/chunker/dist/wasm/languages.d.ts +18 -0
  56. package/packages/chunker/dist/wasm/languages.js +1 -0
  57. package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
  58. package/packages/chunker/dist/wasm/query-executor.js +1 -0
  59. package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
  60. package/packages/chunker/dist/wasm/runtime.js +1 -0
  61. package/packages/chunker/dist/wasm/types.d.ts +84 -0
  62. package/packages/chunker/dist/wasm/types.js +1 -0
  63. package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
  64. package/packages/chunker/dist/wasm-chunker.js +6 -0
  65. package/packages/chunker/src/queries/go/calls.scm +11 -0
  66. package/packages/chunker/src/queries/go/entry-points.scm +20 -0
  67. package/packages/chunker/src/queries/go/imports.scm +6 -0
  68. package/packages/chunker/src/queries/go/patterns.scm +25 -0
  69. package/packages/chunker/src/queries/go/symbols.scm +26 -0
  70. package/packages/chunker/src/queries/java/calls.scm +10 -0
  71. package/packages/chunker/src/queries/java/entry-points.scm +27 -0
  72. package/packages/chunker/src/queries/java/imports.scm +11 -0
  73. package/packages/chunker/src/queries/java/patterns.scm +27 -0
  74. package/packages/chunker/src/queries/java/symbols.scm +28 -0
  75. package/packages/chunker/src/queries/javascript/calls.scm +21 -0
  76. package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
  77. package/packages/chunker/src/queries/javascript/imports.scm +32 -0
  78. package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
  79. package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
  80. package/packages/chunker/src/queries/python/calls.scm +11 -0
  81. package/packages/chunker/src/queries/python/entry-points.scm +21 -0
  82. package/packages/chunker/src/queries/python/imports.scm +14 -0
  83. package/packages/chunker/src/queries/python/patterns.scm +25 -0
  84. package/packages/chunker/src/queries/python/symbols.scm +17 -0
  85. package/packages/chunker/src/queries/rust/calls.scm +20 -0
  86. package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
  87. package/packages/chunker/src/queries/rust/imports.scm +26 -0
  88. package/packages/chunker/src/queries/rust/patterns.scm +18 -0
  89. package/packages/chunker/src/queries/rust/symbols.scm +73 -0
  90. package/packages/chunker/src/queries/typescript/calls.scm +21 -0
  91. package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
  92. package/packages/chunker/src/queries/typescript/imports.scm +35 -0
  93. package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
  94. package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
  95. package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
  96. package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
  97. package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
  98. package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
  99. package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
  100. package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
  101. package/packages/chunker/wasm/tree-sitter.wasm +0 -0
  102. package/packages/cli/dist/commands/analyze.d.ts +6 -3
  103. package/packages/cli/dist/commands/analyze.js +2 -3
  104. package/packages/cli/dist/commands/context-cmds.d.ts +6 -3
  105. package/packages/cli/dist/commands/context-cmds.js +1 -1
  106. package/packages/cli/dist/commands/environment.d.ts +6 -3
  107. package/packages/cli/dist/commands/environment.js +1 -2
  108. package/packages/cli/dist/commands/execution.d.ts +6 -3
  109. package/packages/cli/dist/commands/execution.js +1 -1
  110. package/packages/cli/dist/commands/graph.d.ts +6 -3
  111. package/packages/cli/dist/commands/graph.js +5 -6
  112. package/packages/cli/dist/commands/init/adapters.d.ts +28 -0
  113. package/packages/cli/dist/commands/init/adapters.js +1 -0
  114. package/packages/cli/dist/commands/init/config.d.ts +10 -0
  115. package/packages/cli/dist/commands/init/config.js +3 -0
  116. package/packages/cli/dist/commands/init/constants.d.ts +18 -0
  117. package/packages/cli/dist/commands/init/constants.js +1 -0
  118. package/packages/cli/dist/commands/init/curated.d.ts +7 -0
  119. package/packages/cli/dist/commands/init/curated.js +1 -0
  120. package/packages/cli/dist/commands/init/global.d.ts +34 -0
  121. package/packages/cli/dist/commands/init/global.js +5 -0
  122. package/packages/cli/dist/commands/init/index.d.ts +28 -0
  123. package/packages/cli/dist/commands/init/index.js +5 -0
  124. package/packages/cli/dist/commands/init/scaffold.d.ts +23 -0
  125. package/packages/cli/dist/commands/init/scaffold.js +1 -0
  126. package/packages/cli/dist/commands/init/templates.d.ts +9 -0
  127. package/packages/cli/dist/commands/init/templates.js +165 -0
  128. package/packages/cli/dist/commands/knowledge.d.ts +6 -3
  129. package/packages/cli/dist/commands/knowledge.js +1 -1
  130. package/packages/cli/dist/commands/search.d.ts +6 -3
  131. package/packages/cli/dist/commands/search.js +1 -8
  132. package/packages/cli/dist/commands/system.d.ts +6 -3
  133. package/packages/cli/dist/commands/system.js +4 -7
  134. package/packages/cli/dist/commands/workspace.d.ts +6 -3
  135. package/packages/cli/dist/commands/workspace.js +1 -2
  136. package/packages/cli/dist/context.d.ts +7 -5
  137. package/packages/cli/dist/context.js +1 -1
  138. package/packages/cli/dist/helpers.d.ts +51 -48
  139. package/packages/cli/dist/helpers.js +5 -5
  140. package/packages/cli/dist/index.d.ts +4 -2
  141. package/packages/cli/dist/index.js +2 -2
  142. package/packages/cli/dist/kb-init.d.ts +48 -51
  143. package/packages/cli/dist/kb-init.js +1 -1
  144. package/packages/cli/dist/types.d.ts +8 -6
  145. package/packages/cli/dist/types.js +1 -0
  146. package/packages/core/dist/constants.d.ts +58 -34
  147. package/packages/core/dist/constants.js +1 -1
  148. package/packages/core/dist/content-detector.d.ts +8 -8
  149. package/packages/core/dist/content-detector.js +1 -1
  150. package/packages/core/dist/errors.d.ts +15 -13
  151. package/packages/core/dist/errors.js +1 -1
  152. package/packages/core/dist/global-registry.d.ts +62 -0
  153. package/packages/core/dist/global-registry.js +1 -0
  154. package/packages/core/dist/index.d.ts +7 -6
  155. package/packages/core/dist/index.js +1 -1
  156. package/packages/core/dist/logger.d.ts +19 -8
  157. package/packages/core/dist/logger.js +1 -1
  158. package/packages/core/dist/types.d.ts +107 -92
  159. package/packages/core/dist/types.js +1 -0
  160. package/packages/embeddings/dist/embedder.interface.d.ts +22 -20
  161. package/packages/embeddings/dist/embedder.interface.js +1 -0
  162. package/packages/embeddings/dist/index.d.ts +3 -3
  163. package/packages/embeddings/dist/index.js +1 -1
  164. package/packages/embeddings/dist/onnx-embedder.d.ts +21 -23
  165. package/packages/embeddings/dist/onnx-embedder.js +1 -1
  166. package/packages/enterprise-bridge/dist/cache.d.ts +28 -0
  167. package/packages/enterprise-bridge/dist/cache.js +1 -0
  168. package/packages/enterprise-bridge/dist/er-client.d.ts +37 -0
  169. package/packages/enterprise-bridge/dist/er-client.js +1 -0
  170. package/packages/enterprise-bridge/dist/evolution-collector.d.ts +62 -0
  171. package/packages/enterprise-bridge/dist/evolution-collector.js +1 -0
  172. package/packages/enterprise-bridge/dist/index.d.ts +8 -0
  173. package/packages/enterprise-bridge/dist/index.js +1 -0
  174. package/packages/enterprise-bridge/dist/policy-store.d.ts +45 -0
  175. package/packages/enterprise-bridge/dist/policy-store.js +1 -0
  176. package/packages/enterprise-bridge/dist/push-adapter.d.ts +23 -0
  177. package/packages/enterprise-bridge/dist/push-adapter.js +1 -0
  178. package/packages/enterprise-bridge/dist/result-merger.d.ts +14 -0
  179. package/packages/enterprise-bridge/dist/result-merger.js +1 -0
  180. package/packages/enterprise-bridge/dist/types.d.ts +81 -0
  181. package/packages/enterprise-bridge/dist/types.js +1 -0
  182. package/packages/indexer/dist/file-hasher.d.ts +5 -3
  183. package/packages/indexer/dist/file-hasher.js +1 -1
  184. package/packages/indexer/dist/filesystem-crawler.d.ts +23 -21
  185. package/packages/indexer/dist/filesystem-crawler.js +1 -1
  186. package/packages/indexer/dist/graph-extractor.d.ts +9 -13
  187. package/packages/indexer/dist/graph-extractor.js +1 -1
  188. package/packages/indexer/dist/incremental-indexer.d.ts +49 -44
  189. package/packages/indexer/dist/incremental-indexer.js +1 -1
  190. package/packages/indexer/dist/index.d.ts +5 -5
  191. package/packages/indexer/dist/index.js +1 -1
  192. package/packages/server/dist/api.d.ts +3 -8
  193. package/packages/server/dist/api.js +1 -1
  194. package/packages/server/dist/config.d.ts +6 -3
  195. package/packages/server/dist/config.js +1 -1
  196. package/packages/server/dist/cross-workspace.d.ts +43 -0
  197. package/packages/server/dist/cross-workspace.js +1 -0
  198. package/packages/server/dist/curated-manager.d.ts +80 -78
  199. package/packages/server/dist/curated-manager.js +5 -10
  200. package/packages/server/dist/index.d.ts +1 -2
  201. package/packages/server/dist/index.js +1 -1
  202. package/packages/server/dist/replay-interceptor.d.ts +6 -7
  203. package/packages/server/dist/replay-interceptor.js +1 -1
  204. package/packages/server/dist/resources/resources.d.ts +7 -4
  205. package/packages/server/dist/resources/resources.js +2 -2
  206. package/packages/server/dist/server.d.ts +37 -25
  207. package/packages/server/dist/server.js +1 -1
  208. package/packages/server/dist/tools/analyze.tools.d.ts +14 -11
  209. package/packages/server/dist/tools/analyze.tools.js +1 -3
  210. package/packages/server/dist/tools/audit.tool.d.ts +8 -5
  211. package/packages/server/dist/tools/audit.tool.js +1 -4
  212. package/packages/server/dist/tools/bridge.tools.d.ts +34 -0
  213. package/packages/server/dist/tools/bridge.tools.js +15 -0
  214. package/packages/server/dist/tools/evolution.tools.d.ts +7 -0
  215. package/packages/server/dist/tools/evolution.tools.js +5 -0
  216. package/packages/server/dist/tools/forge.tools.d.ts +13 -12
  217. package/packages/server/dist/tools/forge.tools.js +10 -13
  218. package/packages/server/dist/tools/forget.tool.d.ts +7 -4
  219. package/packages/server/dist/tools/forget.tool.js +1 -7
  220. package/packages/server/dist/tools/graph.tool.d.ts +7 -4
  221. package/packages/server/dist/tools/graph.tool.js +4 -5
  222. package/packages/server/dist/tools/list.tool.d.ts +7 -4
  223. package/packages/server/dist/tools/list.tool.js +2 -8
  224. package/packages/server/dist/tools/lookup.tool.d.ts +7 -4
  225. package/packages/server/dist/tools/lookup.tool.js +2 -9
  226. package/packages/server/dist/tools/onboard.tool.d.ts +8 -5
  227. package/packages/server/dist/tools/onboard.tool.js +2 -2
  228. package/packages/server/dist/tools/policy.tools.d.ts +7 -0
  229. package/packages/server/dist/tools/policy.tools.js +2 -0
  230. package/packages/server/dist/tools/produce.tool.d.ts +6 -3
  231. package/packages/server/dist/tools/produce.tool.js +2 -2
  232. package/packages/server/dist/tools/read.tool.d.ts +7 -4
  233. package/packages/server/dist/tools/read.tool.js +2 -6
  234. package/packages/server/dist/tools/reindex.tool.d.ts +10 -7
  235. package/packages/server/dist/tools/reindex.tool.js +3 -2
  236. package/packages/server/dist/tools/remember.tool.d.ts +8 -4
  237. package/packages/server/dist/tools/remember.tool.js +3 -5
  238. package/packages/server/dist/tools/replay.tool.d.ts +6 -3
  239. package/packages/server/dist/tools/replay.tool.js +2 -6
  240. package/packages/server/dist/tools/search.tool.d.ts +10 -5
  241. package/packages/server/dist/tools/search.tool.js +6 -22
  242. package/packages/server/dist/tools/status.tool.d.ts +12 -4
  243. package/packages/server/dist/tools/status.tool.js +2 -3
  244. package/packages/server/dist/tools/toolkit.tools.d.ts +36 -35
  245. package/packages/server/dist/tools/toolkit.tools.js +20 -24
  246. package/packages/server/dist/tools/update.tool.d.ts +7 -4
  247. package/packages/server/dist/tools/update.tool.js +1 -6
  248. package/packages/server/dist/tools/utility.tools.d.ts +15 -15
  249. package/packages/server/dist/tools/utility.tools.js +10 -23
  250. package/packages/server/dist/version-check.d.ts +5 -2
  251. package/packages/server/dist/version-check.js +1 -1
  252. package/packages/store/dist/graph-store.interface.d.ts +89 -87
  253. package/packages/store/dist/graph-store.interface.js +1 -0
  254. package/packages/store/dist/index.d.ts +6 -6
  255. package/packages/store/dist/index.js +1 -1
  256. package/packages/store/dist/lance-store.d.ts +37 -31
  257. package/packages/store/dist/lance-store.js +1 -1
  258. package/packages/store/dist/sqlite-graph-store.d.ts +43 -47
  259. package/packages/store/dist/sqlite-graph-store.js +13 -13
  260. package/packages/store/dist/store-factory.d.ts +11 -8
  261. package/packages/store/dist/store-factory.js +1 -1
  262. package/packages/store/dist/store.interface.d.ts +47 -47
  263. package/packages/store/dist/store.interface.js +1 -0
  264. package/packages/tools/dist/audit.d.ts +61 -62
  265. package/packages/tools/dist/audit.js +4 -5
  266. package/packages/tools/dist/batch.d.ts +20 -18
  267. package/packages/tools/dist/batch.js +1 -1
  268. package/packages/tools/dist/changelog.d.ts +29 -27
  269. package/packages/tools/dist/changelog.js +2 -2
  270. package/packages/tools/dist/check.d.ts +42 -39
  271. package/packages/tools/dist/check.js +2 -2
  272. package/packages/tools/dist/checkpoint.d.ts +17 -15
  273. package/packages/tools/dist/checkpoint.js +1 -2
  274. package/packages/tools/dist/codemod.d.ts +35 -33
  275. package/packages/tools/dist/codemod.js +2 -2
  276. package/packages/tools/dist/compact.d.ts +34 -38
  277. package/packages/tools/dist/compact.js +2 -2
  278. package/packages/tools/dist/data-transform.d.ts +10 -8
  279. package/packages/tools/dist/data-transform.js +1 -1
  280. package/packages/tools/dist/dead-symbols.d.ts +29 -26
  281. package/packages/tools/dist/dead-symbols.js +2 -2
  282. package/packages/tools/dist/delegate.d.ts +26 -24
  283. package/packages/tools/dist/delegate.js +1 -5
  284. package/packages/tools/dist/diff-parse.d.ts +24 -22
  285. package/packages/tools/dist/diff-parse.js +3 -3
  286. package/packages/tools/dist/digest.d.ts +43 -46
  287. package/packages/tools/dist/digest.js +4 -5
  288. package/packages/tools/dist/dogfood-log.d.ts +49 -0
  289. package/packages/tools/dist/dogfood-log.js +2 -0
  290. package/packages/tools/dist/encode.d.ts +11 -9
  291. package/packages/tools/dist/encode.js +1 -1
  292. package/packages/tools/dist/env-info.d.ts +25 -23
  293. package/packages/tools/dist/env-info.js +1 -1
  294. package/packages/tools/dist/eval.d.ts +13 -11
  295. package/packages/tools/dist/eval.js +2 -3
  296. package/packages/tools/dist/evidence-map.d.ts +64 -62
  297. package/packages/tools/dist/evidence-map.js +2 -3
  298. package/packages/tools/dist/file-cache.d.ts +41 -0
  299. package/packages/tools/dist/file-cache.js +3 -0
  300. package/packages/tools/dist/file-summary.d.ts +50 -30
  301. package/packages/tools/dist/file-summary.js +2 -2
  302. package/packages/tools/dist/file-walk.d.ts +6 -4
  303. package/packages/tools/dist/file-walk.js +1 -1
  304. package/packages/tools/dist/find-examples.d.ts +26 -22
  305. package/packages/tools/dist/find-examples.js +3 -3
  306. package/packages/tools/dist/find.d.ts +39 -41
  307. package/packages/tools/dist/find.js +1 -1
  308. package/packages/tools/dist/forge-classify.d.ts +35 -39
  309. package/packages/tools/dist/forge-classify.js +2 -2
  310. package/packages/tools/dist/forge-ground.d.ts +58 -61
  311. package/packages/tools/dist/forge-ground.js +1 -1
  312. package/packages/tools/dist/git-context.d.ts +22 -20
  313. package/packages/tools/dist/git-context.js +3 -3
  314. package/packages/tools/dist/graph-query.d.ts +75 -79
  315. package/packages/tools/dist/graph-query.js +1 -1
  316. package/packages/tools/dist/guide.d.ts +14 -12
  317. package/packages/tools/dist/guide.js +1 -1
  318. package/packages/tools/dist/health.d.ts +13 -11
  319. package/packages/tools/dist/health.js +2 -2
  320. package/packages/tools/dist/http-request.d.ts +20 -18
  321. package/packages/tools/dist/http-request.js +1 -1
  322. package/packages/tools/dist/index.d.ts +55 -53
  323. package/packages/tools/dist/index.js +1 -1
  324. package/packages/tools/dist/lane.d.ts +28 -26
  325. package/packages/tools/dist/lane.js +6 -7
  326. package/packages/tools/dist/measure.d.ts +34 -30
  327. package/packages/tools/dist/measure.js +2 -2
  328. package/packages/tools/dist/onboard.d.ts +29 -27
  329. package/packages/tools/dist/onboard.js +17 -41
  330. package/packages/tools/dist/parse-output.d.ts +48 -46
  331. package/packages/tools/dist/parse-output.js +2 -2
  332. package/packages/tools/dist/path-resolver.d.ts +4 -2
  333. package/packages/tools/dist/path-resolver.js +1 -1
  334. package/packages/tools/dist/process-manager.d.ts +18 -16
  335. package/packages/tools/dist/process-manager.js +1 -1
  336. package/packages/tools/dist/queue.d.ts +28 -26
  337. package/packages/tools/dist/queue.js +1 -2
  338. package/packages/tools/dist/regex-test.d.ts +26 -24
  339. package/packages/tools/dist/regex-test.js +1 -1
  340. package/packages/tools/dist/rename.d.ts +28 -26
  341. package/packages/tools/dist/rename.js +2 -2
  342. package/packages/tools/dist/replay.d.ts +33 -31
  343. package/packages/tools/dist/replay.js +4 -6
  344. package/packages/tools/dist/response-envelope.d.ts +32 -30
  345. package/packages/tools/dist/response-envelope.js +1 -1
  346. package/packages/tools/dist/schema-validate.d.ts +15 -13
  347. package/packages/tools/dist/schema-validate.js +1 -1
  348. package/packages/tools/dist/scope-map.d.ts +45 -48
  349. package/packages/tools/dist/scope-map.js +1 -1
  350. package/packages/tools/dist/snippet.d.ts +26 -25
  351. package/packages/tools/dist/snippet.js +1 -1
  352. package/packages/tools/dist/stash.d.ts +13 -11
  353. package/packages/tools/dist/stash.js +1 -2
  354. package/packages/tools/dist/stratum-card.d.ts +27 -28
  355. package/packages/tools/dist/stratum-card.js +3 -5
  356. package/packages/tools/dist/symbol.d.ts +31 -26
  357. package/packages/tools/dist/symbol.js +3 -3
  358. package/packages/tools/dist/test-run.d.ts +19 -16
  359. package/packages/tools/dist/test-run.js +2 -2
  360. package/packages/tools/dist/text-utils.d.ts +6 -4
  361. package/packages/tools/dist/text-utils.js +2 -2
  362. package/packages/tools/dist/time-utils.d.ts +15 -13
  363. package/packages/tools/dist/time-utils.js +1 -1
  364. package/packages/tools/dist/trace.d.ts +26 -21
  365. package/packages/tools/dist/trace.js +2 -2
  366. package/packages/tools/dist/truncation.d.ts +6 -4
  367. package/packages/tools/dist/truncation.js +6 -13
  368. package/packages/tools/dist/watch.d.ts +28 -26
  369. package/packages/tools/dist/watch.js +1 -1
  370. package/packages/tools/dist/web-fetch.d.ts +35 -33
  371. package/packages/tools/dist/web-fetch.js +6 -12
  372. package/packages/tools/dist/web-search.d.ts +16 -14
  373. package/packages/tools/dist/web-search.js +1 -1
  374. package/packages/tools/dist/workset.d.ts +19 -17
  375. package/packages/tools/dist/workset.js +1 -2
  376. package/packages/tui/dist/App-CYLNJLr6.js +2 -0
  377. package/packages/tui/dist/App.d.ts +11 -6
  378. package/packages/tui/dist/App.js +1 -450
  379. package/packages/tui/dist/CuratedPanel-sYdZAICX.js +2 -0
  380. package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
  381. package/packages/tui/dist/SearchPanel-DREo6zgt.js +2 -0
  382. package/packages/tui/dist/StatusPanel-2ex8fLOO.js +2 -0
  383. package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
  384. package/packages/tui/dist/devtools-DUyj952l.js +7 -0
  385. package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +28 -0
  386. package/packages/tui/dist/index-B9VpfVPP.d.ts +13 -0
  387. package/packages/tui/dist/index.d.ts +3 -19
  388. package/packages/tui/dist/index.js +1 -476
  389. package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +316 -0
  390. package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -6
  391. package/packages/tui/dist/panels/CuratedPanel.js +1 -371
  392. package/packages/tui/dist/panels/LogPanel.d.ts +7 -3
  393. package/packages/tui/dist/panels/LogPanel.js +1 -449
  394. package/packages/tui/dist/panels/SearchPanel.d.ts +14 -8
  395. package/packages/tui/dist/panels/SearchPanel.js +1 -372
  396. package/packages/tui/dist/panels/StatusPanel.d.ts +11 -6
  397. package/packages/tui/dist/panels/StatusPanel.js +1 -371
  398. package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +150 -0
  399. package/scaffold/adapters/claude-code.mjs +20 -0
  400. package/scaffold/adapters/copilot.mjs +320 -0
  401. package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  402. package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +21 -0
  403. package/scaffold/copilot/agents/Documenter.agent.md +42 -0
  404. package/scaffold/copilot/agents/Orchestrator.agent.md +104 -0
  405. package/scaffold/copilot/agents/Planner.agent.md +54 -0
  406. package/scaffold/copilot/agents/Refactor.agent.md +36 -0
  407. package/scaffold/copilot/agents/Researcher-Alpha.agent.md +20 -0
  408. package/scaffold/copilot/agents/Researcher-Beta.agent.md +20 -0
  409. package/scaffold/copilot/agents/Researcher-Delta.agent.md +20 -0
  410. package/scaffold/copilot/agents/Researcher-Gamma.agent.md +20 -0
  411. package/scaffold/definitions/agents.mjs +165 -0
  412. package/scaffold/definitions/bodies.mjs +292 -0
  413. package/scaffold/definitions/hooks.mjs +43 -0
  414. package/scaffold/definitions/models.mjs +56 -0
  415. package/scaffold/definitions/plugins.mjs +24 -0
  416. package/scaffold/definitions/prompts.mjs +145 -0
  417. package/scaffold/definitions/protocols.mjs +322 -0
  418. package/scaffold/definitions/tools.mjs +176 -0
  419. package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
  420. package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
  421. package/scaffold/general/agents/Code-Reviewer-Alpha.agent.md +12 -0
  422. package/scaffold/general/agents/Code-Reviewer-Beta.agent.md +12 -0
  423. package/scaffold/general/agents/Debugger.agent.md +31 -0
  424. package/scaffold/general/agents/Documenter.agent.md +42 -0
  425. package/scaffold/general/agents/Explorer.agent.md +50 -0
  426. package/scaffold/general/agents/Frontend.agent.md +29 -0
  427. package/scaffold/general/agents/Implementer.agent.md +31 -0
  428. package/scaffold/general/agents/Orchestrator.agent.md +104 -0
  429. package/scaffold/general/agents/Planner.agent.md +55 -0
  430. package/scaffold/general/agents/README.md +57 -0
  431. package/scaffold/general/agents/Refactor.agent.md +36 -0
  432. package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
  433. package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
  434. package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
  435. package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
  436. package/scaffold/general/agents/Security.agent.md +42 -0
  437. package/scaffold/general/agents/_shared/adr-protocol.md +91 -0
  438. package/scaffold/general/agents/_shared/architect-reviewer-base.md +50 -0
  439. package/scaffold/general/agents/_shared/code-agent-base.md +88 -0
  440. package/scaffold/general/agents/_shared/code-reviewer-base.md +54 -0
  441. package/scaffold/general/agents/_shared/decision-protocol.md +27 -0
  442. package/scaffold/general/agents/_shared/forge-protocol.md +46 -0
  443. package/scaffold/general/agents/_shared/researcher-base.md +61 -0
  444. package/scaffold/general/agents/templates/adr-template.md +27 -0
  445. package/scaffold/general/agents/templates/execution-state.md +25 -0
  446. package/scaffold/general/prompts/ask.prompt.md +20 -0
  447. package/scaffold/general/prompts/debug.prompt.md +25 -0
  448. package/scaffold/general/prompts/design.prompt.md +22 -0
  449. package/scaffold/general/prompts/implement.prompt.md +26 -0
  450. package/scaffold/general/prompts/plan.prompt.md +24 -0
  451. package/scaffold/general/prompts/review.prompt.md +31 -0
  452. package/scaffold/generate.mjs +74 -0
  453. package/skills/adr-skill/SKILL.md +329 -0
  454. package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
  455. package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
  456. package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
  457. package/skills/adr-skill/references/adr-conventions.md +95 -0
  458. package/skills/adr-skill/references/examples.md +193 -0
  459. package/skills/adr-skill/references/review-checklist.md +77 -0
  460. package/skills/adr-skill/references/template-variants.md +52 -0
  461. package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
  462. package/skills/adr-skill/scripts/new_adr.js +391 -0
  463. package/skills/adr-skill/scripts/set_adr_status.js +169 -0
  464. package/skills/brainstorming/SKILL.md +259 -0
  465. package/skills/brainstorming/scripts/frame-template.html +365 -0
  466. package/skills/brainstorming/scripts/helper.js +216 -0
  467. package/skills/brainstorming/scripts/server.cjs +9 -0
  468. package/skills/brainstorming/scripts/server.src.cjs +249 -0
  469. package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
  470. package/skills/brainstorming/visual-companion.md +430 -0
  471. package/skills/c4-architecture/SKILL.md +295 -0
  472. package/skills/c4-architecture/references/advanced-patterns.md +552 -0
  473. package/skills/c4-architecture/references/c4-syntax.md +492 -0
  474. package/skills/c4-architecture/references/common-mistakes.md +437 -0
  475. package/skills/knowledge-base/SKILL.md +100 -10
  476. package/skills/lesson-learned/SKILL.md +105 -0
  477. package/skills/lesson-learned/references/anti-patterns.md +55 -0
  478. package/skills/lesson-learned/references/se-principles.md +109 -0
  479. package/skills/requirements-clarity/SKILL.md +324 -0
  480. package/skills/session-handoff/SKILL.md +189 -0
  481. package/skills/session-handoff/references/handoff-template.md +139 -0
  482. package/skills/session-handoff/references/resume-checklist.md +80 -0
  483. package/skills/session-handoff/scripts/check_staleness.js +269 -0
  484. package/skills/session-handoff/scripts/create_handoff.js +299 -0
  485. package/skills/session-handoff/scripts/list_handoffs.js +113 -0
  486. package/skills/session-handoff/scripts/validate_handoff.js +241 -0
  487. package/packages/chunker/dist/treesitter-chunker.d.ts +0 -47
  488. package/packages/chunker/dist/treesitter-chunker.js +0 -8
  489. package/packages/cli/dist/commands/init.d.ts +0 -10
  490. package/packages/cli/dist/commands/init.js +0 -308
@@ -1,104 +1,106 @@
1
+ //#region packages/store/src/graph-store.interface.d.ts
1
2
  /**
2
3
  * Knowledge graph store abstraction — typed nodes + edges for entity-relationship storage.
3
4
  * Complements the vector store: vector search finds similar content,
4
5
  * graph traversal finds connected concepts.
5
6
  */
6
7
  /** A node in the knowledge graph (entity, concept, service, etc.) */
7
- export interface GraphNode {
8
- /** Unique identifier */
9
- id: string;
10
- /** Node type (e.g., 'entity', 'service', 'api', 'concept', 'decision') */
11
- type: string;
12
- /** Display name */
13
- name: string;
14
- /** Arbitrary properties */
15
- properties: Record<string, unknown>;
16
- /** Back-link to KnowledgeRecord.id that produced this node */
17
- sourceRecordId?: string;
18
- /** Source file path (for cleanup on re-index) */
19
- sourcePath?: string;
20
- /** ISO timestamp */
21
- createdAt?: string;
8
+ interface GraphNode {
9
+ /** Unique identifier */
10
+ id: string;
11
+ /** Node type (e.g., 'entity', 'service', 'api', 'concept', 'decision') */
12
+ type: string;
13
+ /** Display name */
14
+ name: string;
15
+ /** Arbitrary properties */
16
+ properties: Record<string, unknown>;
17
+ /** Back-link to KnowledgeRecord.id that produced this node */
18
+ sourceRecordId?: string;
19
+ /** Source file path (for cleanup on re-index) */
20
+ sourcePath?: string;
21
+ /** ISO timestamp */
22
+ createdAt?: string;
22
23
  }
23
24
  /** An edge connecting two nodes */
24
- export interface GraphEdge {
25
- /** Unique identifier */
26
- id: string;
27
- /** Source node ID */
28
- fromId: string;
29
- /** Target node ID */
30
- toId: string;
31
- /** Relationship type (e.g., 'depends-on', 'implements', 'calls', 'affects') */
32
- type: string;
33
- /** Optional weight (0-1) */
34
- weight?: number;
35
- /** Arbitrary properties */
36
- properties?: Record<string, unknown>;
25
+ interface GraphEdge {
26
+ /** Unique identifier */
27
+ id: string;
28
+ /** Source node ID */
29
+ fromId: string;
30
+ /** Target node ID */
31
+ toId: string;
32
+ /** Relationship type (e.g., 'depends-on', 'implements', 'calls', 'affects') */
33
+ type: string;
34
+ /** Optional weight (0-1) */
35
+ weight?: number;
36
+ /** Arbitrary properties */
37
+ properties?: Record<string, unknown>;
37
38
  }
38
39
  /** Options for graph traversal */
39
- export interface GraphTraversalOptions {
40
- /** Relationship type filter */
41
- edgeType?: string;
42
- /** Max traversal depth (default: 2) */
43
- maxDepth?: number;
44
- /** Direction: outgoing from start, incoming to start, or both */
45
- direction?: 'outgoing' | 'incoming' | 'both';
46
- /** Max total nodes returned (default: 50) */
47
- limit?: number;
40
+ interface GraphTraversalOptions {
41
+ /** Relationship type filter */
42
+ edgeType?: string;
43
+ /** Max traversal depth (default: 2) */
44
+ maxDepth?: number;
45
+ /** Direction: outgoing from start, incoming to start, or both */
46
+ direction?: 'outgoing' | 'incoming' | 'both';
47
+ /** Max total nodes returned (default: 50) */
48
+ limit?: number;
48
49
  }
49
50
  /** Result of a graph traversal */
50
- export interface GraphTraversalResult {
51
- nodes: GraphNode[];
52
- edges: GraphEdge[];
51
+ interface GraphTraversalResult {
52
+ nodes: GraphNode[];
53
+ edges: GraphEdge[];
53
54
  }
54
55
  /** Graph statistics */
55
- export interface GraphStats {
56
- nodeCount: number;
57
- edgeCount: number;
58
- nodeTypes: Record<string, number>;
59
- edgeTypes: Record<string, number>;
56
+ interface GraphStats {
57
+ nodeCount: number;
58
+ edgeCount: number;
59
+ nodeTypes: Record<string, number>;
60
+ edgeTypes: Record<string, number>;
60
61
  }
61
62
  /** Knowledge graph store interface */
62
- export interface IGraphStore {
63
- /** Initialize the store (create tables, indices) */
64
- initialize(): Promise<void>;
65
- /** Add or update a single node */
66
- upsertNode(node: GraphNode): Promise<void>;
67
- /** Add or update a single edge */
68
- upsertEdge(edge: GraphEdge): Promise<void>;
69
- /** Batch add/update nodes */
70
- upsertNodes(nodes: GraphNode[]): Promise<void>;
71
- /** Batch add/update edges */
72
- upsertEdges(edges: GraphEdge[]): Promise<void>;
73
- /** Get a node by ID */
74
- getNode(id: string): Promise<GraphNode | null>;
75
- /** Get direct neighbors of a node */
76
- getNeighbors(nodeId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
77
- /** Multi-hop traversal from a starting node */
78
- traverse(startId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
79
- /** Find nodes by type and/or name pattern */
80
- findNodes(filter: {
81
- type?: string;
82
- namePattern?: string;
83
- sourcePath?: string;
84
- limit?: number;
85
- }): Promise<GraphNode[]>;
86
- /** Find edges by type between optional node filters */
87
- findEdges(filter: {
88
- type?: string;
89
- fromId?: string;
90
- toId?: string;
91
- limit?: number;
92
- }): Promise<GraphEdge[]>;
93
- /** Delete a node and all its edges */
94
- deleteNode(id: string): Promise<void>;
95
- /** Delete all nodes/edges originating from a source path */
96
- deleteBySourcePath(sourcePath: string): Promise<number>;
97
- /** Delete all nodes and edges (full reset) */
98
- clear(): Promise<void>;
99
- /** Get graph statistics */
100
- getStats(): Promise<GraphStats>;
101
- /** Close the store */
102
- close(): Promise<void>;
63
+ interface IGraphStore {
64
+ /** Initialize the store (create tables, indices) */
65
+ initialize(): Promise<void>;
66
+ /** Add or update a single node */
67
+ upsertNode(node: GraphNode): Promise<void>;
68
+ /** Add or update a single edge */
69
+ upsertEdge(edge: GraphEdge): Promise<void>;
70
+ /** Batch add/update nodes */
71
+ upsertNodes(nodes: GraphNode[]): Promise<void>;
72
+ /** Batch add/update edges */
73
+ upsertEdges(edges: GraphEdge[]): Promise<void>;
74
+ /** Get a node by ID */
75
+ getNode(id: string): Promise<GraphNode | null>;
76
+ /** Get direct neighbors of a node */
77
+ getNeighbors(nodeId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
78
+ /** Multi-hop traversal from a starting node */
79
+ traverse(startId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
80
+ /** Find nodes by type and/or name pattern */
81
+ findNodes(filter: {
82
+ type?: string;
83
+ namePattern?: string;
84
+ sourcePath?: string;
85
+ limit?: number;
86
+ }): Promise<GraphNode[]>;
87
+ /** Find edges by type between optional node filters */
88
+ findEdges(filter: {
89
+ type?: string;
90
+ fromId?: string;
91
+ toId?: string;
92
+ limit?: number;
93
+ }): Promise<GraphEdge[]>;
94
+ /** Delete a node and all its edges */
95
+ deleteNode(id: string): Promise<void>;
96
+ /** Delete all nodes/edges originating from a source path */
97
+ deleteBySourcePath(sourcePath: string): Promise<number>;
98
+ /** Delete all nodes and edges (full reset) */
99
+ clear(): Promise<void>;
100
+ /** Get graph statistics */
101
+ getStats(): Promise<GraphStats>;
102
+ /** Close the store */
103
+ close(): Promise<void>;
103
104
  }
104
- //# sourceMappingURL=graph-store.interface.d.ts.map
105
+ //#endregion
106
+ export { GraphEdge, GraphNode, GraphStats, GraphTraversalOptions, GraphTraversalResult, IGraphStore };
@@ -0,0 +1 @@
1
+ export{};
@@ -1,6 +1,6 @@
1
- export type { GraphEdge, GraphNode, GraphStats, GraphTraversalOptions, GraphTraversalResult, IGraphStore, } from './graph-store.interface.js';
2
- export { LanceStore } from './lance-store.js';
3
- export { SqliteGraphStore } from './sqlite-graph-store.js';
4
- export type { IKnowledgeStore, SearchOptions } from './store.interface.js';
5
- export { createStore, type StoreBackend, type StoreConfig } from './store-factory.js';
6
- //# sourceMappingURL=index.d.ts.map
1
+ import { GraphEdge, GraphNode, GraphStats, GraphTraversalOptions, GraphTraversalResult, IGraphStore } from "./graph-store.interface.js";
2
+ import { IKnowledgeStore, SearchOptions } from "./store.interface.js";
3
+ import { LanceStore } from "./lance-store.js";
4
+ import { SqliteGraphStore } from "./sqlite-graph-store.js";
5
+ import { StoreBackend, StoreConfig, createStore } from "./store-factory.js";
6
+ export { type GraphEdge, type GraphNode, type GraphStats, type GraphTraversalOptions, type GraphTraversalResult, type IGraphStore, type IKnowledgeStore, LanceStore, type SearchOptions, SqliteGraphStore, type StoreBackend, type StoreConfig, createStore };
@@ -1 +1 @@
1
- import{LanceStore as t}from"./lance-store.js";import{SqliteGraphStore as a}from"./sqlite-graph-store.js";import{createStore as s}from"./store-factory.js";export{t as LanceStore,a as SqliteGraphStore,s as createStore};
1
+ import{LanceStore as e}from"./lance-store.js";import{SqliteGraphStore as t}from"./sqlite-graph-store.js";import{createStore as n}from"./store-factory.js";export{e as LanceStore,t as SqliteGraphStore,n as createStore};
@@ -1,32 +1,38 @@
1
- /**
2
- * LanceDB implementation of the knowledge store.
3
- * Uses @lancedb/lancedb for local vector + full-text search.
4
- */
5
- import type { IndexStats, KnowledgeRecord, SearchResult } from '@kb/core';
6
- import type { IKnowledgeStore, SearchOptions } from './store.interface.js';
7
- export declare class LanceStore implements IKnowledgeStore {
8
- private db;
9
- private table;
10
- private readonly dbPath;
11
- private readonly tableName;
12
- constructor(options?: {
13
- path?: string;
14
- tableName?: string;
15
- });
16
- initialize(): Promise<void>;
17
- upsert(records: KnowledgeRecord[], vectors: Float32Array[]): Promise<void>;
18
- search(queryVector: Float32Array, options?: SearchOptions): Promise<SearchResult[]>;
19
- createFtsIndex(): Promise<void>;
20
- ftsSearch(query: string, options?: SearchOptions): Promise<SearchResult[]>;
21
- getById(id: string): Promise<KnowledgeRecord | null>;
22
- deleteBySourcePath(sourcePath: string): Promise<number>;
23
- deleteById(id: string): Promise<boolean>;
24
- getBySourcePath(sourcePath: string): Promise<KnowledgeRecord[]>;
25
- getStats(): Promise<IndexStats>;
26
- listSourcePaths(): Promise<string[]>;
27
- dropTable(): Promise<void>;
28
- close(): Promise<void>;
29
- private buildFilterString;
30
- private fromLanceRecord;
1
+ import { IKnowledgeStore, SearchOptions } from "./store.interface.js";
2
+ import { IndexStats, KnowledgeRecord, SearchResult } from "@kb/core";
3
+
4
+ //#region packages/store/src/lance-store.d.ts
5
+ declare class LanceStore implements IKnowledgeStore {
6
+ private db;
7
+ private table;
8
+ private readonly dbPath;
9
+ private readonly tableName;
10
+ private _writeQueue;
11
+ private enqueueWrite;
12
+ constructor(options?: {
13
+ path?: string;
14
+ tableName?: string;
15
+ });
16
+ initialize(): Promise<void>;
17
+ upsert(records: KnowledgeRecord[], vectors: Float32Array[]): Promise<void>;
18
+ private _upsertImpl;
19
+ search(queryVector: Float32Array, options?: SearchOptions): Promise<SearchResult[]>;
20
+ createFtsIndex(): Promise<void>;
21
+ private _createFtsIndexImpl;
22
+ ftsSearch(query: string, options?: SearchOptions): Promise<SearchResult[]>;
23
+ getById(id: string): Promise<KnowledgeRecord | null>;
24
+ deleteBySourcePath(sourcePath: string): Promise<number>;
25
+ private _deleteBySourcePathImpl;
26
+ deleteById(id: string): Promise<boolean>;
27
+ private _deleteByIdImpl;
28
+ getBySourcePath(sourcePath: string): Promise<KnowledgeRecord[]>;
29
+ getStats(): Promise<IndexStats>;
30
+ listSourcePaths(): Promise<string[]>;
31
+ dropTable(): Promise<void>;
32
+ private _dropTableImpl;
33
+ close(): Promise<void>;
34
+ private buildFilterString;
35
+ private fromLanceRecord;
31
36
  }
32
- //# sourceMappingURL=lance-store.d.ts.map
37
+ //#endregion
38
+ export { LanceStore };
@@ -1 +1 @@
1
- import{EMBEDDING_DEFAULTS as h,SEARCH_DEFAULTS as d,STORE_DEFAULTS as u,sourceTypeContentTypes as g}from"../../core/dist/index.js";import{connect as y,Index as m}from"@lancedb/lancedb";const b=/^[\w.\-/ ]+$/;function r(l,e){if(!b.test(l))throw new Error(`Invalid ${e} filter value: contains disallowed characters`);return l.replace(/'/g,"''")}class w{db=null;table=null;dbPath;tableName;constructor(e){this.dbPath=e?.path??u.path,this.tableName=e?.tableName??u.tableName}async initialize(){this.db=await y(this.dbPath),(await this.db.tableNames()).includes(this.tableName)&&(this.table=await this.db.openTable(this.tableName),await this.createFtsIndex())}async upsert(e,n){if(e.length===0)return;if(e.length!==n.length)throw new Error(`Record count (${e.length}) does not match vector count (${n.length})`);const a=e.map((t,i)=>({id:t.id,vector:Array.from(n[i]),content:t.content,sourcePath:t.sourcePath,contentType:t.contentType,headingPath:t.headingPath??"",chunkIndex:t.chunkIndex,totalChunks:t.totalChunks,startLine:t.startLine,endLine:t.endLine,fileHash:t.fileHash,indexedAt:t.indexedAt,origin:t.origin,tags:JSON.stringify(t.tags),category:t.category??"",version:t.version}));if(this.table){const t=[...new Set(e.map(i=>i.sourcePath))];for(const i of t)try{await this.table.delete(`sourcePath = '${r(i,"sourcePath")}'`)}catch{}await this.table.add(a)}else try{this.table=await this.db?.createTable(this.tableName,a)??null}catch(t){if(String(t).includes("already exists")&&this.db)this.table=await this.db.openTable(this.tableName),await this.table.add(a);else throw t}}async search(e,n){if(!this.table)return[];const a=n?.limit??d.maxResults,t=n?.minScore??d.minScore;let i=this.table.search(e).limit(a*2);const o=this.buildFilterString(n);return o&&(i=i.where(o)),(await i.toArray()).map(c=>({record:this.fromLanceRecord(c),score:1-(c._distance??1)})).filter(c=>c.score>=t).slice(0,a)}async createFtsIndex(){if(this.table)try{await this.table.createIndex("content",{config:m.fts()}),console.error("[KB] FTS index created on content column")}catch(e){String(e).includes("already exists")||console.error("[KB] FTS index creation failed (non-fatal):",e)}}async ftsSearch(e,n){if(!this.table)return[];const a=n?.limit??d.maxResults;try{let t=this.table.search(e).limit(a*2);const i=this.buildFilterString(n);return i&&(t=t.where(i)),(await t.toArray()).map(s=>({record:this.fromLanceRecord(s),score:s._score??s._relevance_score??0}))}catch(t){return console.error("[KB] FTS search failed (non-fatal):",t),[]}}async getById(e){if(!this.table)return null;const n=await this.table.query().where(`id = '${r(e,"id")}'`).limit(1).toArray();return n.length===0?null:this.fromLanceRecord(n[0])}async deleteBySourcePath(e){if(!this.table)return 0;const n=await this.getBySourcePath(e);return n.length===0?0:(await this.table.delete(`sourcePath = '${r(e,"sourcePath")}'`),n.length)}async deleteById(e){return!this.table||!await this.getById(e)?!1:(await this.table.delete(`id = '${r(e,"id")}'`),!0)}async getBySourcePath(e){return this.table?(await this.table.query().where(`sourcePath = '${r(e,"sourcePath")}'`).limit(1e3).toArray()).map(a=>this.fromLanceRecord(a)):[]}async getStats(){if(!this.table)return{totalRecords:0,totalFiles:0,contentTypeBreakdown:{},lastIndexedAt:null,storeBackend:"lancedb",embeddingModel:h.model};const e=await this.table.countRows(),n=await this.table.query().select(["sourcePath","contentType","indexedAt"]).limit(1e5).toArray(),a={},t=new Set;let i=null;for(const o of n){const s=o;a[s.contentType]=(a[s.contentType]??0)+1,t.add(s.sourcePath),(!i||s.indexedAt>i)&&(i=s.indexedAt)}return{totalRecords:e,totalFiles:t.size,contentTypeBreakdown:a,lastIndexedAt:i,storeBackend:"lancedb",embeddingModel:h.model}}async listSourcePaths(){if(!this.table)return[];const e=await this.table.query().select(["sourcePath"]).limit(1e5).toArray();return[...new Set(e.map(n=>n.sourcePath))]}async dropTable(){if(this.db&&(await this.db.tableNames()).includes(this.tableName))for(let a=1;a<=3;a++)try{await this.db.dropTable(this.tableName);break}catch(t){if(a===3)throw t;const i=a*500;console.error(`[KB] dropTable attempt ${a} failed, retrying in ${i}ms...`),await new Promise(o=>setTimeout(o,i))}this.table=null}async close(){try{this.db&&typeof this.db.close=="function"&&await this.db.close()}catch{}this.table=null,this.db=null}buildFilterString(e){const n=[];if(e?.contentType&&n.push(`contentType = '${r(e.contentType,"contentType")}'`),e?.sourceType){const a=g(e.sourceType);if(a.length>0){const t=a.map(i=>`'${r(i,"sourceType")}'`).join(", ");n.push(`contentType IN (${t})`)}}if(e?.origin&&n.push(`origin = '${r(e.origin,"origin")}'`),e?.category&&n.push(`category = '${r(e.category,"category")}'`),e?.tags&&e.tags.length>0){const a=e.tags.map(t=>`tags LIKE '%${r(t,"tag")}%'`);n.push(`(${a.join(" OR ")})`)}return n.length>0?n.join(" AND "):null}fromLanceRecord(e){return{id:e.id,content:e.content,sourcePath:e.sourcePath,contentType:e.contentType,headingPath:e.headingPath||void 0,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,startLine:e.startLine,endLine:e.endLine,fileHash:e.fileHash,indexedAt:e.indexedAt,origin:e.origin,tags:JSON.parse(e.tags||"[]"),category:e.category||void 0,version:e.version}}}export{w as LanceStore};
1
+ import{EMBEDDING_DEFAULTS as e,SEARCH_DEFAULTS as t,STORE_DEFAULTS as n,createLogger as r,serializeError as i,sourceTypeContentTypes as a}from"../../core/dist/index.js";import{Index as o,connect as s}from"@lancedb/lancedb";function c(e){if(!e)return[];try{let t=JSON.parse(e);return Array.isArray(t)?t:[]}catch{return[]}}const l=/^[\w.\-/ ]+$/,u=r(`store`);function d(e,t){if(!l.test(e))throw Error(`Invalid ${t} filter value: contains disallowed characters`);return e.replace(/'/g,`''`)}var f=class{db=null;table=null;dbPath;tableName;_writeQueue=Promise.resolve();enqueueWrite(e){let t=this._writeQueue.then(()=>e());return this._writeQueue=t.then(()=>void 0,()=>void 0),t}constructor(e){this.dbPath=e?.path??n.path,this.tableName=e?.tableName??n.tableName}async initialize(){this.db=await s(this.dbPath),(await this.db.tableNames()).includes(this.tableName)&&(this.table=await this.db.openTable(this.tableName),await this.createFtsIndex())}async upsert(e,t){if(e.length!==0){if(e.length!==t.length)throw Error(`Record count (${e.length}) does not match vector count (${t.length})`);return this.enqueueWrite(()=>this._upsertImpl(e,t))}}async _upsertImpl(e,t){let n=e.map((e,n)=>({id:e.id,vector:Array.from(t[n]),content:e.content,sourcePath:e.sourcePath,contentType:e.contentType,headingPath:e.headingPath??``,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,startLine:e.startLine,endLine:e.endLine,fileHash:e.fileHash,indexedAt:e.indexedAt,origin:e.origin,tags:JSON.stringify(e.tags),category:e.category??``,version:e.version}));if(this.table){let t=[...new Set(e.map(e=>e.sourcePath))];for(let e of t)try{await this.table.delete(`sourcePath = '${d(e,`sourcePath`)}'`)}catch{}await this.table.add(n)}else try{this.table=await this.db?.createTable(this.tableName,n)??null}catch(e){if(String(e).includes(`already exists`)&&this.db)this.table=await this.db.openTable(this.tableName),await this.table.add(n);else throw e}}async search(e,n){if(!this.table)return[];let r=n?.limit??t.maxResults,i=n?.minScore??t.minScore,a=this.table.search(e).limit(r*2),o=this.buildFilterString(n);return o&&(a=a.where(o)),(await a.toArray()).map(e=>({record:this.fromLanceRecord(e),score:1-(e._distance??1)})).filter(e=>e.score>=i).slice(0,r)}async createFtsIndex(){return this.enqueueWrite(()=>this._createFtsIndexImpl())}async _createFtsIndexImpl(){if(this.table)try{await this.table.createIndex(`content`,{config:o.fts()}),u.info(`FTS index created`,{column:`content`})}catch(e){String(e).includes(`already exists`)||u.warn(`FTS index creation failed`,i(e))}}async ftsSearch(e,n){if(!this.table)return[];let r=n?.limit??t.maxResults;try{let t=this.table.search(e).limit(r*2),i=this.buildFilterString(n);return i&&(t=t.where(i)),(await t.toArray()).map(e=>({record:this.fromLanceRecord(e),score:e._score??e._relevance_score??0}))}catch(e){return u.warn(`FTS search failed`,i(e)),[]}}async getById(e){if(!this.table)return null;let t=await this.table.query().where(`id = '${d(e,`id`)}'`).limit(1).toArray();return t.length===0?null:this.fromLanceRecord(t[0])}async deleteBySourcePath(e){return this.enqueueWrite(()=>this._deleteBySourcePathImpl(e))}async _deleteBySourcePathImpl(e){if(!this.table)return 0;let t=await this.getBySourcePath(e);return t.length===0?0:(await this.table.delete(`sourcePath = '${d(e,`sourcePath`)}'`),t.length)}async deleteById(e){return this.enqueueWrite(()=>this._deleteByIdImpl(e))}async _deleteByIdImpl(e){return!this.table||!await this.getById(e)?!1:(await this.table.delete(`id = '${d(e,`id`)}'`),!0)}async getBySourcePath(e){return this.table?(await this.table.query().where(`sourcePath = '${d(e,`sourcePath`)}'`).limit(1e3).toArray()).map(e=>this.fromLanceRecord(e)):[]}async getStats(){if(!this.table)return{totalRecords:0,totalFiles:0,contentTypeBreakdown:{},lastIndexedAt:null,storeBackend:`lancedb`,embeddingModel:e.model};let t=await this.table.countRows(),n=await this.table.query().select([`sourcePath`,`contentType`,`indexedAt`]).limit(1e5).toArray(),r={},i=new Set,a=null;for(let e of n){let t=e;r[t.contentType]=(r[t.contentType]??0)+1,i.add(t.sourcePath),(!a||t.indexedAt>a)&&(a=t.indexedAt)}return{totalRecords:t,totalFiles:i.size,contentTypeBreakdown:r,lastIndexedAt:a,storeBackend:`lancedb`,embeddingModel:e.model}}async listSourcePaths(){if(!this.table)return[];let e=await this.table.query().select([`sourcePath`]).limit(1e5).toArray();return[...new Set(e.map(e=>e.sourcePath))]}async dropTable(){return this.enqueueWrite(()=>this._dropTableImpl())}async _dropTableImpl(){if(this.db&&(await this.db.tableNames()).includes(this.tableName))for(let e=1;e<=3;e++)try{await this.db.dropTable(this.tableName);break}catch(t){if(e===3)throw t;let n=e*500;u.warn(`dropTable attempt failed, retrying`,{attempt:e,delayMs:n}),await new Promise(e=>setTimeout(e,n))}this.table=null}async close(){try{this.db&&typeof this.db.close==`function`&&await this.db.close()}catch{}this.table=null,this.db=null}buildFilterString(e){let t=[];if(e?.contentType&&t.push(`contentType = '${d(e.contentType,`contentType`)}'`),e?.sourceType){let n=a(e.sourceType);if(n.length>0){let e=n.map(e=>`'${d(e,`sourceType`)}'`).join(`, `);t.push(`contentType IN (${e})`)}}if(e?.origin&&t.push(`origin = '${d(e.origin,`origin`)}'`),e?.category&&t.push(`category = '${d(e.category,`category`)}'`),e?.tags&&e.tags.length>0){let n=e.tags.map(e=>`tags LIKE '%${d(e,`tag`)}%'`);t.push(`(${n.join(` OR `)})`)}return t.length>0?t.join(` AND `):null}fromLanceRecord(e){return{id:e.id,content:e.content,sourcePath:e.sourcePath,contentType:e.contentType,headingPath:e.headingPath||void 0,chunkIndex:e.chunkIndex,totalChunks:e.totalChunks,startLine:e.startLine,endLine:e.endLine,fileHash:e.fileHash,indexedAt:e.indexedAt,origin:e.origin,tags:c(e.tags),category:e.category||void 0,version:e.version}}};export{f as LanceStore};
@@ -1,48 +1,44 @@
1
- /**
2
- * SQLite-backed knowledge graph store.
3
- *
4
- * Uses sql.js (WASM) for a zero-native-dependency, embedded, single-file graph database.
5
- * Stores nodes and edges with JSON properties, supports multi-hop traversal.
6
- * Persists to disk by writing the full database buffer on mutations.
7
- */
8
- import type { GraphEdge, GraphNode, GraphStats, GraphTraversalOptions, GraphTraversalResult, IGraphStore } from './graph-store.interface.js';
9
- export declare class SqliteGraphStore implements IGraphStore {
10
- private db;
11
- private readonly dbPath;
12
- private dirty;
13
- constructor(options?: {
14
- path?: string;
15
- });
16
- initialize(): Promise<void>;
17
- private ensureDb;
18
- private persist;
19
- private markDirty;
20
- private flushIfDirty;
21
- private query;
22
- private run;
23
- upsertNode(node: GraphNode): Promise<void>;
24
- upsertEdge(edge: GraphEdge): Promise<void>;
25
- upsertNodes(nodes: GraphNode[]): Promise<void>;
26
- upsertEdges(edges: GraphEdge[]): Promise<void>;
27
- getNode(id: string): Promise<GraphNode | null>;
28
- getNeighbors(nodeId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
29
- traverse(startId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
30
- findNodes(filter: {
31
- type?: string;
32
- namePattern?: string;
33
- sourcePath?: string;
34
- limit?: number;
35
- }): Promise<GraphNode[]>;
36
- findEdges(filter: {
37
- type?: string;
38
- fromId?: string;
39
- toId?: string;
40
- limit?: number;
41
- }): Promise<GraphEdge[]>;
42
- deleteNode(id: string): Promise<void>;
43
- deleteBySourcePath(sourcePath: string): Promise<number>;
44
- clear(): Promise<void>;
45
- getStats(): Promise<GraphStats>;
46
- close(): Promise<void>;
1
+ import { GraphEdge, GraphNode, GraphStats, GraphTraversalOptions, GraphTraversalResult, IGraphStore } from "./graph-store.interface.js";
2
+
3
+ //#region packages/store/src/sqlite-graph-store.d.ts
4
+ declare class SqliteGraphStore implements IGraphStore {
5
+ private db;
6
+ private readonly dbPath;
7
+ private dirty;
8
+ constructor(options?: {
9
+ path?: string;
10
+ });
11
+ initialize(): Promise<void>;
12
+ private ensureDb;
13
+ private persist;
14
+ private markDirty;
15
+ private flushIfDirty;
16
+ private query;
17
+ private run;
18
+ upsertNode(node: GraphNode): Promise<void>;
19
+ upsertEdge(edge: GraphEdge): Promise<void>;
20
+ upsertNodes(nodes: GraphNode[]): Promise<void>;
21
+ upsertEdges(edges: GraphEdge[]): Promise<void>;
22
+ getNode(id: string): Promise<GraphNode | null>;
23
+ getNeighbors(nodeId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
24
+ traverse(startId: string, options?: GraphTraversalOptions): Promise<GraphTraversalResult>;
25
+ findNodes(filter: {
26
+ type?: string;
27
+ namePattern?: string;
28
+ sourcePath?: string;
29
+ limit?: number;
30
+ }): Promise<GraphNode[]>;
31
+ findEdges(filter: {
32
+ type?: string;
33
+ fromId?: string;
34
+ toId?: string;
35
+ limit?: number;
36
+ }): Promise<GraphEdge[]>;
37
+ deleteNode(id: string): Promise<void>;
38
+ deleteBySourcePath(sourcePath: string): Promise<number>;
39
+ clear(): Promise<void>;
40
+ getStats(): Promise<GraphStats>;
41
+ close(): Promise<void>;
47
42
  }
48
- //# sourceMappingURL=sqlite-graph-store.d.ts.map
43
+ //#endregion
44
+ export { SqliteGraphStore };
@@ -1,4 +1,4 @@
1
- import{existsSync as g,mkdirSync as l,readFileSync as N,writeFileSync as f}from"node:fs";import{dirname as S,join as I}from"node:path";class b{db=null;dbPath;dirty=!1;constructor(e){const t=e?.path??".kb-data";this.dbPath=I(t,"graph.db")}async initialize(){const e=S(this.dbPath);g(e)||l(e,{recursive:!0});const t=(await import("sql.js")).default,s=await t();if(g(this.dbPath)){const i=N(this.dbPath);this.db=new s.Database(i)}else this.db=new s.Database;this.db.run("PRAGMA journal_mode = WAL"),this.db.exec("PRAGMA foreign_keys = ON;"),this.db.run(`
1
+ import{KB_PATHS as e}from"../../core/dist/index.js";import{existsSync as t,mkdirSync as n,readFileSync as r,writeFileSync as i}from"node:fs";import{dirname as a,join as o}from"node:path";var s=class{db=null;dbPath;dirty=!1;constructor(t){this.dbPath=o(t?.path??e.data,`graph.db`)}async initialize(){let e=a(this.dbPath);t(e)||n(e,{recursive:!0});let i=(await import(`sql.js`)).default,o=await i();if(t(this.dbPath)){let e=r(this.dbPath);this.db=new o.Database(e)}else this.db=new o.Database;this.db.run(`PRAGMA journal_mode = WAL`),this.db.exec(`PRAGMA foreign_keys = ON;`),this.db.run(`
2
2
  CREATE TABLE IF NOT EXISTS nodes (
3
3
  id TEXT PRIMARY KEY,
4
4
  type TEXT NOT NULL,
@@ -19,7 +19,7 @@ import{existsSync as g,mkdirSync as l,readFileSync as N,writeFileSync as f}from"
19
19
  FOREIGN KEY (from_id) REFERENCES nodes(id) ON DELETE CASCADE,
20
20
  FOREIGN KEY (to_id) REFERENCES nodes(id) ON DELETE CASCADE
21
21
  )
22
- `),this.db.run("CREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_nodes_source_path ON nodes(source_path)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(from_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(to_id)"),this.db.run("CREATE INDEX IF NOT EXISTS idx_edges_type ON edges(type)"),this.persist()}ensureDb(){if(!this.db)throw new Error("Graph store not initialized \u2014 call initialize() first");return this.db}persist(){if(!this.db)return;const e=this.db.export();f(this.dbPath,Buffer.from(e)),this.db.exec("PRAGMA foreign_keys = ON;"),this.dirty=!1}markDirty(){this.dirty=!0}flushIfDirty(){this.dirty&&this.persist()}query(e,t=[]){const i=this.ensureDb().prepare(e);i.bind(t);const d=[];for(;i.step();)d.push(i.getAsObject());return i.free(),d}run(e,t=[]){this.ensureDb().run(e,t)}async upsertNode(e){this.run(`INSERT INTO nodes (id, type, name, properties, source_record_id, source_path, created_at)
22
+ `),this.db.run(`CREATE INDEX IF NOT EXISTS idx_nodes_type ON nodes(type)`),this.db.run(`CREATE INDEX IF NOT EXISTS idx_nodes_name ON nodes(name)`),this.db.run(`CREATE INDEX IF NOT EXISTS idx_nodes_source_path ON nodes(source_path)`),this.db.run(`CREATE INDEX IF NOT EXISTS idx_edges_from ON edges(from_id)`),this.db.run(`CREATE INDEX IF NOT EXISTS idx_edges_to ON edges(to_id)`),this.db.run(`CREATE INDEX IF NOT EXISTS idx_edges_type ON edges(type)`),this.persist()}ensureDb(){if(!this.db)throw Error(`Graph store not initialized call initialize() first`);return this.db}persist(){if(!this.db)return;let e=this.db.export();try{i(this.dbPath,Buffer.from(e))}finally{this.db.exec(`PRAGMA foreign_keys = ON;`)}this.dirty=!1}markDirty(){this.dirty=!0}flushIfDirty(){this.dirty&&this.persist()}query(e,t=[]){let n=this.ensureDb().prepare(e);n.bind(t);let r=[];try{for(;n.step();)r.push(n.getAsObject())}finally{n.free()}return r}run(e,t=[]){this.ensureDb().run(e,t)}async upsertNode(e){this.run(`INSERT INTO nodes (id, type, name, properties, source_record_id, source_path, created_at)
23
23
  VALUES (?, ?, ?, ?, ?, ?, ?)
24
24
  ON CONFLICT(id) DO UPDATE SET
25
25
  type = excluded.type, name = excluded.name, properties = excluded.properties,
@@ -27,20 +27,20 @@ import{existsSync as g,mkdirSync as l,readFileSync as N,writeFileSync as f}from"
27
27
  VALUES (?, ?, ?, ?, ?, ?)
28
28
  ON CONFLICT(id) DO UPDATE SET
29
29
  from_id = excluded.from_id, to_id = excluded.to_id,
30
- type = excluded.type, weight = excluded.weight, properties = excluded.properties`,[e.id,e.fromId,e.toId,e.type,e.weight??1,JSON.stringify(e.properties??{})]),this.markDirty(),this.flushIfDirty()}async upsertNodes(e){if(e.length!==0){this.ensureDb().run("BEGIN TRANSACTION");for(const t of e)this.run(`INSERT INTO nodes (id, type, name, properties, source_record_id, source_path, created_at)
31
- VALUES (?, ?, ?, ?, ?, ?, ?)
32
- ON CONFLICT(id) DO UPDATE SET
33
- type = excluded.type, name = excluded.name, properties = excluded.properties,
34
- source_record_id = excluded.source_record_id, source_path = excluded.source_path`,[t.id,t.type,t.name,JSON.stringify(t.properties),t.sourceRecordId??null,t.sourcePath??null,t.createdAt??new Date().toISOString()]);this.ensureDb().run("COMMIT"),this.markDirty(),this.flushIfDirty()}}async upsertEdges(e){if(e.length!==0){this.ensureDb().run("BEGIN TRANSACTION");for(const t of e)this.run(`INSERT INTO edges (id, from_id, to_id, type, weight, properties)
35
- VALUES (?, ?, ?, ?, ?, ?)
36
- ON CONFLICT(id) DO UPDATE SET
37
- from_id = excluded.from_id, to_id = excluded.to_id,
38
- type = excluded.type, weight = excluded.weight, properties = excluded.properties`,[t.id,t.fromId,t.toId,t.type,t.weight??1,JSON.stringify(t.properties??{})]);this.ensureDb().run("COMMIT"),this.markDirty(),this.flushIfDirty()}}async getNode(e){const t=this.query("SELECT * FROM nodes WHERE id = ?",[e]);return t.length>0?T(t[0]):null}async getNeighbors(e,t){const s=t?.direction??"both",i=t?.edgeType,d=t?.limit??50,p=[],n=[],u=new Set,h=`
30
+ type = excluded.type, weight = excluded.weight, properties = excluded.properties`,[e.id,e.fromId,e.toId,e.type,e.weight??1,JSON.stringify(e.properties??{})]),this.markDirty(),this.flushIfDirty()}async upsertNodes(e){if(e.length===0)return;let t=this.ensureDb();t.run(`BEGIN TRANSACTION`);try{for(let t of e)this.run(`INSERT INTO nodes (id, type, name, properties, source_record_id, source_path, created_at)
31
+ VALUES (?, ?, ?, ?, ?, ?, ?)
32
+ ON CONFLICT(id) DO UPDATE SET
33
+ type = excluded.type, name = excluded.name, properties = excluded.properties,
34
+ source_record_id = excluded.source_record_id, source_path = excluded.source_path`,[t.id,t.type,t.name,JSON.stringify(t.properties),t.sourceRecordId??null,t.sourcePath??null,t.createdAt??new Date().toISOString()]);t.run(`COMMIT`)}catch(e){throw t.run(`ROLLBACK`),e}this.markDirty(),this.flushIfDirty()}async upsertEdges(e){if(e.length===0)return;let t=this.ensureDb();t.run(`PRAGMA foreign_keys = OFF`),t.run(`BEGIN TRANSACTION`);try{for(let t of e)this.run(`INSERT INTO edges (id, from_id, to_id, type, weight, properties)
35
+ VALUES (?, ?, ?, ?, ?, ?)
36
+ ON CONFLICT(id) DO UPDATE SET
37
+ from_id = excluded.from_id, to_id = excluded.to_id,
38
+ type = excluded.type, weight = excluded.weight, properties = excluded.properties`,[t.id,t.fromId,t.toId,t.type,t.weight??1,JSON.stringify(t.properties??{})]);t.run(`COMMIT`)}catch(e){throw t.run(`ROLLBACK`),e}finally{t.run(`PRAGMA foreign_keys = ON`)}this.markDirty(),this.flushIfDirty()}async getNode(e){let t=this.query(`SELECT * FROM nodes WHERE id = ?`,[e]);return t.length>0?l(t[0]):null}async getNeighbors(e,t){let n=t?.direction??`both`,r=t?.edgeType,i=t?.limit??50,a=[],o=[],s=new Set;if(n===`outgoing`||n===`both`){let t=`
39
39
  SELECT e.id AS edge_id, e.from_id, e.to_id, e.type AS edge_type, e.weight, e.properties AS edge_props,
40
40
  n.id AS node_id, n.type AS node_type, n.name AS node_name, n.properties AS node_props,
41
41
  n.source_record_id AS node_src_rec, n.source_path AS node_src_path, n.created_at AS node_created
42
- FROM edges e JOIN nodes n ON e.to_id = n.id WHERE e.from_id = ?`,_=`
42
+ FROM edges e JOIN nodes n ON e.to_id = n.id WHERE e.from_id = ?`,n=[e];r&&(t+=` AND e.type = ?`,n.push(r)),t+=` LIMIT ?`,n.push(i);let c=this.query(t,n);for(let e of c)o.push(d(e)),s.has(e.node_id)||(s.add(e.node_id),a.push(f(e)))}if(n===`incoming`||n===`both`){let t=`
43
43
  SELECT e.id AS edge_id, e.from_id, e.to_id, e.type AS edge_type, e.weight, e.properties AS edge_props,
44
44
  n.id AS node_id, n.type AS node_type, n.name AS node_name, n.properties AS node_props,
45
45
  n.source_record_id AS node_src_rec, n.source_path AS node_src_path, n.created_at AS node_created
46
- FROM edges e JOIN nodes n ON e.from_id = n.id WHERE e.to_id = ?`;if(s==="outgoing"||s==="both"){let o=h;const c=[e];i&&(o+=" AND e.type = ?",c.push(i)),o+=" LIMIT ?",c.push(d);const a=this.query(o,c);for(const E of a)n.push(y(E)),u.has(E.node_id)||(u.add(E.node_id),p.push(m(E)))}if(s==="incoming"||s==="both"){let o=_;const c=[e];i&&(o+=" AND e.type = ?",c.push(i)),o+=" LIMIT ?",c.push(d);const a=this.query(o,c);for(const E of a)n.push(y(E)),u.has(E.node_id)||(u.add(E.node_id),p.push(m(E)))}return{nodes:p,edges:n}}async traverse(e,t){const s=t?.maxDepth??2,i=t?.direction??"both",d=t?.edgeType,p=t?.limit??50,n=new Map,u=new Map,h=new Set,_=[{nodeId:e,depth:0}];for(;_.length>0&&n.size<p;){const o=_.shift();if(!o||h.has(o.nodeId)||o.depth>s)continue;h.add(o.nodeId);const c=await this.getNeighbors(o.nodeId,{direction:i,edgeType:d,limit:p-n.size});for(const a of c.nodes)n.has(a.id)||(n.set(a.id,a),o.depth+1<s&&_.push({nodeId:a.id,depth:o.depth+1}));for(const a of c.edges)u.set(a.id,a)}return{nodes:[...n.values()],edges:[...u.values()]}}async findNodes(e){const t=[],s=[];e.type&&(t.push("type = ?"),s.push(e.type)),e.namePattern&&(t.push("name LIKE ?"),s.push(`%${e.namePattern}%`)),e.sourcePath&&(t.push("source_path = ?"),s.push(e.sourcePath));const i=t.length>0?`WHERE ${t.join(" AND ")}`:"",d=e.limit??100;return this.query(`SELECT * FROM nodes ${i} LIMIT ?`,[...s,d]).map(n=>T(n))}async findEdges(e){const t=[],s=[];e.type&&(t.push("type = ?"),s.push(e.type)),e.fromId&&(t.push("from_id = ?"),s.push(e.fromId)),e.toId&&(t.push("to_id = ?"),s.push(e.toId));const i=t.length>0?`WHERE ${t.join(" AND ")}`:"",d=e.limit??100;return this.query(`SELECT * FROM edges ${i} LIMIT ?`,[...s,d]).map(n=>O(n))}async deleteNode(e){this.ensureDb().run("BEGIN TRANSACTION"),this.run("DELETE FROM edges WHERE from_id = ? OR to_id = ?",[e,e]),this.run("DELETE FROM nodes WHERE id = ?",[e]),this.ensureDb().run("COMMIT"),this.markDirty(),this.flushIfDirty()}async deleteBySourcePath(e){const t=this.query("SELECT id FROM nodes WHERE source_path = ?",[e]);if(t.length===0)return 0;this.ensureDb().run("BEGIN TRANSACTION");for(const s of t)this.run("DELETE FROM edges WHERE from_id = ? OR to_id = ?",[s.id,s.id]);return this.run("DELETE FROM nodes WHERE source_path = ?",[e]),this.ensureDb().run("COMMIT"),this.markDirty(),this.flushIfDirty(),t.length}async clear(){this.run("DELETE FROM edges"),this.run("DELETE FROM nodes"),this.markDirty(),this.flushIfDirty()}async getStats(){const t=this.query("SELECT COUNT(*) as count FROM nodes")[0]?.count??0,i=this.query("SELECT COUNT(*) as count FROM edges")[0]?.count??0,d=this.query("SELECT type, COUNT(*) as count FROM nodes GROUP BY type"),p={};for(const h of d)p[h.type]=h.count;const n=this.query("SELECT type, COUNT(*) as count FROM edges GROUP BY type"),u={};for(const h of n)u[h.type]=h.count;return{nodeCount:t,edgeCount:i,nodeTypes:p,edgeTypes:u}}async close(){this.db&&(this.flushIfDirty(),this.db.close(),this.db=null)}}function T(r){return{id:r.id,type:r.type,name:r.name,properties:JSON.parse(r.properties),sourceRecordId:r.source_record_id??void 0,sourcePath:r.source_path??void 0,createdAt:r.created_at}}function O(r){return{id:r.id,fromId:r.from_id,toId:r.to_id,type:r.type,weight:r.weight??1,properties:JSON.parse(r.properties)}}function y(r){return{id:r.edge_id,fromId:r.from_id,toId:r.to_id,type:r.edge_type,weight:r.weight??1,properties:JSON.parse(r.edge_props??"{}")}}function m(r){return{id:r.node_id,type:r.node_type,name:r.node_name,properties:JSON.parse(r.node_props??"{}"),sourceRecordId:r.node_src_rec??void 0,sourcePath:r.node_src_path??void 0,createdAt:r.node_created}}export{b as SqliteGraphStore};
46
+ FROM edges e JOIN nodes n ON e.from_id = n.id WHERE e.to_id = ?`,n=[e];r&&(t+=` AND e.type = ?`,n.push(r)),t+=` LIMIT ?`,n.push(i);let c=this.query(t,n);for(let e of c)o.push(d(e)),s.has(e.node_id)||(s.add(e.node_id),a.push(f(e)))}return{nodes:a,edges:o}}async traverse(e,t){let n=t?.maxDepth??2,r=t?.direction??`both`,i=t?.edgeType,a=t?.limit??50,o=new Map,s=new Map,c=new Set,l=[{nodeId:e,depth:0}];for(;l.length>0&&o.size<a;){let e=l.shift();if(!e||c.has(e.nodeId)||e.depth>n)continue;c.add(e.nodeId);let t=await this.getNeighbors(e.nodeId,{direction:r,edgeType:i,limit:a-o.size});for(let r of t.nodes)o.has(r.id)||(o.set(r.id,r),e.depth+1<n&&l.push({nodeId:r.id,depth:e.depth+1}));for(let e of t.edges)s.set(e.id,e)}return{nodes:[...o.values()],edges:[...s.values()]}}async findNodes(e){let t=[],n=[];e.type&&(t.push(`type = ?`),n.push(e.type)),e.namePattern&&(t.push(`name LIKE ?`),n.push(`%${e.namePattern}%`)),e.sourcePath&&(t.push(`source_path = ?`),n.push(e.sourcePath));let r=t.length>0?`WHERE ${t.join(` AND `)}`:``,i=e.limit??100;return this.query(`SELECT * FROM nodes ${r} LIMIT ?`,[...n,i]).map(e=>l(e))}async findEdges(e){let t=[],n=[];e.type&&(t.push(`type = ?`),n.push(e.type)),e.fromId&&(t.push(`from_id = ?`),n.push(e.fromId)),e.toId&&(t.push(`to_id = ?`),n.push(e.toId));let r=t.length>0?`WHERE ${t.join(` AND `)}`:``,i=e.limit??100;return this.query(`SELECT * FROM edges ${r} LIMIT ?`,[...n,i]).map(e=>u(e))}async deleteNode(e){let t=this.ensureDb();t.run(`BEGIN TRANSACTION`);try{this.run(`DELETE FROM edges WHERE from_id = ? OR to_id = ?`,[e,e]),this.run(`DELETE FROM nodes WHERE id = ?`,[e]),t.run(`COMMIT`)}catch(e){throw t.run(`ROLLBACK`),e}this.markDirty(),this.flushIfDirty()}async deleteBySourcePath(e){let t=this.query(`SELECT id FROM nodes WHERE source_path = ?`,[e]);if(t.length===0)return 0;let n=this.ensureDb();n.run(`BEGIN TRANSACTION`);try{for(let e of t)this.run(`DELETE FROM edges WHERE from_id = ? OR to_id = ?`,[e.id,e.id]);this.run(`DELETE FROM nodes WHERE source_path = ?`,[e]),n.run(`COMMIT`)}catch(e){throw n.run(`ROLLBACK`),e}return this.markDirty(),this.flushIfDirty(),t.length}async clear(){this.run(`DELETE FROM edges`),this.run(`DELETE FROM nodes`),this.markDirty(),this.flushIfDirty()}async getStats(){let e=this.query(`SELECT COUNT(*) as count FROM nodes`)[0]?.count??0,t=this.query(`SELECT COUNT(*) as count FROM edges`)[0]?.count??0,n=this.query(`SELECT type, COUNT(*) as count FROM nodes GROUP BY type`),r={};for(let e of n)r[e.type]=e.count;let i=this.query(`SELECT type, COUNT(*) as count FROM edges GROUP BY type`),a={};for(let e of i)a[e.type]=e.count;return{nodeCount:e,edgeCount:t,nodeTypes:r,edgeTypes:a}}async close(){this.db&&=(this.flushIfDirty(),this.db.close(),null)}};function c(e){if(!e)return{};try{return JSON.parse(e)}catch{return{}}}function l(e){return{id:e.id,type:e.type,name:e.name,properties:c(e.properties),sourceRecordId:e.source_record_id??void 0,sourcePath:e.source_path??void 0,createdAt:e.created_at}}function u(e){return{id:e.id,fromId:e.from_id,toId:e.to_id,type:e.type,weight:e.weight??1,properties:c(e.properties)}}function d(e){return{id:e.edge_id,fromId:e.from_id,toId:e.to_id,type:e.edge_type,weight:e.weight??1,properties:c(e.edge_props??`{}`)}}function f(e){return{id:e.node_id,type:e.node_type,name:e.node_name,properties:c(e.node_props??`{}`),sourceRecordId:e.node_src_rec??void 0,sourcePath:e.node_src_path??void 0,createdAt:e.node_created}}export{s as SqliteGraphStore};
@@ -1,9 +1,12 @@
1
- import type { IKnowledgeStore } from './store.interface.js';
2
- export type StoreBackend = 'lancedb' | 'sqlite-vec';
3
- export interface StoreConfig {
4
- backend: StoreBackend;
5
- path: string;
6
- options?: Record<string, unknown>;
1
+ import { IKnowledgeStore } from "./store.interface.js";
2
+
3
+ //#region packages/store/src/store-factory.d.ts
4
+ type StoreBackend = 'lancedb' | 'sqlite-vec';
5
+ interface StoreConfig {
6
+ backend: StoreBackend;
7
+ path: string;
8
+ options?: Record<string, unknown>;
7
9
  }
8
- export declare function createStore(config: StoreConfig): Promise<IKnowledgeStore>;
9
- //# sourceMappingURL=store-factory.d.ts.map
10
+ declare function createStore(config: StoreConfig): Promise<IKnowledgeStore>;
11
+ //#endregion
12
+ export { StoreBackend, StoreConfig, createStore };
@@ -1 +1 @@
1
- async function n(e){if(e.backend==="lancedb"){const{LanceStore:t}=await import("./lance-store.js");return new t({path:e.path})}else throw new Error(`Unknown store backend: "${e.backend}". Supported: lancedb`)}export{n as createStore};
1
+ async function e(e){switch(e.backend){case`lancedb`:{let{LanceStore:t}=await import(`./lance-store.js`);return new t({path:e.path})}default:throw Error(`Unknown store backend: "${e.backend}". Supported: lancedb`)}}export{e as createStore};