@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.
- package/AGENTS.md +124 -0
- package/CLAUDE.md +1 -0
- package/LICENSE +7 -0
- package/README.md +265 -0
- package/bin/smrt-prebuild.js +26 -0
- package/dist/__tests__/fixtures/advisor-test-classes.d.ts +28 -0
- package/dist/__tests__/fixtures/advisor-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts +12 -0
- package/dist/__tests__/fixtures/collection-coverage-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts +28 -0
- package/dist/__tests__/fixtures/inheritance-resolver-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/inheritance-test-classes.d.ts +43 -0
- package/dist/__tests__/fixtures/inheritance-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts +18 -0
- package/dist/__tests__/fixtures/mcp-integration-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts +15 -0
- package/dist/__tests__/fixtures/object-ai-memory-fixtures.d.ts.map +1 -0
- package/dist/__tests__/fixtures/object-spec-test-classes.d.ts +13 -0
- package/dist/__tests__/fixtures/object-spec-test-classes.d.ts.map +1 -0
- package/dist/__tests__/fixtures/registry-test-classes.d.ts +23 -0
- package/dist/__tests__/fixtures/registry-test-classes.d.ts.map +1 -0
- package/dist/adapters/ai-usage.d.ts +23 -0
- package/dist/adapters/ai-usage.d.ts.map +1 -0
- package/dist/adapters/ai-usage.js +105 -0
- package/dist/adapters/ai-usage.js.map +1 -0
- package/dist/adapters/cost-rates.d.ts +20 -0
- package/dist/adapters/cost-rates.d.ts.map +1 -0
- package/dist/adapters/cost-rates.js +40 -0
- package/dist/adapters/cost-rates.js.map +1 -0
- package/dist/adapters/index.d.ts +19 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/adapters/metrics.d.ts +111 -0
- package/dist/adapters/metrics.d.ts.map +1 -0
- package/dist/adapters/metrics.js +169 -0
- package/dist/adapters/metrics.js.map +1 -0
- package/dist/adapters/pubsub.d.ts +124 -0
- package/dist/adapters/pubsub.d.ts.map +1 -0
- package/dist/adapters/pubsub.js +121 -0
- package/dist/adapters/pubsub.js.map +1 -0
- package/dist/browser.d.ts +32 -0
- package/dist/browser.d.ts.map +1 -0
- package/dist/browser.js +68 -0
- package/dist/browser.js.map +1 -0
- package/dist/child-accessors.d.ts +27 -0
- package/dist/child-accessors.d.ts.map +1 -0
- package/dist/child-accessors.js +35 -0
- package/dist/child-accessors.js.map +1 -0
- package/dist/class.d.ts +313 -0
- package/dist/class.d.ts.map +1 -0
- package/dist/class.js +896 -0
- package/dist/class.js.map +1 -0
- package/dist/collection-cache.d.ts +110 -0
- package/dist/collection-cache.d.ts.map +1 -0
- package/dist/collection-cache.js +187 -0
- package/dist/collection-cache.js.map +1 -0
- package/dist/collection.d.ts +894 -0
- package/dist/collection.d.ts.map +1 -0
- package/dist/collection.js +1987 -0
- package/dist/collection.js.map +1 -0
- package/dist/config/global-config.d.ts +3 -0
- package/dist/config/global-config.d.ts.map +1 -0
- package/dist/config/global-config.js +19 -0
- package/dist/config/global-config.js.map +1 -0
- package/dist/config.d.ts +145 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +57 -0
- package/dist/config.js.map +1 -0
- package/dist/consumer-plugin/index.d.ts +22 -0
- package/dist/consumer-plugin/index.d.ts.map +1 -0
- package/dist/consumer-plugin/index.js +452 -0
- package/dist/consumer-plugin/index.js.map +1 -0
- package/dist/consumer-plugin.d.ts +8 -0
- package/dist/consumer-plugin.d.ts.map +1 -0
- package/dist/consumer-plugin.js +5 -0
- package/dist/consumer-plugin.js.map +1 -0
- package/dist/database.d.ts +95 -0
- package/dist/database.d.ts.map +1 -0
- package/dist/database.js +32 -0
- package/dist/database.js.map +1 -0
- package/dist/decorators/compatibility.d.ts +14 -0
- package/dist/decorators/compatibility.d.ts.map +1 -0
- package/dist/decorators/compatibility.js +111 -0
- package/dist/decorators/compatibility.js.map +1 -0
- package/dist/decorators/index.d.ts +381 -0
- package/dist/decorators/index.d.ts.map +1 -0
- package/dist/decorators/index.js +104 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/dispatch/bus.d.ts +306 -0
- package/dist/dispatch/bus.d.ts.map +1 -0
- package/dist/dispatch/bus.js +583 -0
- package/dist/dispatch/bus.js.map +1 -0
- package/dist/dispatch/collections/DispatchSubscriptions.d.ts +79 -0
- package/dist/dispatch/collections/DispatchSubscriptions.d.ts.map +1 -0
- package/dist/dispatch/collections/DispatchSubscriptions.js +243 -0
- package/dist/dispatch/collections/DispatchSubscriptions.js.map +1 -0
- package/dist/dispatch/collections/Dispatches.d.ts +98 -0
- package/dist/dispatch/collections/Dispatches.d.ts.map +1 -0
- package/dist/dispatch/collections/Dispatches.js +358 -0
- package/dist/dispatch/collections/Dispatches.js.map +1 -0
- package/dist/dispatch/index.d.ts +47 -0
- package/dist/dispatch/index.d.ts.map +1 -0
- package/dist/dispatch/models/Dispatch.d.ts +101 -0
- package/dist/dispatch/models/Dispatch.d.ts.map +1 -0
- package/dist/dispatch/models/Dispatch.js +162 -0
- package/dist/dispatch/models/Dispatch.js.map +1 -0
- package/dist/dispatch/models/DispatchSubscription.d.ts +83 -0
- package/dist/dispatch/models/DispatchSubscription.d.ts.map +1 -0
- package/dist/dispatch/models/DispatchSubscription.js +112 -0
- package/dist/dispatch/models/DispatchSubscription.js.map +1 -0
- package/dist/dispatch/tenant-resolver.d.ts +98 -0
- package/dist/dispatch/tenant-resolver.d.ts.map +1 -0
- package/dist/dispatch/tenant-resolver.js +32 -0
- package/dist/dispatch/tenant-resolver.js.map +1 -0
- package/dist/dispatch/types.d.ts +149 -0
- package/dist/dispatch/types.d.ts.map +1 -0
- package/dist/embeddings/hash.d.ts +33 -0
- package/dist/embeddings/hash.d.ts.map +1 -0
- package/dist/embeddings/hash.js +37 -0
- package/dist/embeddings/hash.js.map +1 -0
- package/dist/embeddings/index.d.ts +36 -0
- package/dist/embeddings/index.d.ts.map +1 -0
- package/dist/embeddings/provider.d.ts +75 -0
- package/dist/embeddings/provider.d.ts.map +1 -0
- package/dist/embeddings/provider.js +170 -0
- package/dist/embeddings/provider.js.map +1 -0
- package/dist/embeddings/similarity.d.ts +47 -0
- package/dist/embeddings/similarity.d.ts.map +1 -0
- package/dist/embeddings/similarity.js +64 -0
- package/dist/embeddings/similarity.js.map +1 -0
- package/dist/embeddings/storage.d.ts +125 -0
- package/dist/embeddings/storage.d.ts.map +1 -0
- package/dist/embeddings/storage.js +283 -0
- package/dist/embeddings/storage.js.map +1 -0
- package/dist/embeddings/types.d.ts +250 -0
- package/dist/embeddings/types.d.ts.map +1 -0
- package/dist/errors.d.ts +363 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +669 -0
- package/dist/errors.js.map +1 -0
- package/dist/generators/cli.d.ts +162 -0
- package/dist/generators/cli.d.ts.map +1 -0
- package/dist/generators/cli.js +462 -0
- package/dist/generators/cli.js.map +1 -0
- package/dist/generators/index.d.ts +13 -0
- package/dist/generators/index.d.ts.map +1 -0
- package/dist/generators/mcp-runtime-template.d.ts +60 -0
- package/dist/generators/mcp-runtime-template.d.ts.map +1 -0
- package/dist/generators/mcp-runtime-template.js +509 -0
- package/dist/generators/mcp-runtime-template.js.map +1 -0
- package/dist/generators/mcp.d.ts +231 -0
- package/dist/generators/mcp.d.ts.map +1 -0
- package/dist/generators/mcp.js +1220 -0
- package/dist/generators/mcp.js.map +1 -0
- package/dist/generators/rest.d.ts +171 -0
- package/dist/generators/rest.d.ts.map +1 -0
- package/dist/generators/rest.js +591 -0
- package/dist/generators/rest.js.map +1 -0
- package/dist/generators/swagger.d.ts +21 -0
- package/dist/generators/swagger.d.ts.map +1 -0
- package/dist/generators/swagger.js +307 -0
- package/dist/generators/swagger.js.map +1 -0
- package/dist/generators/tenant-gate.d.ts +74 -0
- package/dist/generators/tenant-gate.d.ts.map +1 -0
- package/dist/generators/tenant-gate.js +15 -0
- package/dist/generators/tenant-gate.js.map +1 -0
- package/dist/generators.d.ts +8 -0
- package/dist/generators.d.ts.map +1 -0
- package/dist/generators.js +19 -0
- package/dist/generators.js.map +1 -0
- package/dist/hierarchical.d.ts +103 -0
- package/dist/hierarchical.d.ts.map +1 -0
- package/dist/hierarchical.js +184 -0
- package/dist/hierarchical.js.map +1 -0
- package/dist/index.d.ts +57 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +202 -0
- package/dist/index.js.map +1 -0
- package/dist/interceptors.d.ts +251 -0
- package/dist/interceptors.d.ts.map +1 -0
- package/dist/interceptors.js +259 -0
- package/dist/interceptors.js.map +1 -0
- package/dist/junction.d.ts +99 -0
- package/dist/junction.d.ts.map +1 -0
- package/dist/junction.js +136 -0
- package/dist/junction.js.map +1 -0
- package/dist/knowledge.d.ts +11 -0
- package/dist/knowledge.d.ts.map +1 -0
- package/dist/knowledge.js +310 -0
- package/dist/knowledge.js.map +1 -0
- package/dist/lazy-config.d.ts +160 -0
- package/dist/lazy-config.d.ts.map +1 -0
- package/dist/lazy-config.js +146 -0
- package/dist/lazy-config.js.map +1 -0
- package/dist/manifest/discover-base-classes.d.ts +78 -0
- package/dist/manifest/discover-base-classes.d.ts.map +1 -0
- package/dist/manifest/discover-base-classes.js +85 -0
- package/dist/manifest/discover-base-classes.js.map +1 -0
- package/dist/manifest/discover-smrt-packages.d.ts +48 -0
- package/dist/manifest/discover-smrt-packages.d.ts.map +1 -0
- package/dist/manifest/discover-smrt-packages.js +361 -0
- package/dist/manifest/discover-smrt-packages.js.map +1 -0
- package/dist/manifest/generator.d.ts +93 -0
- package/dist/manifest/generator.d.ts.map +1 -0
- package/dist/manifest/generator.js +380 -0
- package/dist/manifest/generator.js.map +1 -0
- package/dist/manifest/index.d.ts +16 -0
- package/dist/manifest/index.d.ts.map +1 -0
- package/dist/manifest/index.js +51 -0
- package/dist/manifest/index.js.map +1 -0
- package/dist/manifest/manager.d.ts +51 -0
- package/dist/manifest/manager.d.ts.map +1 -0
- package/dist/manifest/manager.js +89 -0
- package/dist/manifest/manager.js.map +1 -0
- package/dist/manifest/manifest-loader.d.ts +187 -0
- package/dist/manifest/manifest-loader.d.ts.map +1 -0
- package/dist/manifest/manifest-loader.js +847 -0
- package/dist/manifest/manifest-loader.js.map +1 -0
- package/dist/manifest/sources/composite.d.ts +22 -0
- package/dist/manifest/sources/composite.d.ts.map +1 -0
- package/dist/manifest/sources/composite.js +60 -0
- package/dist/manifest/sources/composite.js.map +1 -0
- package/dist/manifest/sources/embedded.d.ts +7 -0
- package/dist/manifest/sources/embedded.d.ts.map +1 -0
- package/dist/manifest/sources/embedded.js +30 -0
- package/dist/manifest/sources/embedded.js.map +1 -0
- package/dist/manifest/sources/explicit-paths.d.ts +17 -0
- package/dist/manifest/sources/explicit-paths.d.ts.map +1 -0
- package/dist/manifest/sources/explicit-paths.js +35 -0
- package/dist/manifest/sources/explicit-paths.js.map +1 -0
- package/dist/manifest/sources/fallback.d.ts +25 -0
- package/dist/manifest/sources/fallback.d.ts.map +1 -0
- package/dist/manifest/sources/fallback.js +63 -0
- package/dist/manifest/sources/fallback.js.map +1 -0
- package/dist/manifest/sources/index.d.ts +17 -0
- package/dist/manifest/sources/index.d.ts.map +1 -0
- package/dist/manifest/sources/local-test.d.ts +7 -0
- package/dist/manifest/sources/local-test.d.ts.map +1 -0
- package/dist/manifest/sources/local-test.js +21 -0
- package/dist/manifest/sources/local-test.js.map +1 -0
- package/dist/manifest/sources/static.d.ts +7 -0
- package/dist/manifest/sources/static.d.ts.map +1 -0
- package/dist/manifest/sources/static.js +19 -0
- package/dist/manifest/sources/static.js.map +1 -0
- package/dist/manifest/sources/test.d.ts +7 -0
- package/dist/manifest/sources/test.d.ts.map +1 -0
- package/dist/manifest/sources/test.js +21 -0
- package/dist/manifest/sources/test.js.map +1 -0
- package/dist/manifest/sources/types.d.ts +79 -0
- package/dist/manifest/sources/types.d.ts.map +1 -0
- package/dist/manifest/sources/types.js +61 -0
- package/dist/manifest/sources/types.js.map +1 -0
- package/dist/manifest/static-manifest.d.ts +4 -0
- package/dist/manifest/static-manifest.d.ts.map +1 -0
- package/dist/manifest/static-manifest.js +1535 -0
- package/dist/manifest/static-manifest.js.map +1 -0
- package/dist/manifest/store.d.ts +111 -0
- package/dist/manifest/store.d.ts.map +1 -0
- package/dist/manifest/store.js +431 -0
- package/dist/manifest/store.js.map +1 -0
- package/dist/manifest/test-manifest-loader.d.ts +3 -0
- package/dist/manifest/test-manifest-loader.d.ts.map +1 -0
- package/dist/manifest/test-manifest-stub.d.ts +4 -0
- package/dist/manifest/test-manifest-stub.d.ts.map +1 -0
- package/dist/manifest/test-manifest-stub.js +80013 -0
- package/dist/manifest/test-manifest-stub.js.map +1 -0
- package/dist/manifest.d.ts +8 -0
- package/dist/manifest.d.ts.map +1 -0
- package/dist/manifest.js +20 -0
- package/dist/manifest.js.map +1 -0
- package/dist/manifest.json +1489 -0
- package/dist/mcp-advisor/index.d.ts +499 -0
- package/dist/mcp-advisor/index.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/add-ai-methods.d.ts +6 -0
- package/dist/mcp-advisor/tools/add-ai-methods.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/configure-decorators.d.ts +6 -0
- package/dist/mcp-advisor/tools/configure-decorators.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-collection.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-collection.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-field-definitions.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-field-definitions.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/generate-smrt-class.d.ts +6 -0
- package/dist/mcp-advisor/tools/generate-smrt-class.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/get-object-config.d.ts +6 -0
- package/dist/mcp-advisor/tools/get-object-config.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/get-object-schema.d.ts +10 -0
- package/dist/mcp-advisor/tools/get-object-schema.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/list-registered-objects.d.ts +9 -0
- package/dist/mcp-advisor/tools/list-registered-objects.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts +9 -0
- package/dist/mcp-advisor/tools/preview-api-endpoints.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts +9 -0
- package/dist/mcp-advisor/tools/preview-mcp-tools.d.ts.map +1 -0
- package/dist/mcp-advisor/tools/validate-smrt-object.d.ts +6 -0
- package/dist/mcp-advisor/tools/validate-smrt-object.d.ts.map +1 -0
- package/dist/mcp-advisor/types.d.ts +209 -0
- package/dist/mcp-advisor/types.d.ts.map +1 -0
- package/dist/migrations/backfill-tracker.d.ts +84 -0
- package/dist/migrations/backfill-tracker.d.ts.map +1 -0
- package/dist/migrations/backfill-tracker.js +118 -0
- package/dist/migrations/backfill-tracker.js.map +1 -0
- package/dist/migrations/checksum.d.ts +43 -0
- package/dist/migrations/checksum.d.ts.map +1 -0
- package/dist/migrations/checksum.js +32 -0
- package/dist/migrations/checksum.js.map +1 -0
- package/dist/migrations/differ.d.ts +186 -0
- package/dist/migrations/differ.d.ts.map +1 -0
- package/dist/migrations/differ.js +601 -0
- package/dist/migrations/differ.js.map +1 -0
- package/dist/migrations/generator.d.ts +133 -0
- package/dist/migrations/generator.d.ts.map +1 -0
- package/dist/migrations/generator.js +328 -0
- package/dist/migrations/generator.js.map +1 -0
- package/dist/migrations/index.d.ts +20 -0
- package/dist/migrations/index.d.ts.map +1 -0
- package/dist/migrations/orchestrate.d.ts +148 -0
- package/dist/migrations/orchestrate.d.ts.map +1 -0
- package/dist/migrations/orchestrate.js +118 -0
- package/dist/migrations/orchestrate.js.map +1 -0
- package/dist/migrations/tracker.d.ts +134 -0
- package/dist/migrations/tracker.d.ts.map +1 -0
- package/dist/migrations/tracker.js +624 -0
- package/dist/migrations/tracker.js.map +1 -0
- package/dist/migrations/types.d.ts +221 -0
- package/dist/migrations/types.d.ts.map +1 -0
- package/dist/migrations.d.ts +7 -0
- package/dist/migrations.d.ts.map +1 -0
- package/dist/migrations.js +26 -0
- package/dist/migrations.js.map +1 -0
- package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js +56 -0
- package/dist/node_modules/.pnpm/balanced-match@4.0.4/node_modules/balanced-match/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js +163 -0
- package/dist/node_modules/.pnpm/brace-expansion@5.0.5/node_modules/brace-expansion/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js +13 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/assert-valid-pattern.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js +654 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/ast.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js +111 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/brace-expressions.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js +10 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/escape.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js +824 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/index.js.map +1 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js +10 -0
- package/dist/node_modules/.pnpm/minimatch@10.2.3/node_modules/minimatch/dist/esm/unescape.js.map +1 -0
- package/dist/object.d.ts +1202 -0
- package/dist/object.d.ts.map +1 -0
- package/dist/object.js +2731 -0
- package/dist/object.js.map +1 -0
- package/dist/polymorphic-association.d.ts +69 -0
- package/dist/polymorphic-association.d.ts.map +1 -0
- package/dist/polymorphic-association.js +96 -0
- package/dist/polymorphic-association.js.map +1 -0
- package/dist/prebuild/cli.d.ts +7 -0
- package/dist/prebuild/cli.d.ts.map +1 -0
- package/dist/prebuild/cli.js +29 -0
- package/dist/prebuild/cli.js.map +1 -0
- package/dist/prebuild/index.d.ts +22 -0
- package/dist/prebuild/index.d.ts.map +1 -0
- package/dist/prebuild/index.js +239 -0
- package/dist/prebuild/index.js.map +1 -0
- package/dist/prebuild.d.ts +8 -0
- package/dist/prebuild.d.ts.map +1 -0
- package/dist/prebuild.js +6 -0
- package/dist/prebuild.js.map +1 -0
- package/dist/registry/cache-config.d.ts +13 -0
- package/dist/registry/cache-config.d.ts.map +1 -0
- package/dist/registry/cache-config.js +17 -0
- package/dist/registry/cache-config.js.map +1 -0
- package/dist/registry/class-registration.d.ts +31 -0
- package/dist/registry/class-registration.d.ts.map +1 -0
- package/dist/registry/class-registration.js +1074 -0
- package/dist/registry/class-registration.js.map +1 -0
- package/dist/registry/collection-resolution.d.ts +45 -0
- package/dist/registry/collection-resolution.d.ts.map +1 -0
- package/dist/registry/collection-resolution.js +121 -0
- package/dist/registry/collection-resolution.js.map +1 -0
- package/dist/registry/collision-policy.d.ts +179 -0
- package/dist/registry/collision-policy.d.ts.map +1 -0
- package/dist/registry/collision-policy.js +153 -0
- package/dist/registry/collision-policy.js.map +1 -0
- package/dist/registry/diagnostics.d.ts +58 -0
- package/dist/registry/diagnostics.d.ts.map +1 -0
- package/dist/registry/diagnostics.js +54 -0
- package/dist/registry/diagnostics.js.map +1 -0
- package/dist/registry/embedding-manager.d.ts +23 -0
- package/dist/registry/embedding-manager.d.ts.map +1 -0
- package/dist/registry/embedding-manager.js +62 -0
- package/dist/registry/embedding-manager.js.map +1 -0
- package/dist/registry/index.d.ts +13 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/inheritance-resolver.d.ts +13 -0
- package/dist/registry/inheritance-resolver.d.ts.map +1 -0
- package/dist/registry/inheritance-resolver.js +244 -0
- package/dist/registry/inheritance-resolver.js.map +1 -0
- package/dist/registry/manifest-field-merge.d.ts +4 -0
- package/dist/registry/manifest-field-merge.d.ts.map +1 -0
- package/dist/registry/manifest-field-merge.js +82 -0
- package/dist/registry/manifest-field-merge.js.map +1 -0
- package/dist/registry/name-resolver.d.ts +102 -0
- package/dist/registry/name-resolver.d.ts.map +1 -0
- package/dist/registry/name-resolver.js +241 -0
- package/dist/registry/name-resolver.js.map +1 -0
- package/dist/registry/relationship-graph.d.ts +16 -0
- package/dist/registry/relationship-graph.d.ts.map +1 -0
- package/dist/registry/relationship-graph.js +79 -0
- package/dist/registry/relationship-graph.js.map +1 -0
- package/dist/registry/schema-builder.d.ts +113 -0
- package/dist/registry/schema-builder.d.ts.map +1 -0
- package/dist/registry/schema-builder.js +474 -0
- package/dist/registry/schema-builder.js.map +1 -0
- package/dist/registry/shared-state.d.ts +62 -0
- package/dist/registry/shared-state.d.ts.map +1 -0
- package/dist/registry/shared-state.js +135 -0
- package/dist/registry/shared-state.js.map +1 -0
- package/dist/registry/types.d.ts +667 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/validator.d.ts +13 -0
- package/dist/registry/validator.d.ts.map +1 -0
- package/dist/registry/validator.js +138 -0
- package/dist/registry/validator.js.map +1 -0
- package/dist/registry.d.ts +1358 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/registry.js +2301 -0
- package/dist/registry.js.map +1 -0
- package/dist/runtime/client.d.ts +34 -0
- package/dist/runtime/client.d.ts.map +1 -0
- package/dist/runtime/client.js +104 -0
- package/dist/runtime/client.js.map +1 -0
- package/dist/runtime/index.d.ts +10 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/mcp.d.ts +47 -0
- package/dist/runtime/mcp.d.ts.map +1 -0
- package/dist/runtime/mcp.js +72 -0
- package/dist/runtime/mcp.js.map +1 -0
- package/dist/runtime/server.d.ts +92 -0
- package/dist/runtime/server.d.ts.map +1 -0
- package/dist/runtime/server.js +390 -0
- package/dist/runtime/server.js.map +1 -0
- package/dist/runtime/types.d.ts +58 -0
- package/dist/runtime/types.d.ts.map +1 -0
- package/dist/runtime.d.ts +8 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +10 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scanner/import-scanner.d.ts +7 -0
- package/dist/scanner/import-scanner.d.ts.map +1 -0
- package/dist/scanner/index.d.ts +12 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/manifest-generator.d.ts +304 -0
- package/dist/scanner/manifest-generator.d.ts.map +1 -0
- package/dist/scanner/manifest-generator.js +1707 -0
- package/dist/scanner/manifest-generator.js.map +1 -0
- package/dist/scanner/test-file-patterns.d.ts +18 -0
- package/dist/scanner/test-file-patterns.d.ts.map +1 -0
- package/dist/scanner/test-file-patterns.js +16 -0
- package/dist/scanner/test-file-patterns.js.map +1 -0
- package/dist/scanner/types.d.ts +313 -0
- package/dist/scanner/types.d.ts.map +1 -0
- package/dist/scanner/types.js +2 -0
- package/dist/scanner/types.js.map +1 -0
- package/dist/scanner.d.ts +6 -0
- package/dist/scanner.d.ts.map +1 -0
- package/dist/scanner.js +6 -0
- package/dist/scanner.js.map +1 -0
- package/dist/schema/code-generator.d.ts +53 -0
- package/dist/schema/code-generator.d.ts.map +1 -0
- package/dist/schema/ddl/base-strategy.d.ts +80 -0
- package/dist/schema/ddl/base-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/base-strategy.js +240 -0
- package/dist/schema/ddl/base-strategy.js.map +1 -0
- package/dist/schema/ddl/duckdb-strategy.d.ts +33 -0
- package/dist/schema/ddl/duckdb-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/duckdb-strategy.js +74 -0
- package/dist/schema/ddl/duckdb-strategy.js.map +1 -0
- package/dist/schema/ddl/index.d.ts +53 -0
- package/dist/schema/ddl/index.d.ts.map +1 -0
- package/dist/schema/ddl/index.js +80 -0
- package/dist/schema/ddl/index.js.map +1 -0
- package/dist/schema/ddl/json-duckdb-strategy.d.ts +8 -0
- package/dist/schema/ddl/json-duckdb-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/json-duckdb-strategy.js +14 -0
- package/dist/schema/ddl/json-duckdb-strategy.js.map +1 -0
- package/dist/schema/ddl/postgres-strategy.d.ts +29 -0
- package/dist/schema/ddl/postgres-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/postgres-strategy.js +102 -0
- package/dist/schema/ddl/postgres-strategy.js.map +1 -0
- package/dist/schema/ddl/sqlite-strategy.d.ts +38 -0
- package/dist/schema/ddl/sqlite-strategy.d.ts.map +1 -0
- package/dist/schema/ddl/sqlite-strategy.js +74 -0
- package/dist/schema/ddl/sqlite-strategy.js.map +1 -0
- package/dist/schema/ddl/types.d.ts +114 -0
- package/dist/schema/ddl/types.d.ts.map +1 -0
- package/dist/schema/generator.d.ts +176 -0
- package/dist/schema/generator.d.ts.map +1 -0
- package/dist/schema/generator.js +1076 -0
- package/dist/schema/generator.js.map +1 -0
- package/dist/schema/index-utils.d.ts +19 -0
- package/dist/schema/index-utils.d.ts.map +1 -0
- package/dist/schema/index-utils.js +32 -0
- package/dist/schema/index-utils.js.map +1 -0
- package/dist/schema/index.d.ts +13 -0
- package/dist/schema/index.d.ts.map +1 -0
- package/dist/schema/override-system.d.ts +43 -0
- package/dist/schema/override-system.d.ts.map +1 -0
- package/dist/schema/schema-aggregator.d.ts +112 -0
- package/dist/schema/schema-aggregator.d.ts.map +1 -0
- package/dist/schema/schema-manager.d.ts +95 -0
- package/dist/schema/schema-manager.d.ts.map +1 -0
- package/dist/schema/schema-manager.js +283 -0
- package/dist/schema/schema-manager.js.map +1 -0
- package/dist/schema/sql-identifiers.d.ts +107 -0
- package/dist/schema/sql-identifiers.d.ts.map +1 -0
- package/dist/schema/sql-identifiers.js +190 -0
- package/dist/schema/sql-identifiers.js.map +1 -0
- package/dist/schema/table-verifier.d.ts +10 -0
- package/dist/schema/table-verifier.d.ts.map +1 -0
- package/dist/schema/table-verifier.js +37 -0
- package/dist/schema/table-verifier.js.map +1 -0
- package/dist/schema/types.d.ts +241 -0
- package/dist/schema/types.d.ts.map +1 -0
- package/dist/schema/utils.d.ts +32 -0
- package/dist/schema/utils.d.ts.map +1 -0
- package/dist/schema/utils.js +134 -0
- package/dist/schema/utils.js.map +1 -0
- package/dist/scripts/create-wrappers.js +89 -0
- package/dist/scripts/generate-manifest.js +155 -0
- package/dist/scripts/generate-test-manifest.js +77 -0
- package/dist/scripts/migrate-datetime-to-timestamp.ts +310 -0
- package/dist/scripts/prepack.js +49 -0
- package/dist/signals/bus.d.ts +64 -0
- package/dist/signals/bus.d.ts.map +1 -0
- package/dist/signals/bus.js +102 -0
- package/dist/signals/bus.js.map +1 -0
- package/dist/signals/index.d.ts +11 -0
- package/dist/signals/index.d.ts.map +1 -0
- package/dist/signals/sanitizer.d.ts +54 -0
- package/dist/signals/sanitizer.d.ts.map +1 -0
- package/dist/signals/sanitizer.js +111 -0
- package/dist/signals/sanitizer.js.map +1 -0
- package/dist/smrt-knowledge.json +335 -0
- package/dist/system/compatibility.d.ts +8 -0
- package/dist/system/compatibility.d.ts.map +1 -0
- package/dist/system/compatibility.js +409 -0
- package/dist/system/compatibility.js.map +1 -0
- package/dist/system/index.d.ts +9 -0
- package/dist/system/index.d.ts.map +1 -0
- package/dist/system/schema.d.ts +69 -0
- package/dist/system/schema.d.ts.map +1 -0
- package/dist/system/schema.js +271 -0
- package/dist/system/schema.js.map +1 -0
- package/dist/system/types.d.ts +135 -0
- package/dist/system/types.d.ts.map +1 -0
- package/dist/system-fields.d.ts +44 -0
- package/dist/system-fields.d.ts.map +1 -0
- package/dist/system-fields.js +55 -0
- package/dist/system-fields.js.map +1 -0
- package/dist/table-cache.d.ts +28 -0
- package/dist/table-cache.d.ts.map +1 -0
- package/dist/table-cache.js +21 -0
- package/dist/table-cache.js.map +1 -0
- package/dist/test-utils.d.ts +140 -0
- package/dist/test-utils.d.ts.map +1 -0
- package/dist/testing/database.d.ts +73 -0
- package/dist/testing/database.d.ts.map +1 -0
- package/dist/testing/database.js +204 -0
- package/dist/testing/database.js.map +1 -0
- package/dist/testing/index.d.ts +21 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing.d.ts +6 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +5 -0
- package/dist/testing.js.map +1 -0
- package/dist/tools/index.d.ts +8 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/tool-executor.d.ts +101 -0
- package/dist/tools/tool-executor.d.ts.map +1 -0
- package/dist/tools/tool-executor.js +142 -0
- package/dist/tools/tool-executor.js.map +1 -0
- package/dist/tools/tool-generator.d.ts +54 -0
- package/dist/tools/tool-generator.d.ts.map +1 -0
- package/dist/tools/tool-generator.js +121 -0
- package/dist/tools/tool-generator.js.map +1 -0
- package/dist/utils/chunk.d.ts +32 -0
- package/dist/utils/chunk.d.ts.map +1 -0
- package/dist/utils/chunk.js +14 -0
- package/dist/utils/chunk.js.map +1 -0
- package/dist/utils/import-workspace-module.d.ts +8 -0
- package/dist/utils/import-workspace-module.d.ts.map +1 -0
- package/dist/utils/import-workspace-module.js +81 -0
- package/dist/utils/import-workspace-module.js.map +1 -0
- package/dist/utils/json.d.ts +102 -0
- package/dist/utils/json.d.ts.map +1 -0
- package/dist/utils/json.js +43 -0
- package/dist/utils/json.js.map +1 -0
- package/dist/utils/lru-cache.d.ts +69 -0
- package/dist/utils/lru-cache.d.ts.map +1 -0
- package/dist/utils/lru-cache.js +100 -0
- package/dist/utils/lru-cache.js.map +1 -0
- package/dist/utils/naming.d.ts +16 -0
- package/dist/utils/naming.d.ts.map +1 -0
- package/dist/utils/naming.js +23 -0
- package/dist/utils/naming.js.map +1 -0
- package/dist/utils/qualified-names.d.ts +122 -0
- package/dist/utils/qualified-names.d.ts.map +1 -0
- package/dist/utils/qualified-names.js +82 -0
- package/dist/utils/qualified-names.js.map +1 -0
- package/dist/utils/scanner-module.d.ts +37 -0
- package/dist/utils/scanner-module.d.ts.map +1 -0
- package/dist/utils.d.ts +177 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +185 -0
- package/dist/utils.js.map +1 -0
- package/dist/vite-plugin/import-build-aware.d.ts +68 -0
- package/dist/vite-plugin/import-build-aware.d.ts.map +1 -0
- package/dist/vite-plugin/import-build-aware.js +72 -0
- package/dist/vite-plugin/import-build-aware.js.map +1 -0
- package/dist/vite-plugin/index.d.ts +59 -0
- package/dist/vite-plugin/index.d.ts.map +1 -0
- package/dist/vite-plugin/index.js +1400 -0
- package/dist/vite-plugin/index.js.map +1 -0
- package/dist/vite-plugin/sveltekit-generator.d.ts +66 -0
- package/dist/vite-plugin/sveltekit-generator.d.ts.map +1 -0
- package/dist/vite-plugin/sveltekit-generator.js +1375 -0
- package/dist/vite-plugin/sveltekit-generator.js.map +1 -0
- package/dist/vite-plugin/templates/default-ui.ts +432 -0
- package/dist/vite-plugin/templates/default.html +206 -0
- package/dist/vite-plugin.d.ts +8 -0
- package/dist/vite-plugin.d.ts.map +1 -0
- package/dist/vite-plugin.js +11 -0
- package/dist/vite-plugin.js.map +1 -0
- 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":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAEhE;;GAEG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,YAAY,GAAG,WAAW,GAAG,QAAQ,CAAC;AAE/E;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,wBAAwB;IACxB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,0BAA0B;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,kBAAkB;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,+CAA+C;IAC/C,IAAI,EAAE,MAAM,CAAC;IACb,wBAAwB;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,iEAAiE;IACjE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,kCAAkC;IAClC,SAAS,EAAE,IAAI,CAAC;IAChB,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACnC;AAED;;GAEG;AACH,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,OAAO,EAChB,QAAQ,EAAE,gBAAgB,KACvB,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACvC,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,sDAAsD;IACtD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,sCAAsC;IACtC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,qGAAqG;IACrG,QAAQ,CAAC,EAAE,SAAS,GAAG,QAAQ,CAAC;CACjC;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,wDAAwD;IACxD,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,uBAAuB;IACvB,MAAM,CAAC,EAAE,cAAc,CAAC;IACxB,6BAA6B;IAC7B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,kCAAkC;IAClC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,+BAA+B;IAC/B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;;;;;;;;;;;OAaG;IACH,WAAW,CAAC,EAAE,mBAAmB,CAAC;IAClC,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,4BAA4B;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,qBAAqB;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,oBAAoB;IACnC,8CAA8C;IAC9C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,iDAAiD;IACjD,SAAS,CAAC,EAAE,IAAI,CAAC;IACjB,uCAAuC;IACvC,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,4DAA4D;IAC5D,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,yDAAyD;IACzD,mBAAmB,CAAC,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IACpC,6CAA6C;IAC7C,gBAAgB,EAAE,MAAM,CAAC;IACzB,0CAA0C;IAC1C,aAAa,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,mDAAmD;IACnD,EAAE,CAAC,EACC,iBAAiB,GACjB;QACE,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;QAChD,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;IACN,qDAAqD;IACrD,WAAW,CAAC,EAAE;QACZ,IAAI,EAAE,KAAK,GAAG,MAAM,GAAG,QAAQ,CAAC;QAChC,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH"}
|
|
@@ -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
|