@happyvertical/smrt-core 0.30.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 (631) hide show
  1. package/AGENTS.md +124 -0
  2. package/CLAUDE.md +1 -0
  3. package/LICENSE +7 -0
  4. package/README.md +265 -0
  5. package/bin/smrt-prebuild.js +26 -0
  6. package/dist/__tests__/fixtures/advisor-test-classes.d.ts +28 -0
  7. package/dist/__tests__/fixtures/advisor-test-classes.d.ts.map +1 -0
  8. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts +12 -0
  9. package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts +28 -0
  11. package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts.map +1 -0
  12. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts +43 -0
  13. package/dist/__tests__/fixtures/inheritance-test-classes.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts +18 -0
  15. package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts.map +1 -0
  16. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts +15 -0
  17. package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts.map +1 -0
  18. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts +13 -0
  19. package/dist/__tests__/fixtures/object-spec-test-classes.d.ts.map +1 -0
  20. package/dist/__tests__/fixtures/registry-test-classes.d.ts +23 -0
  21. package/dist/__tests__/fixtures/registry-test-classes.d.ts.map +1 -0
  22. package/dist/adapters/ai-usage.d.ts +23 -0
  23. package/dist/adapters/ai-usage.d.ts.map +1 -0
  24. package/dist/adapters/ai-usage.js +105 -0
  25. package/dist/adapters/ai-usage.js.map +1 -0
  26. package/dist/adapters/cost-rates.d.ts +20 -0
  27. package/dist/adapters/cost-rates.d.ts.map +1 -0
  28. package/dist/adapters/cost-rates.js +40 -0
  29. package/dist/adapters/cost-rates.js.map +1 -0
  30. package/dist/adapters/index.d.ts +19 -0
  31. package/dist/adapters/index.d.ts.map +1 -0
  32. package/dist/adapters/metrics.d.ts +111 -0
  33. package/dist/adapters/metrics.d.ts.map +1 -0
  34. package/dist/adapters/metrics.js +169 -0
  35. package/dist/adapters/metrics.js.map +1 -0
  36. package/dist/adapters/pubsub.d.ts +124 -0
  37. package/dist/adapters/pubsub.d.ts.map +1 -0
  38. package/dist/adapters/pubsub.js +121 -0
  39. package/dist/adapters/pubsub.js.map +1 -0
  40. package/dist/browser.d.ts +32 -0
  41. package/dist/browser.d.ts.map +1 -0
  42. package/dist/browser.js +68 -0
  43. package/dist/browser.js.map +1 -0
  44. package/dist/child-accessors.d.ts +27 -0
  45. package/dist/child-accessors.d.ts.map +1 -0
  46. package/dist/child-accessors.js +35 -0
  47. package/dist/child-accessors.js.map +1 -0
  48. package/dist/class.d.ts +313 -0
  49. package/dist/class.d.ts.map +1 -0
  50. package/dist/class.js +896 -0
  51. package/dist/class.js.map +1 -0
  52. package/dist/collection-cache.d.ts +110 -0
  53. package/dist/collection-cache.d.ts.map +1 -0
  54. package/dist/collection-cache.js +187 -0
  55. package/dist/collection-cache.js.map +1 -0
  56. package/dist/collection.d.ts +894 -0
  57. package/dist/collection.d.ts.map +1 -0
  58. package/dist/collection.js +1987 -0
  59. package/dist/collection.js.map +1 -0
  60. package/dist/config/global-config.d.ts +3 -0
  61. package/dist/config/global-config.d.ts.map +1 -0
  62. package/dist/config/global-config.js +19 -0
  63. package/dist/config/global-config.js.map +1 -0
  64. package/dist/config.d.ts +145 -0
  65. package/dist/config.d.ts.map +1 -0
  66. package/dist/config.js +57 -0
  67. package/dist/config.js.map +1 -0
  68. package/dist/consumer-plugin/index.d.ts +22 -0
  69. package/dist/consumer-plugin/index.d.ts.map +1 -0
  70. package/dist/consumer-plugin/index.js +452 -0
  71. package/dist/consumer-plugin/index.js.map +1 -0
  72. package/dist/consumer-plugin.d.ts +8 -0
  73. package/dist/consumer-plugin.d.ts.map +1 -0
  74. package/dist/consumer-plugin.js +5 -0
  75. package/dist/consumer-plugin.js.map +1 -0
  76. package/dist/database.d.ts +95 -0
  77. package/dist/database.d.ts.map +1 -0
  78. package/dist/database.js +32 -0
  79. package/dist/database.js.map +1 -0
  80. package/dist/decorators/compatibility.d.ts +14 -0
  81. package/dist/decorators/compatibility.d.ts.map +1 -0
  82. package/dist/decorators/compatibility.js +111 -0
  83. package/dist/decorators/compatibility.js.map +1 -0
  84. package/dist/decorators/index.d.ts +381 -0
  85. package/dist/decorators/index.d.ts.map +1 -0
  86. package/dist/decorators/index.js +104 -0
  87. package/dist/decorators/index.js.map +1 -0
  88. package/dist/dispatch/bus.d.ts +306 -0
  89. package/dist/dispatch/bus.d.ts.map +1 -0
  90. package/dist/dispatch/bus.js +583 -0
  91. package/dist/dispatch/bus.js.map +1 -0
  92. package/dist/dispatch/collections/DispatchSubscriptions.d.ts +79 -0
  93. package/dist/dispatch/collections/DispatchSubscriptions.d.ts.map +1 -0
  94. package/dist/dispatch/collections/DispatchSubscriptions.js +243 -0
  95. package/dist/dispatch/collections/DispatchSubscriptions.js.map +1 -0
  96. package/dist/dispatch/collections/Dispatches.d.ts +98 -0
  97. package/dist/dispatch/collections/Dispatches.d.ts.map +1 -0
  98. package/dist/dispatch/collections/Dispatches.js +358 -0
  99. package/dist/dispatch/collections/Dispatches.js.map +1 -0
  100. package/dist/dispatch/index.d.ts +47 -0
  101. package/dist/dispatch/index.d.ts.map +1 -0
  102. package/dist/dispatch/models/Dispatch.d.ts +101 -0
  103. package/dist/dispatch/models/Dispatch.d.ts.map +1 -0
  104. package/dist/dispatch/models/Dispatch.js +162 -0
  105. package/dist/dispatch/models/Dispatch.js.map +1 -0
  106. package/dist/dispatch/models/DispatchSubscription.d.ts +83 -0
  107. package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -0
  108. package/dist/dispatch/models/DispatchSubscription.js +112 -0
  109. package/dist/dispatch/models/DispatchSubscription.js.map +1 -0
  110. package/dist/dispatch/tenant-resolver.d.ts +98 -0
  111. package/dist/dispatch/tenant-resolver.d.ts.map +1 -0
  112. package/dist/dispatch/tenant-resolver.js +32 -0
  113. package/dist/dispatch/tenant-resolver.js.map +1 -0
  114. package/dist/dispatch/types.d.ts +149 -0
  115. package/dist/dispatch/types.d.ts.map +1 -0
  116. package/dist/embeddings/hash.d.ts +33 -0
  117. package/dist/embeddings/hash.d.ts.map +1 -0
  118. package/dist/embeddings/hash.js +37 -0
  119. package/dist/embeddings/hash.js.map +1 -0
  120. package/dist/embeddings/index.d.ts +36 -0
  121. package/dist/embeddings/index.d.ts.map +1 -0
  122. package/dist/embeddings/provider.d.ts +75 -0
  123. package/dist/embeddings/provider.d.ts.map +1 -0
  124. package/dist/embeddings/provider.js +170 -0
  125. package/dist/embeddings/provider.js.map +1 -0
  126. package/dist/embeddings/similarity.d.ts +47 -0
  127. package/dist/embeddings/similarity.d.ts.map +1 -0
  128. package/dist/embeddings/similarity.js +64 -0
  129. package/dist/embeddings/similarity.js.map +1 -0
  130. package/dist/embeddings/storage.d.ts +125 -0
  131. package/dist/embeddings/storage.d.ts.map +1 -0
  132. package/dist/embeddings/storage.js +283 -0
  133. package/dist/embeddings/storage.js.map +1 -0
  134. package/dist/embeddings/types.d.ts +250 -0
  135. package/dist/embeddings/types.d.ts.map +1 -0
  136. package/dist/errors.d.ts +363 -0
  137. package/dist/errors.d.ts.map +1 -0
  138. package/dist/errors.js +669 -0
  139. package/dist/errors.js.map +1 -0
  140. package/dist/generators/cli.d.ts +162 -0
  141. package/dist/generators/cli.d.ts.map +1 -0
  142. package/dist/generators/cli.js +462 -0
  143. package/dist/generators/cli.js.map +1 -0
  144. package/dist/generators/index.d.ts +13 -0
  145. package/dist/generators/index.d.ts.map +1 -0
  146. package/dist/generators/mcp-runtime-template.d.ts +60 -0
  147. package/dist/generators/mcp-runtime-template.d.ts.map +1 -0
  148. package/dist/generators/mcp-runtime-template.js +509 -0
  149. package/dist/generators/mcp-runtime-template.js.map +1 -0
  150. package/dist/generators/mcp.d.ts +231 -0
  151. package/dist/generators/mcp.d.ts.map +1 -0
  152. package/dist/generators/mcp.js +1220 -0
  153. package/dist/generators/mcp.js.map +1 -0
  154. package/dist/generators/rest.d.ts +171 -0
  155. package/dist/generators/rest.d.ts.map +1 -0
  156. package/dist/generators/rest.js +591 -0
  157. package/dist/generators/rest.js.map +1 -0
  158. package/dist/generators/swagger.d.ts +21 -0
  159. package/dist/generators/swagger.d.ts.map +1 -0
  160. package/dist/generators/swagger.js +307 -0
  161. package/dist/generators/swagger.js.map +1 -0
  162. package/dist/generators/tenant-gate.d.ts +74 -0
  163. package/dist/generators/tenant-gate.d.ts.map +1 -0
  164. package/dist/generators/tenant-gate.js +15 -0
  165. package/dist/generators/tenant-gate.js.map +1 -0
  166. package/dist/generators.d.ts +8 -0
  167. package/dist/generators.d.ts.map +1 -0
  168. package/dist/generators.js +19 -0
  169. package/dist/generators.js.map +1 -0
  170. package/dist/hierarchical.d.ts +103 -0
  171. package/dist/hierarchical.d.ts.map +1 -0
  172. package/dist/hierarchical.js +184 -0
  173. package/dist/hierarchical.js.map +1 -0
  174. package/dist/index.d.ts +57 -0
  175. package/dist/index.d.ts.map +1 -0
  176. package/dist/index.js +202 -0
  177. package/dist/index.js.map +1 -0
  178. package/dist/interceptors.d.ts +251 -0
  179. package/dist/interceptors.d.ts.map +1 -0
  180. package/dist/interceptors.js +259 -0
  181. package/dist/interceptors.js.map +1 -0
  182. package/dist/junction.d.ts +99 -0
  183. package/dist/junction.d.ts.map +1 -0
  184. package/dist/junction.js +136 -0
  185. package/dist/junction.js.map +1 -0
  186. package/dist/knowledge.d.ts +11 -0
  187. package/dist/knowledge.d.ts.map +1 -0
  188. package/dist/knowledge.js +310 -0
  189. package/dist/knowledge.js.map +1 -0
  190. package/dist/lazy-config.d.ts +160 -0
  191. package/dist/lazy-config.d.ts.map +1 -0
  192. package/dist/lazy-config.js +146 -0
  193. package/dist/lazy-config.js.map +1 -0
  194. package/dist/manifest/discover-base-classes.d.ts +78 -0
  195. package/dist/manifest/discover-base-classes.d.ts.map +1 -0
  196. package/dist/manifest/discover-base-classes.js +85 -0
  197. package/dist/manifest/discover-base-classes.js.map +1 -0
  198. package/dist/manifest/discover-smrt-packages.d.ts +48 -0
  199. package/dist/manifest/discover-smrt-packages.d.ts.map +1 -0
  200. package/dist/manifest/discover-smrt-packages.js +361 -0
  201. package/dist/manifest/discover-smrt-packages.js.map +1 -0
  202. package/dist/manifest/generator.d.ts +93 -0
  203. package/dist/manifest/generator.d.ts.map +1 -0
  204. package/dist/manifest/generator.js +380 -0
  205. package/dist/manifest/generator.js.map +1 -0
  206. package/dist/manifest/index.d.ts +16 -0
  207. package/dist/manifest/index.d.ts.map +1 -0
  208. package/dist/manifest/index.js +51 -0
  209. package/dist/manifest/index.js.map +1 -0
  210. package/dist/manifest/manager.d.ts +51 -0
  211. package/dist/manifest/manager.d.ts.map +1 -0
  212. package/dist/manifest/manager.js +89 -0
  213. package/dist/manifest/manager.js.map +1 -0
  214. package/dist/manifest/manifest-loader.d.ts +187 -0
  215. package/dist/manifest/manifest-loader.d.ts.map +1 -0
  216. package/dist/manifest/manifest-loader.js +847 -0
  217. package/dist/manifest/manifest-loader.js.map +1 -0
  218. package/dist/manifest/sources/composite.d.ts +22 -0
  219. package/dist/manifest/sources/composite.d.ts.map +1 -0
  220. package/dist/manifest/sources/composite.js +60 -0
  221. package/dist/manifest/sources/composite.js.map +1 -0
  222. package/dist/manifest/sources/embedded.d.ts +7 -0
  223. package/dist/manifest/sources/embedded.d.ts.map +1 -0
  224. package/dist/manifest/sources/embedded.js +30 -0
  225. package/dist/manifest/sources/embedded.js.map +1 -0
  226. package/dist/manifest/sources/explicit-paths.d.ts +17 -0
  227. package/dist/manifest/sources/explicit-paths.d.ts.map +1 -0
  228. package/dist/manifest/sources/explicit-paths.js +35 -0
  229. package/dist/manifest/sources/explicit-paths.js.map +1 -0
  230. package/dist/manifest/sources/fallback.d.ts +25 -0
  231. package/dist/manifest/sources/fallback.d.ts.map +1 -0
  232. package/dist/manifest/sources/fallback.js +63 -0
  233. package/dist/manifest/sources/fallback.js.map +1 -0
  234. package/dist/manifest/sources/index.d.ts +17 -0
  235. package/dist/manifest/sources/index.d.ts.map +1 -0
  236. package/dist/manifest/sources/local-test.d.ts +7 -0
  237. package/dist/manifest/sources/local-test.d.ts.map +1 -0
  238. package/dist/manifest/sources/local-test.js +21 -0
  239. package/dist/manifest/sources/local-test.js.map +1 -0
  240. package/dist/manifest/sources/static.d.ts +7 -0
  241. package/dist/manifest/sources/static.d.ts.map +1 -0
  242. package/dist/manifest/sources/static.js +19 -0
  243. package/dist/manifest/sources/static.js.map +1 -0
  244. package/dist/manifest/sources/test.d.ts +7 -0
  245. package/dist/manifest/sources/test.d.ts.map +1 -0
  246. package/dist/manifest/sources/test.js +21 -0
  247. package/dist/manifest/sources/test.js.map +1 -0
  248. package/dist/manifest/sources/types.d.ts +79 -0
  249. package/dist/manifest/sources/types.d.ts.map +1 -0
  250. package/dist/manifest/sources/types.js +61 -0
  251. package/dist/manifest/sources/types.js.map +1 -0
  252. package/dist/manifest/static-manifest.d.ts +4 -0
  253. package/dist/manifest/static-manifest.d.ts.map +1 -0
  254. package/dist/manifest/static-manifest.js +1535 -0
  255. package/dist/manifest/static-manifest.js.map +1 -0
  256. package/dist/manifest/store.d.ts +111 -0
  257. package/dist/manifest/store.d.ts.map +1 -0
  258. package/dist/manifest/store.js +431 -0
  259. package/dist/manifest/store.js.map +1 -0
  260. package/dist/manifest/test-manifest-loader.d.ts +3 -0
  261. package/dist/manifest/test-manifest-loader.d.ts.map +1 -0
  262. package/dist/manifest/test-manifest-stub.d.ts +4 -0
  263. package/dist/manifest/test-manifest-stub.d.ts.map +1 -0
  264. package/dist/manifest/test-manifest-stub.js +80013 -0
  265. package/dist/manifest/test-manifest-stub.js.map +1 -0
  266. package/dist/manifest.d.ts +8 -0
  267. package/dist/manifest.d.ts.map +1 -0
  268. package/dist/manifest.js +20 -0
  269. package/dist/manifest.js.map +1 -0
  270. package/dist/manifest.json +1489 -0
  271. package/dist/mcp-advisor/index.d.ts +499 -0
  272. package/dist/mcp-advisor/index.d.ts.map +1 -0
  273. package/dist/mcp-advisor/tools/add-ai-methods.d.ts +6 -0
  274. package/dist/mcp-advisor/tools/add-ai-methods.d.ts.map +1 -0
  275. package/dist/mcp-advisor/tools/configure-decorators.d.ts +6 -0
  276. package/dist/mcp-advisor/tools/configure-decorators.d.ts.map +1 -0
  277. package/dist/mcp-advisor/tools/generate-collection.d.ts +6 -0
  278. package/dist/mcp-advisor/tools/generate-collection.d.ts.map +1 -0
  279. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts +6 -0
  280. package/dist/mcp-advisor/tools/generate-field-definitions.d.ts.map +1 -0
  281. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts +6 -0
  282. package/dist/mcp-advisor/tools/generate-smrt-class.d.ts.map +1 -0
  283. package/dist/mcp-advisor/tools/get-object-config.d.ts +6 -0
  284. package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -0
  285. package/dist/mcp-advisor/tools/get-object-schema.d.ts +10 -0
  286. package/dist/mcp-advisor/tools/get-object-schema.d.ts.map +1 -0
  287. package/dist/mcp-advisor/tools/list-registered-objects.d.ts +9 -0
  288. package/dist/mcp-advisor/tools/list-registered-objects.d.ts.map +1 -0
  289. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +9 -0
  290. package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -0
  291. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts +9 -0
  292. package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts.map +1 -0
  293. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts +6 -0
  294. package/dist/mcp-advisor/tools/validate-smrt-object.d.ts.map +1 -0
  295. package/dist/mcp-advisor/types.d.ts +209 -0
  296. package/dist/mcp-advisor/types.d.ts.map +1 -0
  297. package/dist/migrations/backfill-tracker.d.ts +84 -0
  298. package/dist/migrations/backfill-tracker.d.ts.map +1 -0
  299. package/dist/migrations/backfill-tracker.js +118 -0
  300. package/dist/migrations/backfill-tracker.js.map +1 -0
  301. package/dist/migrations/checksum.d.ts +43 -0
  302. package/dist/migrations/checksum.d.ts.map +1 -0
  303. package/dist/migrations/checksum.js +32 -0
  304. package/dist/migrations/checksum.js.map +1 -0
  305. package/dist/migrations/differ.d.ts +186 -0
  306. package/dist/migrations/differ.d.ts.map +1 -0
  307. package/dist/migrations/differ.js +601 -0
  308. package/dist/migrations/differ.js.map +1 -0
  309. package/dist/migrations/generator.d.ts +133 -0
  310. package/dist/migrations/generator.d.ts.map +1 -0
  311. package/dist/migrations/generator.js +328 -0
  312. package/dist/migrations/generator.js.map +1 -0
  313. package/dist/migrations/index.d.ts +20 -0
  314. package/dist/migrations/index.d.ts.map +1 -0
  315. package/dist/migrations/orchestrate.d.ts +148 -0
  316. package/dist/migrations/orchestrate.d.ts.map +1 -0
  317. package/dist/migrations/orchestrate.js +118 -0
  318. package/dist/migrations/orchestrate.js.map +1 -0
  319. package/dist/migrations/tracker.d.ts +134 -0
  320. package/dist/migrations/tracker.d.ts.map +1 -0
  321. package/dist/migrations/tracker.js +624 -0
  322. package/dist/migrations/tracker.js.map +1 -0
  323. package/dist/migrations/types.d.ts +221 -0
  324. package/dist/migrations/types.d.ts.map +1 -0
  325. package/dist/migrations.d.ts +7 -0
  326. package/dist/migrations.d.ts.map +1 -0
  327. package/dist/migrations.js +26 -0
  328. package/dist/migrations.js.map +1 -0
  329. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +56 -0
  330. package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +1 -0
  331. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js +163 -0
  332. package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
  333. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js +13 -0
  334. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
  335. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js +654 -0
  336. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js.map +1 -0
  337. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js +111 -0
  338. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
  339. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js +10 -0
  340. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js.map +1 -0
  341. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js +824 -0
  342. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js.map +1 -0
  343. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js +10 -0
  344. package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
  345. package/dist/object.d.ts +1202 -0
  346. package/dist/object.d.ts.map +1 -0
  347. package/dist/object.js +2731 -0
  348. package/dist/object.js.map +1 -0
  349. package/dist/polymorphic-association.d.ts +69 -0
  350. package/dist/polymorphic-association.d.ts.map +1 -0
  351. package/dist/polymorphic-association.js +96 -0
  352. package/dist/polymorphic-association.js.map +1 -0
  353. package/dist/prebuild/cli.d.ts +7 -0
  354. package/dist/prebuild/cli.d.ts.map +1 -0
  355. package/dist/prebuild/cli.js +29 -0
  356. package/dist/prebuild/cli.js.map +1 -0
  357. package/dist/prebuild/index.d.ts +22 -0
  358. package/dist/prebuild/index.d.ts.map +1 -0
  359. package/dist/prebuild/index.js +239 -0
  360. package/dist/prebuild/index.js.map +1 -0
  361. package/dist/prebuild.d.ts +8 -0
  362. package/dist/prebuild.d.ts.map +1 -0
  363. package/dist/prebuild.js +6 -0
  364. package/dist/prebuild.js.map +1 -0
  365. package/dist/registry/cache-config.d.ts +13 -0
  366. package/dist/registry/cache-config.d.ts.map +1 -0
  367. package/dist/registry/cache-config.js +17 -0
  368. package/dist/registry/cache-config.js.map +1 -0
  369. package/dist/registry/class-registration.d.ts +31 -0
  370. package/dist/registry/class-registration.d.ts.map +1 -0
  371. package/dist/registry/class-registration.js +1074 -0
  372. package/dist/registry/class-registration.js.map +1 -0
  373. package/dist/registry/collection-resolution.d.ts +45 -0
  374. package/dist/registry/collection-resolution.d.ts.map +1 -0
  375. package/dist/registry/collection-resolution.js +121 -0
  376. package/dist/registry/collection-resolution.js.map +1 -0
  377. package/dist/registry/collision-policy.d.ts +179 -0
  378. package/dist/registry/collision-policy.d.ts.map +1 -0
  379. package/dist/registry/collision-policy.js +153 -0
  380. package/dist/registry/collision-policy.js.map +1 -0
  381. package/dist/registry/diagnostics.d.ts +58 -0
  382. package/dist/registry/diagnostics.d.ts.map +1 -0
  383. package/dist/registry/diagnostics.js +54 -0
  384. package/dist/registry/diagnostics.js.map +1 -0
  385. package/dist/registry/embedding-manager.d.ts +23 -0
  386. package/dist/registry/embedding-manager.d.ts.map +1 -0
  387. package/dist/registry/embedding-manager.js +62 -0
  388. package/dist/registry/embedding-manager.js.map +1 -0
  389. package/dist/registry/index.d.ts +13 -0
  390. package/dist/registry/index.d.ts.map +1 -0
  391. package/dist/registry/inheritance-resolver.d.ts +13 -0
  392. package/dist/registry/inheritance-resolver.d.ts.map +1 -0
  393. package/dist/registry/inheritance-resolver.js +244 -0
  394. package/dist/registry/inheritance-resolver.js.map +1 -0
  395. package/dist/registry/manifest-field-merge.d.ts +4 -0
  396. package/dist/registry/manifest-field-merge.d.ts.map +1 -0
  397. package/dist/registry/manifest-field-merge.js +82 -0
  398. package/dist/registry/manifest-field-merge.js.map +1 -0
  399. package/dist/registry/name-resolver.d.ts +102 -0
  400. package/dist/registry/name-resolver.d.ts.map +1 -0
  401. package/dist/registry/name-resolver.js +241 -0
  402. package/dist/registry/name-resolver.js.map +1 -0
  403. package/dist/registry/relationship-graph.d.ts +16 -0
  404. package/dist/registry/relationship-graph.d.ts.map +1 -0
  405. package/dist/registry/relationship-graph.js +79 -0
  406. package/dist/registry/relationship-graph.js.map +1 -0
  407. package/dist/registry/schema-builder.d.ts +113 -0
  408. package/dist/registry/schema-builder.d.ts.map +1 -0
  409. package/dist/registry/schema-builder.js +474 -0
  410. package/dist/registry/schema-builder.js.map +1 -0
  411. package/dist/registry/shared-state.d.ts +62 -0
  412. package/dist/registry/shared-state.d.ts.map +1 -0
  413. package/dist/registry/shared-state.js +135 -0
  414. package/dist/registry/shared-state.js.map +1 -0
  415. package/dist/registry/types.d.ts +667 -0
  416. package/dist/registry/types.d.ts.map +1 -0
  417. package/dist/registry/validator.d.ts +13 -0
  418. package/dist/registry/validator.d.ts.map +1 -0
  419. package/dist/registry/validator.js +138 -0
  420. package/dist/registry/validator.js.map +1 -0
  421. package/dist/registry.d.ts +1358 -0
  422. package/dist/registry.d.ts.map +1 -0
  423. package/dist/registry.js +2301 -0
  424. package/dist/registry.js.map +1 -0
  425. package/dist/runtime/client.d.ts +34 -0
  426. package/dist/runtime/client.d.ts.map +1 -0
  427. package/dist/runtime/client.js +104 -0
  428. package/dist/runtime/client.js.map +1 -0
  429. package/dist/runtime/index.d.ts +10 -0
  430. package/dist/runtime/index.d.ts.map +1 -0
  431. package/dist/runtime/mcp.d.ts +47 -0
  432. package/dist/runtime/mcp.d.ts.map +1 -0
  433. package/dist/runtime/mcp.js +72 -0
  434. package/dist/runtime/mcp.js.map +1 -0
  435. package/dist/runtime/server.d.ts +92 -0
  436. package/dist/runtime/server.d.ts.map +1 -0
  437. package/dist/runtime/server.js +390 -0
  438. package/dist/runtime/server.js.map +1 -0
  439. package/dist/runtime/types.d.ts +58 -0
  440. package/dist/runtime/types.d.ts.map +1 -0
  441. package/dist/runtime.d.ts +8 -0
  442. package/dist/runtime.d.ts.map +1 -0
  443. package/dist/runtime.js +10 -0
  444. package/dist/runtime.js.map +1 -0
  445. package/dist/scanner/import-scanner.d.ts +7 -0
  446. package/dist/scanner/import-scanner.d.ts.map +1 -0
  447. package/dist/scanner/index.d.ts +12 -0
  448. package/dist/scanner/index.d.ts.map +1 -0
  449. package/dist/scanner/manifest-generator.d.ts +304 -0
  450. package/dist/scanner/manifest-generator.d.ts.map +1 -0
  451. package/dist/scanner/manifest-generator.js +1707 -0
  452. package/dist/scanner/manifest-generator.js.map +1 -0
  453. package/dist/scanner/test-file-patterns.d.ts +18 -0
  454. package/dist/scanner/test-file-patterns.d.ts.map +1 -0
  455. package/dist/scanner/test-file-patterns.js +16 -0
  456. package/dist/scanner/test-file-patterns.js.map +1 -0
  457. package/dist/scanner/types.d.ts +313 -0
  458. package/dist/scanner/types.d.ts.map +1 -0
  459. package/dist/scanner/types.js +2 -0
  460. package/dist/scanner/types.js.map +1 -0
  461. package/dist/scanner.d.ts +6 -0
  462. package/dist/scanner.d.ts.map +1 -0
  463. package/dist/scanner.js +6 -0
  464. package/dist/scanner.js.map +1 -0
  465. package/dist/schema/code-generator.d.ts +53 -0
  466. package/dist/schema/code-generator.d.ts.map +1 -0
  467. package/dist/schema/ddl/base-strategy.d.ts +80 -0
  468. package/dist/schema/ddl/base-strategy.d.ts.map +1 -0
  469. package/dist/schema/ddl/base-strategy.js +240 -0
  470. package/dist/schema/ddl/base-strategy.js.map +1 -0
  471. package/dist/schema/ddl/duckdb-strategy.d.ts +33 -0
  472. package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -0
  473. package/dist/schema/ddl/duckdb-strategy.js +74 -0
  474. package/dist/schema/ddl/duckdb-strategy.js.map +1 -0
  475. package/dist/schema/ddl/index.d.ts +53 -0
  476. package/dist/schema/ddl/index.d.ts.map +1 -0
  477. package/dist/schema/ddl/index.js +80 -0
  478. package/dist/schema/ddl/index.js.map +1 -0
  479. package/dist/schema/ddl/json-duckdb-strategy.d.ts +8 -0
  480. package/dist/schema/ddl/json-duckdb-strategy.d.ts.map +1 -0
  481. package/dist/schema/ddl/json-duckdb-strategy.js +14 -0
  482. package/dist/schema/ddl/json-duckdb-strategy.js.map +1 -0
  483. package/dist/schema/ddl/postgres-strategy.d.ts +29 -0
  484. package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -0
  485. package/dist/schema/ddl/postgres-strategy.js +102 -0
  486. package/dist/schema/ddl/postgres-strategy.js.map +1 -0
  487. package/dist/schema/ddl/sqlite-strategy.d.ts +38 -0
  488. package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -0
  489. package/dist/schema/ddl/sqlite-strategy.js +74 -0
  490. package/dist/schema/ddl/sqlite-strategy.js.map +1 -0
  491. package/dist/schema/ddl/types.d.ts +114 -0
  492. package/dist/schema/ddl/types.d.ts.map +1 -0
  493. package/dist/schema/generator.d.ts +176 -0
  494. package/dist/schema/generator.d.ts.map +1 -0
  495. package/dist/schema/generator.js +1076 -0
  496. package/dist/schema/generator.js.map +1 -0
  497. package/dist/schema/index-utils.d.ts +19 -0
  498. package/dist/schema/index-utils.d.ts.map +1 -0
  499. package/dist/schema/index-utils.js +32 -0
  500. package/dist/schema/index-utils.js.map +1 -0
  501. package/dist/schema/index.d.ts +13 -0
  502. package/dist/schema/index.d.ts.map +1 -0
  503. package/dist/schema/override-system.d.ts +43 -0
  504. package/dist/schema/override-system.d.ts.map +1 -0
  505. package/dist/schema/schema-aggregator.d.ts +112 -0
  506. package/dist/schema/schema-aggregator.d.ts.map +1 -0
  507. package/dist/schema/schema-manager.d.ts +95 -0
  508. package/dist/schema/schema-manager.d.ts.map +1 -0
  509. package/dist/schema/schema-manager.js +283 -0
  510. package/dist/schema/schema-manager.js.map +1 -0
  511. package/dist/schema/sql-identifiers.d.ts +107 -0
  512. package/dist/schema/sql-identifiers.d.ts.map +1 -0
  513. package/dist/schema/sql-identifiers.js +190 -0
  514. package/dist/schema/sql-identifiers.js.map +1 -0
  515. package/dist/schema/table-verifier.d.ts +10 -0
  516. package/dist/schema/table-verifier.d.ts.map +1 -0
  517. package/dist/schema/table-verifier.js +37 -0
  518. package/dist/schema/table-verifier.js.map +1 -0
  519. package/dist/schema/types.d.ts +241 -0
  520. package/dist/schema/types.d.ts.map +1 -0
  521. package/dist/schema/utils.d.ts +32 -0
  522. package/dist/schema/utils.d.ts.map +1 -0
  523. package/dist/schema/utils.js +134 -0
  524. package/dist/schema/utils.js.map +1 -0
  525. package/dist/scripts/create-wrappers.js +89 -0
  526. package/dist/scripts/generate-manifest.js +155 -0
  527. package/dist/scripts/generate-test-manifest.js +77 -0
  528. package/dist/scripts/migrate-datetime-to-timestamp.ts +310 -0
  529. package/dist/scripts/prepack.js +49 -0
  530. package/dist/signals/bus.d.ts +64 -0
  531. package/dist/signals/bus.d.ts.map +1 -0
  532. package/dist/signals/bus.js +102 -0
  533. package/dist/signals/bus.js.map +1 -0
  534. package/dist/signals/index.d.ts +11 -0
  535. package/dist/signals/index.d.ts.map +1 -0
  536. package/dist/signals/sanitizer.d.ts +54 -0
  537. package/dist/signals/sanitizer.d.ts.map +1 -0
  538. package/dist/signals/sanitizer.js +111 -0
  539. package/dist/signals/sanitizer.js.map +1 -0
  540. package/dist/smrt-knowledge.json +335 -0
  541. package/dist/system/compatibility.d.ts +8 -0
  542. package/dist/system/compatibility.d.ts.map +1 -0
  543. package/dist/system/compatibility.js +409 -0
  544. package/dist/system/compatibility.js.map +1 -0
  545. package/dist/system/index.d.ts +9 -0
  546. package/dist/system/index.d.ts.map +1 -0
  547. package/dist/system/schema.d.ts +69 -0
  548. package/dist/system/schema.d.ts.map +1 -0
  549. package/dist/system/schema.js +271 -0
  550. package/dist/system/schema.js.map +1 -0
  551. package/dist/system/types.d.ts +135 -0
  552. package/dist/system/types.d.ts.map +1 -0
  553. package/dist/system-fields.d.ts +44 -0
  554. package/dist/system-fields.d.ts.map +1 -0
  555. package/dist/system-fields.js +55 -0
  556. package/dist/system-fields.js.map +1 -0
  557. package/dist/table-cache.d.ts +28 -0
  558. package/dist/table-cache.d.ts.map +1 -0
  559. package/dist/table-cache.js +21 -0
  560. package/dist/table-cache.js.map +1 -0
  561. package/dist/test-utils.d.ts +140 -0
  562. package/dist/test-utils.d.ts.map +1 -0
  563. package/dist/testing/database.d.ts +73 -0
  564. package/dist/testing/database.d.ts.map +1 -0
  565. package/dist/testing/database.js +204 -0
  566. package/dist/testing/database.js.map +1 -0
  567. package/dist/testing/index.d.ts +21 -0
  568. package/dist/testing/index.d.ts.map +1 -0
  569. package/dist/testing.d.ts +6 -0
  570. package/dist/testing.d.ts.map +1 -0
  571. package/dist/testing.js +5 -0
  572. package/dist/testing.js.map +1 -0
  573. package/dist/tools/index.d.ts +8 -0
  574. package/dist/tools/index.d.ts.map +1 -0
  575. package/dist/tools/tool-executor.d.ts +101 -0
  576. package/dist/tools/tool-executor.d.ts.map +1 -0
  577. package/dist/tools/tool-executor.js +142 -0
  578. package/dist/tools/tool-executor.js.map +1 -0
  579. package/dist/tools/tool-generator.d.ts +54 -0
  580. package/dist/tools/tool-generator.d.ts.map +1 -0
  581. package/dist/tools/tool-generator.js +121 -0
  582. package/dist/tools/tool-generator.js.map +1 -0
  583. package/dist/utils/chunk.d.ts +32 -0
  584. package/dist/utils/chunk.d.ts.map +1 -0
  585. package/dist/utils/chunk.js +14 -0
  586. package/dist/utils/chunk.js.map +1 -0
  587. package/dist/utils/import-workspace-module.d.ts +8 -0
  588. package/dist/utils/import-workspace-module.d.ts.map +1 -0
  589. package/dist/utils/import-workspace-module.js +81 -0
  590. package/dist/utils/import-workspace-module.js.map +1 -0
  591. package/dist/utils/json.d.ts +102 -0
  592. package/dist/utils/json.d.ts.map +1 -0
  593. package/dist/utils/json.js +43 -0
  594. package/dist/utils/json.js.map +1 -0
  595. package/dist/utils/lru-cache.d.ts +69 -0
  596. package/dist/utils/lru-cache.d.ts.map +1 -0
  597. package/dist/utils/lru-cache.js +100 -0
  598. package/dist/utils/lru-cache.js.map +1 -0
  599. package/dist/utils/naming.d.ts +16 -0
  600. package/dist/utils/naming.d.ts.map +1 -0
  601. package/dist/utils/naming.js +23 -0
  602. package/dist/utils/naming.js.map +1 -0
  603. package/dist/utils/qualified-names.d.ts +122 -0
  604. package/dist/utils/qualified-names.d.ts.map +1 -0
  605. package/dist/utils/qualified-names.js +82 -0
  606. package/dist/utils/qualified-names.js.map +1 -0
  607. package/dist/utils/scanner-module.d.ts +37 -0
  608. package/dist/utils/scanner-module.d.ts.map +1 -0
  609. package/dist/utils.d.ts +177 -0
  610. package/dist/utils.d.ts.map +1 -0
  611. package/dist/utils.js +185 -0
  612. package/dist/utils.js.map +1 -0
  613. package/dist/vite-plugin/import-build-aware.d.ts +68 -0
  614. package/dist/vite-plugin/import-build-aware.d.ts.map +1 -0
  615. package/dist/vite-plugin/import-build-aware.js +72 -0
  616. package/dist/vite-plugin/import-build-aware.js.map +1 -0
  617. package/dist/vite-plugin/index.d.ts +59 -0
  618. package/dist/vite-plugin/index.d.ts.map +1 -0
  619. package/dist/vite-plugin/index.js +1400 -0
  620. package/dist/vite-plugin/index.js.map +1 -0
  621. package/dist/vite-plugin/sveltekit-generator.d.ts +66 -0
  622. package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -0
  623. package/dist/vite-plugin/sveltekit-generator.js +1375 -0
  624. package/dist/vite-plugin/sveltekit-generator.js.map +1 -0
  625. package/dist/vite-plugin/templates/default-ui.ts +432 -0
  626. package/dist/vite-plugin/templates/default.html +206 -0
  627. package/dist/vite-plugin.d.ts +8 -0
  628. package/dist/vite-plugin.d.ts.map +1 -0
  629. package/dist/vite-plugin.js +11 -0
  630. package/dist/vite-plugin.js.map +1 -0
  631. package/package.json +208 -0
@@ -0,0 +1,149 @@
1
+ import { DatabaseInterface } from '@happyvertical/sql';
2
+ import { DispatchTenantScope } from './tenant-resolver.js';
3
+ /**
4
+ * Dispatch message status
5
+ */
6
+ export type DispatchStatus = 'pending' | 'processing' | 'completed' | 'failed';
7
+ /**
8
+ * Options for emitting a dispatch
9
+ */
10
+ export interface DispatchEmitOptions {
11
+ /** Source agent name */
12
+ source?: string;
13
+ /** Source agent instance ID */
14
+ sourceId?: string;
15
+ /** Correlation ID for linking request/response dispatch pairs */
16
+ correlationId?: string;
17
+ /** Additional metadata */
18
+ metadata?: Record<string, unknown>;
19
+ }
20
+ /**
21
+ * Metadata passed to dispatch handlers
22
+ */
23
+ export interface DispatchMetadata {
24
+ /** Dispatch ID */
25
+ id: string;
26
+ /** Signal type (e.g., 'campaign.completed') */
27
+ type: string;
28
+ /** Source agent name */
29
+ source: string;
30
+ /** Source agent instance ID */
31
+ sourceId: string;
32
+ /** Correlation ID for linking request/response dispatch pairs */
33
+ correlationId?: string;
34
+ /** Dispatch creation timestamp */
35
+ createdAt: Date;
36
+ /** Number of processing attempts */
37
+ attempts: number;
38
+ /** Additional metadata from emission */
39
+ metadata: Record<string, unknown>;
40
+ }
41
+ /**
42
+ * Handler function for in-memory dispatch processing
43
+ */
44
+ export type DispatchHandler = (payload: unknown, metadata: DispatchMetadata) => Promise<void>;
45
+ /**
46
+ * Options for subscribing to dispatches
47
+ */
48
+ export interface DispatchSubscribeOptions {
49
+ /** Signal type pattern (supports wildcards like 'campaign.*') */
50
+ signalType: string;
51
+ /** Subscriber name (usually agent name) */
52
+ subscriber: string;
53
+ /** Handler method name (default: 'handleDispatch') */
54
+ handler?: string;
55
+ /** Whether subscription is enabled */
56
+ enabled?: boolean;
57
+ /** Delivery mode: 'compete' (default, first-to-claim) or 'fanout' (each subscriber gets own copy) */
58
+ delivery?: 'compete' | 'fanout';
59
+ }
60
+ /**
61
+ * Options for processing dispatches
62
+ */
63
+ export interface DispatchProcessOptions {
64
+ /** Maximum number of dispatches to process */
65
+ limit?: number;
66
+ /** Signal types to process (default: all subscribed) */
67
+ signalTypes?: string[];
68
+ }
69
+ /**
70
+ * Options for listing dispatches
71
+ */
72
+ export interface DispatchListOptions {
73
+ /** Filter by status */
74
+ status?: DispatchStatus;
75
+ /** Filter by source agent */
76
+ source?: string;
77
+ /** Filter by signal type */
78
+ type?: string;
79
+ /** Filter by target subscriber */
80
+ targetSubscriber?: string;
81
+ /** Filter by correlation ID */
82
+ correlationId?: string;
83
+ /**
84
+ * Active tenant scope used to filter results (S5 #1398).
85
+ *
86
+ * Supplied by the DispatchBus from the server-derived tenant context — never
87
+ * from external/caller input, so visibility cannot be widened beyond the
88
+ * active scope. Semantics:
89
+ *
90
+ * - omitted / `enforced: false` → no tenant filter (pre-tenancy behavior).
91
+ * - `enforced: true`, `tenantId: T` → `(tenant_id = T OR tenant_id IS NULL)`.
92
+ * - `enforced: true`, `tenantId: null` → `tenant_id IS NULL` only (fail-closed
93
+ * global scope when tenancy is on but no tenant context is active).
94
+ *
95
+ * @see {@link DispatchTenantScope}
96
+ */
97
+ tenantScope?: DispatchTenantScope;
98
+ /** Maximum results */
99
+ limit?: number;
100
+ /** Offset for pagination */
101
+ offset?: number;
102
+ /** Order by field */
103
+ orderBy?: string;
104
+ }
105
+ /**
106
+ * Options for retrying failed dispatches
107
+ */
108
+ export interface DispatchRetryOptions {
109
+ /** Maximum total attempts before giving up */
110
+ maxAttempts?: number;
111
+ /** Only retry dispatches older than this date */
112
+ olderThan?: Date;
113
+ /** Only retry specific signal types */
114
+ signalTypes?: string[];
115
+ }
116
+ /**
117
+ * Options for cleaning up dispatches
118
+ */
119
+ export interface DispatchCleanupOptions {
120
+ /** Delete completed dispatches older than this many days */
121
+ completedOlderThanDays?: number;
122
+ /** Delete failed dispatches older than this many days */
123
+ failedOlderThanDays?: number;
124
+ }
125
+ /**
126
+ * Result of dispatch cleanup
127
+ */
128
+ export interface DispatchCleanupResult {
129
+ /** Number of completed dispatches deleted */
130
+ completedDeleted: number;
131
+ /** Number of failed dispatches deleted */
132
+ failedDeleted: number;
133
+ }
134
+ /**
135
+ * Options for creating a DispatchBus
136
+ */
137
+ export interface DispatchBusOptions {
138
+ /** Database configuration or existing interface */
139
+ db?: DatabaseInterface | {
140
+ type: 'sqlite' | 'postgres' | 'json' | 'duckdb';
141
+ url: string;
142
+ };
143
+ /** Alias for db - persistence layer configuration */
144
+ persistence?: {
145
+ type: 'sql' | 'json' | 'duckdb';
146
+ url: string;
147
+ };
148
+ }
149
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/dispatch/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Content Hashing for Embedding Change Detection
3
+ *
4
+ * Uses SHA-256 to detect when content has changed and embeddings need regeneration.
5
+ */
6
+ /**
7
+ * Content hasher for embedding change detection
8
+ */
9
+ export declare class ContentHasher {
10
+ /**
11
+ * Generate SHA-256 hash of content
12
+ *
13
+ * @param content - Text content to hash
14
+ * @returns Hex-encoded hash string
15
+ */
16
+ static hash(content: string): string;
17
+ /**
18
+ * Check if content has changed by comparing hashes
19
+ *
20
+ * @param content - Current content
21
+ * @param previousHash - Previously stored hash
22
+ * @returns True if content has changed
23
+ */
24
+ static hasChanged(content: string, previousHash: string): boolean;
25
+ /**
26
+ * Generate hash for multiple fields combined
27
+ *
28
+ * @param fields - Object with field names and values
29
+ * @returns Hex-encoded hash of combined content
30
+ */
31
+ static hashFields(fields: Record<string, string>): string;
32
+ }
33
+ //# sourceMappingURL=hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/embeddings/hash.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH;;GAEG;AACH,qBAAa,aAAa;IACxB;;;;;OAKG;IACH,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM;IAIpC;;;;;;OAMG;IACH,MAAM,CAAC,UAAU,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO;IAIjE;;;;;OAKG;IACH,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM;CAQ1D"}
@@ -0,0 +1,37 @@
1
+ import { createHash } from "node:crypto";
2
+ class ContentHasher {
3
+ /**
4
+ * Generate SHA-256 hash of content
5
+ *
6
+ * @param content - Text content to hash
7
+ * @returns Hex-encoded hash string
8
+ */
9
+ static hash(content) {
10
+ return createHash("sha256").update(content).digest("hex");
11
+ }
12
+ /**
13
+ * Check if content has changed by comparing hashes
14
+ *
15
+ * @param content - Current content
16
+ * @param previousHash - Previously stored hash
17
+ * @returns True if content has changed
18
+ */
19
+ static hasChanged(content, previousHash) {
20
+ return ContentHasher.hash(content) !== previousHash;
21
+ }
22
+ /**
23
+ * Generate hash for multiple fields combined
24
+ *
25
+ * @param fields - Object with field names and values
26
+ * @returns Hex-encoded hash of combined content
27
+ */
28
+ static hashFields(fields) {
29
+ const sortedKeys = Object.keys(fields).sort();
30
+ const combined = sortedKeys.map((key) => `${key}:${fields[key]}`).join("\n");
31
+ return ContentHasher.hash(combined);
32
+ }
33
+ }
34
+ export {
35
+ ContentHasher
36
+ };
37
+ //# sourceMappingURL=hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hash.js","sources":["../../src/embeddings/hash.ts"],"sourcesContent":["/**\n * Content Hashing for Embedding Change Detection\n *\n * Uses SHA-256 to detect when content has changed and embeddings need regeneration.\n */\n\nimport { createHash } from 'node:crypto';\n\n/**\n * Content hasher for embedding change detection\n */\nexport class ContentHasher {\n /**\n * Generate SHA-256 hash of content\n *\n * @param content - Text content to hash\n * @returns Hex-encoded hash string\n */\n static hash(content: string): string {\n return createHash('sha256').update(content).digest('hex');\n }\n\n /**\n * Check if content has changed by comparing hashes\n *\n * @param content - Current content\n * @param previousHash - Previously stored hash\n * @returns True if content has changed\n */\n static hasChanged(content: string, previousHash: string): boolean {\n return ContentHasher.hash(content) !== previousHash;\n }\n\n /**\n * Generate hash for multiple fields combined\n *\n * @param fields - Object with field names and values\n * @returns Hex-encoded hash of combined content\n */\n static hashFields(fields: Record<string, string>): string {\n // Sort keys for deterministic ordering\n const sortedKeys = Object.keys(fields).sort();\n const combined = sortedKeys\n .map((key) => `${key}:${fields[key]}`)\n .join('\\n');\n return ContentHasher.hash(combined);\n }\n}\n"],"names":[],"mappings":";AAWO,MAAM,cAAc;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOzB,OAAO,KAAK,SAAyB;AACnC,WAAO,WAAW,QAAQ,EAAE,OAAO,OAAO,EAAE,OAAO,KAAK;AAAA,EAC1D;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAO,WAAW,SAAiB,cAA+B;AAChE,WAAO,cAAc,KAAK,OAAO,MAAM;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,WAAW,QAAwC;AAExD,UAAM,aAAa,OAAO,KAAK,MAAM,EAAE,KAAA;AACvC,UAAM,WAAW,WACd,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,OAAO,GAAG,CAAC,EAAE,EACpC,KAAK,IAAI;AACZ,WAAO,cAAc,KAAK,QAAQ;AAAA,EACpC;AACF;"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * SMRT Embeddings Module
3
+ *
4
+ * Centralized embedding support for semantic search across SMRT objects.
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import { EmbeddingProvider, EmbeddingStorage, CosineSimilarity } from './embeddings';
9
+ *
10
+ * // Create provider
11
+ * const provider = new EmbeddingProvider(config, ai);
12
+ *
13
+ * // Generate embeddings
14
+ * const embeddings = await provider.embed(['Hello world', 'Goodbye world']);
15
+ *
16
+ * // Store embeddings
17
+ * await EmbeddingStorage.upsert(db, {
18
+ * objectClass: 'Article',
19
+ * objectId: '123',
20
+ * fieldName: 'title',
21
+ * contentHash: ContentHasher.hash('Hello world'),
22
+ * embedding: embeddings[0],
23
+ * model: provider.getModelName(),
24
+ * dimensions: provider.getDimensions()
25
+ * });
26
+ *
27
+ * // Search by similarity
28
+ * const results = CosineSimilarity.rankBySimilarity(queryEmbedding, candidates);
29
+ * ```
30
+ */
31
+ export { ContentHasher } from './hash';
32
+ export { DEFAULT_EMBEDDING_CONFIG, EmbeddingProvider } from './provider';
33
+ export { CosineSimilarity } from './similarity';
34
+ export { EmbeddingStorage } from './storage';
35
+ export type { BatchGenerateOptions, BatchGenerateResult, BatchProgressCallback, ClassEmbeddingConfig, EmbeddingProviderType, FindSimilarOptions, GenerateEmbeddingsOptions, ProjectEmbeddingConfig, ResolvedEmbeddingConfig, SemanticSearchOptions, StoredEmbedding, } from './types';
36
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/embeddings/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAGH,OAAO,EAAE,aAAa,EAAE,MAAM,QAAQ,CAAC;AAEvC,OAAO,EAAE,wBAAwB,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAEhD,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,YAAY,EACV,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,oBAAoB,EACpB,qBAAqB,EACrB,kBAAkB,EAClB,yBAAyB,EACzB,sBAAsB,EACtB,uBAAuB,EACvB,qBAAqB,EACrB,eAAe,GAChB,MAAM,SAAS,CAAC"}
@@ -0,0 +1,75 @@
1
+ import { EmbeddingProviderType, ProjectEmbeddingConfig } from './types';
2
+ export type OptionalModuleImporter = (moduleName: string) => Promise<any>;
3
+ export declare const LOCAL_TRANSFORMERS_PACKAGES: readonly ["@huggingface/transformers", "@xenova/transformers"];
4
+ export type LocalTransformersPackage = (typeof LOCAL_TRANSFORMERS_PACKAGES)[number];
5
+ export interface TransformersModuleResolution {
6
+ module: any;
7
+ packageName: LocalTransformersPackage;
8
+ }
9
+ export declare function resolveLocalTransformersModule(importModule?: OptionalModuleImporter): Promise<TransformersModuleResolution>;
10
+ /**
11
+ * Embedding provider that supports both local and AI-based embedding generation.
12
+ *
13
+ * The "auto" provider prefers an already-configured AI embedding client.
14
+ * Local transformer models are still available via provider: "local", but should
15
+ * be an explicit choice for server workloads because model initialization can be
16
+ * CPU and memory intensive.
17
+ */
18
+ export declare class EmbeddingProvider {
19
+ private localPipeline;
20
+ private localPipelineLoading;
21
+ private config;
22
+ private ai;
23
+ /**
24
+ * Create an embedding provider
25
+ *
26
+ * @param config - Project embedding configuration
27
+ * @param ai - Optional AI client for cloud embeddings (must have embed method)
28
+ */
29
+ constructor(config: ProjectEmbeddingConfig, ai?: unknown);
30
+ /**
31
+ * Generate embeddings for text(s)
32
+ *
33
+ * @param text - Single string or array of strings to embed
34
+ * @param providerOverride - Override the configured provider
35
+ * @returns Array of embedding vectors
36
+ */
37
+ embed(text: string | string[], providerOverride?: EmbeddingProviderType): Promise<number[][]>;
38
+ /**
39
+ * Generate embeddings using a local transformers model
40
+ */
41
+ private embedLocal;
42
+ /**
43
+ * Get or initialize the local embedding pipeline
44
+ */
45
+ private getLocalPipeline;
46
+ /**
47
+ * Initialize the local embedding pipeline
48
+ */
49
+ private initLocalPipeline;
50
+ /**
51
+ * Generate embeddings using AI API
52
+ */
53
+ private embedWithAI;
54
+ /**
55
+ * Get the model name being used
56
+ */
57
+ getModelName(): string;
58
+ /**
59
+ * Get the configured dimensions
60
+ */
61
+ getDimensions(): number;
62
+ /**
63
+ * Check if local embeddings are available
64
+ */
65
+ isLocalAvailable(): Promise<boolean>;
66
+ /**
67
+ * Check if AI embeddings are available
68
+ */
69
+ isAIAvailable(): boolean;
70
+ }
71
+ /**
72
+ * Default project embedding configuration
73
+ */
74
+ export declare const DEFAULT_EMBEDDING_CONFIG: ProjectEmbeddingConfig;
75
+ //# sourceMappingURL=provider.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.d.ts","sourceRoot":"","sources":["../../src/embeddings/provider.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,SAAS,CAAC;AAY7E,MAAM,MAAM,sBAAsB,GAAG,CAAC,UAAU,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC;AAE1E,eAAO,MAAM,2BAA2B,gEAG9B,CAAC;AAEX,MAAM,MAAM,wBAAwB,GAClC,CAAC,OAAO,2BAA2B,CAAC,CAAC,MAAM,CAAC,CAAC;AAE/C,MAAM,WAAW,4BAA4B;IAC3C,MAAM,EAAE,GAAG,CAAC;IACZ,WAAW,EAAE,wBAAwB,CAAC;CACvC;AAmBD,wBAAsB,8BAA8B,CAClD,YAAY,GAAE,sBAAuC,GACpD,OAAO,CAAC,4BAA4B,CAAC,CAavC;AAoBD;;;;;;;GAOG;AACH,qBAAa,iBAAiB;IAC5B,OAAO,CAAC,aAAa,CAA0C;IAC/D,OAAO,CAAC,oBAAoB,CACrB;IACP,OAAO,CAAC,MAAM,CAAyB;IACvC,OAAO,CAAC,EAAE,CAA4B;IAEtC;;;;;OAKG;gBACS,MAAM,EAAE,sBAAsB,EAAE,EAAE,CAAC,EAAE,OAAO;IAUxD;;;;;;OAMG;IACG,KAAK,CACT,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,EACvB,gBAAgB,CAAC,EAAE,qBAAqB,GACvC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;IAuBtB;;OAEG;YACW,UAAU;IAMxB;;OAEG;YACW,gBAAgB;IAoB9B;;OAEG;YACW,iBAAiB;IAY/B;;OAEG;YACW,WAAW;IAiBzB;;OAEG;IACH,YAAY,IAAI,MAAM;IAUtB;;OAEG;IACH,aAAa,IAAI,MAAM;IAIvB;;OAEG;IACG,gBAAgB,IAAI,OAAO,CAAC,OAAO,CAAC;IAS1C;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,sBAKtC,CAAC"}
@@ -0,0 +1,170 @@
1
+ async function importOptional(moduleName) {
2
+ const name = moduleName;
3
+ return import(
4
+ /* @vite-ignore */
5
+ name
6
+ );
7
+ }
8
+ const LOCAL_TRANSFORMERS_PACKAGES = [
9
+ "@huggingface/transformers",
10
+ "@xenova/transformers"
11
+ ];
12
+ function isModuleNotFoundError(error, moduleName) {
13
+ return error instanceof Error && (error.message.includes(`Cannot find module '${moduleName}'`) || error.message.includes(`Cannot find package '${moduleName}'`));
14
+ }
15
+ function formatTransformersResolutionError(attemptedPackages) {
16
+ return new Error(
17
+ `Local embeddings require one of: ${attemptedPackages.join(", ")}. Install one of them to use provider: "local", or switch to provider: "ai".`
18
+ );
19
+ }
20
+ async function resolveLocalTransformersModule(importModule = importOptional) {
21
+ for (const packageName of LOCAL_TRANSFORMERS_PACKAGES) {
22
+ try {
23
+ const module = await importModule(packageName);
24
+ return { module, packageName };
25
+ } catch (error) {
26
+ if (!isModuleNotFoundError(error, packageName)) {
27
+ throw error;
28
+ }
29
+ }
30
+ }
31
+ throw formatTransformersResolutionError(LOCAL_TRANSFORMERS_PACKAGES);
32
+ }
33
+ class EmbeddingProvider {
34
+ localPipeline = null;
35
+ localPipelineLoading = null;
36
+ config;
37
+ ai;
38
+ /**
39
+ * Create an embedding provider
40
+ *
41
+ * @param config - Project embedding configuration
42
+ * @param ai - Optional AI client for cloud embeddings (must have embed method)
43
+ */
44
+ constructor(config, ai) {
45
+ this.config = config;
46
+ if (ai && typeof ai.embed === "function") {
47
+ this.ai = ai;
48
+ } else {
49
+ this.ai = null;
50
+ }
51
+ }
52
+ /**
53
+ * Generate embeddings for text(s)
54
+ *
55
+ * @param text - Single string or array of strings to embed
56
+ * @param providerOverride - Override the configured provider
57
+ * @returns Array of embedding vectors
58
+ */
59
+ async embed(text, providerOverride) {
60
+ const provider = providerOverride || this.config.provider;
61
+ const texts = Array.isArray(text) ? text : [text];
62
+ if (provider === "local") {
63
+ return this.embedLocal(texts);
64
+ }
65
+ if (provider === "ai") {
66
+ return this.embedWithAI(texts);
67
+ }
68
+ if (this.ai) {
69
+ return this.embedWithAI(texts);
70
+ }
71
+ return this.embedLocal(texts);
72
+ }
73
+ /**
74
+ * Generate embeddings using a local transformers model
75
+ */
76
+ async embedLocal(texts) {
77
+ const pipeline = await this.getLocalPipeline();
78
+ const results = await pipeline(texts, { pooling: "mean", normalize: true });
79
+ return results.tolist();
80
+ }
81
+ /**
82
+ * Get or initialize the local embedding pipeline
83
+ */
84
+ async getLocalPipeline() {
85
+ if (this.localPipeline) {
86
+ return this.localPipeline;
87
+ }
88
+ if (this.localPipelineLoading) {
89
+ return this.localPipelineLoading;
90
+ }
91
+ this.localPipelineLoading = this.initLocalPipeline();
92
+ try {
93
+ this.localPipeline = await this.localPipelineLoading;
94
+ return this.localPipeline;
95
+ } finally {
96
+ this.localPipelineLoading = null;
97
+ }
98
+ }
99
+ /**
100
+ * Initialize the local embedding pipeline
101
+ */
102
+ async initLocalPipeline() {
103
+ const { module: transformers } = await resolveLocalTransformersModule();
104
+ const { pipeline } = transformers;
105
+ const model = this.config.localModel || "Xenova/bge-base-en-v1.5";
106
+ const pipe = await pipeline("feature-extraction", model);
107
+ return pipe;
108
+ }
109
+ /**
110
+ * Generate embeddings using AI API
111
+ */
112
+ async embedWithAI(texts) {
113
+ if (!this.ai) {
114
+ throw new Error(
115
+ 'AI client not available for embeddings. Either configure an AI client or use provider: "local".'
116
+ );
117
+ }
118
+ const model = this.config.aiModel || "text-embedding-3-small";
119
+ const response = await this.ai.embed(texts, {
120
+ model,
121
+ dimensions: this.config.dimensions
122
+ });
123
+ return response.embeddings;
124
+ }
125
+ /**
126
+ * Get the model name being used
127
+ */
128
+ getModelName() {
129
+ if (this.config.provider === "ai" || this.config.provider === "auto" && this.ai) {
130
+ return this.config.aiModel || "text-embedding-3-small";
131
+ }
132
+ return this.config.localModel || "Xenova/bge-base-en-v1.5";
133
+ }
134
+ /**
135
+ * Get the configured dimensions
136
+ */
137
+ getDimensions() {
138
+ return this.config.dimensions;
139
+ }
140
+ /**
141
+ * Check if local embeddings are available
142
+ */
143
+ async isLocalAvailable() {
144
+ try {
145
+ await resolveLocalTransformersModule();
146
+ return true;
147
+ } catch {
148
+ return false;
149
+ }
150
+ }
151
+ /**
152
+ * Check if AI embeddings are available
153
+ */
154
+ isAIAvailable() {
155
+ return this.ai !== null;
156
+ }
157
+ }
158
+ const DEFAULT_EMBEDDING_CONFIG = {
159
+ dimensions: 768,
160
+ provider: "local",
161
+ localModel: "Xenova/bge-base-en-v1.5",
162
+ aiModel: "text-embedding-3-small"
163
+ };
164
+ export {
165
+ DEFAULT_EMBEDDING_CONFIG,
166
+ EmbeddingProvider,
167
+ LOCAL_TRANSFORMERS_PACKAGES,
168
+ resolveLocalTransformersModule
169
+ };
170
+ //# sourceMappingURL=provider.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provider.js","sources":["../../src/embeddings/provider.ts"],"sourcesContent":["/**\n * Embedding Provider\n *\n * Unified interface for generating embeddings using local models or AI APIs.\n * Supports transformers.js packages for local inference and @happyvertical/ai\n * for cloud embeddings.\n */\n\nimport type { EmbeddingProviderType, ProjectEmbeddingConfig } from './types';\n\n/**\n * Dynamically import an optional dependency.\n * Uses a variable to prevent TypeScript from statically analyzing the import.\n */\nasync function importOptional(moduleName: string): Promise<any> {\n // Using a variable prevents TypeScript from trying to resolve the module at compile time\n const name = moduleName;\n return import(/* @vite-ignore */ name);\n}\n\nexport type OptionalModuleImporter = (moduleName: string) => Promise<any>;\n\nexport const LOCAL_TRANSFORMERS_PACKAGES = [\n '@huggingface/transformers',\n '@xenova/transformers',\n] as const;\n\nexport type LocalTransformersPackage =\n (typeof LOCAL_TRANSFORMERS_PACKAGES)[number];\n\nexport interface TransformersModuleResolution {\n module: any;\n packageName: LocalTransformersPackage;\n}\n\nfunction isModuleNotFoundError(error: unknown, moduleName: string): boolean {\n return (\n error instanceof Error &&\n (error.message.includes(`Cannot find module '${moduleName}'`) ||\n error.message.includes(`Cannot find package '${moduleName}'`))\n );\n}\n\nfunction formatTransformersResolutionError(\n attemptedPackages: readonly string[],\n): Error {\n return new Error(\n `Local embeddings require one of: ${attemptedPackages.join(', ')}. ` +\n `Install one of them to use provider: \"local\", or switch to provider: \"ai\".`,\n );\n}\n\nexport async function resolveLocalTransformersModule(\n importModule: OptionalModuleImporter = importOptional,\n): Promise<TransformersModuleResolution> {\n for (const packageName of LOCAL_TRANSFORMERS_PACKAGES) {\n try {\n const module = await importModule(packageName);\n return { module, packageName };\n } catch (error) {\n if (!isModuleNotFoundError(error, packageName)) {\n throw error;\n }\n }\n }\n\n throw formatTransformersResolutionError(LOCAL_TRANSFORMERS_PACKAGES);\n}\n\n/**\n * Interface for AI client that can generate embeddings\n */\ninterface EmbeddingCapableAI {\n embed(\n text: string | string[],\n options?: { model?: string; dimensions?: number },\n ): Promise<{ embeddings: number[][] }>;\n}\n\n/**\n * Pipeline type for local transformers packages\n */\ntype FeatureExtractionPipeline = (\n texts: string[],\n options?: { pooling?: string; normalize?: boolean },\n) => Promise<{ tolist: () => number[][] }>;\n\n/**\n * Embedding provider that supports both local and AI-based embedding generation.\n *\n * The \"auto\" provider prefers an already-configured AI embedding client.\n * Local transformer models are still available via provider: \"local\", but should\n * be an explicit choice for server workloads because model initialization can be\n * CPU and memory intensive.\n */\nexport class EmbeddingProvider {\n private localPipeline: FeatureExtractionPipeline | null = null;\n private localPipelineLoading: Promise<FeatureExtractionPipeline> | null =\n null;\n private config: ProjectEmbeddingConfig;\n private ai: EmbeddingCapableAI | null;\n\n /**\n * Create an embedding provider\n *\n * @param config - Project embedding configuration\n * @param ai - Optional AI client for cloud embeddings (must have embed method)\n */\n constructor(config: ProjectEmbeddingConfig, ai?: unknown) {\n this.config = config;\n // Cast to EmbeddingCapableAI if it has an embed method\n if (ai && typeof (ai as any).embed === 'function') {\n this.ai = ai as EmbeddingCapableAI;\n } else {\n this.ai = null;\n }\n }\n\n /**\n * Generate embeddings for text(s)\n *\n * @param text - Single string or array of strings to embed\n * @param providerOverride - Override the configured provider\n * @returns Array of embedding vectors\n */\n async embed(\n text: string | string[],\n providerOverride?: EmbeddingProviderType,\n ): Promise<number[][]> {\n const provider = providerOverride || this.config.provider;\n const texts = Array.isArray(text) ? text : [text];\n\n if (provider === 'local') {\n return this.embedLocal(texts);\n }\n\n if (provider === 'ai') {\n return this.embedWithAI(texts);\n }\n\n // 'auto' - use the configured AI client when present. This avoids\n // unexpectedly loading a large local transformer model inside app workers.\n // Local embeddings remain the explicit no-AI fallback for callers that\n // invoke embedding generation without an AI client.\n if (this.ai) {\n return this.embedWithAI(texts);\n }\n\n return this.embedLocal(texts);\n }\n\n /**\n * Generate embeddings using a local transformers model\n */\n private async embedLocal(texts: string[]): Promise<number[][]> {\n const pipeline = await this.getLocalPipeline();\n const results = await pipeline(texts, { pooling: 'mean', normalize: true });\n return results.tolist();\n }\n\n /**\n * Get or initialize the local embedding pipeline\n */\n private async getLocalPipeline(): Promise<FeatureExtractionPipeline> {\n if (this.localPipeline) {\n return this.localPipeline;\n }\n\n // Prevent multiple concurrent initializations\n if (this.localPipelineLoading) {\n return this.localPipelineLoading;\n }\n\n this.localPipelineLoading = this.initLocalPipeline();\n\n try {\n this.localPipeline = await this.localPipelineLoading;\n return this.localPipeline;\n } finally {\n this.localPipelineLoading = null;\n }\n }\n\n /**\n * Initialize the local embedding pipeline\n */\n private async initLocalPipeline(): Promise<FeatureExtractionPipeline> {\n const { module: transformers } = await resolveLocalTransformersModule();\n const { pipeline } = transformers;\n\n const model = this.config.localModel || 'Xenova/bge-base-en-v1.5';\n\n // Initialize the feature extraction pipeline\n const pipe = await pipeline('feature-extraction', model);\n\n return pipe as unknown as FeatureExtractionPipeline;\n }\n\n /**\n * Generate embeddings using AI API\n */\n private async embedWithAI(texts: string[]): Promise<number[][]> {\n if (!this.ai) {\n throw new Error(\n 'AI client not available for embeddings. ' +\n 'Either configure an AI client or use provider: \"local\".',\n );\n }\n\n const model = this.config.aiModel || 'text-embedding-3-small';\n const response = await this.ai.embed(texts, {\n model,\n dimensions: this.config.dimensions,\n });\n\n return response.embeddings;\n }\n\n /**\n * Get the model name being used\n */\n getModelName(): string {\n if (\n this.config.provider === 'ai' ||\n (this.config.provider === 'auto' && this.ai)\n ) {\n return this.config.aiModel || 'text-embedding-3-small';\n }\n return this.config.localModel || 'Xenova/bge-base-en-v1.5';\n }\n\n /**\n * Get the configured dimensions\n */\n getDimensions(): number {\n return this.config.dimensions;\n }\n\n /**\n * Check if local embeddings are available\n */\n async isLocalAvailable(): Promise<boolean> {\n try {\n await resolveLocalTransformersModule();\n return true;\n } catch {\n return false;\n }\n }\n\n /**\n * Check if AI embeddings are available\n */\n isAIAvailable(): boolean {\n return this.ai !== null;\n }\n}\n\n/**\n * Default project embedding configuration\n */\nexport const DEFAULT_EMBEDDING_CONFIG: ProjectEmbeddingConfig = {\n dimensions: 768,\n provider: 'local',\n localModel: 'Xenova/bge-base-en-v1.5',\n aiModel: 'text-embedding-3-small',\n};\n"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ /**
2
+ * Vector Similarity Calculations
3
+ *
4
+ * Provides cosine similarity for semantic search.
5
+ */
6
+ /**
7
+ * Cosine similarity calculator for embedding vectors
8
+ */
9
+ export declare class CosineSimilarity {
10
+ /**
11
+ * Calculate cosine similarity between two vectors
12
+ *
13
+ * @param a - First embedding vector
14
+ * @param b - Second embedding vector
15
+ * @returns Similarity score between -1 and 1 (higher = more similar)
16
+ * @throws Error if vectors have different dimensions
17
+ */
18
+ static calculate(a: number[], b: number[]): number;
19
+ /**
20
+ * Calculate similarities between a query vector and multiple candidates
21
+ *
22
+ * @param query - Query embedding vector
23
+ * @param candidates - Array of candidate vectors with IDs
24
+ * @returns Array sorted by similarity (highest first)
25
+ */
26
+ static rankBySimilarity<T extends {
27
+ id: string;
28
+ embedding: number[];
29
+ }>(query: number[], candidates: T[]): Array<T & {
30
+ similarity: number;
31
+ }>;
32
+ /**
33
+ * Filter candidates by minimum similarity threshold
34
+ *
35
+ * @param query - Query embedding vector
36
+ * @param candidates - Array of candidate vectors
37
+ * @param minSimilarity - Minimum similarity threshold (0-1)
38
+ * @returns Filtered and sorted results
39
+ */
40
+ static filterBySimilarity<T extends {
41
+ id: string;
42
+ embedding: number[];
43
+ }>(query: number[], candidates: T[], minSimilarity: number): Array<T & {
44
+ similarity: number;
45
+ }>;
46
+ }
47
+ //# sourceMappingURL=similarity.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"similarity.d.ts","sourceRoot":"","sources":["../../src/embeddings/similarity.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B;;;;;;;OAOG;IACH,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM;IA+BlD;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,EACnE,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,CAAC,EAAE,GACd,KAAK,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IASpC;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CAAC,CAAC,SAAS;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,EAAE,CAAA;KAAE,EACrE,KAAK,EAAE,MAAM,EAAE,EACf,UAAU,EAAE,CAAC,EAAE,EACf,aAAa,EAAE,MAAM,GACpB,KAAK,CAAC,CAAC,GAAG;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAKrC"}
@@ -0,0 +1,64 @@
1
+ class CosineSimilarity {
2
+ /**
3
+ * Calculate cosine similarity between two vectors
4
+ *
5
+ * @param a - First embedding vector
6
+ * @param b - Second embedding vector
7
+ * @returns Similarity score between -1 and 1 (higher = more similar)
8
+ * @throws Error if vectors have different dimensions
9
+ */
10
+ static calculate(a, b) {
11
+ if (a.length !== b.length) {
12
+ throw new Error(
13
+ `Vector dimension mismatch: ${a.length} vs ${b.length}. Ensure all embeddings use the same model and dimensions.`
14
+ );
15
+ }
16
+ if (a.length === 0) {
17
+ return 0;
18
+ }
19
+ let dotProduct = 0;
20
+ let normA = 0;
21
+ let normB = 0;
22
+ for (let i = 0; i < a.length; i++) {
23
+ dotProduct += a[i] * b[i];
24
+ normA += a[i] * a[i];
25
+ normB += b[i] * b[i];
26
+ }
27
+ const denominator = Math.sqrt(normA) * Math.sqrt(normB);
28
+ if (denominator === 0) {
29
+ return 0;
30
+ }
31
+ return dotProduct / denominator;
32
+ }
33
+ /**
34
+ * Calculate similarities between a query vector and multiple candidates
35
+ *
36
+ * @param query - Query embedding vector
37
+ * @param candidates - Array of candidate vectors with IDs
38
+ * @returns Array sorted by similarity (highest first)
39
+ */
40
+ static rankBySimilarity(query, candidates) {
41
+ const results = candidates.map((candidate) => ({
42
+ ...candidate,
43
+ similarity: CosineSimilarity.calculate(query, candidate.embedding)
44
+ }));
45
+ return results.sort((a, b) => b.similarity - a.similarity);
46
+ }
47
+ /**
48
+ * Filter candidates by minimum similarity threshold
49
+ *
50
+ * @param query - Query embedding vector
51
+ * @param candidates - Array of candidate vectors
52
+ * @param minSimilarity - Minimum similarity threshold (0-1)
53
+ * @returns Filtered and sorted results
54
+ */
55
+ static filterBySimilarity(query, candidates, minSimilarity) {
56
+ return CosineSimilarity.rankBySimilarity(query, candidates).filter(
57
+ (result) => result.similarity >= minSimilarity
58
+ );
59
+ }
60
+ }
61
+ export {
62
+ CosineSimilarity
63
+ };
64
+ //# sourceMappingURL=similarity.js.map