@noyrax/5d-database-plugin 0.1.0

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 (369) hide show
  1. package/ADR_VORSCHLAEGE.md +247 -0
  2. package/CHROMADB_SETUP.md +69 -0
  3. package/IMPROVEMENT_ROADMAP.md +435 -0
  4. package/INSTALLATION_READINESS.md +150 -0
  5. package/KNOWN_ISSUES.md +210 -0
  6. package/LICENSE +21 -0
  7. package/MCP_SERVER_SETUP.md +359 -0
  8. package/MCP_SERVER_TEST_REPORT.md +206 -0
  9. package/NOYRAX_INTEGRATION.md +224 -0
  10. package/QUICK_START.md +316 -0
  11. package/README.md +240 -0
  12. package/SETUP_NEW_PROJECT.md +260 -0
  13. package/SYSTEM_ANALYSIS_REPORT.md +341 -0
  14. package/out/api/adr-api.d.ts +22 -0
  15. package/out/api/adr-api.d.ts.map +1 -0
  16. package/out/api/adr-api.js +38 -0
  17. package/out/api/adr-api.js.map +1 -0
  18. package/out/api/bootstrap-api.d.ts +43 -0
  19. package/out/api/bootstrap-api.d.ts.map +1 -0
  20. package/out/api/bootstrap-api.js +88 -0
  21. package/out/api/bootstrap-api.js.map +1 -0
  22. package/out/api/change-api.d.ts +30 -0
  23. package/out/api/change-api.d.ts.map +1 -0
  24. package/out/api/change-api.js +54 -0
  25. package/out/api/change-api.js.map +1 -0
  26. package/out/api/context-builder.d.ts +81 -0
  27. package/out/api/context-builder.d.ts.map +1 -0
  28. package/out/api/context-builder.js +288 -0
  29. package/out/api/context-builder.js.map +1 -0
  30. package/out/api/cross-dimension-api.d.ts +43 -0
  31. package/out/api/cross-dimension-api.d.ts.map +1 -0
  32. package/out/api/cross-dimension-api.js +55 -0
  33. package/out/api/cross-dimension-api.js.map +1 -0
  34. package/out/api/dependency-api.d.ts +26 -0
  35. package/out/api/dependency-api.d.ts.map +1 -0
  36. package/out/api/dependency-api.js +46 -0
  37. package/out/api/dependency-api.js.map +1 -0
  38. package/out/api/learning-path-api.d.ts +49 -0
  39. package/out/api/learning-path-api.d.ts.map +1 -0
  40. package/out/api/learning-path-api.js +174 -0
  41. package/out/api/learning-path-api.js.map +1 -0
  42. package/out/api/module-api.d.ts +26 -0
  43. package/out/api/module-api.d.ts.map +1 -0
  44. package/out/api/module-api.js +46 -0
  45. package/out/api/module-api.js.map +1 -0
  46. package/out/api/search-api.d.ts +64 -0
  47. package/out/api/search-api.d.ts.map +1 -0
  48. package/out/api/search-api.js +235 -0
  49. package/out/api/search-api.js.map +1 -0
  50. package/out/api/self-explanation-api.d.ts +71 -0
  51. package/out/api/self-explanation-api.d.ts.map +1 -0
  52. package/out/api/self-explanation-api.js +153 -0
  53. package/out/api/self-explanation-api.js.map +1 -0
  54. package/out/api/semantic-search-api.d.ts +64 -0
  55. package/out/api/semantic-search-api.d.ts.map +1 -0
  56. package/out/api/semantic-search-api.js +205 -0
  57. package/out/api/semantic-search-api.js.map +1 -0
  58. package/out/api/symbol-api.d.ts +22 -0
  59. package/out/api/symbol-api.d.ts.map +1 -0
  60. package/out/api/symbol-api.js +38 -0
  61. package/out/api/symbol-api.js.map +1 -0
  62. package/out/api/vector-api.d.ts +26 -0
  63. package/out/api/vector-api.d.ts.map +1 -0
  64. package/out/api/vector-api.js +49 -0
  65. package/out/api/vector-api.js.map +1 -0
  66. package/out/cli/embedding-cli.d.ts +3 -0
  67. package/out/cli/embedding-cli.d.ts.map +1 -0
  68. package/out/cli/embedding-cli.js +151 -0
  69. package/out/cli/embedding-cli.js.map +1 -0
  70. package/out/cli/ingest-cli.d.ts +3 -0
  71. package/out/cli/ingest-cli.d.ts.map +1 -0
  72. package/out/cli/ingest-cli.js +145 -0
  73. package/out/cli/ingest-cli.js.map +1 -0
  74. package/out/cli/mcp-server-cli.d.ts +3 -0
  75. package/out/cli/mcp-server-cli.d.ts.map +1 -0
  76. package/out/cli/mcp-server-cli.js +159 -0
  77. package/out/cli/mcp-server-cli.js.map +1 -0
  78. package/out/cli/query-cli.d.ts +3 -0
  79. package/out/cli/query-cli.d.ts.map +1 -0
  80. package/out/cli/query-cli.js +217 -0
  81. package/out/cli/query-cli.js.map +1 -0
  82. package/out/cli/semantic-search-cli.d.ts +3 -0
  83. package/out/cli/semantic-search-cli.d.ts.map +1 -0
  84. package/out/cli/semantic-search-cli.js +196 -0
  85. package/out/cli/semantic-search-cli.js.map +1 -0
  86. package/out/cli/test-chromadb.d.ts +3 -0
  87. package/out/cli/test-chromadb.d.ts.map +1 -0
  88. package/out/cli/test-chromadb.js +204 -0
  89. package/out/cli/test-chromadb.js.map +1 -0
  90. package/out/cli/test-v-dimension.d.ts +3 -0
  91. package/out/cli/test-v-dimension.d.ts.map +1 -0
  92. package/out/cli/test-v-dimension.js +330 -0
  93. package/out/cli/test-v-dimension.js.map +1 -0
  94. package/out/cli/tool-cli.d.ts +3 -0
  95. package/out/cli/tool-cli.d.ts.map +1 -0
  96. package/out/cli/tool-cli.js +237 -0
  97. package/out/cli/tool-cli.js.map +1 -0
  98. package/out/cli/verify-openai-key.d.ts +3 -0
  99. package/out/cli/verify-openai-key.d.ts.map +1 -0
  100. package/out/cli/verify-openai-key.js +141 -0
  101. package/out/cli/verify-openai-key.js.map +1 -0
  102. package/out/cli/verify-vss-status.d.ts +3 -0
  103. package/out/cli/verify-vss-status.d.ts.map +1 -0
  104. package/out/cli/verify-vss-status.js +185 -0
  105. package/out/cli/verify-vss-status.js.map +1 -0
  106. package/out/core/chromadb-vector-database.d.ts +52 -0
  107. package/out/core/chromadb-vector-database.d.ts.map +1 -0
  108. package/out/core/chromadb-vector-database.js +276 -0
  109. package/out/core/chromadb-vector-database.js.map +1 -0
  110. package/out/core/docs-path-resolver.d.ts +43 -0
  111. package/out/core/docs-path-resolver.d.ts.map +1 -0
  112. package/out/core/docs-path-resolver.js +137 -0
  113. package/out/core/docs-path-resolver.js.map +1 -0
  114. package/out/core/id-mapper.d.ts +68 -0
  115. package/out/core/id-mapper.d.ts.map +1 -0
  116. package/out/core/id-mapper.js +132 -0
  117. package/out/core/id-mapper.js.map +1 -0
  118. package/out/core/migration-manager.d.ts +75 -0
  119. package/out/core/migration-manager.d.ts.map +1 -0
  120. package/out/core/migration-manager.js +212 -0
  121. package/out/core/migration-manager.js.map +1 -0
  122. package/out/core/multi-db-manager.d.ts +84 -0
  123. package/out/core/multi-db-manager.d.ts.map +1 -0
  124. package/out/core/multi-db-manager.js +206 -0
  125. package/out/core/multi-db-manager.js.map +1 -0
  126. package/out/core/transaction-manager.d.ts +69 -0
  127. package/out/core/transaction-manager.d.ts.map +1 -0
  128. package/out/core/transaction-manager.js +138 -0
  129. package/out/core/transaction-manager.js.map +1 -0
  130. package/out/core/vector-database-factory.d.ts +25 -0
  131. package/out/core/vector-database-factory.d.ts.map +1 -0
  132. package/out/core/vector-database-factory.js +82 -0
  133. package/out/core/vector-database-factory.js.map +1 -0
  134. package/out/core/vector-database-interface.d.ts +50 -0
  135. package/out/core/vector-database-interface.d.ts.map +1 -0
  136. package/out/core/vector-database-interface.js +3 -0
  137. package/out/core/vector-database-interface.js.map +1 -0
  138. package/out/core/vss-loader.d.ts +29 -0
  139. package/out/core/vss-loader.d.ts.map +1 -0
  140. package/out/core/vss-loader.js +150 -0
  141. package/out/core/vss-loader.js.map +1 -0
  142. package/out/core/vss-manager.d.ts +81 -0
  143. package/out/core/vss-manager.d.ts.map +1 -0
  144. package/out/core/vss-manager.js +323 -0
  145. package/out/core/vss-manager.js.map +1 -0
  146. package/out/core/vss-vector-database.d.ts +71 -0
  147. package/out/core/vss-vector-database.d.ts.map +1 -0
  148. package/out/core/vss-vector-database.js +284 -0
  149. package/out/core/vss-vector-database.js.map +1 -0
  150. package/out/embedding/embedding-generator.d.ts +45 -0
  151. package/out/embedding/embedding-generator.d.ts.map +1 -0
  152. package/out/embedding/embedding-generator.js +143 -0
  153. package/out/embedding/embedding-generator.js.map +1 -0
  154. package/out/embedding/embedding-pipeline.d.ts +42 -0
  155. package/out/embedding/embedding-pipeline.d.ts.map +1 -0
  156. package/out/embedding/embedding-pipeline.js +290 -0
  157. package/out/embedding/embedding-pipeline.js.map +1 -0
  158. package/out/extension.d.ts +10 -0
  159. package/out/extension.d.ts.map +1 -0
  160. package/out/extension.js +164 -0
  161. package/out/extension.js.map +1 -0
  162. package/out/ingestors/adr-ingestor.d.ts +41 -0
  163. package/out/ingestors/adr-ingestor.d.ts.map +1 -0
  164. package/out/ingestors/adr-ingestor.js +329 -0
  165. package/out/ingestors/adr-ingestor.js.map +1 -0
  166. package/out/ingestors/base-ingestor.d.ts +30 -0
  167. package/out/ingestors/base-ingestor.d.ts.map +1 -0
  168. package/out/ingestors/base-ingestor.js +3 -0
  169. package/out/ingestors/base-ingestor.js.map +1 -0
  170. package/out/ingestors/change-ingestor.d.ts +36 -0
  171. package/out/ingestors/change-ingestor.d.ts.map +1 -0
  172. package/out/ingestors/change-ingestor.js +216 -0
  173. package/out/ingestors/change-ingestor.js.map +1 -0
  174. package/out/ingestors/dependency-ingestor.d.ts +32 -0
  175. package/out/ingestors/dependency-ingestor.d.ts.map +1 -0
  176. package/out/ingestors/dependency-ingestor.js +194 -0
  177. package/out/ingestors/dependency-ingestor.js.map +1 -0
  178. package/out/ingestors/module-ingestor.d.ts +27 -0
  179. package/out/ingestors/module-ingestor.d.ts.map +1 -0
  180. package/out/ingestors/module-ingestor.js +137 -0
  181. package/out/ingestors/module-ingestor.js.map +1 -0
  182. package/out/ingestors/symbol-ingestor.d.ts +26 -0
  183. package/out/ingestors/symbol-ingestor.d.ts.map +1 -0
  184. package/out/ingestors/symbol-ingestor.js +183 -0
  185. package/out/ingestors/symbol-ingestor.js.map +1 -0
  186. package/out/mcp/resources/adrs.d.ts +13 -0
  187. package/out/mcp/resources/adrs.d.ts.map +1 -0
  188. package/out/mcp/resources/adrs.js +26 -0
  189. package/out/mcp/resources/adrs.js.map +1 -0
  190. package/out/mcp/resources/changes.d.ts +13 -0
  191. package/out/mcp/resources/changes.d.ts.map +1 -0
  192. package/out/mcp/resources/changes.js +26 -0
  193. package/out/mcp/resources/changes.js.map +1 -0
  194. package/out/mcp/resources/dependencies.d.ts +13 -0
  195. package/out/mcp/resources/dependencies.d.ts.map +1 -0
  196. package/out/mcp/resources/dependencies.js +26 -0
  197. package/out/mcp/resources/dependencies.js.map +1 -0
  198. package/out/mcp/resources/modules.d.ts +13 -0
  199. package/out/mcp/resources/modules.d.ts.map +1 -0
  200. package/out/mcp/resources/modules.js +26 -0
  201. package/out/mcp/resources/modules.js.map +1 -0
  202. package/out/mcp/resources/symbols.d.ts +13 -0
  203. package/out/mcp/resources/symbols.d.ts.map +1 -0
  204. package/out/mcp/resources/symbols.js +26 -0
  205. package/out/mcp/resources/symbols.js.map +1 -0
  206. package/out/mcp/server.d.ts +29 -0
  207. package/out/mcp/server.d.ts.map +1 -0
  208. package/out/mcp/server.js +300 -0
  209. package/out/mcp/server.js.map +1 -0
  210. package/out/mcp/tools/architecture-mining.d.ts +46 -0
  211. package/out/mcp/tools/architecture-mining.d.ts.map +1 -0
  212. package/out/mcp/tools/architecture-mining.js +272 -0
  213. package/out/mcp/tools/architecture-mining.js.map +1 -0
  214. package/out/mcp/tools/bootstrap.d.ts +9 -0
  215. package/out/mcp/tools/bootstrap.d.ts.map +1 -0
  216. package/out/mcp/tools/bootstrap.js +14 -0
  217. package/out/mcp/tools/bootstrap.js.map +1 -0
  218. package/out/mcp/tools/cross-analysis.d.ts +18 -0
  219. package/out/mcp/tools/cross-analysis.d.ts.map +1 -0
  220. package/out/mcp/tools/cross-analysis.js +23 -0
  221. package/out/mcp/tools/cross-analysis.js.map +1 -0
  222. package/out/mcp/tools/gap-analysis.d.ts +34 -0
  223. package/out/mcp/tools/gap-analysis.d.ts.map +1 -0
  224. package/out/mcp/tools/gap-analysis.js +106 -0
  225. package/out/mcp/tools/gap-analysis.js.map +1 -0
  226. package/out/mcp/tools/learning-path.d.ts +10 -0
  227. package/out/mcp/tools/learning-path.d.ts.map +1 -0
  228. package/out/mcp/tools/learning-path.js +18 -0
  229. package/out/mcp/tools/learning-path.js.map +1 -0
  230. package/out/mcp/tools/query-dependencies.d.ts +18 -0
  231. package/out/mcp/tools/query-dependencies.d.ts.map +1 -0
  232. package/out/mcp/tools/query-dependencies.js +31 -0
  233. package/out/mcp/tools/query-dependencies.js.map +1 -0
  234. package/out/mcp/tools/query-modules.d.ts +17 -0
  235. package/out/mcp/tools/query-modules.d.ts.map +1 -0
  236. package/out/mcp/tools/query-modules.js +22 -0
  237. package/out/mcp/tools/query-modules.js.map +1 -0
  238. package/out/mcp/tools/query-symbols.d.ts +18 -0
  239. package/out/mcp/tools/query-symbols.d.ts.map +1 -0
  240. package/out/mcp/tools/query-symbols.js +32 -0
  241. package/out/mcp/tools/query-symbols.js.map +1 -0
  242. package/out/mcp/tools/semantic-discovery.d.ts +12 -0
  243. package/out/mcp/tools/semantic-discovery.d.ts.map +1 -0
  244. package/out/mcp/tools/semantic-discovery.js +35 -0
  245. package/out/mcp/tools/semantic-discovery.js.map +1 -0
  246. package/out/mcp/tools/system-explanation.d.ts +9 -0
  247. package/out/mcp/tools/system-explanation.d.ts.map +1 -0
  248. package/out/mcp/tools/system-explanation.js +14 -0
  249. package/out/mcp/tools/system-explanation.js.map +1 -0
  250. package/out/mcp/types.d.ts +19 -0
  251. package/out/mcp/types.d.ts.map +1 -0
  252. package/out/mcp/types.js +6 -0
  253. package/out/mcp/types.js.map +1 -0
  254. package/out/models/adr.d.ts +26 -0
  255. package/out/models/adr.d.ts.map +1 -0
  256. package/out/models/adr.js +3 -0
  257. package/out/models/adr.js.map +1 -0
  258. package/out/models/change.d.ts +42 -0
  259. package/out/models/change.d.ts.map +1 -0
  260. package/out/models/change.js +3 -0
  261. package/out/models/change.js.map +1 -0
  262. package/out/models/dependency.d.ts +37 -0
  263. package/out/models/dependency.d.ts.map +1 -0
  264. package/out/models/dependency.js +3 -0
  265. package/out/models/dependency.js.map +1 -0
  266. package/out/models/entity-reference.d.ts +20 -0
  267. package/out/models/entity-reference.d.ts.map +1 -0
  268. package/out/models/entity-reference.js +19 -0
  269. package/out/models/entity-reference.js.map +1 -0
  270. package/out/models/module.d.ts +26 -0
  271. package/out/models/module.d.ts.map +1 -0
  272. package/out/models/module.js +3 -0
  273. package/out/models/module.js.map +1 -0
  274. package/out/models/symbol.d.ts +31 -0
  275. package/out/models/symbol.d.ts.map +1 -0
  276. package/out/models/symbol.js +3 -0
  277. package/out/models/symbol.js.map +1 -0
  278. package/out/repositories/adr-repository.d.ts +41 -0
  279. package/out/repositories/adr-repository.d.ts.map +1 -0
  280. package/out/repositories/adr-repository.js +128 -0
  281. package/out/repositories/adr-repository.js.map +1 -0
  282. package/out/repositories/base-repository.d.ts +86 -0
  283. package/out/repositories/base-repository.d.ts.map +1 -0
  284. package/out/repositories/base-repository.js +66 -0
  285. package/out/repositories/base-repository.js.map +1 -0
  286. package/out/repositories/change-repository.d.ts +40 -0
  287. package/out/repositories/change-repository.d.ts.map +1 -0
  288. package/out/repositories/change-repository.js +150 -0
  289. package/out/repositories/change-repository.js.map +1 -0
  290. package/out/repositories/dependency-repository.d.ts +40 -0
  291. package/out/repositories/dependency-repository.d.ts.map +1 -0
  292. package/out/repositories/dependency-repository.js +129 -0
  293. package/out/repositories/dependency-repository.js.map +1 -0
  294. package/out/repositories/embedding-repository.d.ts +64 -0
  295. package/out/repositories/embedding-repository.d.ts.map +1 -0
  296. package/out/repositories/embedding-repository.js +126 -0
  297. package/out/repositories/embedding-repository.js.map +1 -0
  298. package/out/repositories/importance-repository.d.ts +63 -0
  299. package/out/repositories/importance-repository.d.ts.map +1 -0
  300. package/out/repositories/importance-repository.js +117 -0
  301. package/out/repositories/importance-repository.js.map +1 -0
  302. package/out/repositories/module-repository.d.ts +37 -0
  303. package/out/repositories/module-repository.d.ts.map +1 -0
  304. package/out/repositories/module-repository.js +122 -0
  305. package/out/repositories/module-repository.js.map +1 -0
  306. package/out/repositories/navigation-repository.d.ts +117 -0
  307. package/out/repositories/navigation-repository.d.ts.map +1 -0
  308. package/out/repositories/navigation-repository.js +211 -0
  309. package/out/repositories/navigation-repository.js.map +1 -0
  310. package/out/repositories/symbol-repository.d.ts +37 -0
  311. package/out/repositories/symbol-repository.d.ts.map +1 -0
  312. package/out/repositories/symbol-repository.js +136 -0
  313. package/out/repositories/symbol-repository.js.map +1 -0
  314. package/out/services/cross-dimension-linker.d.ts +45 -0
  315. package/out/services/cross-dimension-linker.d.ts.map +1 -0
  316. package/out/services/cross-dimension-linker.js +98 -0
  317. package/out/services/cross-dimension-linker.js.map +1 -0
  318. package/out/services/importance-scorer.d.ts +47 -0
  319. package/out/services/importance-scorer.d.ts.map +1 -0
  320. package/out/services/importance-scorer.js +188 -0
  321. package/out/services/importance-scorer.js.map +1 -0
  322. package/out/services/ingestion-orchestrator.d.ts +49 -0
  323. package/out/services/ingestion-orchestrator.d.ts.map +1 -0
  324. package/out/services/ingestion-orchestrator.js +140 -0
  325. package/out/services/ingestion-orchestrator.js.map +1 -0
  326. package/out/services/navigation-builder.d.ts +29 -0
  327. package/out/services/navigation-builder.d.ts.map +1 -0
  328. package/out/services/navigation-builder.js +229 -0
  329. package/out/services/navigation-builder.js.map +1 -0
  330. package/out/services/system-model-builder.d.ts +40 -0
  331. package/out/services/system-model-builder.d.ts.map +1 -0
  332. package/out/services/system-model-builder.js +88 -0
  333. package/out/services/system-model-builder.js.map +1 -0
  334. package/out/ui/commands.d.ts +9 -0
  335. package/out/ui/commands.d.ts.map +1 -0
  336. package/out/ui/commands.js +123 -0
  337. package/out/ui/commands.js.map +1 -0
  338. package/out/ui/database-explorer.d.ts +27 -0
  339. package/out/ui/database-explorer.d.ts.map +1 -0
  340. package/out/ui/database-explorer.js +169 -0
  341. package/out/ui/database-explorer.js.map +1 -0
  342. package/out/ui/detail-view-provider.d.ts +86 -0
  343. package/out/ui/detail-view-provider.d.ts.map +1 -0
  344. package/out/ui/detail-view-provider.js +1037 -0
  345. package/out/ui/detail-view-provider.js.map +1 -0
  346. package/out/ui/search-provider.d.ts +30 -0
  347. package/out/ui/search-provider.d.ts.map +1 -0
  348. package/out/ui/search-provider.js +240 -0
  349. package/out/ui/search-provider.js.map +1 -0
  350. package/out/ui/status-provider.d.ts +17 -0
  351. package/out/ui/status-provider.d.ts.map +1 -0
  352. package/out/ui/status-provider.js +76 -0
  353. package/out/ui/status-provider.js.map +1 -0
  354. package/out/validators/consistency-validator.d.ts +37 -0
  355. package/out/validators/consistency-validator.d.ts.map +1 -0
  356. package/out/validators/consistency-validator.js +93 -0
  357. package/out/validators/consistency-validator.js.map +1 -0
  358. package/out/validators/integrity-validator.d.ts +45 -0
  359. package/out/validators/integrity-validator.d.ts.map +1 -0
  360. package/out/validators/integrity-validator.js +115 -0
  361. package/out/validators/integrity-validator.js.map +1 -0
  362. package/package.json +173 -0
  363. package/schemas/sqlite/001_initial_modules.sql +39 -0
  364. package/schemas/sqlite/002_initial_symbols.sql +46 -0
  365. package/schemas/sqlite/003_initial_dependencies.sql +51 -0
  366. package/schemas/sqlite/004_initial_adrs.sql +41 -0
  367. package/schemas/sqlite/005_initial_changes.sql +54 -0
  368. package/schemas/sqlite/006_initial_ingestion.sql +34 -0
  369. package/schemas/sqlite/006_vectors_schema.sql +73 -0
@@ -0,0 +1,284 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.VssVectorDatabase = void 0;
4
+ /**
5
+ * VSS-based vector database implementation.
6
+ * Uses SQLite VSS Extension for optimized vector similarity search.
7
+ * Only available on macOS and Linux (Windows not supported).
8
+ */
9
+ class VssVectorDatabase {
10
+ constructor(db, vssLoader) {
11
+ this.vssAvailable = false;
12
+ this.embeddingDimensions = 1536;
13
+ this.db = db;
14
+ this.vssLoader = vssLoader;
15
+ }
16
+ /**
17
+ * Checks if VSS extension is available.
18
+ */
19
+ isAvailable() {
20
+ return this.vssAvailable;
21
+ }
22
+ /**
23
+ * Initializes VSS Virtual Table.
24
+ * Must be called after VSS extension is loaded.
25
+ *
26
+ * @returns Promise that resolves when VSS is initialized
27
+ */
28
+ async initialize() {
29
+ // Check if VSS is available
30
+ this.vssAvailable = this.vssLoader.isAvailable();
31
+ if (!this.vssAvailable) {
32
+ console.warn('[VssVectorDatabase] VSS extension not available. Using fallback cosine similarity.');
33
+ return;
34
+ }
35
+ try {
36
+ // Check if virtual table already exists
37
+ const tableExists = await this.checkVirtualTableExists();
38
+ if (!tableExists) {
39
+ // Create VSS virtual table
40
+ await this.createVirtualTable();
41
+ console.log('[VssVectorDatabase] Created embeddings_vss virtual table.');
42
+ }
43
+ else {
44
+ console.log('[VssVectorDatabase] embeddings_vss virtual table already exists.');
45
+ }
46
+ }
47
+ catch (error) {
48
+ const errorMsg = error instanceof Error ? error.message : String(error);
49
+ console.warn(`[VssVectorDatabase] Failed to initialize VSS virtual table: ${errorMsg}. Using fallback cosine similarity.`);
50
+ this.vssAvailable = false;
51
+ }
52
+ }
53
+ /**
54
+ * Checks if the VSS virtual table exists.
55
+ */
56
+ async checkVirtualTableExists() {
57
+ return new Promise((resolve, reject) => {
58
+ this.db.get(`SELECT name FROM sqlite_master WHERE type='virtual table' AND name='embeddings_vss'`, (err, row) => {
59
+ if (err) {
60
+ reject(err);
61
+ }
62
+ else {
63
+ resolve(row !== undefined);
64
+ }
65
+ });
66
+ });
67
+ }
68
+ /**
69
+ * Creates the VSS virtual table.
70
+ */
71
+ async createVirtualTable() {
72
+ return new Promise((resolve, reject) => {
73
+ this.db.run(`CREATE VIRTUAL TABLE embeddings_vss USING vss0(
74
+ embedding_vector(${this.embeddingDimensions}),
75
+ rowid HIDDEN
76
+ )`, (err) => {
77
+ if (err) {
78
+ reject(err);
79
+ }
80
+ else {
81
+ resolve();
82
+ }
83
+ });
84
+ });
85
+ }
86
+ /**
87
+ * Gets the rowid for an embedding ID.
88
+ */
89
+ async getRowidFromEmbeddingId(embeddingId) {
90
+ return new Promise((resolve, reject) => {
91
+ this.db.get(`SELECT rowid FROM embeddings WHERE id = ?`, [embeddingId], (err, row) => {
92
+ if (err) {
93
+ reject(err);
94
+ }
95
+ else {
96
+ resolve(row ? row.rowid : null);
97
+ }
98
+ });
99
+ });
100
+ }
101
+ /**
102
+ * Gets the embedding ID from a rowid.
103
+ */
104
+ async getEmbeddingIdFromRowid(rowid) {
105
+ return new Promise((resolve, reject) => {
106
+ this.db.get(`SELECT id FROM embeddings WHERE rowid = ?`, [rowid], (err, row) => {
107
+ if (err) {
108
+ reject(err);
109
+ }
110
+ else {
111
+ resolve(row ? row.id : null);
112
+ }
113
+ });
114
+ });
115
+ }
116
+ /**
117
+ * Checks if a row exists in the VSS virtual table.
118
+ */
119
+ async checkRowExists(rowid) {
120
+ return new Promise((resolve, reject) => {
121
+ this.db.get(`SELECT count(*) as count FROM embeddings_vss WHERE rowid = ?`, [rowid], (err, row) => {
122
+ if (err) {
123
+ reject(err);
124
+ }
125
+ else {
126
+ resolve(row ? row.count > 0 : false);
127
+ }
128
+ });
129
+ });
130
+ }
131
+ /**
132
+ * Inserts an embedding into the VSS virtual table.
133
+ */
134
+ async insertEmbedding(rowid, vector) {
135
+ return new Promise((resolve, reject) => {
136
+ // VSS expects vector as JSON array
137
+ const vectorArray = Array.from(vector);
138
+ this.db.run(`INSERT INTO embeddings_vss(rowid, embedding_vector) VALUES (?, ?)`, [rowid, JSON.stringify(vectorArray)], (err) => {
139
+ if (err) {
140
+ reject(err);
141
+ }
142
+ else {
143
+ resolve();
144
+ }
145
+ });
146
+ });
147
+ }
148
+ /**
149
+ * Deletes an embedding from the VSS virtual table.
150
+ */
151
+ async deleteEmbedding(rowid) {
152
+ return new Promise((resolve, reject) => {
153
+ this.db.run(`DELETE FROM embeddings_vss WHERE rowid = ?`, [rowid], (err) => {
154
+ if (err) {
155
+ reject(err);
156
+ }
157
+ else {
158
+ resolve();
159
+ }
160
+ });
161
+ });
162
+ }
163
+ /**
164
+ * Upserts an embedding into the VSS virtual table.
165
+ */
166
+ async upsertEmbedding(embeddingId, embeddingVector) {
167
+ if (!this.vssAvailable) {
168
+ return;
169
+ }
170
+ try {
171
+ let vector;
172
+ if (embeddingVector instanceof Float32Array) {
173
+ vector = embeddingVector;
174
+ }
175
+ else if (embeddingVector instanceof Buffer) {
176
+ vector = new Float32Array(embeddingVector.buffer, embeddingVector.byteOffset, embeddingVector.length / 4);
177
+ }
178
+ else if (Array.isArray(embeddingVector)) {
179
+ vector = new Float32Array(embeddingVector);
180
+ }
181
+ else {
182
+ throw new Error(`Invalid embedding vector type: ${typeof embeddingVector}`);
183
+ }
184
+ const rowid = await this.getRowidFromEmbeddingId(embeddingId);
185
+ if (rowid === null) {
186
+ console.warn(`[VssVectorDatabase] Embedding ${embeddingId} not found in embeddings table`);
187
+ return;
188
+ }
189
+ const exists = await this.checkRowExists(rowid);
190
+ if (exists) {
191
+ await this.deleteEmbedding(rowid);
192
+ }
193
+ await this.insertEmbedding(rowid, vector);
194
+ }
195
+ catch (error) {
196
+ const errorMsg = error instanceof Error ? error.message : String(error);
197
+ console.warn(`[VssVectorDatabase] Failed to upsert embedding in VSS: ${errorMsg}`);
198
+ }
199
+ }
200
+ /**
201
+ * Searches for similar embeddings using VSS.
202
+ */
203
+ async search(queryEmbedding, limit = 10, dimension, pluginId) {
204
+ if (!this.vssAvailable) {
205
+ console.warn('[VssVectorDatabase] VSS not available, cannot perform VSS search.');
206
+ return [];
207
+ }
208
+ // Convert query embedding to array format
209
+ let queryVectorArray;
210
+ if (queryEmbedding instanceof Float32Array) {
211
+ queryVectorArray = Array.from(queryEmbedding);
212
+ }
213
+ else if (queryEmbedding instanceof Buffer) {
214
+ const float32 = new Float32Array(queryEmbedding.buffer, queryEmbedding.byteOffset, queryEmbedding.length / 4);
215
+ queryVectorArray = Array.from(float32);
216
+ }
217
+ else {
218
+ queryVectorArray = Array.isArray(queryEmbedding) ? queryEmbedding : Array.from(queryEmbedding);
219
+ }
220
+ // Build query - VSS uses MATCH syntax
221
+ // Note: Dimension/pluginId filtering should be done via JOIN with embeddings table
222
+ // For simplicity, we return all results and let the caller filter
223
+ const query = `SELECT rowid, distance FROM embeddings_vss WHERE embedding_vector MATCH ? LIMIT ?`;
224
+ const params = [JSON.stringify(queryVectorArray), limit];
225
+ return new Promise((resolve, reject) => {
226
+ this.db.all(query, params, (err, rows) => {
227
+ if (err) {
228
+ // Try alternative approach if MATCH fails
229
+ this.tryAlternativeSearch(queryVectorArray, limit, dimension, pluginId)
230
+ .then(resolve)
231
+ .catch(reject);
232
+ }
233
+ else {
234
+ // VSS returns distance (lower = more similar)
235
+ // Convert to similarity score (higher = more similar)
236
+ resolve(rows.map(row => ({
237
+ rowid: row.rowid,
238
+ distance: row.distance || 0,
239
+ similarity: 1 / (1 + Math.max(row.distance || 0, 0)) // Convert distance to similarity
240
+ })));
241
+ }
242
+ });
243
+ });
244
+ }
245
+ /**
246
+ * Alternative search method (fallback if MATCH syntax doesn't work).
247
+ */
248
+ async tryAlternativeSearch(queryVector, limit, dimension, pluginId) {
249
+ // Try with JOIN to embeddings table for filtering
250
+ let query = `
251
+ SELECT
252
+ e.rowid,
253
+ vss_distance_l2(e.embedding_vector, ?) as distance
254
+ FROM embeddings_vss e
255
+ `;
256
+ const params = [JSON.stringify(queryVector)];
257
+ // Add dimension filter if provided
258
+ if (dimension && pluginId) {
259
+ query += ` JOIN embeddings em ON e.rowid = em.rowid
260
+ WHERE em.dimension = ? AND em.plugin_id = ?`;
261
+ params.push(dimension, pluginId);
262
+ }
263
+ query += ` ORDER BY distance LIMIT ?`;
264
+ params.push(limit);
265
+ return new Promise((resolve, reject) => {
266
+ this.db.all(query, params, (err, rows) => {
267
+ if (err) {
268
+ // If this also fails, return empty array (fallback to cosine similarity)
269
+ console.warn(`[VssVectorDatabase] VSS search failed: ${err.message}. Falling back to cosine similarity.`);
270
+ resolve([]);
271
+ }
272
+ else {
273
+ resolve(rows.map(row => ({
274
+ rowid: row.rowid,
275
+ distance: row.distance || 0,
276
+ similarity: 1 / (1 + Math.max(row.distance || 0, 0))
277
+ })));
278
+ }
279
+ });
280
+ });
281
+ }
282
+ }
283
+ exports.VssVectorDatabase = VssVectorDatabase;
284
+ //# sourceMappingURL=vss-vector-database.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"vss-vector-database.js","sourceRoot":"","sources":["../../src/core/vss-vector-database.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Generates embeddings for entities across all 5 dimensions.
3
+ * Uses OpenAI text-embedding-3-small model (1536 dimensions).
4
+ */
5
+ export declare class EmbeddingGenerator {
6
+ private openai;
7
+ private readonly model;
8
+ private readonly dimensions;
9
+ constructor(apiKey?: string);
10
+ /**
11
+ * Generates an embedding for a single entity.
12
+ *
13
+ * @param dimension The dimension (X, Y, Z, W, or T)
14
+ * @param entityId The entity ID (for logging)
15
+ * @param content The content to embed
16
+ * @returns Promise that resolves to the embedding vector (1536 dimensions)
17
+ * @throws Error if OpenAI API is not configured or API call fails
18
+ */
19
+ generateEmbedding(dimension: 'X' | 'Y' | 'Z' | 'W' | 'T', entityId: string, content: string): Promise<number[]>;
20
+ /**
21
+ * Generates embeddings for multiple entities in batch.
22
+ * Uses OpenAI batch API for better performance.
23
+ *
24
+ * @param items Array of items to embed
25
+ * @returns Promise that resolves to a Map of entityId -> embedding vector
26
+ */
27
+ generateBatch(items: Array<{
28
+ dimension: 'X' | 'Y' | 'Z' | 'W' | 'T';
29
+ entityId: string;
30
+ content: string;
31
+ }>): Promise<Map<string, number[]>>;
32
+ /**
33
+ * Gets the embedding model name.
34
+ */
35
+ getModel(): string;
36
+ /**
37
+ * Gets the embedding dimensions.
38
+ */
39
+ getDimensions(): number;
40
+ /**
41
+ * Checks if OpenAI API is configured.
42
+ */
43
+ isConfigured(): boolean;
44
+ }
45
+ //# sourceMappingURL=embedding-generator.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-generator.d.ts","sourceRoot":"","sources":["../../src/embedding/embedding-generator.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAuB;IACrC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAoC;IAC1D,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;gBAE/B,MAAM,CAAC,EAAE,MAAM;IAc3B;;;;;;;;OAQG;IACG,iBAAiB,CACnB,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,MAAM,GAChB,OAAO,CAAC,MAAM,EAAE,CAAC;IA2BpB;;;;;;OAMG;IACG,aAAa,CACf,KAAK,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,GAC5F,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;IA+DjC;;OAEG;IACH,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACH,YAAY,IAAI,OAAO;CAG1B"}
@@ -0,0 +1,143 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.EmbeddingGenerator = void 0;
7
+ const openai_1 = __importDefault(require("openai"));
8
+ /**
9
+ * Generates embeddings for entities across all 5 dimensions.
10
+ * Uses OpenAI text-embedding-3-small model (1536 dimensions).
11
+ */
12
+ class EmbeddingGenerator {
13
+ constructor(apiKey) {
14
+ this.openai = null;
15
+ this.model = 'text-embedding-3-small';
16
+ this.dimensions = 1536;
17
+ if (apiKey) {
18
+ this.openai = new openai_1.default({ apiKey });
19
+ }
20
+ else {
21
+ // Try to get from environment variable
22
+ const envKey = process.env.OPENAI_API_KEY;
23
+ if (envKey) {
24
+ this.openai = new openai_1.default({ apiKey: envKey });
25
+ }
26
+ else {
27
+ console.warn('[EmbeddingGenerator] OpenAI API key not provided. Embedding generation will not work.');
28
+ }
29
+ }
30
+ }
31
+ /**
32
+ * Generates an embedding for a single entity.
33
+ *
34
+ * @param dimension The dimension (X, Y, Z, W, or T)
35
+ * @param entityId The entity ID (for logging)
36
+ * @param content The content to embed
37
+ * @returns Promise that resolves to the embedding vector (1536 dimensions)
38
+ * @throws Error if OpenAI API is not configured or API call fails
39
+ */
40
+ async generateEmbedding(dimension, entityId, content) {
41
+ if (!this.openai) {
42
+ throw new Error('OpenAI API key not configured. Set OPENAI_API_KEY environment variable.');
43
+ }
44
+ if (!content || content.trim().length === 0) {
45
+ throw new Error(`Empty content for entity ${entityId} in dimension ${dimension}`);
46
+ }
47
+ try {
48
+ const response = await this.openai.embeddings.create({
49
+ model: this.model,
50
+ input: content,
51
+ dimensions: this.dimensions
52
+ });
53
+ if (!response.data || response.data.length === 0) {
54
+ throw new Error(`No embedding returned for entity ${entityId}`);
55
+ }
56
+ return response.data[0].embedding;
57
+ }
58
+ catch (error) {
59
+ const errorMessage = error instanceof Error ? error.message : String(error);
60
+ throw new Error(`Failed to generate embedding for entity ${entityId} in dimension ${dimension}: ${errorMessage}`);
61
+ }
62
+ }
63
+ /**
64
+ * Generates embeddings for multiple entities in batch.
65
+ * Uses OpenAI batch API for better performance.
66
+ *
67
+ * @param items Array of items to embed
68
+ * @returns Promise that resolves to a Map of entityId -> embedding vector
69
+ */
70
+ async generateBatch(items) {
71
+ if (!this.openai) {
72
+ throw new Error('OpenAI API key not configured. Set OPENAI_API_KEY environment variable.');
73
+ }
74
+ if (items.length === 0) {
75
+ return new Map();
76
+ }
77
+ // Filter out empty content
78
+ const validItems = items.filter(item => item.content && item.content.trim().length > 0);
79
+ if (validItems.length === 0) {
80
+ return new Map();
81
+ }
82
+ const results = new Map();
83
+ // OpenAI embeddings API supports up to 2048 inputs per request
84
+ // We'll process in batches of 100 for safety
85
+ const batchSize = 100;
86
+ for (let i = 0; i < validItems.length; i += batchSize) {
87
+ const batch = validItems.slice(i, i + batchSize);
88
+ try {
89
+ const inputs = batch.map(item => item.content);
90
+ const response = await this.openai.embeddings.create({
91
+ model: this.model,
92
+ input: inputs,
93
+ dimensions: this.dimensions
94
+ });
95
+ if (!response.data || response.data.length !== batch.length) {
96
+ throw new Error(`Mismatch: expected ${batch.length} embeddings, got ${response.data?.length || 0}`);
97
+ }
98
+ // Map results back to entity IDs
99
+ for (let j = 0; j < batch.length; j++) {
100
+ const item = batch[j];
101
+ const embedding = response.data[j].embedding;
102
+ results.set(item.entityId, embedding);
103
+ }
104
+ }
105
+ catch (error) {
106
+ const errorMessage = error instanceof Error ? error.message : String(error);
107
+ console.error(`[EmbeddingGenerator] Batch embedding failed for batch ${i / batchSize + 1}: ${errorMessage}`);
108
+ // Fallback: Try individual embeddings for this batch
109
+ for (const item of batch) {
110
+ try {
111
+ const embedding = await this.generateEmbedding(item.dimension, item.entityId, item.content);
112
+ results.set(item.entityId, embedding);
113
+ }
114
+ catch (individualError) {
115
+ console.error(`[EmbeddingGenerator] Failed to generate embedding for ${item.entityId}: ${individualError}`);
116
+ // Continue with other items
117
+ }
118
+ }
119
+ }
120
+ }
121
+ return results;
122
+ }
123
+ /**
124
+ * Gets the embedding model name.
125
+ */
126
+ getModel() {
127
+ return this.model;
128
+ }
129
+ /**
130
+ * Gets the embedding dimensions.
131
+ */
132
+ getDimensions() {
133
+ return this.dimensions;
134
+ }
135
+ /**
136
+ * Checks if OpenAI API is configured.
137
+ */
138
+ isConfigured() {
139
+ return this.openai !== null;
140
+ }
141
+ }
142
+ exports.EmbeddingGenerator = EmbeddingGenerator;
143
+ //# sourceMappingURL=embedding-generator.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-generator.js","sourceRoot":"","sources":["../../src/embedding/embedding-generator.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { MultiDbManager } from '../core/multi-db-manager';
2
+ import { EmbeddingGenerator } from './embedding-generator';
3
+ /**
4
+ * Coordinates embedding generation for all 5 dimensions.
5
+ * Syncs embeddings with 5D-DBs using hash-based change detection.
6
+ */
7
+ export declare class EmbeddingPipeline {
8
+ private dbManager;
9
+ private embeddingGenerator;
10
+ private moduleApi;
11
+ private symbolApi;
12
+ private dependencyApi;
13
+ private adrApi;
14
+ private changeApi;
15
+ constructor(dbManager: MultiDbManager, embeddingGenerator: EmbeddingGenerator);
16
+ /**
17
+ * Syncs embeddings for all dimensions.
18
+ * Only generates embeddings for changed/new entities.
19
+ */
20
+ syncEmbeddings(pluginId: string): Promise<void>;
21
+ /**
22
+ * Syncs embeddings for a specific dimension.
23
+ */
24
+ syncDimension(dimension: 'X' | 'Y' | 'Z' | 'W' | 'T', pluginId: string, model: string): Promise<void>;
25
+ /**
26
+ * Gets all entities for a dimension.
27
+ */
28
+ private getEntitiesForDimension;
29
+ /**
30
+ * Extracts content for embedding based on dimension.
31
+ */
32
+ private extractContentForEmbedding;
33
+ /**
34
+ * Gets external ID for an entity.
35
+ */
36
+ private getExternalId;
37
+ /**
38
+ * Computes content hash for change detection.
39
+ */
40
+ private computeContentHash;
41
+ }
42
+ //# sourceMappingURL=embedding-pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"embedding-pipeline.d.ts","sourceRoot":"","sources":["../../src/embedding/embedding-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAe3D;;;GAGG;AACH,qBAAa,iBAAiB;IAC1B,OAAO,CAAC,SAAS,CAAiB;IAClC,OAAO,CAAC,kBAAkB,CAAqB;IAC/C,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,SAAS,CAAY;IAC7B,OAAO,CAAC,aAAa,CAAgB;IACrC,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAY;gBAEjB,SAAS,EAAE,cAAc,EAAE,kBAAkB,EAAE,kBAAkB;IAU7E;;;OAGG;IACG,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAoBrD;;OAEG;IACG,aAAa,CACf,SAAS,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,EACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,GACd,OAAO,CAAC,IAAI,CAAC;IAkJhB;;OAEG;YACW,uBAAuB;IAoBrC;;OAEG;IACH,OAAO,CAAC,0BAA0B;IAwClC;;OAEG;IACH,OAAO,CAAC,aAAa;IAgBrB;;OAEG;IACH,OAAO,CAAC,kBAAkB;CAG7B"}