@lssm/lib.contracts 0.0.0-canary-20251120192244 → 0.0.0-canary-20251206181705
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/README.md +3 -1
- package/dist/app-config/branding.d.ts +1 -2
- package/dist/app-config/contracts.d.ts +51 -52
- package/dist/app-config/contracts.js +1 -2
- package/dist/app-config/events.d.ts +28 -29
- package/dist/app-config/events.js +1 -2
- package/dist/app-config/lifecycle-contracts.d.ts +81 -82
- package/dist/app-config/lifecycle-contracts.js +1 -2
- package/dist/app-config/lifecycle.d.ts +1 -2
- package/dist/app-config/runtime.d.ts +1 -2
- package/dist/app-config/runtime.js +1 -2
- package/dist/app-config/spec.d.ts +3 -4
- package/dist/app-config/spec.js +1 -2
- package/dist/app-config/validation.d.ts +1 -2
- package/dist/app-config/validation.js +1 -2
- package/dist/capabilities/openbanking.d.ts +1 -2
- package/dist/capabilities/openbanking.js +1 -2
- package/dist/capabilities.d.ts +2 -2
- package/dist/capabilities.js +1 -2
- package/dist/client/index.d.ts +2 -2
- package/dist/client/react/drivers/rn-reusables.d.ts +1 -2
- package/dist/client/react/drivers/rn-reusables.js +1 -2
- package/dist/client/react/drivers/shadcn.d.ts +1 -2
- package/dist/client/react/drivers/shadcn.js +1 -2
- package/dist/client/react/feature-render.d.ts +2 -4
- package/dist/client/react/feature-render.js +1 -2
- package/dist/client/react/form-render.d.ts +1 -2
- package/dist/client/react/form-render.js +1 -2
- package/dist/client/react/index.d.ts +2 -2
- package/dist/contracts-adapter-hydration.d.ts +1 -2
- package/dist/contracts-adapter-hydration.js +1 -2
- package/dist/contracts-adapter-input.d.ts +1 -2
- package/dist/contracts-adapter-input.js +1 -2
- package/dist/data-views/query-generator.d.ts +1 -2
- package/dist/data-views/query-generator.js +1 -2
- package/dist/data-views/runtime.d.ts +1 -2
- package/dist/data-views/runtime.js +1 -2
- package/dist/data-views.d.ts +1 -2
- package/dist/data-views.js +1 -2
- package/dist/events.d.ts +1 -2
- package/dist/events.js +1 -2
- package/dist/experiments/evaluator.d.ts +1 -2
- package/dist/experiments/evaluator.js +1 -2
- package/dist/experiments/spec-resolver.d.ts +16 -0
- package/dist/experiments/spec-resolver.js +0 -0
- package/dist/experiments/spec.d.ts +1 -2
- package/dist/experiments/spec.js +1 -2
- package/dist/features.d.ts +1 -2
- package/dist/features.js +1 -2
- package/dist/forms.d.ts +1 -2
- package/dist/forms.js +1 -2
- package/dist/graphql-federation/dist/index.js +1 -2
- package/dist/index.d.ts +7 -4
- package/dist/index.js +1 -1
- package/dist/install.d.ts +1 -2
- package/dist/install.js +1 -2
- package/dist/integrations/binding.d.ts +1 -2
- package/dist/integrations/connection.d.ts +1 -2
- package/dist/integrations/contracts.d.ts +103 -104
- package/dist/integrations/contracts.js +1 -2
- package/dist/integrations/health.d.ts +1 -2
- package/dist/integrations/health.js +1 -2
- package/dist/integrations/openbanking/contracts/accounts.d.ts +67 -68
- package/dist/integrations/openbanking/contracts/accounts.js +1 -2
- package/dist/integrations/openbanking/contracts/balances.d.ts +35 -36
- package/dist/integrations/openbanking/contracts/balances.js +1 -2
- package/dist/integrations/openbanking/contracts/index.d.ts +1 -2
- package/dist/integrations/openbanking/contracts/index.js +1 -2
- package/dist/integrations/openbanking/contracts/transactions.d.ts +49 -50
- package/dist/integrations/openbanking/contracts/transactions.js +1 -2
- package/dist/integrations/openbanking/guards.d.ts +1 -2
- package/dist/integrations/openbanking/guards.js +1 -2
- package/dist/integrations/openbanking/models.d.ts +56 -57
- package/dist/integrations/openbanking/models.js +1 -2
- package/dist/integrations/openbanking/telemetry.d.ts +1 -2
- package/dist/integrations/openbanking/telemetry.js +1 -2
- package/dist/integrations/providers/calendar.d.ts +1 -2
- package/dist/integrations/providers/elevenlabs.d.ts +1 -2
- package/dist/integrations/providers/elevenlabs.js +1 -2
- package/dist/integrations/providers/email.d.ts +1 -2
- package/dist/integrations/providers/embedding.d.ts +1 -2
- package/dist/integrations/providers/gcs-storage.d.ts +1 -2
- package/dist/integrations/providers/gcs-storage.js +1 -2
- package/dist/integrations/providers/gmail.d.ts +1 -2
- package/dist/integrations/providers/gmail.js +1 -2
- package/dist/integrations/providers/google-calendar.d.ts +1 -2
- package/dist/integrations/providers/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +1 -2
- package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
- package/dist/integrations/providers/impls/gcs-storage.d.ts +1 -2
- package/dist/integrations/providers/impls/gcs-storage.js +1 -2
- package/dist/integrations/providers/impls/gmail-inbound.d.ts +1 -2
- package/dist/integrations/providers/impls/gmail-inbound.js +1 -2
- package/dist/integrations/providers/impls/gmail-outbound.d.ts +1 -2
- package/dist/integrations/providers/impls/gmail-outbound.js +1 -2
- package/dist/integrations/providers/impls/google-calendar.d.ts +1 -2
- package/dist/integrations/providers/impls/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/mistral-embedding.d.ts +1 -2
- package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
- package/dist/integrations/providers/impls/mistral-llm.d.ts +1 -2
- package/dist/integrations/providers/impls/mistral-llm.js +1 -2
- package/dist/integrations/providers/impls/postmark-email.d.ts +1 -2
- package/dist/integrations/providers/impls/postmark-email.js +1 -2
- package/dist/integrations/providers/impls/powens-client.d.ts +1 -2
- package/dist/integrations/providers/impls/powens-client.js +1 -2
- package/dist/integrations/providers/impls/powens-openbanking.d.ts +1 -2
- package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
- package/dist/integrations/providers/impls/provider-factory.d.ts +1 -2
- package/dist/integrations/providers/impls/provider-factory.js +1 -2
- package/dist/integrations/providers/impls/qdrant-vector.d.ts +1 -2
- package/dist/integrations/providers/impls/qdrant-vector.js +1 -2
- package/dist/integrations/providers/impls/stripe-payments.d.ts +1 -2
- package/dist/integrations/providers/impls/stripe-payments.js +1 -2
- package/dist/integrations/providers/impls/twilio-sms.d.ts +1 -2
- package/dist/integrations/providers/impls/twilio-sms.js +1 -2
- package/dist/integrations/providers/llm.d.ts +1 -2
- package/dist/integrations/providers/mistral.d.ts +1 -2
- package/dist/integrations/providers/mistral.js +1 -2
- package/dist/integrations/providers/openbanking.d.ts +1 -2
- package/dist/integrations/providers/payments.d.ts +1 -2
- package/dist/integrations/providers/postmark.d.ts +1 -2
- package/dist/integrations/providers/postmark.js +1 -2
- package/dist/integrations/providers/powens.d.ts +1 -2
- package/dist/integrations/providers/powens.js +1 -2
- package/dist/integrations/providers/qdrant.d.ts +1 -2
- package/dist/integrations/providers/qdrant.js +1 -2
- package/dist/integrations/providers/sms.d.ts +1 -2
- package/dist/integrations/providers/storage.d.ts +1 -2
- package/dist/integrations/providers/stripe.d.ts +1 -2
- package/dist/integrations/providers/stripe.js +1 -2
- package/dist/integrations/providers/twilio-sms.d.ts +1 -2
- package/dist/integrations/providers/twilio-sms.js +1 -2
- package/dist/integrations/providers/vector-store.d.ts +1 -2
- package/dist/integrations/providers/voice.d.ts +1 -2
- package/dist/integrations/runtime.d.ts +1 -2
- package/dist/integrations/runtime.js +1 -2
- package/dist/integrations/secrets/env-secret-provider.d.ts +1 -2
- package/dist/integrations/secrets/env-secret-provider.js +1 -2
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +1 -2
- package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
- package/dist/integrations/secrets/manager.d.ts +3 -4
- package/dist/integrations/secrets/manager.js +1 -2
- package/dist/integrations/secrets/provider.d.ts +1 -2
- package/dist/integrations/secrets/provider.js +1 -2
- package/dist/integrations/spec.d.ts +1 -2
- package/dist/integrations/spec.js +1 -2
- package/dist/jobs/gcp-cloud-tasks.d.ts +1 -2
- package/dist/jobs/gcp-cloud-tasks.js +1 -2
- package/dist/jobs/gcp-pubsub.d.ts +1 -2
- package/dist/jobs/gcp-pubsub.js +1 -2
- package/dist/jobs/handlers/gmail-sync-handler.d.ts +1 -2
- package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
- package/dist/jobs/handlers/storage-document-handler.d.ts +1 -2
- package/dist/jobs/handlers/storage-document-handler.js +1 -2
- package/dist/jobs/memory-queue.d.ts +1 -2
- package/dist/jobs/memory-queue.js +1 -2
- package/dist/jobs/queue.d.ts +1 -2
- package/dist/jsonschema.d.ts +1 -2
- package/dist/jsonschema.js +1 -2
- package/dist/knowledge/binding.d.ts +1 -2
- package/dist/knowledge/contracts.d.ts +67 -68
- package/dist/knowledge/contracts.js +1 -2
- package/dist/knowledge/ingestion/document-processor.d.ts +1 -2
- package/dist/knowledge/ingestion/document-processor.js +1 -2
- package/dist/knowledge/ingestion/embedding-service.d.ts +1 -2
- package/dist/knowledge/ingestion/embedding-service.js +1 -2
- package/dist/knowledge/ingestion/gmail-adapter.d.ts +1 -2
- package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
- package/dist/knowledge/ingestion/storage-adapter.d.ts +1 -2
- package/dist/knowledge/ingestion/storage-adapter.js +1 -2
- package/dist/knowledge/ingestion/vector-indexer.d.ts +1 -2
- package/dist/knowledge/ingestion/vector-indexer.js +1 -2
- package/dist/knowledge/query/service.d.ts +3 -4
- package/dist/knowledge/query/service.js +1 -2
- package/dist/knowledge/runtime.d.ts +1 -2
- package/dist/knowledge/runtime.js +1 -2
- package/dist/knowledge/source.d.ts +1 -2
- package/dist/knowledge/spaces/email-threads.d.ts +1 -2
- package/dist/knowledge/spaces/email-threads.js +1 -2
- package/dist/knowledge/spaces/financial-docs.d.ts +1 -2
- package/dist/knowledge/spaces/financial-docs.js +1 -2
- package/dist/knowledge/spaces/financial-overview.d.ts +1 -2
- package/dist/knowledge/spaces/financial-overview.js +1 -2
- package/dist/knowledge/spaces/product-canon.d.ts +1 -2
- package/dist/knowledge/spaces/product-canon.js +1 -2
- package/dist/knowledge/spaces/support-faq.d.ts +1 -2
- package/dist/knowledge/spaces/support-faq.js +1 -2
- package/dist/knowledge/spaces/uploaded-docs.d.ts +1 -2
- package/dist/knowledge/spaces/uploaded-docs.js +1 -2
- package/dist/knowledge/spec.d.ts +1 -2
- package/dist/knowledge/spec.js +1 -2
- package/dist/markdown.d.ts +1 -2
- package/dist/markdown.js +1 -2
- package/dist/migrations.d.ts +1 -2
- package/dist/migrations.js +1 -2
- package/dist/onboarding-base.d.ts +30 -31
- package/dist/onboarding-base.js +1 -2
- package/dist/ownership.d.ts +1 -2
- package/dist/ownership.js +1 -2
- package/dist/policy/engine.d.ts +1 -2
- package/dist/policy/engine.js +1 -2
- package/dist/policy/opa-adapter.d.ts +1 -2
- package/dist/policy/opa-adapter.js +1 -2
- package/dist/policy/spec.d.ts +1 -2
- package/dist/policy/spec.js +1 -2
- package/dist/presentations.backcompat.d.ts +1 -2
- package/dist/presentations.backcompat.js +1 -2
- package/dist/presentations.d.ts +1 -2
- package/dist/presentations.js +1 -2
- package/dist/presentations.v2.d.ts +21 -2
- package/dist/presentations.v2.js +1 -2
- package/dist/prompt.d.ts +1 -2
- package/dist/prompt.js +1 -2
- package/dist/promptRegistry.d.ts +1 -2
- package/dist/promptRegistry.js +1 -2
- package/dist/regenerator/adapters.d.ts +1 -2
- package/dist/regenerator/executor.d.ts +1 -2
- package/dist/regenerator/executor.js +1 -2
- package/dist/regenerator/service.d.ts +1 -2
- package/dist/regenerator/service.js +1 -2
- package/dist/regenerator/sinks.d.ts +1 -2
- package/dist/regenerator/sinks.js +1 -2
- package/dist/regenerator/types.d.ts +1 -2
- package/dist/regenerator/utils.d.ts +1 -2
- package/dist/regenerator/utils.js +1 -2
- package/dist/registry.d.ts +1 -2
- package/dist/registry.js +1 -2
- package/dist/resources.d.ts +1 -2
- package/dist/resources.js +1 -2
- package/dist/schema/dist/FieldType.js +1 -2
- package/dist/schema/dist/ScalarTypeEnum.js +1 -2
- package/dist/schema/dist/SchemaModel.js +1 -2
- package/dist/schema/dist/entity/defineEntity.js +1 -0
- package/dist/schema/dist/entity/index.js +1 -0
- package/dist/schema/dist/entity/types.js +1 -0
- package/dist/schema/dist/index.js +1 -1
- package/dist/schema-to-markdown.d.ts +54 -0
- package/dist/schema-to-markdown.js +10 -0
- package/dist/server/graphql-pothos.d.ts +1 -2
- package/dist/server/graphql-pothos.js +1 -2
- package/dist/server/graphql-schema-export.d.ts +1 -2
- package/dist/server/graphql-schema-export.js +1 -2
- package/dist/server/provider-mcp.d.ts +1 -2
- package/dist/server/provider-mcp.js +1 -2
- package/dist/server/rest-elysia.d.ts +1 -2
- package/dist/server/rest-elysia.js +1 -2
- package/dist/server/rest-express.d.ts +1 -2
- package/dist/server/rest-express.js +1 -2
- package/dist/server/rest-generic.d.ts +1 -2
- package/dist/server/rest-generic.js +1 -2
- package/dist/server/rest-next-app.d.ts +1 -2
- package/dist/server/rest-next-app.js +1 -2
- package/dist/server/rest-next-mcp.d.ts +1 -2
- package/dist/server/rest-next-mcp.js +1 -2
- package/dist/server/rest-next-pages.d.ts +1 -2
- package/dist/server/rest-next-pages.js +1 -2
- package/dist/spec.d.ts +1 -2
- package/dist/spec.js +1 -2
- package/dist/telemetry/anomaly.d.ts +1 -2
- package/dist/telemetry/anomaly.js +1 -2
- package/dist/telemetry/spec.d.ts +1 -2
- package/dist/telemetry/spec.js +1 -2
- package/dist/telemetry/tracker.d.ts +1 -2
- package/dist/telemetry/tracker.js +1 -2
- package/dist/tests/runner.d.ts +1 -2
- package/dist/tests/runner.js +1 -2
- package/dist/tests/spec.d.ts +1 -2
- package/dist/tests/spec.js +1 -2
- package/dist/themes.d.ts +1 -2
- package/dist/themes.js +1 -2
- package/dist/translations/catalog.d.ts +1 -2
- package/dist/translations/tenant.d.ts +1 -2
- package/dist/types/all.d.ts +3 -3
- package/dist/types.d.ts +4 -2
- package/dist/workflow/adapters/db-adapter.d.ts +1 -2
- package/dist/workflow/adapters/db-adapter.js +1 -2
- package/dist/workflow/adapters/file-adapter.d.ts +1 -2
- package/dist/workflow/adapters/file-adapter.js +1 -2
- package/dist/workflow/adapters/memory-store.d.ts +1 -2
- package/dist/workflow/adapters/memory-store.js +1 -2
- package/dist/workflow/expression.d.ts +1 -2
- package/dist/workflow/expression.js +1 -2
- package/dist/workflow/runner.d.ts +1 -2
- package/dist/workflow/runner.js +1 -2
- package/dist/workflow/sla-monitor.d.ts +1 -2
- package/dist/workflow/sla-monitor.js +1 -2
- package/dist/workflow/spec.d.ts +1 -2
- package/dist/workflow/spec.js +1 -2
- package/dist/workflow/state.d.ts +1 -2
- package/dist/workflow/validation.d.ts +1 -2
- package/dist/workflow/validation.js +1 -2
- package/package.json +31 -25
- package/dist/app-config/branding.d.ts.map +0 -1
- package/dist/app-config/contracts.d.ts.map +0 -1
- package/dist/app-config/contracts.js.map +0 -1
- package/dist/app-config/events.d.ts.map +0 -1
- package/dist/app-config/events.js.map +0 -1
- package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
- package/dist/app-config/lifecycle-contracts.js.map +0 -1
- package/dist/app-config/lifecycle.d.ts.map +0 -1
- package/dist/app-config/runtime.d.ts.map +0 -1
- package/dist/app-config/runtime.js.map +0 -1
- package/dist/app-config/spec.d.ts.map +0 -1
- package/dist/app-config/spec.js.map +0 -1
- package/dist/app-config/validation.d.ts.map +0 -1
- package/dist/app-config/validation.js.map +0 -1
- package/dist/capabilities/openbanking.d.ts.map +0 -1
- package/dist/capabilities/openbanking.js.map +0 -1
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js.map +0 -1
- package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
- package/dist/client/react/drivers/rn-reusables.js.map +0 -1
- package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
- package/dist/client/react/drivers/shadcn.js.map +0 -1
- package/dist/client/react/feature-render.d.ts.map +0 -1
- package/dist/client/react/feature-render.js.map +0 -1
- package/dist/client/react/form-render.d.ts.map +0 -1
- package/dist/client/react/form-render.js.map +0 -1
- package/dist/contracts-adapter-hydration.d.ts.map +0 -1
- package/dist/contracts-adapter-hydration.js.map +0 -1
- package/dist/contracts-adapter-input.d.ts.map +0 -1
- package/dist/contracts-adapter-input.js.map +0 -1
- package/dist/data-views/query-generator.d.ts.map +0 -1
- package/dist/data-views/query-generator.js.map +0 -1
- package/dist/data-views/runtime.d.ts.map +0 -1
- package/dist/data-views/runtime.js.map +0 -1
- package/dist/data-views.d.ts.map +0 -1
- package/dist/data-views.js.map +0 -1
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/experiments/evaluator.d.ts.map +0 -1
- package/dist/experiments/evaluator.js.map +0 -1
- package/dist/experiments/spec.d.ts.map +0 -1
- package/dist/experiments/spec.js.map +0 -1
- package/dist/features.d.ts.map +0 -1
- package/dist/features.js.map +0 -1
- package/dist/forms.d.ts.map +0 -1
- package/dist/forms.js.map +0 -1
- package/dist/graphql-federation/dist/index.js.map +0 -1
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/integrations/binding.d.ts.map +0 -1
- package/dist/integrations/connection.d.ts.map +0 -1
- package/dist/integrations/contracts.d.ts.map +0 -1
- package/dist/integrations/contracts.js.map +0 -1
- package/dist/integrations/health.d.ts.map +0 -1
- package/dist/integrations/health.js.map +0 -1
- package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
- package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/index.js.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
- package/dist/integrations/openbanking/guards.d.ts.map +0 -1
- package/dist/integrations/openbanking/guards.js.map +0 -1
- package/dist/integrations/openbanking/models.d.ts.map +0 -1
- package/dist/integrations/openbanking/models.js.map +0 -1
- package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
- package/dist/integrations/openbanking/telemetry.js.map +0 -1
- package/dist/integrations/providers/calendar.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.js.map +0 -1
- package/dist/integrations/providers/email.d.ts.map +0 -1
- package/dist/integrations/providers/embedding.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/gmail.d.ts.map +0 -1
- package/dist/integrations/providers/gmail.js.map +0 -1
- package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
- package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-client.js.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/llm.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.js.map +0 -1
- package/dist/integrations/providers/openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/payments.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.js.map +0 -1
- package/dist/integrations/providers/powens.d.ts.map +0 -1
- package/dist/integrations/providers/powens.js.map +0 -1
- package/dist/integrations/providers/qdrant.d.ts.map +0 -1
- package/dist/integrations/providers/qdrant.js.map +0 -1
- package/dist/integrations/providers/sms.d.ts.map +0 -1
- package/dist/integrations/providers/storage.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.js.map +0 -1
- package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/vector-store.d.ts.map +0 -1
- package/dist/integrations/providers/voice.d.ts.map +0 -1
- package/dist/integrations/runtime.d.ts.map +0 -1
- package/dist/integrations/runtime.js.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
- package/dist/integrations/secrets/manager.d.ts.map +0 -1
- package/dist/integrations/secrets/manager.js.map +0 -1
- package/dist/integrations/secrets/provider.d.ts.map +0 -1
- package/dist/integrations/secrets/provider.js.map +0 -1
- package/dist/integrations/spec.d.ts.map +0 -1
- package/dist/integrations/spec.js.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
- package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
- package/dist/jobs/gcp-pubsub.js.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
- package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
- package/dist/jobs/memory-queue.d.ts.map +0 -1
- package/dist/jobs/memory-queue.js.map +0 -1
- package/dist/jobs/queue.d.ts.map +0 -1
- package/dist/jsonschema.d.ts.map +0 -1
- package/dist/jsonschema.js.map +0 -1
- package/dist/knowledge/binding.d.ts.map +0 -1
- package/dist/knowledge/contracts.d.ts.map +0 -1
- package/dist/knowledge/contracts.js.map +0 -1
- package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
- package/dist/knowledge/ingestion/document-processor.js.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
- package/dist/knowledge/query/service.d.ts.map +0 -1
- package/dist/knowledge/query/service.js.map +0 -1
- package/dist/knowledge/runtime.d.ts.map +0 -1
- package/dist/knowledge/runtime.js.map +0 -1
- package/dist/knowledge/source.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.js.map +0 -1
- package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-docs.js.map +0 -1
- package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-overview.js.map +0 -1
- package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
- package/dist/knowledge/spaces/product-canon.js.map +0 -1
- package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
- package/dist/knowledge/spaces/support-faq.js.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
- package/dist/knowledge/spec.d.ts.map +0 -1
- package/dist/knowledge/spec.js.map +0 -1
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js.map +0 -1
- package/dist/migrations.d.ts.map +0 -1
- package/dist/migrations.js.map +0 -1
- package/dist/onboarding-base.d.ts.map +0 -1
- package/dist/onboarding-base.js.map +0 -1
- package/dist/ownership.d.ts.map +0 -1
- package/dist/ownership.js.map +0 -1
- package/dist/policy/engine.d.ts.map +0 -1
- package/dist/policy/engine.js.map +0 -1
- package/dist/policy/opa-adapter.d.ts.map +0 -1
- package/dist/policy/opa-adapter.js.map +0 -1
- package/dist/policy/spec.d.ts.map +0 -1
- package/dist/policy/spec.js.map +0 -1
- package/dist/presentations.backcompat.d.ts.map +0 -1
- package/dist/presentations.backcompat.js.map +0 -1
- package/dist/presentations.d.ts.map +0 -1
- package/dist/presentations.js.map +0 -1
- package/dist/presentations.v2.d.ts.map +0 -1
- package/dist/presentations.v2.js.map +0 -1
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js.map +0 -1
- package/dist/promptRegistry.d.ts.map +0 -1
- package/dist/promptRegistry.js.map +0 -1
- package/dist/regenerator/adapters.d.ts.map +0 -1
- package/dist/regenerator/executor.d.ts.map +0 -1
- package/dist/regenerator/executor.js.map +0 -1
- package/dist/regenerator/service.d.ts.map +0 -1
- package/dist/regenerator/service.js.map +0 -1
- package/dist/regenerator/sinks.d.ts.map +0 -1
- package/dist/regenerator/sinks.js.map +0 -1
- package/dist/regenerator/types.d.ts.map +0 -1
- package/dist/regenerator/utils.d.ts.map +0 -1
- package/dist/regenerator/utils.js.map +0 -1
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/resources.d.ts.map +0 -1
- package/dist/resources.js.map +0 -1
- package/dist/schema/dist/FieldType.js.map +0 -1
- package/dist/schema/dist/ScalarTypeEnum.js.map +0 -1
- package/dist/schema/dist/SchemaModel.js.map +0 -1
- package/dist/server/graphql-pothos.d.ts.map +0 -1
- package/dist/server/graphql-pothos.js.map +0 -1
- package/dist/server/graphql-schema-export.d.ts.map +0 -1
- package/dist/server/graphql-schema-export.js.map +0 -1
- package/dist/server/provider-mcp.d.ts.map +0 -1
- package/dist/server/provider-mcp.js.map +0 -1
- package/dist/server/rest-elysia.d.ts.map +0 -1
- package/dist/server/rest-elysia.js.map +0 -1
- package/dist/server/rest-express.d.ts.map +0 -1
- package/dist/server/rest-express.js.map +0 -1
- package/dist/server/rest-generic.d.ts.map +0 -1
- package/dist/server/rest-generic.js.map +0 -1
- package/dist/server/rest-next-app.d.ts.map +0 -1
- package/dist/server/rest-next-app.js.map +0 -1
- package/dist/server/rest-next-mcp.d.ts.map +0 -1
- package/dist/server/rest-next-mcp.js.map +0 -1
- package/dist/server/rest-next-pages.d.ts.map +0 -1
- package/dist/server/rest-next-pages.js.map +0 -1
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js.map +0 -1
- package/dist/telemetry/anomaly.d.ts.map +0 -1
- package/dist/telemetry/anomaly.js.map +0 -1
- package/dist/telemetry/spec.d.ts.map +0 -1
- package/dist/telemetry/spec.js.map +0 -1
- package/dist/telemetry/tracker.d.ts.map +0 -1
- package/dist/telemetry/tracker.js.map +0 -1
- package/dist/tests/runner.d.ts.map +0 -1
- package/dist/tests/runner.js.map +0 -1
- package/dist/tests/spec.d.ts.map +0 -1
- package/dist/tests/spec.js.map +0 -1
- package/dist/themes.d.ts.map +0 -1
- package/dist/themes.js.map +0 -1
- package/dist/translations/catalog.d.ts.map +0 -1
- package/dist/translations/tenant.d.ts.map +0 -1
- package/dist/types.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.js.map +0 -1
- package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/file-adapter.js.map +0 -1
- package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
- package/dist/workflow/adapters/memory-store.js.map +0 -1
- package/dist/workflow/expression.d.ts.map +0 -1
- package/dist/workflow/expression.js.map +0 -1
- package/dist/workflow/runner.d.ts.map +0 -1
- package/dist/workflow/runner.js.map +0 -1
- package/dist/workflow/sla-monitor.d.ts.map +0 -1
- package/dist/workflow/sla-monitor.js.map +0 -1
- package/dist/workflow/spec.d.ts.map +0 -1
- package/dist/workflow/spec.js.map +0 -1
- package/dist/workflow/state.d.ts.map +0 -1
- package/dist/workflow/validation.d.ts.map +0 -1
- package/dist/workflow/validation.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"embedding-service.js","names":["results: EmbeddingResult[]","documents: EmbeddingDocument[]"],"sources":["../../../src/knowledge/ingestion/embedding-service.ts"],"sourcesContent":["import type {\n EmbeddingDocument,\n EmbeddingProvider,\n EmbeddingResult,\n} from '../../integrations/providers/embedding';\nimport type { DocumentFragment } from './document-processor';\n\nexport class EmbeddingService {\n private readonly provider: EmbeddingProvider;\n private readonly batchSize: number;\n\n constructor(provider: EmbeddingProvider, batchSize = 16) {\n this.provider = provider;\n this.batchSize = batchSize;\n }\n\n async embedFragments(fragments: DocumentFragment[]): Promise<EmbeddingResult[]> {\n const results: EmbeddingResult[] = [];\n for (let i = 0; i < fragments.length; i += this.batchSize) {\n const slice = fragments.slice(i, i + this.batchSize);\n const documents: EmbeddingDocument[] = slice.map((fragment) => ({\n id: fragment.id,\n text: fragment.text,\n metadata: fragment.metadata,\n }));\n const embeddings = await this.provider.embedDocuments(documents);\n results.push(...embeddings);\n }\n return results;\n }\n}\n\n\n"],"mappings":"AAOA,IAAa,EAAb,KAA8B,CAC5B,SACA,UAEA,YAAY,EAA6B,EAAY,GAAI,CACvD,KAAK,SAAW,EAChB,KAAK,UAAY,EAGnB,MAAM,eAAe,EAA2D,CAC9E,IAAMA,EAA6B,EAAE,CACrC,IAAK,IAAI,EAAI,EAAG,EAAI,EAAU,OAAQ,GAAK,KAAK,UAAW,CAEzD,IAAMC,EADQ,EAAU,MAAM,EAAG,EAAI,KAAK,UAAU,CACP,IAAK,IAAc,CAC9D,GAAI,EAAS,GACb,KAAM,EAAS,KACf,SAAU,EAAS,SACpB,EAAE,CACG,EAAa,MAAM,KAAK,SAAS,eAAe,EAAU,CAChE,EAAQ,KAAK,GAAG,EAAW,CAE7B,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gmail-adapter.d.ts","names":[],"sources":["../../../src/knowledge/ingestion/gmail-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;cAQa,qBAAA;;EAAA,iBAAA,SAAqB;EAEN,iBAAA,UAAA;EACI,iBAAA,OAAA;EACC,WAAA,CAAA,KAAA,EAFL,oBAEK,EAAA,SAAA,EADD,iBACC,EAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EACH,aADG;EACH,WAAA,CAAA,KAAA,CAAA,EAGF,UAHE,CAGS,oBAHT,CAAA,aAAA,CAAA,CAAA,CAAA,CAAA,CAAA,CAAA,EAGgD,OAHhD,CAAA,IAAA,CAAA;EAGS,YAAA,CAAA,MAAA,EAOV,WAPU,CAAA,EAOC,OAPD,CAAA,IAAA,CAAA;EAAX,QAAA,aAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"gmail-adapter.js","names":["gmail: EmailInboundProvider","processor: DocumentProcessor","embeddings: EmbeddingService","indexer: VectorIndexer"],"sources":["../../../src/knowledge/ingestion/gmail-adapter.ts"],"sourcesContent":["import type {\n EmailInboundProvider,\n EmailThread,\n} from '../../integrations/providers/email';\nimport type { DocumentProcessor, RawDocument } from './document-processor';\nimport type { EmbeddingService } from './embedding-service';\nimport type { VectorIndexer } from './vector-indexer';\n\nexport class GmailIngestionAdapter {\n constructor(\n private readonly gmail: EmailInboundProvider,\n private readonly processor: DocumentProcessor,\n private readonly embeddings: EmbeddingService,\n private readonly indexer: VectorIndexer\n ) {}\n\n async syncThreads(query?: Parameters<EmailInboundProvider['listThreads']>[0]) {\n const threads = await this.gmail.listThreads(query);\n for (const thread of threads) {\n await this.ingestThread(thread);\n }\n }\n\n async ingestThread(thread: EmailThread) {\n const document = this.toRawDocument(thread);\n const fragments = await this.processor.process(document);\n const embeddings = await this.embeddings.embedFragments(fragments);\n await this.indexer.upsert(fragments, embeddings);\n }\n\n private toRawDocument(thread: EmailThread): RawDocument {\n const content = composeThreadText(thread);\n return {\n id: thread.id,\n mimeType: 'text/plain',\n data: Buffer.from(content, 'utf-8'),\n metadata: {\n subject: thread.subject ?? '',\n participants: thread.participants.map((p) => p.email).join(', '),\n updatedAt: thread.updatedAt.toISOString(),\n },\n };\n }\n}\n\nfunction composeThreadText(thread: EmailThread): string {\n const header = [`Subject: ${thread.subject ?? ''}`, `Snippet: ${thread.snippet ?? ''}`];\n const messageTexts = thread.messages.map((message) => {\n const parts = [\n `From: ${formatAddress(message.from)}`,\n `To: ${message.to.map(formatAddress).join(', ')}`,\n ];\n if (message.sentAt) {\n parts.push(`Date: ${message.sentAt.toISOString()}`);\n }\n const body = message.textBody ?? stripHtml(message.htmlBody ?? '');\n return `${parts.join('\\n')}\\n\\n${body ?? ''}`;\n });\n return [...header, ...messageTexts].join('\\n\\n---\\n\\n');\n}\n\nfunction formatAddress(address: { email: string; name?: string }): string {\n return address.name ? `${address.name} <${address.email}>` : address.email;\n}\n\nfunction stripHtml(html: string): string {\n return html.replace(/<[^>]+>/g, ' ');\n}\n\n\n"],"mappings":"AAQA,IAAa,EAAb,KAAmC,CACjC,YACE,EACA,EACA,EACA,EACA,CAJiB,KAAA,MAAA,EACA,KAAA,UAAA,EACA,KAAA,WAAA,EACA,KAAA,QAAA,EAGnB,MAAM,YAAY,EAA4D,CAC5E,IAAM,EAAU,MAAM,KAAK,MAAM,YAAY,EAAM,CACnD,IAAK,IAAM,KAAU,EACnB,MAAM,KAAK,aAAa,EAAO,CAInC,MAAM,aAAa,EAAqB,CACtC,IAAM,EAAW,KAAK,cAAc,EAAO,CACrC,EAAY,MAAM,KAAK,UAAU,QAAQ,EAAS,CAClD,EAAa,MAAM,KAAK,WAAW,eAAe,EAAU,CAClE,MAAM,KAAK,QAAQ,OAAO,EAAW,EAAW,CAGlD,cAAsB,EAAkC,CACtD,IAAM,EAAU,EAAkB,EAAO,CACzC,MAAO,CACL,GAAI,EAAO,GACX,SAAU,aACV,KAAM,OAAO,KAAK,EAAS,QAAQ,CACnC,SAAU,CACR,QAAS,EAAO,SAAW,GAC3B,aAAc,EAAO,aAAa,IAAK,GAAM,EAAE,MAAM,CAAC,KAAK,KAAK,CAChE,UAAW,EAAO,UAAU,aAAa,CAC1C,CACF,GAIL,SAAS,EAAkB,EAA6B,CACtD,IAAM,EAAS,CAAC,YAAY,EAAO,SAAW,KAAM,YAAY,EAAO,SAAW,KAAK,CACjF,EAAe,EAAO,SAAS,IAAK,GAAY,CACpD,IAAM,EAAQ,CACZ,SAAS,EAAc,EAAQ,KAAK,GACpC,OAAO,EAAQ,GAAG,IAAI,EAAc,CAAC,KAAK,KAAK,GAChD,CACG,EAAQ,QACV,EAAM,KAAK,SAAS,EAAQ,OAAO,aAAa,GAAG,CAErD,IAAM,EAAO,EAAQ,UAAY,EAAU,EAAQ,UAAY,GAAG,CAClE,MAAO,GAAG,EAAM,KAAK;EAAK,CAAC,MAAM,GAAQ,MACzC,CACF,MAAO,CAAC,GAAG,EAAQ,GAAG,EAAa,CAAC,KAAK;;;;EAAc,CAGzD,SAAS,EAAc,EAAmD,CACxE,OAAO,EAAQ,KAAO,GAAG,EAAQ,KAAK,IAAI,EAAQ,MAAM,GAAK,EAAQ,MAGvE,SAAS,EAAU,EAAsB,CACvC,OAAO,EAAK,QAAQ,WAAY,IAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage-adapter.d.ts","names":[],"sources":["../../../src/knowledge/ingestion/storage-adapter.ts"],"sourcesContent":[],"mappings":";;;;;;cAKa,uBAAA;;EAAA,iBAAA,UAAuB;EAEJ,iBAAA,OAAA;EACC,WAAA,CAAA,SAAA,EADD,iBACC,EAAA,UAAA,EAAA,gBAAA,EAAA,OAAA,EACH,aADG;EACH,YAAA,CAAA,MAAA,EAGD,eAHC,CAAA,EAGiB,OAHjB,CAAA,IAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"storage-adapter.js","names":["processor: DocumentProcessor","embeddings: EmbeddingService","indexer: VectorIndexer"],"sources":["../../../src/knowledge/ingestion/storage-adapter.ts"],"sourcesContent":["import type { GetObjectResult } from '../../integrations/providers/storage';\nimport type { DocumentProcessor } from './document-processor';\nimport type { EmbeddingService } from './embedding-service';\nimport type { VectorIndexer } from './vector-indexer';\n\nexport class StorageIngestionAdapter {\n constructor(\n private readonly processor: DocumentProcessor,\n private readonly embeddings: EmbeddingService,\n private readonly indexer: VectorIndexer\n ) {}\n\n async ingestObject(object: GetObjectResult): Promise<void> {\n if (!('data' in object) || !object.data) {\n throw new Error('Storage ingestion requires object data');\n }\n\n const raw = {\n id: object.key,\n mimeType: object.contentType ?? 'application/octet-stream',\n data: object.data,\n metadata: {\n bucket: object.bucket,\n checksum: object.checksum ?? '',\n },\n };\n\n const fragments = await this.processor.process(raw);\n const embeddings = await this.embeddings.embedFragments(fragments);\n await this.indexer.upsert(fragments, embeddings);\n }\n}\n\n\n"],"mappings":"AAKA,IAAa,EAAb,KAAqC,CACnC,YACE,EACA,EACA,EACA,CAHiB,KAAA,UAAA,EACA,KAAA,WAAA,EACA,KAAA,QAAA,EAGnB,MAAM,aAAa,EAAwC,CACzD,GAAI,EAAE,SAAU,IAAW,CAAC,EAAO,KACjC,MAAU,MAAM,yCAAyC,CAG3D,IAAM,EAAM,CACV,GAAI,EAAO,IACX,SAAU,EAAO,aAAe,2BAChC,KAAM,EAAO,KACb,SAAU,CACR,OAAQ,EAAO,OACf,SAAU,EAAO,UAAY,GAC9B,CACF,CAEK,EAAY,MAAM,KAAK,UAAU,QAAQ,EAAI,CAC7C,EAAa,MAAM,KAAK,WAAW,eAAe,EAAU,CAClE,MAAM,KAAK,QAAQ,OAAO,EAAW,EAAW"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vector-indexer.d.ts","names":[],"sources":["../../../src/knowledge/ingestion/vector-indexer.ts"],"sourcesContent":[],"mappings":";;;;;UAOiB,iBAAA;;EAAA,SAAA,CAAA,EAAA,MAAA;EAMJ,QAAA,CAAA,EAHA,MAGa,CAAA,MAAA,EAAA,MAAA,CAAA;;AAI2B,cAJxC,aAAA,CAIwC;EAMtC,iBAAA,QAAA;EACC,iBAAA,MAAA;EACX,WAAA,CAAA,QAAA,EARmB,mBAQnB,EAAA,MAAA,EARgD,iBAQhD;EAAO,MAAA,CAAA,SAAA,EAFG,gBAEH,EAAA,EAAA,UAAA,EADI,eACJ,EAAA,CAAA,EAAP,OAAO,CAAA,IAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"vector-indexer.js","names":["request: VectorUpsertRequest"],"sources":["../../../src/knowledge/ingestion/vector-indexer.ts"],"sourcesContent":["import type {\n VectorStoreProvider,\n VectorUpsertRequest,\n} from '../../integrations/providers/vector-store';\nimport type { EmbeddingResult } from '../../integrations/providers/embedding';\nimport type { DocumentFragment } from './document-processor';\n\nexport interface VectorIndexConfig {\n collection: string;\n namespace?: string;\n metadata?: Record<string, string>;\n}\n\nexport class VectorIndexer {\n private readonly provider: VectorStoreProvider;\n private readonly config: VectorIndexConfig;\n\n constructor(provider: VectorStoreProvider, config: VectorIndexConfig) {\n this.provider = provider;\n this.config = config;\n }\n\n async upsert(\n fragments: DocumentFragment[],\n embeddings: EmbeddingResult[]\n ): Promise<void> {\n const documents = embeddings.map((embedding) => {\n const fragment = fragments.find((f) => f.id === embedding.id);\n return {\n id: embedding.id,\n vector: embedding.vector,\n payload: {\n ...this.config.metadata,\n ...(fragment?.metadata ?? {}),\n documentId: fragment?.documentId,\n },\n namespace: this.config.namespace,\n };\n });\n\n const request: VectorUpsertRequest = {\n collection: this.config.collection,\n documents,\n };\n\n await this.provider.upsert(request);\n }\n}\n\n\n"],"mappings":"AAaA,IAAa,EAAb,KAA2B,CACzB,SACA,OAEA,YAAY,EAA+B,EAA2B,CACpE,KAAK,SAAW,EAChB,KAAK,OAAS,EAGhB,MAAM,OACJ,EACA,EACe,CACf,IAAM,EAAY,EAAW,IAAK,GAAc,CAC9C,IAAM,EAAW,EAAU,KAAM,GAAM,EAAE,KAAO,EAAU,GAAG,CAC7D,MAAO,CACL,GAAI,EAAU,GACd,OAAQ,EAAU,OAClB,QAAS,CACP,GAAG,KAAK,OAAO,SACf,GAAI,GAAU,UAAY,EAAE,CAC5B,WAAY,GAAU,WACvB,CACD,UAAW,KAAK,OAAO,UACxB,EACD,CAEIA,EAA+B,CACnC,WAAY,KAAK,OAAO,WACxB,YACD,CAED,MAAM,KAAK,SAAS,OAAO,EAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","names":[],"sources":["../../../src/knowledge/query/service.ts"],"sourcesContent":[],"mappings":";;;;;UAOiB,oBAAA;;EAAA,SAAA,CAAA,EAAA,MAAA;EAOA,IAAA,CAAA,EAAA,MAAA;EAGb,YAAA,CAAA,EAAA,MAAA;;AAIM,UAPO,eAAA,CAOP;EAAW,MAAA,EAAA,MAAA;EAGR,UAAA,EARC,KAQD,CAPT,kBAO8B,GAAA;IAOlB,IAAA,CAAA,EAAA,MAAA;EACC,CAAA,CAAA;EACR,KAAA,CAAA,EAZC,WAYD,CAAA,OAAA,CAAA;;AASgC,cAlB5B,qBAAA,CAkB4B;EAAR,iBAAA,UAAA;EAAO,iBAAA,WAAA;;;0BAXxB,gCACC,0BACR,qBACG;2BAQqB,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","names":[],"sources":["../../../src/knowledge/query/service.ts"],"sourcesContent":["import type { EmbeddingProvider } from '../../integrations/providers/embedding';\nimport type {\n VectorStoreProvider,\n VectorSearchResult,\n} from '../../integrations/providers/vector-store';\nimport type { LLMProvider, LLMMessage, LLMResponse } from '../../integrations/providers/llm';\n\nexport interface KnowledgeQueryConfig {\n collection: string;\n namespace?: string;\n topK?: number;\n systemPrompt?: string;\n}\n\nexport interface KnowledgeAnswer {\n answer: string;\n references: Array<\n VectorSearchResult & {\n text?: string;\n }\n >;\n usage?: LLMResponse['usage'];\n}\n\nexport class KnowledgeQueryService {\n private readonly embeddings: EmbeddingProvider;\n private readonly vectorStore: VectorStoreProvider;\n private readonly llm: LLMProvider;\n private readonly config: KnowledgeQueryConfig;\n\n constructor(\n embeddings: EmbeddingProvider,\n vectorStore: VectorStoreProvider,\n llm: LLMProvider,\n config: KnowledgeQueryConfig\n ) {\n this.embeddings = embeddings;\n this.vectorStore = vectorStore;\n this.llm = llm;\n this.config = config;\n }\n\n async query(question: string): Promise<KnowledgeAnswer> {\n const embedding = await this.embeddings.embedQuery(question);\n const results = await this.vectorStore.search({\n collection: this.config.collection,\n vector: embedding.vector,\n topK: this.config.topK ?? 5,\n namespace: this.config.namespace,\n filter: undefined,\n });\n const context = buildContext(results);\n const messages = this.buildMessages(question, context);\n const response = await this.llm.chat(messages);\n return {\n answer: response.message.content\n .map((part) => ('text' in part ? part.text : ''))\n .join(''),\n references: results.map((result) => ({\n ...result,\n text: extractText(result),\n })),\n usage: response.usage,\n };\n }\n\n private buildMessages(question: string, context: string): LLMMessage[] {\n const systemPrompt =\n this.config.systemPrompt ??\n 'You are a knowledge assistant that answers questions using the provided context. Cite relevant sources if possible.';\n return [\n {\n role: 'system',\n content: [{ type: 'text', text: systemPrompt }],\n },\n {\n role: 'user',\n content: [\n {\n type: 'text',\n text: `Question:\\n${question}\\n\\nContext:\\n${context}`,\n },\n ],\n },\n ];\n }\n}\n\nfunction buildContext(results: VectorSearchResult[]): string {\n if (results.length === 0) {\n return 'No relevant documents found.';\n }\n return results\n .map((result, index) => {\n const text = extractText(result);\n return `Source ${index + 1} (score: ${result.score.toFixed(3)}):\\n${text}`;\n })\n .join('\\n\\n');\n}\n\nfunction extractText(result: VectorSearchResult): string {\n const payload = result.payload ?? {};\n if (typeof payload.text === 'string') return payload.text;\n if (typeof payload.content === 'string') return payload.content;\n return JSON.stringify(payload);\n}\n\n\n"],"mappings":"AAwBA,IAAa,EAAb,KAAmC,CACjC,WACA,YACA,IACA,OAEA,YACE,EACA,EACA,EACA,EACA,CACA,KAAK,WAAa,EAClB,KAAK,YAAc,EACnB,KAAK,IAAM,EACX,KAAK,OAAS,EAGhB,MAAM,MAAM,EAA4C,CACtD,IAAM,EAAY,MAAM,KAAK,WAAW,WAAW,EAAS,CACtD,EAAU,MAAM,KAAK,YAAY,OAAO,CAC5C,WAAY,KAAK,OAAO,WACxB,OAAQ,EAAU,OAClB,KAAM,KAAK,OAAO,MAAQ,EAC1B,UAAW,KAAK,OAAO,UACvB,OAAQ,IAAA,GACT,CAAC,CACI,EAAU,EAAa,EAAQ,CAC/B,EAAW,KAAK,cAAc,EAAU,EAAQ,CAChD,EAAW,MAAM,KAAK,IAAI,KAAK,EAAS,CAC9C,MAAO,CACL,OAAQ,EAAS,QAAQ,QACtB,IAAK,GAAU,SAAU,EAAO,EAAK,KAAO,GAAI,CAChD,KAAK,GAAG,CACX,WAAY,EAAQ,IAAK,IAAY,CACnC,GAAG,EACH,KAAM,EAAY,EAAO,CAC1B,EAAE,CACH,MAAO,EAAS,MACjB,CAGH,cAAsB,EAAkB,EAA+B,CAIrE,MAAO,CACL,CACE,KAAM,SACN,QAAS,CAAC,CAAE,KAAM,OAAQ,KAL5B,KAAK,OAAO,cACZ,sHAIgD,CAAC,CAChD,CACD,CACE,KAAM,OACN,QAAS,CACP,CACE,KAAM,OACN,KAAM,cAAc,EAAS,gBAAgB,IAC9C,CACF,CACF,CACF,GAIL,SAAS,EAAa,EAAuC,CAI3D,OAHI,EAAQ,SAAW,EACd,+BAEF,EACJ,KAAK,EAAQ,IAAU,CACtB,IAAM,EAAO,EAAY,EAAO,CAChC,MAAO,UAAU,EAAQ,EAAE,WAAW,EAAO,MAAM,QAAQ,EAAE,CAAC,MAAM,KACpE,CACD,KAAK;;EAAO,CAGjB,SAAS,EAAY,EAAoC,CACvD,IAAM,EAAU,EAAO,SAAW,EAAE,CAGpC,OAFI,OAAO,EAAQ,MAAS,SAAiB,EAAQ,KACjD,OAAO,EAAQ,SAAY,SAAiB,EAAQ,QACjD,KAAK,UAAU,EAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.d.ts","names":[],"sources":["../../src/knowledge/runtime.ts"],"sourcesContent":[],"mappings":";;;;UAGiB,sBAAA;;EAAA,KAAA,EAAA,MAAA;EASA,WAAA,CAAA,EAAA,MAAA;EAMA,YAAA,CAAA,EAAA,MAAA;EAQJ,SAAA,CAAA,EAAA,MAAA;EAKU,SAAA,EAAA,MAAA,GAAA,OAAA,GAAA,QAAA;;AAUV,UA7BI,qBAAA,CA6BJ;EACE,OAAA,EAAA,OAAA;EACV,MAAA,CAAA,EAAA,MAAA;EAAqB,QAAA,CAAA,EAAA,OAAA,GAAA,SAAA;;UAzBT,2BAAA;4BACW;;;;cAOf,oBAAA;;;;wBAKU;4BASL,4BACL,mCACE,oBACV"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime.js","names":["DEFAULT_DISALLOWED_WRITE: KnowledgeCategory[]"],"sources":["../../src/knowledge/runtime.ts"],"sourcesContent":["import type { ResolvedAppConfig, ResolvedKnowledge } from '../app-config/runtime';\nimport type { KnowledgeCategory } from './spec';\n\nexport interface KnowledgeAccessContext {\n tenantId: string;\n appId: string;\n environment?: string;\n workflowName?: string;\n agentName?: string;\n operation: 'read' | 'write' | 'search';\n}\n\nexport interface KnowledgeAccessResult {\n allowed: boolean;\n reason?: string;\n severity?: 'error' | 'warning';\n}\n\nexport interface KnowledgeAccessGuardOptions {\n disallowWriteCategories?: KnowledgeCategory[];\n requireWorkflowBinding?: boolean;\n requireAgentBinding?: boolean;\n}\n\nconst DEFAULT_DISALLOWED_WRITE: KnowledgeCategory[] = ['external', 'ephemeral'];\n\nexport class KnowledgeAccessGuard {\n private readonly disallowedWrite: Set<KnowledgeCategory>;\n private readonly requireWorkflowBinding: boolean;\n private readonly requireAgentBinding: boolean;\n\n constructor(options: KnowledgeAccessGuardOptions = {}) {\n this.disallowedWrite = new Set(\n options.disallowWriteCategories ?? DEFAULT_DISALLOWED_WRITE\n );\n this.requireWorkflowBinding = options.requireWorkflowBinding ?? true;\n this.requireAgentBinding = options.requireAgentBinding ?? false;\n }\n\n checkAccess(\n spaceBinding: ResolvedKnowledge,\n context: KnowledgeAccessContext,\n appConfig: ResolvedAppConfig\n ): KnowledgeAccessResult {\n const { binding, space } = spaceBinding;\n\n if (binding.required !== false && !this.isSpaceBound(spaceBinding, appConfig)) {\n return {\n allowed: false,\n reason: `Knowledge space \"${space.meta.key}\" is not bound in the resolved app config.`,\n };\n }\n\n if (\n context.operation === 'write' &&\n this.disallowedWrite.has(space.meta.category)\n ) {\n return {\n allowed: false,\n reason: `Knowledge space \"${space.meta.key}\" is category \"${space.meta.category}\" and is read-only.`,\n };\n }\n\n if (this.requireWorkflowBinding && context.workflowName) {\n const allowedWorkflows = binding.scope?.workflows;\n if (allowedWorkflows && !allowedWorkflows.includes(context.workflowName)) {\n return {\n allowed: false,\n reason: `Workflow \"${context.workflowName}\" is not authorized to access knowledge space \"${space.meta.key}\".`,\n };\n }\n }\n\n if (this.requireAgentBinding && context.agentName) {\n const allowedAgents = binding.scope?.agents;\n if (allowedAgents && !allowedAgents.includes(context.agentName)) {\n return {\n allowed: false,\n reason: `Agent \"${context.agentName}\" is not authorized to access knowledge space \"${space.meta.key}\".`,\n };\n }\n }\n\n if (space.meta.category === 'ephemeral') {\n return {\n allowed: true,\n severity: 'warning',\n reason: `Knowledge space \"${space.meta.key}\" is ephemeral; results may be transient.`,\n };\n }\n\n return { allowed: true };\n }\n\n private isSpaceBound(\n resolved: ResolvedKnowledge,\n appConfig: ResolvedAppConfig\n ): boolean {\n return appConfig.knowledge.some(\n (entry) =>\n entry.space.meta.key === resolved.space.meta.key &&\n (resolved.space.meta.version == null ||\n entry.space.meta.version === resolved.space.meta.version)\n );\n }\n}\n\n\n\n\n"],"mappings":"AAwBA,MAAMA,EAAgD,CAAC,WAAY,YAAY,CAE/E,IAAa,EAAb,KAAkC,CAChC,gBACA,uBACA,oBAEA,YAAY,EAAuC,EAAE,CAAE,CACrD,KAAK,gBAAkB,IAAI,IACzB,EAAQ,yBAA2B,EACpC,CACD,KAAK,uBAAyB,EAAQ,wBAA0B,GAChE,KAAK,oBAAsB,EAAQ,qBAAuB,GAG5D,YACE,EACA,EACA,EACuB,CACvB,GAAM,CAAE,UAAS,SAAU,EAE3B,GAAI,EAAQ,WAAa,IAAS,CAAC,KAAK,aAAa,EAAc,EAAU,CAC3E,MAAO,CACL,QAAS,GACT,OAAQ,oBAAoB,EAAM,KAAK,IAAI,4CAC5C,CAGH,GACE,EAAQ,YAAc,SACtB,KAAK,gBAAgB,IAAI,EAAM,KAAK,SAAS,CAE7C,MAAO,CACL,QAAS,GACT,OAAQ,oBAAoB,EAAM,KAAK,IAAI,iBAAiB,EAAM,KAAK,SAAS,qBACjF,CAGH,GAAI,KAAK,wBAA0B,EAAQ,aAAc,CACvD,IAAM,EAAmB,EAAQ,OAAO,UACxC,GAAI,GAAoB,CAAC,EAAiB,SAAS,EAAQ,aAAa,CACtE,MAAO,CACL,QAAS,GACT,OAAQ,aAAa,EAAQ,aAAa,iDAAiD,EAAM,KAAK,IAAI,IAC3G,CAIL,GAAI,KAAK,qBAAuB,EAAQ,UAAW,CACjD,IAAM,EAAgB,EAAQ,OAAO,OACrC,GAAI,GAAiB,CAAC,EAAc,SAAS,EAAQ,UAAU,CAC7D,MAAO,CACL,QAAS,GACT,OAAQ,UAAU,EAAQ,UAAU,iDAAiD,EAAM,KAAK,IAAI,IACrG,CAYL,OARI,EAAM,KAAK,WAAa,YACnB,CACL,QAAS,GACT,SAAU,UACV,OAAQ,oBAAoB,EAAM,KAAK,IAAI,2CAC5C,CAGI,CAAE,QAAS,GAAM,CAG1B,aACE,EACA,EACS,CACT,OAAO,EAAU,UAAU,KACxB,GACC,EAAM,MAAM,KAAK,MAAQ,EAAS,MAAM,KAAK,MAC5C,EAAS,MAAM,KAAK,SAAW,MAC9B,EAAM,MAAM,KAAK,UAAY,EAAS,MAAM,KAAK,SACtD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"source.d.ts","names":[],"sources":["../../src/knowledge/source.ts"],"sourcesContent":[],"mappings":";KAAY,mBAAA;AAAA,UAQK,mBAAA,CARc;EAQd,EAAA,EAAA,MAAA;EAMH,QAAA,EAAA,MAAA;EACQ,QAAA,EAAA,MAAA;EACA,YAAA,EAAA,MAAA;EAAI,KAAA,EAAA,MAAA;EAGT,UAAA,EALH,mBAKwB;EAC9B,SAAA,EAAA,MAAA,GALc,IAKd;EAEE,SAAA,EAAA,MAAA,GANY,IAMZ;;AASS,UAZF,qBAAA,CAYE;QAXX;;UAEE;;;;;;;;;eASK"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-threads.d.ts","names":[],"sources":["../../../src/knowledge/spaces/email-threads.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"email-threads.js","names":["emailThreadsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/email-threads.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const emailThreadsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.email-threads',\n version: 1,\n category: 'operational',\n displayName: 'Email Threads',\n title: 'Operational Email Threads',\n description:\n 'Indexed copies of operational email threads used for support, onboarding, and workflows.',\n domain: 'operations',\n owners: ['platform.operations'],\n tags: ['email', 'operations'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: 365,\n },\n access: {\n policy: { name: 'knowledge.access.email-threads', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 600,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Operational email threads synchronized from Gmail to support automations and contextual assistance.',\n};\n\nexport function registerEmailThreadsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(emailThreadsKnowledgeSpace);\n}\n\n\n"],"mappings":"mDAGA,MAAaA,EAAiD,CAC5D,KAAM,CACJ,IAAK,0BACL,QAAS,EACT,SAAU,cACV,YAAa,gBACb,MAAO,4BACP,YACE,2FACF,OAAQ,aACR,OAAQ,CAAC,sBAAsB,CAC/B,KAAM,CAAC,QAAS,aAAa,CAC7B,UAAW,EAAc,KAC1B,CACD,UAAW,CACT,QAAS,IACV,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,iCAAkC,QAAS,EAAG,CAC9D,WAAY,SACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,gBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,sGACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"financial-docs.d.ts","names":[],"sources":["../../../src/knowledge/spaces/financial-docs.ts"],"sourcesContent":[],"mappings":";;;cAGa,6BAA6B;iBA+B1B,mCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"financial-docs.js","names":["financialDocsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/financial-docs.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const financialDocsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.financial-docs',\n version: 1,\n category: 'canonical',\n displayName: 'Financial Documents',\n title: 'Household Financial Documents',\n description:\n 'Invoices, bills, and contracts powering Pocket Family Office financial automation.',\n domain: 'finance',\n owners: ['platform.finance'],\n tags: ['finance', 'documents'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.financial-docs', version: 1 },\n trustLevel: 'high',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 700,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Normalized financial documents enabling bill pay automation, reminders, and summaries.',\n};\n\nexport function registerFinancialDocsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(financialDocsKnowledgeSpace);\n}\n\n\n"],"mappings":"mDAGA,MAAaA,EAAkD,CAC7D,KAAM,CACJ,IAAK,2BACL,QAAS,EACT,SAAU,YACV,YAAa,sBACb,MAAO,gCACP,YACE,qFACF,OAAQ,UACR,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,UAAW,YAAY,CAC9B,UAAW,EAAc,KAC1B,CACD,UAAW,CACT,QAAS,KACV,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,kCAAmC,QAAS,EAAG,CAC/D,WAAY,OACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,gBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,yFACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAA4B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"financial-overview.d.ts","names":[],"sources":["../../../src/knowledge/spaces/financial-overview.ts"],"sourcesContent":[],"mappings":";;;cAGa,iCAAiC;iBA+B9B,uCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"financial-overview.js","names":["financialOverviewKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/financial-overview.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const financialOverviewKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.financial-overview',\n version: 1,\n category: 'operational',\n displayName: 'Financial Overview Summaries',\n title: 'Derived Financial Summaries',\n description:\n 'Aggregated cashflow summaries, category breakdowns, and balance trends derived from open banking data.',\n domain: 'finance',\n owners: ['platform.finance'],\n tags: ['open-banking', 'summaries', 'cashflow'],\n stability: StabilityEnum.Experimental,\n },\n retention: {\n ttlDays: 180,\n },\n access: {\n policy: { name: 'knowledge.access.financial-overview', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 600,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Derived knowledge space containing weekly/monthly cashflow rollups and account health summaries. Raw transactions are excluded to respect privacy guardrails.',\n};\n\nexport function registerFinancialOverviewKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(financialOverviewKnowledgeSpace);\n}\n\n"],"mappings":"mDAGA,MAAaA,EAAsD,CACjE,KAAM,CACJ,IAAK,+BACL,QAAS,EACT,SAAU,cACV,YAAa,+BACb,MAAO,8BACP,YACE,yGACF,OAAQ,UACR,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,eAAgB,YAAa,WAAW,CAC/C,UAAW,EAAc,aAC1B,CACD,UAAW,CACT,QAAS,IACV,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,sCAAuC,QAAS,EAAG,CACnE,WAAY,SACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,gBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,gKACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAAgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"product-canon.d.ts","names":[],"sources":["../../../src/knowledge/spaces/product-canon.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"product-canon.js","names":["productCanonKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/product-canon.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const productCanonKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.product-canon',\n version: 1,\n category: 'canonical',\n displayName: 'Product Canon',\n title: 'Product Canon Knowledge Space',\n description:\n 'Authoritative product knowledge covering strategy, roadmap, and delivery canon.',\n domain: 'product',\n owners: ['platform.product'],\n tags: ['knowledge', 'product'],\n stability: StabilityEnum.Stable,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.product-canon', version: 1 },\n trustLevel: 'high',\n automationWritable: false,\n },\n indexing: {\n embeddingModel: 'text-embedding-3-large',\n chunkSize: 800,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Single source of truth for product canon, principles, and strategic narratives.',\n};\n\nexport function registerProductCanonKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(productCanonKnowledgeSpace);\n}\n\n\n\n\n\n\n\n"],"mappings":"mDAGA,MAAaA,EAAiD,CAC5D,KAAM,CACJ,IAAK,0BACL,QAAS,EACT,SAAU,YACV,YAAa,gBACb,MAAO,gCACP,YACE,kFACF,OAAQ,UACR,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,YAAa,UAAU,CAC9B,UAAW,EAAc,OAC1B,CACD,UAAW,CACT,QAAS,KACV,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,iCAAkC,QAAS,EAAG,CAC9D,WAAY,OACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,yBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,kFACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"support-faq.d.ts","names":[],"sources":["../../../src/knowledge/spaces/support-faq.ts"],"sourcesContent":[],"mappings":";;;cAGa,0BAA0B;iBA+BvB,gCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"support-faq.js","names":["supportFaqKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/support-faq.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const supportFaqKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.support-faq',\n version: 1,\n category: 'operational',\n displayName: 'Support FAQ',\n title: 'Support & Success FAQ',\n description: 'Operational knowledge base for customer support and success.',\n domain: 'support',\n owners: ['platform.support'],\n tags: ['knowledge', 'support'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: 365,\n archiveAfterDays: 180,\n },\n access: {\n policy: { name: 'knowledge.access.support', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'text-embedding-3-small',\n chunkSize: 700,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'Operational FAQs, runbooks, and customer success playbooks augmented with automation updates.',\n};\n\nexport function registerSupportFaqKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(supportFaqKnowledgeSpace);\n}\n\n\n\n\n\n\n\n"],"mappings":"mDAGA,MAAaA,EAA+C,CAC1D,KAAM,CACJ,IAAK,wBACL,QAAS,EACT,SAAU,cACV,YAAa,cACb,MAAO,wBACP,YAAa,+DACb,OAAQ,UACR,OAAQ,CAAC,mBAAmB,CAC5B,KAAM,CAAC,YAAa,UAAU,CAC9B,UAAW,EAAc,KAC1B,CACD,UAAW,CACT,QAAS,IACT,iBAAkB,IACnB,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,2BAA4B,QAAS,EAAG,CACxD,WAAY,SACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,yBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,gGACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAAyB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploaded-docs.d.ts","names":[],"sources":["../../../src/knowledge/spaces/uploaded-docs.ts"],"sourcesContent":[],"mappings":";;;cAGa,4BAA4B;iBA+BzB,kCAAA,WACJ,yBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"uploaded-docs.js","names":["uploadedDocsKnowledgeSpace: KnowledgeSpaceSpec"],"sources":["../../../src/knowledge/spaces/uploaded-docs.ts"],"sourcesContent":["import { StabilityEnum } from '../../ownership';\nimport type { KnowledgeSpaceRegistry, KnowledgeSpaceSpec } from '../spec';\n\nexport const uploadedDocsKnowledgeSpace: KnowledgeSpaceSpec = {\n meta: {\n key: 'knowledge.uploaded-docs',\n version: 1,\n category: 'external',\n displayName: 'Uploaded Documents',\n title: 'Uploaded Knowledge Assets',\n description:\n 'Documents uploaded by households, including invoices, contracts, and reference files.',\n domain: 'operations',\n owners: ['platform.operations'],\n tags: ['documents', 'storage'],\n stability: StabilityEnum.Beta,\n },\n retention: {\n ttlDays: null,\n },\n access: {\n policy: { name: 'knowledge.access.uploaded-docs', version: 1 },\n trustLevel: 'medium',\n automationWritable: true,\n },\n indexing: {\n embeddingModel: 'mistral-embed',\n chunkSize: 900,\n vectorDbIntegration: 'vectordb.qdrant',\n },\n description:\n 'User-provided documents normalized and embedded for retrieval augmented workflows.',\n};\n\nexport function registerUploadedDocsKnowledgeSpace(\n registry: KnowledgeSpaceRegistry\n): KnowledgeSpaceRegistry {\n return registry.register(uploadedDocsKnowledgeSpace);\n}\n\n\n"],"mappings":"mDAGA,MAAaA,EAAiD,CAC5D,KAAM,CACJ,IAAK,0BACL,QAAS,EACT,SAAU,WACV,YAAa,qBACb,MAAO,4BACP,YACE,wFACF,OAAQ,aACR,OAAQ,CAAC,sBAAsB,CAC/B,KAAM,CAAC,YAAa,UAAU,CAC9B,UAAW,EAAc,KAC1B,CACD,UAAW,CACT,QAAS,KACV,CACD,OAAQ,CACN,OAAQ,CAAE,KAAM,iCAAkC,QAAS,EAAG,CAC9D,WAAY,SACZ,mBAAoB,GACrB,CACD,SAAU,CACR,eAAgB,gBAChB,UAAW,IACX,oBAAqB,kBACtB,CACD,YACE,qFACH,CAED,SAAgB,EACd,EACwB,CACxB,OAAO,EAAS,SAAS,EAA2B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/knowledge/spec.ts"],"sourcesContent":[],"mappings":";;;;KAGY,iBAAA;UAMK,kBAAA,SAA2B;EANhC;EAMK,GAAA,EAAA,MAAA;EAQA,OAAA,EAAA,MAAA;EAOA,QAAA,EAXL,iBAW0B;EASrB,WAAA,EAAA,MAAA;AAMjB;AACQ,UAvBS,wBAAA,CAuBT;EAEK;EAEH,OAAA,CAAA,EAAA,MAAA,GAAA,IAAA;EAEG;EAAuB,gBAAA,CAAA,EAAA,MAAA;AAQpC;AAGiB,UAjCA,qBAAA,CAiCA;EASP;EAI4B,MAAA,CAAA,EA5C3B,SA4C2B;EAgBZ;EAAoB,UAAA,EAAA,MAAA,GAAA,QAAA,GAAA,KAAA;EAAkB;EAKhD,kBAAA,EAAA,OAAqB;;UA1DpB,uBAAA;;;;;UAMA,kBAAA;QACT;;aAEK;;UAEH;;aAEG;;;;cAQA,sBAAA;;iBAGI;UASP;sCAI4B;0BAgBZ,oBAAoB;;iBAK9B,qBAAA,OAA4B"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","names":["latest: KnowledgeSpaceSpec | undefined"],"sources":["../../src/knowledge/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\nimport type { PolicyRef } from '../policy/spec';\n\nexport type KnowledgeCategory =\n | 'canonical'\n | 'operational'\n | 'external'\n | 'ephemeral';\n\nexport interface KnowledgeSpaceMeta extends OwnerShipMeta {\n /** Stable space identifier (e.g., \"product-canon\", \"support-faq\"). */\n key: string;\n version: number;\n category: KnowledgeCategory;\n displayName: string;\n}\n\nexport interface KnowledgeRetentionPolicy {\n /** TTL in days (null = indefinite). */\n ttlDays?: number | null;\n /** Auto-archive after inactivity. */\n archiveAfterDays?: number;\n}\n\nexport interface KnowledgeAccessPolicy {\n /** Which PolicySpec governs access. */\n policy?: PolicyRef;\n /** Trust level for agent/workflow consumption. */\n trustLevel: 'high' | 'medium' | 'low';\n /** Can this space be mutated by automation? */\n automationWritable: boolean;\n}\n\nexport interface KnowledgeIndexingConfig {\n embeddingModel?: string;\n chunkSize?: number;\n vectorDbIntegration?: string;\n}\n\nexport interface KnowledgeSpaceSpec {\n meta: KnowledgeSpaceMeta;\n /** Retention and cleanup rules. */\n retention: KnowledgeRetentionPolicy;\n /** Access control and trust. */\n access: KnowledgeAccessPolicy;\n /** Optional embedding/indexing config. */\n indexing?: KnowledgeIndexingConfig;\n /** Documentation. */\n description?: string;\n}\n\nconst knowledgeKey = (meta: Pick<KnowledgeSpaceMeta, 'key' | 'version'>) =>\n `${meta.key}.v${meta.version}`;\n\nexport class KnowledgeSpaceRegistry {\n private readonly items = new Map<string, KnowledgeSpaceSpec>();\n\n register(spec: KnowledgeSpaceSpec): this {\n const key = knowledgeKey(spec.meta);\n if (this.items.has(key)) {\n throw new Error(`Duplicate KnowledgeSpaceSpec ${key}`);\n }\n this.items.set(key, spec);\n return this;\n }\n\n list(): KnowledgeSpaceSpec[] {\n return [...this.items.values()];\n }\n\n get(key: string, version?: number): KnowledgeSpaceSpec | undefined {\n if (version != null) {\n return this.items.get(knowledgeKey({ key, version }));\n }\n let latest: KnowledgeSpaceSpec | undefined;\n let maxVersion = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.key !== key) continue;\n if (spec.meta.version > maxVersion) {\n maxVersion = spec.meta.version;\n latest = spec;\n }\n }\n return latest;\n }\n\n getByCategory(category: KnowledgeCategory): KnowledgeSpaceSpec[] {\n return this.list().filter((spec) => spec.meta.category === category);\n }\n}\n\nexport function makeKnowledgeSpaceKey(meta: KnowledgeSpaceMeta) {\n return knowledgeKey(meta);\n}\n\n\n\n\n\n\n\n"],"mappings":"AAmDA,MAAM,EAAgB,GACpB,GAAG,EAAK,IAAI,IAAI,EAAK,UAEvB,IAAa,EAAb,KAAoC,CAClC,MAAyB,IAAI,IAE7B,SAAS,EAAgC,CACvC,IAAM,EAAM,EAAa,EAAK,KAAK,CACnC,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,gCAAgC,IAAM,CAGxD,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAA6B,CAC3B,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAa,EAAkD,CACjE,GAAI,GAAW,KACb,OAAO,KAAK,MAAM,IAAI,EAAa,CAAE,MAAK,UAAS,CAAC,CAAC,CAEvD,IAAIA,EACA,EAAa,KACjB,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,MAAQ,GAClB,EAAK,KAAK,QAAU,IACtB,EAAa,EAAK,KAAK,QACvB,EAAS,GAGb,OAAO,EAGT,cAAc,EAAmD,CAC/D,OAAO,KAAK,MAAM,CAAC,OAAQ,GAAS,EAAK,KAAK,WAAa,EAAS,GAIxE,SAAgB,EAAsB,EAA0B,CAC9D,OAAO,EAAa,EAAK"}
|
package/dist/markdown.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.d.ts","names":[],"sources":["../src/markdown.ts"],"sourcesContent":[],"mappings":";;;;;;;;AASA;;AAE6B,iBAFb,eAAA,CAEa,GAAA,EADtB,YACsB,EAAA,MA2F7B,CA3F6B,EAAA;EAAiC,aAAA,CAAA,EAAjC,oBAAiC;EAAe,QAAA,CAAA,EAAf,eAAe;AA2F7E,CAAA,CAAA,EAAgB,MAAA;;AAEY,iBAFZ,cAAA,CAEY,GAAA,EADrB,YACqB,EAAA,MAAA,EAAA;EAAiC,aAAA,CAAA,EAAjC,oBAAiC;EAAe,QAAA,CAAA,EAAf,eAAe"}
|
package/dist/markdown.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"markdown.js","names":["lines: string[]","parts: string[]"],"sources":["../src/markdown.ts"],"sourcesContent":["import type { SpecRegistry } from './registry';\nimport { isEmitDeclRef } from './spec';\nimport type { PresentationRegistry } from './presentations';\nimport type { FeatureRegistry } from './features';\n\n/**\n * Render simple Markdown docs for each spec.\n * Useful for dev portals and repo docs generation.\n */\nexport function specsToMarkdown(\n reg: SpecRegistry,\n extras?: { presentations?: PresentationRegistry; features?: FeatureRegistry }\n): string {\n const lines: string[] = [];\n\n for (const spec of reg.listSpecs()) {\n const m = spec.meta;\n lines.push(`# ${m.name}.v${m.version}`);\n lines.push('');\n lines.push(\n `**Kind:** ${m.kind} | **Stability:** ${m.stability} | **Owners:** ${m.owners.join(', ')}`\n );\n lines.push('');\n lines.push(`**Description:** ${m.description}`);\n lines.push('');\n lines.push(`## Goal`);\n lines.push(m.goal);\n lines.push('');\n lines.push(`## Context`);\n lines.push(m.context);\n lines.push('');\n\n lines.push(`## Policy`);\n lines.push(`- Auth: ${spec.policy.auth}`);\n lines.push(`- Idempotent: ${!!spec.policy.idempotent}`);\n if (spec.policy.rateLimit)\n lines.push(\n `- Rate Limit: ${spec.policy.rateLimit.rpm}/min by ${spec.policy.rateLimit.key}`\n );\n if (spec.policy.flags?.length)\n lines.push(`- Flags: ${spec.policy.flags.join(', ')}`);\n if (spec.policy.pii?.length)\n lines.push(`- PII: ${spec.policy.pii.join(', ')}`);\n lines.push('');\n\n if (spec.sideEffects?.emits?.length) {\n lines.push(`## Emits Events`);\n for (const e of spec.sideEffects.emits) {\n if (isEmitDeclRef(e)) {\n lines.push(`- \\`${e.ref.name}.v${e.ref.version}\\` — ${e.when}`);\n } else {\n lines.push(`- \\`${e.name}.v${e.version}\\` — ${e.when}`);\n }\n }\n lines.push('');\n }\n\n if (spec.io.errors && Object.keys(spec.io.errors).length) {\n lines.push(`## Errors`);\n for (const [code, err] of Object.entries(spec.io.errors)) {\n lines.push(\n `- \\`${code}\\` (${err.http ?? 400}) — ${err.description} (when: ${err.when})`\n );\n }\n lines.push('');\n }\n\n if (spec.acceptance?.scenarios?.length) {\n lines.push(`## Acceptance Scenarios`);\n for (const s of spec.acceptance.scenarios) {\n lines.push(`### ${s.name}`);\n lines.push(`- **Given:** ${s.given.join('; ')}`);\n lines.push(`- **When:** ${s.when.join('; ')}`);\n lines.push(`- **Then:** ${s.then.join('; ')}`);\n lines.push('');\n }\n }\n\n if (spec.acceptance?.examples?.length) {\n lines.push(`## Examples`);\n for (const ex of spec.acceptance.examples) {\n lines.push(`- **${ex.name}**`);\n lines.push(' - Input:');\n lines.push(' ```json');\n lines.push(JSON.stringify(ex.input, null, 2));\n lines.push(' ```');\n lines.push(' - Output:');\n lines.push(' ```json');\n lines.push(JSON.stringify(ex.output, null, 2));\n lines.push(' ```');\n lines.push('');\n }\n }\n\n lines.push('---');\n lines.push('');\n }\n\n return lines.join('\\n');\n}\n\n/** Render presentations and features as additional sections. */\nexport function docsToMarkdown(\n reg: SpecRegistry,\n extras: { presentations?: PresentationRegistry; features?: FeatureRegistry }\n): string {\n const parts: string[] = [];\n parts.push(specsToMarkdown(reg, extras));\n\n if (extras.presentations) {\n parts.push('# Presentations');\n parts.push('');\n for (const p of extras.presentations.list()) {\n parts.push(`## ${p.meta.name}.v${p.meta.version}`);\n parts.push('');\n parts.push(`- Kind: ${(p.content as any).kind}`);\n if ('framework' in p.content)\n parts.push(`- Framework: ${p.content.framework}`);\n if ('componentKey' in p.content)\n parts.push(`- Component Key: ${(p.content as any).componentKey}`);\n if ('mimeType' in p.content)\n parts.push(`- MIME Type: ${(p.content as any).mimeType}`);\n parts.push('');\n }\n parts.push('');\n }\n\n if (extras.features) {\n parts.push('# Features');\n parts.push('');\n for (const f of extras.features.list()) {\n parts.push(`## ${f.meta.title} (${f.meta.key})`);\n if (f.meta.description) parts.push(f.meta.description);\n parts.push('');\n if (f.operations?.length) {\n parts.push('- Operations:');\n for (const o of f.operations) parts.push(` - ${o.name}.v${o.version}`);\n }\n if (f.events?.length) {\n parts.push('- Events:');\n for (const e of f.events) parts.push(` - ${e.name}.v${e.version}`);\n }\n if (f.presentations?.length) {\n parts.push('- Presentations:');\n for (const p of f.presentations)\n parts.push(` - ${p.name}.v${p.version}`);\n }\n parts.push('');\n }\n }\n\n return parts.join('\\n');\n}\n"],"mappings":"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"}
|
package/dist/migrations.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.d.ts","names":[],"sources":["../src/migrations.ts"],"sourcesContent":[],"mappings":";;;KAEY,iBAAA;UAEK,cAAA;EAFL,WAAA,EAAA,MAAA;EAEK,UAAA,EAAA,MAAc;AAK/B;AACQ,UADS,iBAAA,CACT;EAIM,IAAA,EAJN,iBAIM;EACC,WAAA,CAAA,EAAA,MAAA;EAAc,SAAA,CAAA,EAAA,MAAA;EAGZ,OAAA,CAAA,EAAA,MAAA;EAKA,SAAA,CAAA,EATH,cASqB,EAAA;EAKlB,UAAA,CAAA,EAbF,cAa0B,EAAA;AAKzC;AACI,UAhBa,mBAAA,SAA4B,iBAgBzC,CAAA;EACA,IAAA,EAAA,QAAA;EACA,GAAA,EAAA,MAAA;;AAEa,UAfA,iBAAA,SAA0B,iBAeS,CAAA;EAOnC,IAAA,EAAA,MAAA;EAKA,MAAA,EAAA,MAAA;AAQjB;AAGiB,UAjCA,uBAAA,SAAgC,iBAiChC,CAAA;EAQP,IAAA,EAAA,YAAA;EAO6B,SAAA,EAAA,MAAA;;KA3C3B,aAAA,GACR,sBACA,oBACA;UAEa,aAAA,SAAsB;;;;;;UAOtB,aAAA;MACX;SACG;;UAGQ,aAAA;QACT;QACA;;;cAMK,iBAAA;;iBAGI;UAQP;uCAO6B"}
|
package/dist/migrations.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"migrations.js","names":["candidate: MigrationSpec | undefined"],"sources":["../src/migrations.ts"],"sourcesContent":["import type { OwnerShipMeta } from './ownership';\n\nexport type MigrationStepKind = 'schema' | 'data' | 'validation';\n\nexport interface MigrationCheck {\n description: string;\n expression: string;\n}\n\nexport interface MigrationStepBase {\n kind: MigrationStepKind;\n description?: string;\n timeoutMs?: number;\n retries?: number;\n preChecks?: MigrationCheck[];\n postChecks?: MigrationCheck[];\n}\n\nexport interface SchemaMigrationStep extends MigrationStepBase {\n kind: 'schema';\n sql: string;\n}\n\nexport interface DataMigrationStep extends MigrationStepBase {\n kind: 'data';\n script: string;\n}\n\nexport interface ValidationMigrationStep extends MigrationStepBase {\n kind: 'validation';\n assertion: string;\n}\n\nexport type MigrationStep =\n | SchemaMigrationStep\n | DataMigrationStep\n | ValidationMigrationStep;\n\nexport interface MigrationMeta extends OwnerShipMeta {\n /** Fully qualified migration name (e.g., \"sigil.db.2025_01_add_users\"). */\n name: string;\n /** Increment when the migration changes. */\n version: number;\n}\n\nexport interface MigrationPlan {\n up: MigrationStep[];\n down?: MigrationStep[];\n}\n\nexport interface MigrationSpec {\n meta: MigrationMeta;\n plan: MigrationPlan;\n dependencies?: string[];\n}\n\nconst migrationKey = (name: string, version: number) => `${name}.v${version}`;\n\nexport class MigrationRegistry {\n private readonly items = new Map<string, MigrationSpec>();\n\n register(spec: MigrationSpec): this {\n const key = migrationKey(spec.meta.name, spec.meta.version);\n if (this.items.has(key))\n throw new Error(`Duplicate migration ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): MigrationSpec[] {\n return [...this.items.values()].sort(\n (a, b) =>\n compareKey(migrationKey(a.meta.name, a.meta.version), migrationKey(b.meta.name, b.meta.version))\n );\n }\n\n get(name: string, version?: number): MigrationSpec | undefined {\n if (version != null) return this.items.get(migrationKey(name, version));\n let candidate: MigrationSpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nfunction compareKey(a: string, b: string) {\n return a < b ? -1 : a > b ? 1 : 0;\n}\n"],"mappings":"AAwDA,MAAM,GAAgB,EAAc,IAAoB,GAAG,EAAK,IAAI,IAEpE,IAAa,EAAb,KAA+B,CAC7B,MAAyB,IAAI,IAE7B,SAAS,EAA2B,CAClC,IAAM,EAAM,EAAa,EAAK,KAAK,KAAM,EAAK,KAAK,QAAQ,CAC3D,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,uBAAuB,IAAM,CAE/C,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAAwB,CACtB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAAC,MAC7B,EAAG,IACF,EAAW,EAAa,EAAE,KAAK,KAAM,EAAE,KAAK,QAAQ,CAAE,EAAa,EAAE,KAAK,KAAM,EAAE,KAAK,QAAQ,CAAC,CACnG,CAGH,IAAI,EAAc,EAA6C,CAC7D,GAAI,GAAW,KAAM,OAAO,KAAK,MAAM,IAAI,EAAa,EAAM,EAAQ,CAAC,CACvE,IAAIA,EACA,EAAM,KACV,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAM,EAAK,KAAK,QAChB,EAAY,GAGhB,OAAO,IAIX,SAAS,EAAW,EAAW,EAAW,CACxC,OAAO,EAAI,EAAI,GAAK,EAAI,EAAI,EAAI"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding-base.d.ts","names":[],"sources":["../src/onboarding-base.ts"],"sourcesContent":[],"mappings":";;;;;;cASa,0BAAwB;;UAMnC,mBAAA,CAAA;IANW,UAAA,EAAA,KAAA;EAQA,CAAA;CAOX,CAAA;cAPW,2BAAyB;EAAA,EAAA,EAAA;IAAA,IAAA,EAOpC,mBAAA,CAAA,SAPoC,CAAA,MAAA,EAAA,MAAA,CAAA;IASzB,UAAA,EAAA,KAAA;EAwBX,CAAA;EAxBsC,cAAA,EAAA;IAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;AAAA,cAA3B,2BAA2B,cAAA,CAAA,WAAA,CAAA;EA2B3B,IAAA,EAAA;IAUX,IAAA,EAbA,mBAAA,CAAA,SAaA,CAAA,OAAA,EAAA,OAAA,CAAA;;;;;UArCsC,mBAAA,CAAA;;EA2BH,CAAA;EAAA,cAAA,EAAA;IAYxB,IAAA,+BAuBX,CAAA,MAAA,EAAA,MAAA,CAAA;IAAA,UAAA,EAAA,KAvBqC;EAAA,CAAA;;;cAZ1B,0BAAwB;;UAUnC,mBAAA,CAAA;;EAEqC,CAAA;EAAA,cAAA,EAAA;IAAA,IAAA,+BAAA,CAAA,MAAA,EAAA,MAAA,CAAA;IA0B1B,UAAA,EAAA,IAAA;EAQA,CAAA;EAuBX,IAAA,EAAA;IAvBwC,IAAA,+BAAA,CAAA,OAAA,EAAA,OAAA,CAAA;IAAA,UAAA,EAAA,IAAA;EAAA,CAAA;EAAA,SAAA,EAAA;IA0B7B,IAAA,+BAMX,KAAA,EAAA,MAAA,CAAA;IAEW,UAAA,EAAA,IAAA;EAQX,CAAA;;;IARuC,UAAA,EAAA,IAAA;EAAA,CAAA;AAUzC,CAAA,CAAA;AAwBE,cAtGW,0BAsGX,EAtGqC,YAsGrC,CA/EA,mBAAA,CAvBqC,cAAA,EAAA,WAsGrC,CAAA;EAxBqC,EAAA,EAAA;IAAA,IAAA,EA9EA,mBAAA,CAAA,SA8EA,CAAA,MAAA,EAAA,MAAA,CAAA;;;;;IAAA,UAAA,EAAA,IAAA;;;;;;;;;;;;;;;;cApD1B,6BAA2B;;UAMtC,mBAAA,CAAA;;;;cAEW,+BAA6B,aAuBxC,mBAAA,CAvBwC,cAAA,EAAA;;UAAA,mBAAA,CAAA;;;;;cA0B7B,6BAA2B;;UAMtC,mBAAA,CAAA;;;;cAEW,8BAA4B;;UAQvC,mBAAA,CAAA;;;;;;;;;;;;cAEW,yCAA0B;;UAwBrC,mBAAA,CAAA;;;;;UAxBqC,mBAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"onboarding-base.js","names":["SchemaModel","ScalarTypeEnum"],"sources":["../src/onboarding-base.ts"],"sourcesContent":["/**\n * Shared base contracts for onboarding flows across verticals.\n * These operations are reusable for any app that needs multi-step onboarding with draft persistence.\n */\nimport { defineCommand, defineQuery } from './spec';\nimport { ScalarTypeEnum, SchemaModel } from '@lssm/lib.schema';\nimport { OwnersEnum, StabilityEnum } from './ownership';\n\n/** Save/update onboarding draft (auto-save during flow) */\nexport const SaveOnboardingDraftInput = new SchemaModel({\n name: 'SaveOnboardingDraftInput',\n description: 'Input for saving onboarding draft',\n fields: {\n data: { type: ScalarTypeEnum.JSON(), isOptional: false },\n },\n});\n\nexport const SaveOnboardingDraftOutput = new SchemaModel({\n name: 'SaveOnboardingDraftOutput',\n description: 'Output for saving onboarding draft',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: false },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: false },\n },\n});\n\nexport const SaveOnboardingDraftBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.saveDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Save or update onboarding draft for active organization',\n goal: 'Persist onboarding progress incrementally for resumption and safety',\n context:\n 'Auto-saves every few seconds during onboarding; enables users to leave and resume',\n },\n io: {\n input: SaveOnboardingDraftInput,\n output: SaveOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'saveOnboardingDraft' },\n rest: { method: 'POST' },\n },\n});\n\n/** Get current onboarding draft (on mount/restore) */\nexport const GetOnboardingDraftOutput = new SchemaModel({\n name: 'GetOnboardingDraftOutput',\n description: 'Onboarding draft payload',\n fields: {\n id: { type: ScalarTypeEnum.ID(), isOptional: true },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: true },\n data: { type: ScalarTypeEnum.JSON(), isOptional: true },\n createdAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n updatedAt: { type: ScalarTypeEnum.DateTime(), isOptional: true },\n },\n});\n\nexport const GetOnboardingDraftBaseSpec = defineQuery({\n meta: {\n name: 'base.onboarding.getDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Get onboarding draft for active organization',\n goal: 'Retrieve saved onboarding progress',\n context: 'Called on mount to restore in-progress onboarding',\n },\n io: {\n input: null,\n output: GetOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'getOnboardingDraft' },\n rest: { method: 'GET' },\n },\n});\n\n/** Delete onboarding draft (cleanup after completion or cancel) */\nexport const DeleteOnboardingDraftOutput = new SchemaModel({\n name: 'DeleteOnboardingDraftOutput',\n description: 'Result of delete operation',\n fields: {\n ok: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n },\n});\n\nexport const DeleteOnboardingDraftBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.deleteDraft',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding', 'draft'],\n description: 'Delete onboarding draft for active organization',\n goal: 'Clear draft after completion or if user wants to restart',\n context: 'Called after successful onboarding or explicit user reset',\n },\n io: {\n input: null,\n output: DeleteOnboardingDraftOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'deleteOnboardingDraft' },\n rest: { method: 'POST' },\n },\n});\n\n/** Complete onboarding (final submit, creates entities) */\nexport const CompleteOnboardingBaseInput = new SchemaModel({\n name: 'CompleteOnboardingBaseInput',\n description: 'Input for completing onboarding',\n fields: {\n data: { type: ScalarTypeEnum.JSON(), isOptional: false },\n },\n});\n\nexport const CompleteOnboardingBaseOutput = new SchemaModel({\n name: 'CompleteOnboardingBaseOutput',\n description: 'Result of onboarding completion',\n fields: {\n success: { type: ScalarTypeEnum.Boolean(), isOptional: false },\n userId: { type: ScalarTypeEnum.ID(), isOptional: true },\n organizationId: { type: ScalarTypeEnum.ID(), isOptional: true },\n },\n});\n\nexport const CompleteOnboardingBaseSpec = defineCommand({\n meta: {\n name: 'base.onboarding.complete',\n version: 1,\n stability: StabilityEnum.Beta,\n owners: [OwnersEnum.PlatformSigil],\n tags: ['onboarding'],\n description: 'Complete onboarding and finalize user/organization setup',\n goal: 'Transition from draft to active profile',\n context:\n 'Validates all required fields, creates/updates entities, marks onboarding complete',\n },\n io: {\n input: CompleteOnboardingBaseInput,\n output: CompleteOnboardingBaseOutput,\n },\n policy: {\n auth: 'user',\n escalate: null,\n },\n transport: {\n gql: { field: 'completeOnboarding' },\n rest: { method: 'POST' },\n },\n});\n"],"mappings":"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"}
|
package/dist/ownership.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ownership.d.ts","names":[],"sources":["../src/ownership.ts"],"sourcesContent":[],"mappings":";cAEa;EAAA,SAAA,IAAA,EAAA,MAOH;EACE,SAAA,UAAS,EAAA,aAAW;EAGnB,SAAA,YAQH,EAAA,cAAA;EACE,SAAK,IAAA,EAAA,MACL;EAGC,SAAmB,MAAA,EAAA,QAAA;EAGnB,SAAA,UAgBH,EAAA,YAAA;AACV,CAAA;AAEa,KAtCD,SAAA,GAsCgB,CAAA,OAtCI,aAsCJ,CAAA,CAAA,MAAA,OAtCgC,aAsChC,CAAA;AAEX,cArCJ,UAqCiB,EAAA;EAKpB,SAAA,eAAA,EAAA,kBAAA;EACF,SAAA,YAAA,EAAA,eAAA;EACK,SAAA,gBAAA,EAAA,mBAAA;EAAS,SAAA,aAAA,EAAA,gBAAA;;;;;KAnCV,KAAA,WACA,yBAAyB;cAGxB;;;;;;;;;cAGA;;;;;;;;;;;;;;;;;KAiBD,GAAA,WAAc,uBAAuB;cAEpC;;;;;;;;;;;;;;;;;UAEI,aAAA;;;;;UAKP;QACF;aACK"}
|
package/dist/ownership.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"ownership.js","names":[],"sources":["../src/ownership.ts"],"sourcesContent":["// Canonical ownership/stability/tags enums and shared meta\n\nexport const StabilityEnum = {\n Idea: 'idea',\n InCreation: 'in_creation',\n Experimental: 'experimental',\n Beta: 'beta',\n Stable: 'stable',\n Deprecated: 'deprecated',\n} as const;\nexport type Stability = (typeof StabilityEnum)[keyof typeof StabilityEnum];\n\n// Provide curated owner identifiers (business/product oriented), allow extension by string\nexport const OwnersEnum = {\n ProductColiving: 'product.coliving',\n ProductStrit: 'product.strit',\n ProductArtisanos: 'product.artisanos',\n PlatformSigil: 'platform.sigil',\n PlatformMarketplace: 'platform.marketplace',\n PlatformContent: 'platform.content',\n PlatformFeatureFlags: 'platform.featureflags',\n} as const;\nexport type Owner =\n | (typeof OwnersEnum)[keyof typeof OwnersEnum]\n | (string & {});\n// Back-compat alias\nexport const Owners = OwnersEnum;\n\n// Provide common tags, allow extension by string\nexport const TagsEnum = {\n Spots: 'spots',\n Collectivity: 'collectivity',\n Marketplace: 'marketplace',\n Sellers: 'sellers',\n Auth: 'auth',\n Login: 'login',\n Signup: 'signup',\n Guide: 'guide',\n Docs: 'docs',\n I18n: 'i18n',\n AtomicPages: 'atomic:pages',\n Incident: 'incident',\n Hygiene: 'hygiene',\n WeeklyPulse: 'weekly_pulse',\n WebAuth: 'webauth',\n} as const;\nexport type Tag = (typeof TagsEnum)[keyof typeof TagsEnum] | (string & {});\n// Back-compat alias\nexport const Tags = TagsEnum;\n\nexport interface OwnerShipMeta {\n version?: number;\n title: string;\n description: string;\n domain: string;\n owners: Owner[];\n tags: Tag[];\n stability: Stability;\n}\n"],"mappings":"AAEA,MAAa,EAAgB,CAC3B,KAAM,OACN,WAAY,cACZ,aAAc,eACd,KAAM,OACN,OAAQ,SACR,WAAY,aACb,CAIY,EAAa,CACxB,gBAAiB,mBACjB,aAAc,gBACd,iBAAkB,oBAClB,cAAe,iBACf,oBAAqB,uBACrB,gBAAiB,mBACjB,qBAAsB,wBACvB,CAKY,EAAS,EAGT,EAAW,CACtB,MAAO,QACP,aAAc,eACd,YAAa,cACb,QAAS,UACT,KAAM,OACN,MAAO,QACP,OAAQ,SACR,MAAO,QACP,KAAM,OACN,KAAM,OACN,YAAa,eACb,SAAU,WACV,QAAS,UACT,YAAa,eACb,QAAS,UACV,CAGY,EAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.d.ts","names":[],"sources":["../../src/policy/engine.ts"],"sourcesContent":[],"mappings":";;;;UAaiB,mBAAA;;EAAA,MAAA,EAAA,MAAA;EAMA,UAAA,CAAA,EAAA,MAAc;AAM/B;AAOiB,UAbA,cAAA,CAae;EACrB,KAAA,CAAA,EAAA,MAAA,EAAA;EACC,UAAA,CAAA,EAbG,MAaH,CAAA,MAAA,EAAA,OAAA,CAAA;EACA,aAAA,CAAA,EAbM,mBAaN,EAAA;;AAES,UAZJ,eAAA,CAYI;EAWR,IAAA,EAAA,MAAA;EAC4B,EAAA,CAAA,EAAA,MAAA;EAEzB,MAAA,CAAA,EAAA,MAAA,EAAA;EAAkB,UAAA,CAAA,EAtBnB,MAsBmB,CAAA,MAAA,EAAA,OAAA,CAAA;;UAnBjB,eAAA;WACN;YACC;YACA;;YAEA;;;;cAWC,YAAA;;wBAC4B;gBAEzB,kBAAkB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"engine.js","names":["registry: PolicyRegistry","allowReason: string | undefined","appliedRateLimit: PolicyDecision['rateLimit']","escalate: 'human_review' | null | undefined","specs: PolicySpec[]","allowMatch: RuleEvaluation | undefined","evaluation: RuleEvaluation","definition: RateLimitDefinition | undefined"],"sources":["../../src/policy/engine.ts"],"sourcesContent":["import {\n PolicyRegistry,\n type PolicyRef,\n type PolicySpec,\n type PolicyRule,\n type FieldPolicyRule,\n type PolicyCondition,\n type ConsentDefinition,\n type RateLimitDefinition,\n type RelationshipMatcher,\n} from './spec';\nimport type { PolicyDecision, FieldLevelDecision } from '../types';\n\nexport interface SubjectRelationship {\n relation: string;\n object: string;\n objectType?: string;\n}\n\nexport interface SubjectContext {\n roles?: string[];\n attributes?: Record<string, unknown>;\n relationships?: SubjectRelationship[];\n}\n\nexport interface ResourceContext {\n type: string;\n id?: string;\n fields?: string[];\n attributes?: Record<string, unknown>;\n}\n\nexport interface DecisionContext {\n subject: SubjectContext;\n resource: ResourceContext;\n context?: Record<string, unknown>;\n action: string;\n policies: PolicyRef[];\n consents?: string[];\n flags?: string[];\n}\n\ninterface RuleEvaluation {\n rule: PolicyRule;\n missingConsents: ConsentDefinition[];\n rateLimit?: PolicyDecision['rateLimit'];\n}\n\nexport class PolicyEngine {\n constructor(private readonly registry: PolicyRegistry) {}\n\n decide(input: DecisionContext): PolicyDecision {\n const policies = this.resolvePolicies(input.policies);\n let allowReason: string | undefined;\n let appliedRateLimit: PolicyDecision['rateLimit'];\n let escalate: 'human_review' | null | undefined;\n\n for (const policy of policies) {\n const match = this.matchRuleSet(policy, input);\n if (!match) continue;\n if (match.rule.effect === 'deny') {\n return {\n effect: 'deny',\n reason: match.rule.reason ?? policy.meta.name,\n requiredConsents: match.missingConsents.length\n ? match.missingConsents\n : undefined,\n evaluatedBy: 'engine',\n };\n }\n if (match.rule.effect === 'allow') {\n if (match.missingConsents.length) {\n return {\n effect: 'deny',\n reason: 'consent_required',\n requiredConsents: match.missingConsents,\n evaluatedBy: 'engine',\n };\n }\n if (!allowReason) {\n allowReason = match.rule.reason ?? policy.meta.name;\n }\n if (!appliedRateLimit && match.rateLimit) {\n appliedRateLimit = match.rateLimit;\n }\n if (!escalate && match.rule.escalate) {\n escalate = match.rule.escalate;\n }\n }\n }\n\n const fieldDecisions = this.evaluateFields(policies, input);\n const pii = policies.find((p) => p.pii)?.pii;\n const escalateValue =\n typeof escalate === 'undefined' ? undefined : escalate;\n\n return {\n effect: allowReason ? 'allow' : 'deny',\n reason: allowReason,\n rateLimit: appliedRateLimit,\n escalate: escalateValue,\n fieldDecisions: fieldDecisions.length ? fieldDecisions : undefined,\n pii,\n evaluatedBy: 'engine',\n };\n }\n\n private resolvePolicies(refs: PolicyRef[]): PolicySpec[] {\n const specs: PolicySpec[] = [];\n for (const ref of refs) {\n const spec = this.registry.get(ref.name, ref.version);\n if (!spec)\n throw new Error(\n `PolicyEngine: policy not found ${ref.name}.v${ref.version}`\n );\n specs.push(spec);\n }\n return specs;\n }\n\n private matchRuleSet(\n policy: PolicySpec,\n input: DecisionContext\n ): RuleEvaluation | undefined {\n let allowMatch: RuleEvaluation | undefined;\n for (const rule of policy.rules) {\n if (!rule.actions.includes(input.action)) continue;\n if (!matchesSubject(rule, input.subject)) continue;\n if (!matchesResource(rule, input.resource)) continue;\n if (!matchesFlags(rule, input)) continue;\n if (!matchesRelationships(rule.relationships, input)) continue;\n if (!matchesConditions(rule, input)) continue;\n const missingConsents = collectMissingConsents(rule, policy, input);\n const rateLimit = resolveRateLimit(rule, policy, input);\n const evaluation: RuleEvaluation = {\n rule,\n missingConsents,\n rateLimit,\n };\n if (rule.effect === 'deny') return evaluation;\n if (rule.effect === 'allow' && !allowMatch) allowMatch = evaluation;\n }\n return allowMatch;\n }\n\n private evaluateFields(\n policies: PolicySpec[],\n input: DecisionContext\n ): FieldLevelDecision[] {\n const out = new Map<string, FieldLevelDecision>();\n for (const policy of policies) {\n if (!policy.fieldPolicies) continue;\n for (const rule of policy.fieldPolicies) {\n if (!rule.actions.includes(mapActionToFieldAction(input.action))) continue;\n if (!matchesSubject(rule, input.subject)) continue;\n if (!matchesResource(rule, input.resource)) continue;\n if (!matchesConditions(rule, input)) continue;\n const existing = out.get(rule.field);\n if (rule.effect === 'deny') {\n out.set(rule.field, {\n field: rule.field,\n effect: 'deny',\n reason: rule.reason ?? policy.meta.name,\n });\n } else if (!existing) {\n out.set(rule.field, {\n field: rule.field,\n effect: 'allow',\n reason: rule.reason ?? policy.meta.name,\n });\n }\n }\n }\n return [...out.values()];\n }\n}\n\nfunction mapActionToFieldAction(action: string): 'read' | 'write' {\n if (action.startsWith('write')) return 'write';\n return 'read';\n}\n\nfunction matchesSubject(\n rule: { subject?: PolicyRule['subject'] | FieldPolicyRule['subject'] },\n subject: SubjectContext\n): boolean {\n const matcher = rule.subject;\n if (!matcher) return true;\n if (matcher.roles?.length) {\n const roles = subject.roles ?? [];\n const hasRole = matcher.roles.some((role) => roles.includes(role));\n if (!hasRole) return false;\n }\n if (matcher.attributes) {\n const attributes = subject.attributes ?? {};\n if (!matchAttributes(matcher.attributes, attributes)) return false;\n }\n return true;\n}\n\nfunction matchesResource(\n rule: { resource?: PolicyRule['resource'] | FieldPolicyRule['resource'] },\n resource: ResourceContext\n): boolean {\n const matcher = rule.resource;\n if (!matcher) return true;\n if (matcher.type && matcher.type !== resource.type) return false;\n if (matcher.fields?.length) {\n const targetFields = resource.fields ?? [];\n if (!matcher.fields.some((field) => targetFields.includes(field)))\n return false;\n }\n if (matcher.attributes) {\n const attributes = resource.attributes ?? {};\n if (!matchAttributes(matcher.attributes, attributes)) return false;\n }\n return true;\n}\n\nfunction matchesFlags(rule: PolicyRule, input: DecisionContext): boolean {\n if (!rule.flags?.length) return true;\n const available = new Set<string>();\n if (input.flags) {\n for (const flag of input.flags) available.add(flag);\n }\n const attributeFlags = input.subject.attributes?.featureFlags;\n if (Array.isArray(attributeFlags)) {\n for (const flag of attributeFlags) available.add(flag);\n }\n return rule.flags.every((flag) => available.has(flag));\n}\n\nfunction matchesRelationships(\n matchers: RelationshipMatcher[] | undefined,\n input: DecisionContext\n): boolean {\n if (!matchers || matchers.length === 0) return true;\n const relationships = input.subject.relationships ?? [];\n const resourceId = getResourceId(input.resource);\n const resourceType = input.resource.type;\n\n return matchers.every((matcher) =>\n relationships.some((relation) => {\n if (relation.relation !== matcher.relation) return false;\n\n const typeMatches =\n !matcher.objectType ||\n relation.objectType === matcher.objectType ||\n matcher.objectType === resourceType;\n\n if (!typeMatches) return false;\n\n if (!matcher.objectId) return true;\n\n if (matcher.objectId === '$resource') {\n if (resourceId) {\n return relation.object === resourceId;\n }\n return (\n relation.object === resourceType ||\n relation.objectType === resourceType\n );\n }\n\n return relation.object === matcher.objectId;\n })\n );\n}\n\nfunction matchesConditions(\n rule: { conditions?: PolicyCondition[] },\n input: DecisionContext\n): boolean {\n if (!rule.conditions || rule.conditions.length === 0) return true;\n return rule.conditions.every((condition) =>\n evaluateCondition(condition.expression, input)\n );\n}\n\nfunction matchAttributes(\n matcher: Record<string, import('./spec').AttributeMatcher>,\n actual: Record<string, unknown>\n): boolean {\n for (const [key, attrMatcher] of Object.entries(matcher)) {\n const value = actual[key];\n if (attrMatcher.exists && typeof value === 'undefined') return false;\n if (typeof attrMatcher.equals !== 'undefined') {\n if (value !== attrMatcher.equals) return false;\n }\n if (attrMatcher.oneOf && !attrMatcher.oneOf.includes(value)) return false;\n }\n return true;\n}\n\nfunction collectMissingConsents(\n rule: PolicyRule,\n policy: PolicySpec,\n input: DecisionContext\n): ConsentDefinition[] {\n if (!rule.requiresConsent?.length) return [];\n const granted = new Set(input.consents ?? []);\n const missingIds = rule.requiresConsent.filter((id) => !granted.has(id));\n if (missingIds.length === 0) return [];\n return resolveConsentDefinitions(policy, missingIds);\n}\n\nfunction resolveConsentDefinitions(\n policy: PolicySpec,\n ids: string[]\n): ConsentDefinition[] {\n const catalog = policy.consents ?? [];\n return ids.map((id) => {\n const found = catalog.find((consent) => consent.id === id);\n return (\n found ?? {\n id,\n scope: 'unspecified',\n purpose: 'unspecified',\n description: `Consent \"${id}\" required by ${policy.meta.name}`,\n required: true,\n }\n );\n });\n}\n\nfunction resolveRateLimit(\n rule: PolicyRule,\n policy: PolicySpec,\n input: DecisionContext\n): PolicyDecision['rateLimit'] | undefined {\n if (!rule.rateLimit) return undefined;\n const definition: RateLimitDefinition | undefined =\n typeof rule.rateLimit === 'string'\n ? (policy.rateLimits ?? []).find((item) => item.id === rule.rateLimit)\n : rule.rateLimit;\n\n if (!definition) {\n throw new Error(\n `PolicyEngine: rate limit \"${String(\n rule.rateLimit\n )}\" not declared in ${policy.meta.name}`\n );\n }\n\n return {\n rpm: definition.rpm,\n key: definition.key ?? input.resource.type,\n windowSeconds: definition.windowSeconds,\n burst: definition.burst,\n };\n}\n\nfunction evaluateCondition(\n expression: string,\n input: DecisionContext\n): boolean {\n const trimmed = expression.trim();\n if (!trimmed) return true;\n\n const context = {\n subject: input.subject,\n resource: input.resource,\n context: input.context ?? {},\n };\n\n try {\n // very small whitelist of expressions\n // Supports subject/resource/context dot paths, comparisons, and logical operators.\n const fn = new Function(\n 'subject',\n 'resource',\n 'context',\n `return (${transformExpression(trimmed)});`\n );\n const result = fn(context.subject, context.resource, context.context);\n return Boolean(result);\n } catch (_error) {\n return false;\n }\n}\n\nfunction transformExpression(expression: string): string {\n return expression.replace(/&&/g, '&&').replace(/\\|\\|/g, '||');\n}\n\nfunction getResourceId(resource: ResourceContext): string | undefined {\n if (resource.id) return resource.id;\n const candidate = resource.attributes?.id;\n if (typeof candidate === 'string') return candidate;\n if (typeof candidate === 'number') return String(candidate);\n return undefined;\n}\n\n"],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opa-adapter.d.ts","names":[],"sources":["../../src/policy/opa-adapter.ts"],"sourcesContent":[],"mappings":";;;;;UAIiB,SAAA;qDACoC,QAAQ;AAD7D;AAIiB,UAAA,mBAAA,CAAmB;EAOnB,MAAA,CAAA,EAAA,OAAA,GAAA,MAAiB;EAWrB,MAAA,CAAA,EAAA,MAAA;EAA0B,cAAA,CAAA,EAfpB,cAeoB,CAAA,gBAAA,CAAA;EAEV,gBAAA,CAAA,EAAA,MAAA,EAAA;;AACC,UAdb,iBAca,CAAA,SAdc,mBAcd,GAAA,IAAA,CAAA,CAAA;EAIjB;;;EAGA,YAAA,EAAA,MAAA;EAAR;;AAsCL;EACW,SAAA,CAAA,EAAA,CAAA,KAAA,EAAA,OAAA,EAAA,GApDuB,MAoDvB;;AAEO,cAnDL,gBAmDK,CAAA,SAnDqB,mBAmDrB,GAAA,IAAA,CAAA,CAAA;;;sBAjDW,oBACC,kBAAkB;oBAInC,2BACC,8BACM,iBACf,QAAQ;;iBAsCG,aAAA,UACL,2BACC,8BACM"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"opa-adapter.js","names":["client: OPAClient","options: OPAAdapterOptions<Result>"],"sources":["../../src/policy/opa-adapter.ts"],"sourcesContent":["import type { PolicyDecision } from '../types';\nimport type { PolicySpec, ConsentDefinition } from './spec';\nimport type { DecisionContext } from './engine';\n\nexport interface OPAClient {\n evaluate<T>(decisionPath: string, input: unknown): Promise<T>;\n}\n\nexport interface OPAEvaluationResult {\n effect?: 'allow' | 'deny';\n reason?: string;\n fieldDecisions?: PolicyDecision['fieldDecisions'];\n requiredConsents?: string[];\n}\n\nexport interface OPAAdapterOptions<Result = OPAEvaluationResult | null> {\n /**\n * Path fed to the OPA client (e.g., \"sigil/authz/allow\").\n */\n decisionPath: string;\n /**\n * Optional mapper when the OPA client returns a non-standard payload.\n */\n mapResult?: (value: unknown) => Result;\n}\n\nexport class OPAPolicyAdapter<Result = OPAEvaluationResult | null> {\n constructor(\n private readonly client: OPAClient,\n private readonly options: OPAAdapterOptions<Result>\n ) {}\n\n async evaluate(\n context: DecisionContext,\n policies: PolicySpec[],\n engineDecision: PolicyDecision\n ): Promise<PolicyDecision> {\n const input = buildOPAInput(context, policies, engineDecision);\n const raw = await this.client.evaluate<unknown>(\n this.options.decisionPath,\n input\n );\n const resolved = this.options.mapResult\n ? this.options.mapResult(raw)\n : (raw as OPAEvaluationResult | null);\n\n if (!resolved) {\n return {\n ...engineDecision,\n evaluatedBy: engineDecision.evaluatedBy ?? 'engine',\n };\n }\n\n const opaResult = resolved as OPAEvaluationResult;\n const mergedRequiredConsents = mergeRequiredConsents(\n policies,\n engineDecision.requiredConsents ?? [],\n opaResult.requiredConsents ?? []\n );\n\n return {\n ...engineDecision,\n effect: opaResult.effect ?? engineDecision.effect,\n reason: opaResult.reason ?? engineDecision.reason,\n fieldDecisions:\n opaResult.fieldDecisions ?? engineDecision.fieldDecisions,\n requiredConsents: mergedRequiredConsents.length\n ? mergedRequiredConsents\n : undefined,\n evaluatedBy: 'opa',\n };\n }\n}\n\nexport function buildOPAInput(\n context: DecisionContext,\n policies: PolicySpec[],\n engineDecision: PolicyDecision\n) {\n return {\n context,\n decision: engineDecision,\n policies: policies.map((policy) => ({\n meta: policy.meta,\n rules: policy.rules,\n fieldPolicies: policy.fieldPolicies,\n pii: policy.pii,\n relationships: policy.relationships,\n consents: policy.consents,\n rateLimits: policy.rateLimits,\n })),\n };\n}\n\nfunction mergeRequiredConsents(\n policies: PolicySpec[],\n existing: ConsentDefinition[],\n incomingIds: string[]\n): ConsentDefinition[] {\n if (incomingIds.length === 0) return existing;\n const existingIds = new Set(existing.map((consent) => consent.id));\n const merged = [...existing];\n\n for (const id of incomingIds) {\n if (existingIds.has(id)) continue;\n const resolved = resolveConsentAcrossPolicies(policies, id);\n if (resolved) {\n merged.push(resolved);\n existingIds.add(resolved.id);\n }\n }\n\n return merged;\n}\n\nfunction resolveConsentAcrossPolicies(\n policies: PolicySpec[],\n id: string\n): ConsentDefinition | null {\n for (const policy of policies) {\n const match = policy.consents?.find((consent) => consent.id === id);\n if (match) return match;\n }\n\n return {\n id,\n scope: 'unspecified',\n purpose: 'unspecified',\n description: `Consent \"${id}\" returned by OPA`,\n required: true,\n };\n}\n\n"],"mappings":"AA0BA,IAAa,EAAb,KAAmE,CACjE,YACE,EACA,EACA,CAFiB,KAAA,OAAA,EACA,KAAA,QAAA,EAGnB,MAAM,SACJ,EACA,EACA,EACyB,CACzB,IAAM,EAAQ,EAAc,EAAS,EAAU,EAAe,CACxD,EAAM,MAAM,KAAK,OAAO,SAC5B,KAAK,QAAQ,aACb,EACD,CACK,EAAW,KAAK,QAAQ,UAC1B,KAAK,QAAQ,UAAU,EAAI,CAC1B,EAEL,GAAI,CAAC,EACH,MAAO,CACL,GAAG,EACH,YAAa,EAAe,aAAe,SAC5C,CAGH,IAAM,EAAY,EACZ,EAAyB,EAC7B,EACA,EAAe,kBAAoB,EAAE,CACrC,EAAU,kBAAoB,EAAE,CACjC,CAED,MAAO,CACL,GAAG,EACH,OAAQ,EAAU,QAAU,EAAe,OAC3C,OAAQ,EAAU,QAAU,EAAe,OAC3C,eACE,EAAU,gBAAkB,EAAe,eAC7C,iBAAkB,EAAuB,OACrC,EACA,IAAA,GACJ,YAAa,MACd,GAIL,SAAgB,EACd,EACA,EACA,EACA,CACA,MAAO,CACL,UACA,SAAU,EACV,SAAU,EAAS,IAAK,IAAY,CAClC,KAAM,EAAO,KACb,MAAO,EAAO,MACd,cAAe,EAAO,cACtB,IAAK,EAAO,IACZ,cAAe,EAAO,cACtB,SAAU,EAAO,SACjB,WAAY,EAAO,WACpB,EAAE,CACJ,CAGH,SAAS,EACP,EACA,EACA,EACqB,CACrB,GAAI,EAAY,SAAW,EAAG,OAAO,EACrC,IAAM,EAAc,IAAI,IAAI,EAAS,IAAK,GAAY,EAAQ,GAAG,CAAC,CAC5D,EAAS,CAAC,GAAG,EAAS,CAE5B,IAAK,IAAM,KAAM,EAAa,CAC5B,GAAI,EAAY,IAAI,EAAG,CAAE,SACzB,IAAM,EAAW,EAA6B,EAAU,EAAG,CACvD,IACF,EAAO,KAAK,EAAS,CACrB,EAAY,IAAI,EAAS,GAAG,EAIhC,OAAO,EAGT,SAAS,EACP,EACA,EAC0B,CAC1B,IAAK,IAAM,KAAU,EAAU,CAC7B,IAAM,EAAQ,EAAO,UAAU,KAAM,GAAY,EAAQ,KAAO,EAAG,CACnE,GAAI,EAAO,OAAO,EAGpB,MAAO,CACL,KACA,MAAO,cACP,QAAS,cACT,YAAa,YAAY,EAAG,mBAC5B,SAAU,GACX"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.d.ts","names":[],"sources":["../../src/policy/spec.ts"],"sourcesContent":[],"mappings":";;;KAEY,YAAA;UAEK,sBAAA;EAFL,WAAA,EAAA,MAAY;EAEP,QAAA,EAAA,MAAA;EAQA,UAAA,EAAA,MAAA;EAMA,WAAA,CAAA,EAAA,MAAiB;EAUjB,UAAA,CAAA,EAAA,OAAA;AAQjB;AAOiB,UA/BA,mBAAA,CA+BmB;EASnB,QAAA,EAAA,MAAA;EAMA,UAAA,CAAA,EAAA,MAAc;EAKd,QAAA,CAAA,EAAA,MAAA;AAMjB;AAKiB,UAxDA,iBAAA,CAwDU;EACjB,EAAA,EAAA,MAAA;EAEE,KAAA,EAAA,MAAA;EACC,OAAA,EAAA,MAAA;EACK,WAAA,CAAA,EAAA,MAAA;EAGK,WAAA,CAAA,EAAA,SAAA,GAAA,UAAA,GAAA,kBAAA,GAAA,qBAAA;EAER,aAAA,CAAA,EAAA,MAAA;EAAe,QAAA,CAAA,EAAA,OAAA;AAI9B;AACU,UA7DO,mBAAA,CA6DP;EAGE,EAAA,EAAA,MAAA;EACC,GAAA,EAAA,MAAA;EACE,GAAA,CAAA,EAAA,MAAA;EAAe,aAAA,CAAA,EAAA,MAAA;EAIb,KAAA,CAAA,EAAA,MAAS;AAM1B;AACQ,UArES,eAAA,CAqET;EACC;EACS,OAAA,EAAA,MAAA;EACV;EACU,QAAA,CAAA,EAAA,MAAA;;AAEH,UApEE,UAAA,SAAmB,aAoErB,CAAA;EACP;EAAe,IAAA,EAAA,MAAA;EAGN;EAOJ,OAAA,EAAA,MAAA;EAGI;EAQP,KAAA,CAAA,EAAA,QAAA,GAAA,SAAA,GAAA,WAAA;;AAIuC,UArFhC,gBAAA,CAqFgC;EAejC,MAAA,CAAA,EAAA,OAAa;;;;UA9FZ,cAAA;;eAEF,eAAe;;UAGb,eAAA;;;eAGF,eAAe;;UAGb,eAAA;;;;UAKA,UAAA;UACP;;YAEE;aACC;kBACK;;;uBAGK;;eAER;;;UAIE,eAAA;UACP;;;YAGE;aACC;eACE;;;UAIE,SAAA;;;;;UAMA,UAAA;QACT;SACC;kBACS;QACV;kBACU;aACL;eACE;QACP;;UAGS,SAAA;;;;cAOJ,cAAA;;iBAGI;UAQP;uCAI6B;;iBAevB,aAAA,MAAmB"}
|
package/dist/policy/spec.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"spec.js","names":["candidate: PolicySpec | undefined"],"sources":["../../src/policy/spec.ts"],"sourcesContent":["import type { OwnerShipMeta } from '../ownership';\n\nexport type PolicyEffect = 'allow' | 'deny';\n\nexport interface RelationshipDefinition {\n subjectType: string;\n relation: string;\n objectType: string;\n description?: string;\n transitive?: boolean;\n}\n\nexport interface RelationshipMatcher {\n relation: string;\n objectType?: string;\n objectId?: string;\n}\n\nexport interface ConsentDefinition {\n id: string;\n scope: string;\n purpose: string;\n description?: string;\n lawfulBasis?: 'consent' | 'contract' | 'legal_obligation' | 'legitimate_interest';\n expiresInDays?: number;\n required?: boolean;\n}\n\nexport interface RateLimitDefinition {\n id: string;\n rpm: number;\n key?: string;\n windowSeconds?: number;\n burst?: number;\n}\n\nexport interface PolicyOPAConfig {\n /** Fully-qualified package, e.g. \"sigil.authz\" */\n package: string;\n /** Optional rule within package (defaults to \"allow\") */\n decision?: string;\n}\n\nexport interface PolicyMeta extends OwnerShipMeta {\n /** Fully-qualified policy name (e.g., \"sigil.core.default\"). */\n name: string;\n /** Version of the policy; bump on breaking changes. */\n version: number;\n /** Optional scope hint used for discovery. */\n scope?: 'global' | 'feature' | 'operation';\n}\n\nexport interface AttributeMatcher {\n equals?: unknown;\n oneOf?: unknown[];\n exists?: boolean;\n}\n\nexport interface SubjectMatcher {\n roles?: string[];\n attributes?: Record<string, AttributeMatcher>;\n}\n\nexport interface ResourceMatcher {\n type: string;\n fields?: string[];\n attributes?: Record<string, AttributeMatcher>;\n}\n\nexport interface PolicyCondition {\n /** Simple expression evaluated against { subject, resource, context }. */\n expression: string;\n}\n\nexport interface PolicyRule {\n effect: PolicyEffect;\n actions: string[];\n subject?: SubjectMatcher;\n resource?: ResourceMatcher;\n relationships?: RelationshipMatcher[];\n requiresConsent?: string[];\n flags?: string[];\n rateLimit?: string | RateLimitDefinition;\n escalate?: 'human_review' | null;\n conditions?: PolicyCondition[];\n reason?: string;\n}\n\nexport interface FieldPolicyRule {\n effect: PolicyEffect;\n field: string;\n actions: ('read' | 'write')[];\n subject?: SubjectMatcher;\n resource?: ResourceMatcher;\n conditions?: PolicyCondition[];\n reason?: string;\n}\n\nexport interface PIIPolicy {\n fields: string[];\n consentRequired?: boolean;\n retentionDays?: number;\n}\n\nexport interface PolicySpec {\n meta: PolicyMeta;\n rules: PolicyRule[];\n fieldPolicies?: FieldPolicyRule[];\n pii?: PIIPolicy;\n relationships?: RelationshipDefinition[];\n consents?: ConsentDefinition[];\n rateLimits?: RateLimitDefinition[];\n opa?: PolicyOPAConfig;\n}\n\nexport interface PolicyRef {\n name: string;\n version: number;\n}\n\nconst policyKey = (name: string, version: number) => `${name}.v${version}`;\n\nexport class PolicyRegistry {\n private readonly items = new Map<string, PolicySpec>();\n\n register(spec: PolicySpec): this {\n const key = policyKey(spec.meta.name, spec.meta.version);\n if (this.items.has(key))\n throw new Error(`Duplicate policy ${key}`);\n this.items.set(key, spec);\n return this;\n }\n\n list(): PolicySpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): PolicySpec | undefined {\n if (version != null) return this.items.get(policyKey(name, version));\n let candidate: PolicySpec | undefined;\n let max = -Infinity;\n for (const spec of this.items.values()) {\n if (spec.meta.name !== name) continue;\n if (spec.meta.version > max) {\n max = spec.meta.version;\n candidate = spec;\n }\n }\n return candidate;\n }\n}\n\nexport function makePolicyKey(ref: PolicyRef) {\n return policyKey(ref.name, ref.version);\n}\n\n"],"mappings":"AAwHA,MAAM,GAAa,EAAc,IAAoB,GAAG,EAAK,IAAI,IAEjE,IAAa,EAAb,KAA4B,CAC1B,MAAyB,IAAI,IAE7B,SAAS,EAAwB,CAC/B,IAAM,EAAM,EAAU,EAAK,KAAK,KAAM,EAAK,KAAK,QAAQ,CACxD,GAAI,KAAK,MAAM,IAAI,EAAI,CACrB,MAAU,MAAM,oBAAoB,IAAM,CAE5C,OADA,KAAK,MAAM,IAAI,EAAK,EAAK,CAClB,KAGT,MAAqB,CACnB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAA0C,CAC1D,GAAI,GAAW,KAAM,OAAO,KAAK,MAAM,IAAI,EAAU,EAAM,EAAQ,CAAC,CACpE,IAAIA,EACA,EAAM,KACV,IAAK,IAAM,KAAQ,KAAK,MAAM,QAAQ,CAChC,EAAK,KAAK,OAAS,GACnB,EAAK,KAAK,QAAU,IACtB,EAAM,EAAK,KAAK,QAChB,EAAY,GAGhB,OAAO,IAIX,SAAgB,EAAc,EAAgB,CAC5C,OAAO,EAAU,EAAI,KAAM,EAAI,QAAQ"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.backcompat.d.ts","names":[],"sources":["../src/presentations.backcompat.ts"],"sourcesContent":[],"mappings":";;;;iBAGgB,UAAA,KAAe,mBAAmB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.backcompat.js","names":[],"sources":["../src/presentations.backcompat.ts"],"sourcesContent":["import type { PresentationSpec } from './presentations';\nimport type { PresentationDescriptorV2 } from './presentations.v2';\n\nexport function toV2FromV1(v1: PresentationSpec): PresentationDescriptorV2 {\n if (v1.content.kind === 'web_component') {\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'component',\n framework: v1.content.framework,\n componentKey: v1.content.componentKey,\n props: v1.content.props,\n },\n targets: ['react', 'application/json', 'application/xml'],\n };\n }\n if (v1.content.kind === 'markdown') {\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'blocknotejs',\n docJson: v1.content.content ?? v1.content.resourceUri ?? '',\n },\n targets: ['markdown', 'application/json', 'application/xml'],\n };\n }\n return {\n meta: { ...v1.meta },\n policy: v1.policy,\n source: {\n type: 'blocknotejs',\n docJson: { kind: 'data', mimeType: v1.content.mimeType, model: 'schema' },\n },\n targets: ['application/json', 'application/xml'],\n };\n}\n"],"mappings":"AAGA,SAAgB,EAAW,EAAgD,CAyBzE,OAxBI,EAAG,QAAQ,OAAS,gBACf,CACL,KAAM,CAAE,GAAG,EAAG,KAAM,CACpB,OAAQ,EAAG,OACX,OAAQ,CACN,KAAM,YACN,UAAW,EAAG,QAAQ,UACtB,aAAc,EAAG,QAAQ,aACzB,MAAO,EAAG,QAAQ,MACnB,CACD,QAAS,CAAC,QAAS,mBAAoB,kBAAkB,CAC1D,CAEC,EAAG,QAAQ,OAAS,WACf,CACL,KAAM,CAAE,GAAG,EAAG,KAAM,CACpB,OAAQ,EAAG,OACX,OAAQ,CACN,KAAM,cACN,QAAS,EAAG,QAAQ,SAAW,EAAG,QAAQ,aAAe,GAC1D,CACD,QAAS,CAAC,WAAY,mBAAoB,kBAAkB,CAC7D,CAEI,CACL,KAAM,CAAE,GAAG,EAAG,KAAM,CACpB,OAAQ,EAAG,OACX,OAAQ,CACN,KAAM,cACN,QAAS,CAAE,KAAM,OAAQ,SAAU,EAAG,QAAQ,SAAU,MAAO,SAAU,CAC1E,CACD,QAAS,CAAC,mBAAoB,kBAAkB,CACjD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.d.ts","names":[],"sources":["../src/presentations.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,gBAAA;AAAZ;AAGiB,UAAA,gBAAA,CAAgB;EAUhB,IAAA,EAAA,MAAA;EAMA,OAAA,EAAA,MAAA;EAWA,SAAA,CAAA,EAxBH,SAwBG;EASA,MAAA,CAAA,EAAA,MAAA,EAAA;EAOL,IAAA,CAAA,EAAA,MAAA,EAAA;EACR,WAAA,CAAA,EAAA,MAAA;;;AAEgB,UApCH,kBAAA,CAoCG;EAEH,KAAA,CAAA,EAAA,MAAA,EAAA;EACT,GAAA,CAAA,EAAA,MAAA,EAAA;;;AAEsB,UAnCb,wBAAA,CAmCa;EAQjB,IAAA,EAAA,eAAA;EAGC,SAAA,EAAA,OAAA;EAOJ;EAI6B,YAAA,EAAA,MAAA;EAAgB;EAevC,KAAA,EAlEP,cAkEO;EAA6B,SAAA,CAAA,EAAA,MAAA,EAAA;;;AASR,UAtEpB,oBAAA,CAsEoB;;EAAA;;;EAAA,WAAA,CAAA,EAAA,MAAA;;;UA7DpB,gBAAA;;;;SAIR;;KAGG,mBAAA,GACR,2BACA,uBACA;UAEa,gBAAA;QACT;WACG;WACA;;;cAQE,oBAAA;;cAGC;UAOJ;uCAI6B;;iBAevB,yBAAA,IAA6B;;;;;;;;;;;QASR;;;;;;;;;;;QAAA;;;;;;;;;;;QAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.js","names":["candidate: PresentationSpec | undefined","z"],"sources":["../src/presentations.ts"],"sourcesContent":["import type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { Stability } from './ownership';\nimport z from 'zod';\n\n/** V1 presentation kinds (back-compat). Prefer V2 descriptors for new work. */\nexport type PresentationKind = 'web_component' | 'markdown' | 'data';\n\n/** Minimal metadata for presentations (V1). */\nexport interface PresentationMeta {\n name: string;\n version: number;\n stability?: Stability;\n owners?: string[];\n tags?: string[];\n description?: string;\n}\n\n/** Policy for presentations (flags, pii). */\nexport interface PresentationPolicy {\n flags?: string[];\n pii?: string[];\n}\n\n/** Web component presentation (V1). */\nexport interface WebComponentPresentation {\n kind: 'web_component';\n framework: 'react'; // future: 'vue' | 'angular'\n /** Symbolic key resolved by host via component map */\n componentKey: string;\n /** Props schema (validated at runtime) */\n props: AnySchemaModel;\n analytics?: string[];\n}\n\n/** Markdown presentation (V1). */\nexport interface MarkdownPresentation {\n kind: 'markdown';\n /** Inline markdown/MDX content */\n content?: string;\n /** Or a resolvable resource URI handled by ResourceRegistry */\n resourceUri?: string;\n}\n\n/** Data presentation (V1): structured export description. */\nexport interface DataPresentation {\n kind: 'data';\n mimeType: string; // e.g., application/json, application/xml\n /** Structured data schema */\n model: AnySchemaModel;\n}\n\nexport type PresentationContent =\n | WebComponentPresentation\n | MarkdownPresentation\n | DataPresentation;\n\nexport interface PresentationSpec {\n meta: PresentationMeta;\n policy?: PresentationPolicy;\n content: PresentationContent;\n}\n\nfunction keyOf(p: PresentationSpec) {\n return `${p.meta.name}.v${p.meta.version}`;\n}\n\n/** In-memory registry for V1 PresentationSpec. */\nexport class PresentationRegistry {\n private items = new Map<string, PresentationSpec>();\n\n register(p: PresentationSpec): this {\n const key = keyOf(p);\n if (this.items.has(key)) throw new Error(`Duplicate presentation ${key}`);\n this.items.set(key, p);\n return this;\n }\n\n list(): PresentationSpec[] {\n return [...this.items.values()];\n }\n\n get(name: string, version?: number): PresentationSpec | undefined {\n if (version != null) return this.items.get(`${name}.v${version}`);\n let candidate: PresentationSpec | undefined;\n let max = -Infinity;\n for (const [k, p] of this.items.entries()) {\n if (!k.startsWith(`${name}.v`)) continue;\n if (p.meta.version > max) {\n max = p.meta.version;\n candidate = p;\n }\n }\n return candidate;\n }\n}\n\nexport function jsonSchemaForPresentation(p: PresentationSpec) {\n const base = {\n meta: {\n name: p.meta.name,\n version: p.meta.version,\n stability: p.meta.stability ?? 'stable',\n tags: p.meta.tags ?? [],\n description: p.meta.description ?? '',\n },\n kind: (p.content as any).kind as PresentationKind,\n } as const;\n\n if (p.content.kind === 'web_component') {\n return {\n ...base,\n framework: p.content.framework,\n componentKey: p.content.componentKey,\n props: z.toJSONSchema(p.content.props.getZod()),\n };\n }\n if (p.content.kind === 'markdown') {\n return {\n ...base,\n content: p.content.content,\n resourceUri: p.content.resourceUri,\n };\n }\n return {\n ...base,\n mimeType: p.content.mimeType,\n model: z.toJSONSchema(p.content.model.getZod()),\n };\n}\n"],"mappings":"mBA8DA,SAAS,EAAM,EAAqB,CAClC,MAAO,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,UAInC,IAAa,EAAb,KAAkC,CAChC,MAAgB,IAAI,IAEpB,SAAS,EAA2B,CAClC,IAAM,EAAM,EAAM,EAAE,CACpB,GAAI,KAAK,MAAM,IAAI,EAAI,CAAE,MAAU,MAAM,0BAA0B,IAAM,CAEzE,OADA,KAAK,MAAM,IAAI,EAAK,EAAE,CACf,KAGT,MAA2B,CACzB,MAAO,CAAC,GAAG,KAAK,MAAM,QAAQ,CAAC,CAGjC,IAAI,EAAc,EAAgD,CAChE,GAAI,GAAW,KAAM,OAAO,KAAK,MAAM,IAAI,GAAG,EAAK,IAAI,IAAU,CACjE,IAAIA,EACA,EAAM,KACV,IAAK,GAAM,CAAC,EAAG,KAAM,KAAK,MAAM,SAAS,CAClC,EAAE,WAAW,GAAG,EAAK,IAAI,EAC1B,EAAE,KAAK,QAAU,IACnB,EAAM,EAAE,KAAK,QACb,EAAY,GAGhB,OAAO,IAIX,SAAgB,EAA0B,EAAqB,CAC7D,IAAM,EAAO,CACX,KAAM,CACJ,KAAM,EAAE,KAAK,KACb,QAAS,EAAE,KAAK,QAChB,UAAW,EAAE,KAAK,WAAa,SAC/B,KAAM,EAAE,KAAK,MAAQ,EAAE,CACvB,YAAa,EAAE,KAAK,aAAe,GACpC,CACD,KAAO,EAAE,QAAgB,KAC1B,CAiBD,OAfI,EAAE,QAAQ,OAAS,gBACd,CACL,GAAG,EACH,UAAW,EAAE,QAAQ,UACrB,aAAc,EAAE,QAAQ,aACxB,MAAOC,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC,CAChD,CAEC,EAAE,QAAQ,OAAS,WACd,CACL,GAAG,EACH,QAAS,EAAE,QAAQ,QACnB,YAAa,EAAE,QAAQ,YACxB,CAEI,CACL,GAAG,EACH,SAAU,EAAE,QAAQ,SACpB,MAAOA,EAAE,aAAa,EAAE,QAAQ,MAAM,QAAQ,CAAC,CAChD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.v2.d.ts","names":[],"sources":["../src/presentations.v2.ts"],"sourcesContent":[],"mappings":";;;;;;KAKY,kBAAA;AAAA,UAMK,kBAAA,SAA2B,OANd,CAMsB,aANtB,CAAA,CAAA;EAMb;EAUA,IAAA,EAAA,MAAA;EAYA;EASL,OAAA,EAAA,MAAA;EAQK;EACT,WAAA,CAAA,EAAA,MAAA;;;AAGqB,UAjCZ,gCAAA,CAiCY;EAGZ;EASA,IAAA,EAAA,WAAA;EACP;EAEA,SAAA,EAAA,OAAA;EACA;EACK,YAAA,EAAA,MAAA;EAAR;EAAO,KAAA,CAAA,EA1CJ,cA0CI;AAGd;;AAGY,UA5CK,6BAAA,CA4CL;EACF;EACH,IAAA,EAAA,aAAA;EAAO;EAOD,OAAA,EAAA,OAAA;EAOmC;EAArB,WAAA,CAAA,EAtDX,WAsDW;;AAaf,KAhEA,kBAAA,GACR,gCA+DQ,GA9DR,6BA8DQ;;;;;AAGA,UA3DK,wBAAA,CA2DL;EAsBI,IAAA,EAhFR,kBAgFQ;EA4FJ,MAAA,CAAA,EAAA;IASI,KAAA,CAAA,EAAA,MAAA,EAAA;IA8BA,GAAA,CAAA,EAAA,MAAA,EAAA;;UAjNN;WACC;;UAGM,aAAA;;;;;;;;UASA;UACP;iBAEA,gCACA,kBACH,QAAQ;;UAGE,qBAAA;mBAEP,kCACE,0BACF,kBACH;;;;;;cAOM,eAAA;;;2BAOc,qBAAqB;kBAO9B;iCAMN,0BACF,gCACA,gBACL,QAAQ;;;iBAsBG,4BAAA,CAAA,GAA4B;;KA4FhC,qBAAA;;;UAIE;;;;gBAE6C;;;iBAG3C,4BAAA,SAAqC,kBAAe;;;;iBA8BpD,uBAAA,SAAgC,kBAAe"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"presentations.v2.js","names":[],"sources":["../src/presentations.v2.ts"],"sourcesContent":["import type { AnySchemaModel } from '@lssm/lib.schema';\nimport type { OwnerShipMeta } from './ownership';\nimport type { BlockConfig } from '@blocknote/core';\n\n/** Supported render targets for the transform engine and descriptors. */\nexport type PresentationTarget =\n | 'react'\n | 'markdown'\n | 'application/json'\n | 'application/xml';\n\nexport interface PresentationV2Meta extends Partial<OwnerShipMeta> {\n /** Fully-qualified presentation name (e.g., \"sigil.auth.webauth_tabs_v2\"). */\n name: string;\n /** Version of this descriptor. Increment on breaking changes. */\n version: number;\n /** Human-readable description for docs/a11y. Required by validators. */\n description?: string;\n}\n\n/** React component presentation source. */\nexport interface PresentationSourceComponentReact {\n /** Source marker for React component presentations. */\n type: 'component';\n /** Framework for the component source (currently only 'react'). */\n framework: 'react';\n /** Component key resolved by host `componentMap`. */\n componentKey: string;\n /** Optional props schema to validate against. */\n props?: AnySchemaModel;\n}\n\n/** BlockNoteJS document presentation source. */\nexport interface PresentationSourceBlocknotejs {\n /** Source marker for BlockNoteJS document presentations. */\n type: 'blocknotejs';\n /** BlockNoteJS JSON document. */\n docJson: unknown;\n /** Optional BlockNote config to guide rendering. */\n blockConfig?: BlockConfig;\n}\n\nexport type PresentationSource =\n | PresentationSourceComponentReact\n | PresentationSourceBlocknotejs;\n\n/**\n * Normalized presentation descriptor decoupled from framework/adapters.\n * Renderers and validators are provided via TransformEngine.\n */\nexport interface PresentationDescriptorV2 {\n meta: PresentationV2Meta;\n policy?: { flags?: string[]; pii?: string[] };\n source: PresentationSource;\n targets: PresentationTarget[]; // which outputs are supported by transforms\n}\n\nexport interface RenderContext {\n /** Optional locale hint (i18n). */\n locale?: string;\n /** Enabled feature flags to drive conditional rendering. */\n featureFlags?: string[];\n /** Redaction hook for custom PII handling. */\n redact?: (path: string, value: unknown) => unknown;\n}\n\nexport interface PresentationRenderer<TOut> {\n target: PresentationTarget;\n render: (\n desc: PresentationDescriptorV2,\n ctx?: RenderContext\n ) => Promise<TOut>;\n}\n\nexport interface PresentationValidator {\n validate: (\n desc: PresentationDescriptorV2,\n target: PresentationTarget,\n ctx?: RenderContext\n ) => Promise<void> | void;\n}\n\n/**\n * Pluggable transform engine that renders descriptors to various targets\n * and runs validators (e.g., basic metadata checks, PII redaction policies).\n */\nexport class TransformEngine {\n private renderers = new Map<\n PresentationTarget,\n PresentationRenderer<any>[]\n >();\n private validators: PresentationValidator[] = [];\n\n register<TOut>(renderer: PresentationRenderer<TOut>): this {\n const arr = this.renderers.get(renderer.target) ?? [];\n arr.push(renderer);\n this.renderers.set(renderer.target, arr);\n return this;\n }\n\n addValidator(v: PresentationValidator): this {\n this.validators.push(v);\n return this;\n }\n\n async render<TOut = unknown>(\n target: PresentationTarget,\n desc: PresentationDescriptorV2,\n ctx?: RenderContext\n ): Promise<TOut> {\n if (!desc.targets.includes(target))\n throw new Error(\n `Target ${target} not declared for ${desc.meta.name}.v${desc.meta.version}`\n );\n for (const v of this.validators) await v.validate(desc, target, ctx);\n const arr = this.renderers.get(target) ?? [];\n for (const r of arr) {\n try {\n const out = await r.render(desc, ctx);\n // first successful renderer wins\n return out as TOut;\n } catch (_e) {\n // try next\n }\n }\n throw new Error(`No renderer available for ${target}`);\n }\n}\n\n// Minimal built-ins (stubs). Host apps can register concrete adapters.\n/** Create a TransformEngine instance with default markdown/json/xml renderers. */\nexport function createDefaultTransformEngine() {\n const engine = new TransformEngine();\n\n const applyPii = (desc: PresentationDescriptorV2, obj: any) => {\n const clone = JSON.parse(JSON.stringify(obj));\n const paths = desc.policy?.pii ?? [];\n const setAtPath = (root: any, path: string) => {\n const segs = path\n .replace(/^\\//, '')\n .replace(/\\[(\\d+)\\]/g, '.$1')\n .split('.')\n .filter(Boolean);\n let cur = root;\n for (let i = 0; i < segs.length - 1; i++) {\n const k = segs[i]!;\n if (cur && typeof cur === 'object' && k in cur) cur = cur[k];\n else return;\n }\n const last = segs[segs.length - 1];\n if (cur && typeof cur === 'object' && last && last in cur)\n cur[last] = '[REDACTED]';\n };\n for (const p of paths) setAtPath(clone, p);\n return clone;\n };\n\n // markdown output for both blocknote and component\n engine.register<{ mimeType: 'text/markdown'; body: string }>({\n target: 'markdown',\n async render(desc) {\n if (desc.source.type === 'blocknotejs') {\n // TODO: convert BlockNote doc JSON → markdown (placeholder for now)\n const raw =\n typeof desc.source.docJson === 'string'\n ? desc.source.docJson\n : JSON.stringify(desc.source.docJson);\n const redacted = applyPii(desc, { text: raw });\n return { mimeType: 'text/markdown', body: String(redacted.text) };\n }\n if (desc.source.type === 'component') {\n const header = `# ${desc.meta.name} v${desc.meta.version}`;\n const about = desc.meta.description\n ? `\\n\\n${desc.meta.description}`\n : '';\n const tags =\n desc.meta.tags && desc.meta.tags.length\n ? `\\n\\nTags: ${desc.meta.tags.join(', ')}`\n : '';\n const owners =\n desc.meta.owners && desc.meta.owners.length\n ? `\\n\\nOwners: ${desc.meta.owners.join(', ')}`\n : '';\n const comp = `\\n\\nComponent: \\`${desc.source.componentKey}\\``;\n const policy = desc.policy?.pii?.length\n ? `\\n\\nRedacted paths: ${desc.policy.pii.map((p) => `\\`${p}\\``).join(', ')}`\n : '';\n const body = `${header}${about}${tags}${owners}${comp}${policy}`;\n return { mimeType: 'text/markdown', body };\n }\n throw new Error('unsupported');\n },\n });\n\n // json snapshot of source\n engine.register<{ mimeType: 'application/json'; body: string }>({\n target: 'application/json',\n async render(desc) {\n const payload = applyPii(desc, { meta: desc.meta, source: desc.source });\n return {\n mimeType: 'application/json',\n body: JSON.stringify(payload, null, 2),\n };\n },\n });\n\n // xml (simple wrapper around json for now)\n engine.register<{ mimeType: 'application/xml'; body: string }>({\n target: 'application/xml',\n async render(desc) {\n const json = applyPii(desc, { meta: desc.meta, source: desc.source });\n const body = `<presentation name=\"${desc.meta.name}\" version=\"${desc.meta.version}\"><json>${encodeURIComponent(\n JSON.stringify(json)\n )}</json></presentation>`;\n return { mimeType: 'application/xml', body };\n },\n });\n\n return engine;\n}\n\n// React target returns a serializable descriptor the host can render.\n/** Serializable render descriptor for React hosts. */\nexport type ReactRenderDescriptor =\n | {\n kind: 'react_component';\n componentKey: string;\n props?: Record<string, unknown>;\n }\n | { kind: 'blocknotejs'; docJson: unknown; blockConfig?: BlockConfig };\n\n/** Register a default React target renderer that returns a serializable descriptor. */\nexport function registerDefaultReactRenderer(engine: TransformEngine) {\n engine.register<ReactRenderDescriptor>({\n target: 'react',\n async render(desc) {\n if (desc.source.type === 'component') {\n const props = desc.source.props\n ? desc.source.props.getZod().safeParse({}).success\n ? {}\n : undefined\n : undefined;\n return {\n kind: 'react_component',\n componentKey: desc.source.componentKey,\n props,\n } as ReactRenderDescriptor;\n }\n // blocknote\n return {\n kind: 'blocknotejs',\n docJson: desc.source.docJson,\n blockConfig: desc.source.blockConfig,\n } as ReactRenderDescriptor;\n },\n });\n return engine;\n}\n\n/**\n * Add basic validators (e.g., meta.description presence) to the engine.\n */\nexport function registerBasicValidation(engine: TransformEngine) {\n // Ensure description is provided for a11y/i18n/docs\n engine.addValidator({\n validate(desc) {\n if (!desc.meta.description || desc.meta.description.length < 3)\n throw new Error(\n `Presentation ${desc.meta.name}.v${desc.meta.version} missing meta.description`\n );\n },\n });\n return engine;\n}\n"],"mappings":"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"}
|
package/dist/prompt.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.d.ts","names":[],"sources":["../src/prompt.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;;AAAA,UAGK,SAAA,CAHU;EAGV,IAAA,EAAA,MAAS;EAWd,WAAA,CAAA,EAAA,MAAiB;EAKZ,QAAA,CAAA,EAAA,OAAU;EAWV,MAAA,EAvBP,CAAA,CAAE,OAuBiB;EAOZ,YAAA,CAAU,EAAA,MAAA;;;;;AAIhB,KA3BC,iBAAA,GA2BD;EAIO,IAAA,EAAA,MAAA;EAAN,IAAA,EAAA,MAAA;CAKyB,GAAA;EAEtB,IAAA,EAAA,UAAA;EAAR,GAAA,EAAA,MAAA;EAAO,KAAA,CAAA,EAAA,MAAA;AAId,CAAA;;AACmB,UAtCF,UAAA,CAsCE;EAAX,IAAA,EAAA,MAAA;EACM,OAAA,EAAA,MAAA;EAAX,KAAA,EAAA,MAAA;EAAU,WAAA,EAAA,MAAA;;cAjCC;;;;UAKG,YAAA;;;;;;;;;UAOA,qBAAqB,CAAA,CAAE;QAChC;QACA;SACC;WACE;;iBAID,CAAA,CAAE,MAAM;;;;mCAKmB;QAE9B,QAAQ;;;iBAIC,uBAAuB,CAAA,CAAE,eACjC,WAAW,KAChB,WAAW"}
|
package/dist/prompt.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"prompt.js","names":[],"sources":["../src/prompt.ts"],"sourcesContent":["import { z } from 'zod';\n\nexport type PromptStability = 'experimental' | 'beta' | 'stable' | 'deprecated';\n\n/** Parameter definition for a prompt argument. */\nexport interface PromptArg {\n name: string;\n description?: string;\n required?: boolean;\n schema: z.ZodType; // zod schema for this argument\n completeWith?: string; // optional completion source name\n}\n\n/**\n * Rendered content part for a prompt. Clients (MCP) can fetch referenced resources.\n */\nexport type PromptContentPart =\n | { type: 'text'; text: string }\n | { type: 'resource'; uri: string; title?: string };\n\n/** Prompt metadata for discoverability and governance. */\nexport interface PromptMeta {\n name: string; // e.g. \"sigil.signup-help\"\n version: number; // bump on breaking change\n title: string;\n description: string;\n tags?: string[];\n stability?: PromptStability;\n owners?: string[];\n}\n\n/** Policy constraints for prompts (flags, PII paths, rate limits). */\nexport interface PromptPolicy {\n flags?: string[];\n pii?: string[]; // JSON-like paths within args to redact in logs/prompts\n rateLimit?: { rpm: number; key: 'user' | 'org' | 'global' };\n}\n\n/** Full prompt specification including args schema and render function. */\nexport interface PromptSpec<I extends z.ZodType> {\n meta: PromptMeta;\n args: PromptArg[];\n input: I; // full args object schema (zod)\n policy?: PromptPolicy;\n\n /** Render MCP-friendly content parts. DO NOT perform side effects here. */\n render: (\n args: z.infer<I>,\n ctx: {\n userId?: string | null;\n orgId?: string | null;\n locale?: string;\n link: (template: string, vars: Record<string, string | number>) => string;\n }\n ) => Promise<PromptContentPart[]>;\n}\n\n/** Identity helper that preserves generic inference when declaring prompts. */\nexport function definePrompt<I extends z.ZodType>(\n spec: PromptSpec<I>\n): PromptSpec<I> {\n return spec;\n}\n"],"mappings":"wBA0DA,SAAgB,EACd,EACe,CACf,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promptRegistry.d.ts","names":[],"sources":["../src/promptRegistry.ts"],"sourcesContent":[],"mappings":";;;;cAGa,cAAA;;EAAA;EAIU,QAAA,CAAA,UAAF,CAAA,CAAE,OAAA,CAAA,CAAA,CAAA,EAAY,UAAZ,CAAuB,CAAvB,CAAA,CAAA,EAAA,IAAA;EAAuB;EAAX,IAAA,CAAA,CAAA,EAQ7B,UAR6B,CAAA,GAAA,CAAA,EAAA;EAQ7B;EAK8B,GAAA,CAAA,IAAA,EAAA,MAAA,EAAA,OAAA,CAAA,EAAA,MAAA,CAAA,EAAA,UAAA,CAAA,GAAA,CAAA,GAAA,SAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"promptRegistry.js","names":["candidate: PromptSpec<any> | undefined"],"sources":["../src/promptRegistry.ts"],"sourcesContent":["import type { PromptSpec } from './prompt';\nimport { z } from 'zod';\n\nexport class PromptRegistry {\n private prompts = new Map<string, PromptSpec<any>>(); // key = name.vX\n\n /** Register a prompt. Throws on duplicate name+version. */\n register<I extends z.ZodType>(p: PromptSpec<I>): this {\n const key = `${p.meta.name}.v${p.meta.version}`;\n if (this.prompts.has(key)) throw new Error(`Duplicate prompt ${key}`);\n this.prompts.set(key, p);\n return this;\n }\n\n /** List all registered prompts. */\n list() {\n return [...this.prompts.values()];\n }\n\n /** Get prompt by name; when version omitted, returns highest version. */\n get(name: string, version?: number) {\n if (version != null) return this.prompts.get(`${name}.v${version}`);\n // latest by highest version\n let candidate: PromptSpec<any> | undefined;\n let max = -Infinity;\n for (const [k, p] of this.prompts.entries()) {\n if (!k.startsWith(`${name}.v`)) continue;\n if (p.meta.version > max) {\n max = p.meta.version;\n candidate = p;\n }\n }\n return candidate;\n }\n}\n"],"mappings":"wBAGA,IAAa,EAAb,KAA4B,CAC1B,QAAkB,IAAI,IAGtB,SAA8B,EAAwB,CACpD,IAAM,EAAM,GAAG,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,UACtC,GAAI,KAAK,QAAQ,IAAI,EAAI,CAAE,MAAU,MAAM,oBAAoB,IAAM,CAErE,OADA,KAAK,QAAQ,IAAI,EAAK,EAAE,CACjB,KAIT,MAAO,CACL,MAAO,CAAC,GAAG,KAAK,QAAQ,QAAQ,CAAC,CAInC,IAAI,EAAc,EAAkB,CAClC,GAAI,GAAW,KAAM,OAAO,KAAK,QAAQ,IAAI,GAAG,EAAK,IAAI,IAAU,CAEnE,IAAIA,EACA,EAAM,KACV,IAAK,GAAM,CAAC,EAAG,KAAM,KAAK,QAAQ,SAAS,CACpC,EAAE,WAAW,GAAG,EAAK,IAAI,EAC1B,EAAE,KAAK,QAAU,IACnB,EAAM,EAAE,KAAK,QACb,EAAY,GAGhB,OAAO"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.d.ts","names":[],"sources":["../../src/regenerator/adapters.ts"],"sourcesContent":[],"mappings":";;;UAOiB,uBAAA;yBAEJ,4BACF,aACA,OACN,QAAQ;AALb;AAEa,UAMI,mBAAA,CANJ;EACF,UAAA,CAAA,OAAA,EAOE,mBAPF,EAAA,KAAA,EAQA,IARA,EAAA,KAAA,EASA,IATA,CAAA,EAUN,OAVM,CAUE,WAVF,EAAA,CAAA;;AAEE,UAWI,sBAAA,CAXJ;EAAR,YAAA,CAAA,OAAA,EAaQ,mBAbR,EAAA,KAAA,EAcM,IAdN,EAAA,KAAA,EAeM,IAfN,CAAA,EAgBA,OAhBA,CAgBQ,cAhBR,EAAA,CAAA;;AAGY,UAgBA,cAAA,CAhBmB;EAEvB,SAAA,CAAA,EAeC,uBAfD;EACF,MAAA,CAAA,EAeA,mBAfA;EACA,QAAA,CAAA,EAeE,sBAfF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.d.ts","names":[],"sources":["../../src/regenerator/executor.ts"],"sourcesContent":[],"mappings":";;;KAEY,eAAA;UAEK,qBAAA;EAFL,KAAA,EAAA,MAAA;EAEK,MAAA,EAEP,cAFO;EAEP,MAAA,EACA,eADA;EACA,SAAA,EACG,IADH;EACG,UAAA,EACC,IADD;EACC,MAAA,CAAA,EAAA,MAAA;EAEJ,KAAA,CAAA,EAAA,KAAA;EAAK,MAAA,CAAA,EAAA,OAAA;AAIf;AAGa,UAHI,uBAAA,CAGJ;EACC,UAAA,EAAA,MAAA;EAEH,SAAA,EAAA,MAAA;EAAqB,SAAA,EAHnB,IAGmB;EAGpB,UAAA,EALE,IAKF;EACA,MAAA,EAAA,SAAA,GAAA,SAAwB,GAAA,QAAW;EACnC,OAAA,EALD,qBAK0B,EAAA;AACrC;AACY,KAJA,qBAAA,GAAwB,OAIC,CAJO,cAII,EAAA;EAE/B,IAAA,EAAA,kBAAgB;CAEpB,CAAA;AACC,KARF,wBAAA,GAA2B,OAQzB,CARiC,cAQjC,EAAA;EACF,IAAA,EAAA,sBAAA;CACP,CAAA;AAAO,KATA,cAAA,GAAiB,OASjB,CATyB,cASzB,EAAA;EAGK,IAAA,EAAA,WAAA;CAEJ,CAAA;AACC,KAdF,mBAAA,GAAsB,OAcpB,CAd4B,cAc5B,EAAA;EACF,IAAA,EAAA,gBAAA;CACP,CAAA;AAAO,KAfA,yBAAA,GAA4B,OAe5B,CAfoC,cAepC,EAAA;EAGK,IAAA,EAAA,sBAAY;CAEhB,CAAA;AACC,UAnBG,gBAAA,CAmBH;EACF,oBAAA,CAAA,OAAA,EAlBC,mBAkBD,EAAA,QAAA,EAjBE,kBAiBF,EAAA,MAAA,EAhBA,qBAgBA,CAAA,EAfP,OAeO,CAAA,OAAA,CAAA;;AACA,UAbK,mBAAA,CAaL;EAGK,uBAAiB,CAAA,OAAA,EAdrB,mBAcqB,EAAA,QAAA,EAbpB,kBAaoB,EAAA,MAAA,EAZtB,wBAYsB,CAAA,EAX7B,OAW6B,CAAA,OAAA,CAAA;;AAGpB,UAXG,YAAA,CAWH;EACF,QAAA,CAAA,OAAA,EAVC,mBAUD,EAAA,QAAA,EATE,kBASF,EAAA,MAAA,EARA,cAQA,CAAA,EAPP,OAOO,CAAA,OAAA,CAAA;;AACA,UALK,iBAAA,CAKL;EAGK,aAAA,CAAA,OAAA,EANJ,mBAMuB,EAAA,QAAA,EALtB,kBAKsB,EAAA,MAAA,EAJxB,mBAIwB,CAAA,EAH/B,OAG+B,CAAA,OAAA,CAAA;;AAGtB,UAHG,mBAAA,CAGH;EACF,mBAAA,CAAA,OAAA,EAFC,mBAED,EAAA,QAAA,EADE,kBACF,EAAA,MAAA,EAAA,yBAAA,CAAA,EACP,OADO,CAAA,OAAA,CAAA;;AACA,UAGK,uBAAA,CAHL;EAGK,MAAA,CAAA,EAAA,OAAA;AAIjB;AACqB,UADJ,oBAAA,CACI;EACG,gBAAA,CAAA,EADH,gBACG;EACP,mBAAA,CAAA,EADO,mBACP;EACK,YAAA,CAAA,EADL,YACK;EACE,iBAAA,CAAA,EADF,iBACE;EAAmB,mBAAA,CAAA,EAAnB,mBAAmB;AAG3C;AACqC,cADxB,gBAAA,CACwB;EAGxB,iBAAA,IAAA;EACC,WAAA,CAAA,IAAA,CAAA,EAJuB,oBAIvB;EACD,OAAA,CAAA,OAAA,EAFA,mBAEA,EAAA,QAAA,EADC,kBACD,EAAA,OAAA,CAAA,EAAA,uBAAA,CAAA,EACR,OADQ,CACA,uBADA,CAAA;EACA,QAAA,aAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"executor.js","names":["deps: ProposalExecutorDeps","actionResults: ActionExecutionResult[]"],"sources":["../../src/regenerator/executor.ts"],"sourcesContent":["import type { SpecChangeProposal, ProposalAction, RegenerationContext } from './types';\n\nexport type ExecutionStatus = 'success' | 'skipped' | 'failed';\n\nexport interface ActionExecutionResult {\n index: number;\n action: ProposalAction;\n status: ExecutionStatus;\n startedAt: Date;\n finishedAt: Date;\n reason?: string;\n error?: Error;\n output?: unknown;\n}\n\nexport interface ProposalExecutionResult {\n proposalId: string;\n contextId: string;\n startedAt: Date;\n finishedAt: Date;\n status: 'success' | 'partial' | 'failed';\n actions: ActionExecutionResult[];\n}\n\nexport type UpdateBlueprintAction = Extract<ProposalAction, { kind: 'update_blueprint' }>;\nexport type UpdateTenantConfigAction = Extract<ProposalAction, { kind: 'update_tenant_config' }>;\nexport type RunTestsAction = Extract<ProposalAction, { kind: 'run_tests' }>;\nexport type RunMigrationsAction = Extract<ProposalAction, { kind: 'run_migrations' }>;\nexport type TriggerRegenerationAction = Extract<ProposalAction, { kind: 'trigger_regeneration' }>;\n\nexport interface BlueprintUpdater {\n applyBlueprintUpdate(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: UpdateBlueprintAction\n ): Promise<unknown>;\n}\n\nexport interface TenantConfigUpdater {\n applyTenantConfigUpdate(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: UpdateTenantConfigAction\n ): Promise<unknown>;\n}\n\nexport interface TestExecutor {\n runTests(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: RunTestsAction\n ): Promise<unknown>;\n}\n\nexport interface MigrationExecutor {\n runMigrations(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: RunMigrationsAction\n ): Promise<unknown>;\n}\n\nexport interface RegenerationTrigger {\n triggerRegeneration(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n action: TriggerRegenerationAction\n ): Promise<unknown>;\n}\n\nexport interface ProposalExecutorOptions {\n dryRun?: boolean;\n}\n\nexport interface ProposalExecutorDeps {\n blueprintUpdater?: BlueprintUpdater;\n tenantConfigUpdater?: TenantConfigUpdater;\n testExecutor?: TestExecutor;\n migrationExecutor?: MigrationExecutor;\n regenerationTrigger?: RegenerationTrigger;\n}\n\nexport class ProposalExecutor {\n constructor(private readonly deps: ProposalExecutorDeps = {}) {}\n\n async execute(\n context: RegenerationContext,\n proposal: SpecChangeProposal,\n options: ProposalExecutorOptions = {}\n ): Promise<ProposalExecutionResult> {\n const startedAt = new Date();\n const actionResults: ActionExecutionResult[] = [];\n\n for (const [index, action] of proposal.actions.entries()) {\n // eslint-disable-next-line no-await-in-loop\n const result = await this.executeAction({\n index,\n action,\n context,\n proposal,\n options,\n });\n actionResults.push(result);\n }\n\n const finishedAt = new Date();\n const summaryStatus = summarizeStatus(actionResults);\n\n return {\n proposalId: proposal.id,\n contextId: context.id,\n startedAt,\n finishedAt,\n status: summaryStatus,\n actions: actionResults,\n };\n }\n\n private async executeAction({\n index,\n action,\n context,\n proposal,\n options,\n }: {\n index: number;\n action: ProposalAction;\n context: RegenerationContext;\n proposal: SpecChangeProposal;\n options: ProposalExecutorOptions;\n }): Promise<ActionExecutionResult> {\n const startedAt = new Date();\n const dryRun = options.dryRun ?? false;\n\n const complete = (\n status: ExecutionStatus,\n params: {\n reason?: string;\n output?: unknown;\n error?: Error;\n } = {}\n ): ActionExecutionResult => ({\n index,\n action,\n status,\n startedAt,\n finishedAt: new Date(),\n reason: params.reason,\n output: params.output,\n error: params.error,\n });\n\n if (dryRun) {\n return complete('skipped', { reason: 'dry_run' });\n }\n\n try {\n switch (action.kind) {\n case 'update_blueprint': {\n const updater = this.deps.blueprintUpdater;\n if (!updater) {\n return complete('skipped', { reason: 'missing_blueprint_updater' });\n }\n const output = await updater.applyBlueprintUpdate(context, proposal, action);\n return complete('success', { output });\n }\n case 'update_tenant_config': {\n const updater = this.deps.tenantConfigUpdater;\n if (!updater) {\n return complete('skipped', { reason: 'missing_tenant_config_updater' });\n }\n const output = await updater.applyTenantConfigUpdate(context, proposal, action);\n return complete('success', { output });\n }\n case 'run_tests': {\n const executor = this.deps.testExecutor;\n if (!executor) {\n return complete('skipped', { reason: 'missing_test_executor' });\n }\n const output = await executor.runTests(context, proposal, action);\n return complete('success', { output });\n }\n case 'run_migrations': {\n const executor = this.deps.migrationExecutor;\n if (!executor) {\n return complete('skipped', { reason: 'missing_migration_executor' });\n }\n const output = await executor.runMigrations(context, proposal, action);\n return complete('success', { output });\n }\n case 'trigger_regeneration': {\n const trigger = this.deps.regenerationTrigger;\n if (!trigger) {\n return complete('skipped', { reason: 'missing_regeneration_trigger' });\n }\n const output = await trigger.triggerRegeneration(context, proposal, action);\n return complete('success', { output });\n }\n default: {\n return complete('skipped', { reason: 'unknown_action' });\n }\n }\n } catch (error) {\n return complete('failed', {\n error: error instanceof Error ? error : new Error(String(error)),\n });\n }\n }\n}\n\nfunction summarizeStatus(actionResults: ActionExecutionResult[]): ProposalExecutionResult['status'] {\n if (actionResults.some((result) => result.status === 'failed')) {\n return 'failed';\n }\n if (actionResults.some((result) => result.status === 'success') &&\n actionResults.some((result) => result.status === 'skipped')) {\n return 'partial';\n }\n if (actionResults.every((result) => result.status === 'skipped')) {\n return 'partial';\n }\n return 'success';\n}\n\n\n\n\n\n\n\n"],"mappings":"AAkFA,IAAa,EAAb,KAA8B,CAC5B,YAAY,EAA8C,EAAE,CAAE,CAAjC,KAAA,KAAA,EAE7B,MAAM,QACJ,EACA,EACA,EAAmC,EAAE,CACH,CAClC,IAAM,EAAY,IAAI,KAChBC,EAAyC,EAAE,CAEjD,IAAK,GAAM,CAAC,EAAO,KAAW,EAAS,QAAQ,SAAS,CAAE,CAExD,IAAM,EAAS,MAAM,KAAK,cAAc,CACtC,QACA,SACA,UACA,WACA,UACD,CAAC,CACF,EAAc,KAAK,EAAO,CAG5B,IAAM,EAAa,IAAI,KACjB,EAAgB,EAAgB,EAAc,CAEpD,MAAO,CACL,WAAY,EAAS,GACrB,UAAW,EAAQ,GACnB,YACA,aACA,OAAQ,EACR,QAAS,EACV,CAGH,MAAc,cAAc,CAC1B,QACA,SACA,UACA,WACA,WAOiC,CACjC,IAAM,EAAY,IAAI,KAChB,EAAS,EAAQ,QAAU,GAE3B,GACJ,EACA,EAII,EAAE,IACqB,CAC3B,QACA,SACA,SACA,YACA,WAAY,IAAI,KAChB,OAAQ,EAAO,OACf,OAAQ,EAAO,OACf,MAAO,EAAO,MACf,EAED,GAAI,EACF,OAAO,EAAS,UAAW,CAAE,OAAQ,UAAW,CAAC,CAGnD,GAAI,CACF,OAAQ,EAAO,KAAf,CACE,IAAK,mBAAoB,CACvB,IAAM,EAAU,KAAK,KAAK,iBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,qBAAqB,EAAS,EAAU,EAAO,CACvC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,4BAA6B,CAAC,CAKvE,IAAK,uBAAwB,CAC3B,IAAM,EAAU,KAAK,KAAK,oBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,wBAAwB,EAAS,EAAU,EAAO,CAC1C,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,gCAAiC,CAAC,CAK3E,IAAK,YAAa,CAChB,IAAM,EAAW,KAAK,KAAK,aAK3B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAS,SAAS,EAAS,EAAU,EAAO,CAC5B,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,wBAAyB,CAAC,CAKnE,IAAK,iBAAkB,CACrB,IAAM,EAAW,KAAK,KAAK,kBAK3B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAS,cAAc,EAAS,EAAU,EAAO,CACjC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,6BAA8B,CAAC,CAKxE,IAAK,uBAAwB,CAC3B,IAAM,EAAU,KAAK,KAAK,oBAK1B,OAJK,EAIE,EAAS,UAAW,CAAE,OADd,MAAM,EAAQ,oBAAoB,EAAS,EAAU,EAAO,CACtC,CAAC,CAH7B,EAAS,UAAW,CAAE,OAAQ,+BAAgC,CAAC,CAK1E,QACE,OAAO,EAAS,UAAW,CAAE,OAAQ,iBAAkB,CAAC,QAGrD,EAAO,CACd,OAAO,EAAS,SAAU,CACxB,MAAO,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CACjE,CAAC,IAKR,SAAS,EAAgB,EAA2E,CAWlG,OAVI,EAAc,KAAM,GAAW,EAAO,SAAW,SAAS,CACrD,SAEL,EAAc,KAAM,GAAW,EAAO,SAAW,UAAU,EAC3D,EAAc,KAAM,GAAW,EAAO,SAAW,UAAU,EAG3D,EAAc,MAAO,GAAW,EAAO,SAAW,UAAU,CACvD,UAEF"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.d.ts","names":[],"sources":["../../src/regenerator/service.ts"],"sourcesContent":[],"mappings":";;;;UAWiB,kBAAA;YACL;EADK,QAAA,EAEL,cAFuB;EACvB,KAAA,EAEH,gBAFG,EAAA;EACA,IAAA,EAEJ,YAFI;EACH,cAAA,CAAA,EAAA,MAAA;EACD,eAAA,CAAA,EAAA,MAAA;EAGQ,KAAA,CAAA,EAAA,GAAA,GAAA,IAAA;;AAMH,cAAA,kBAAA,CAS2B;;;;;;;;;uBAAA;;;aA8BrB"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service.js","names":["options: RegeneratorOptions","proposals: SpecChangeProposal[]","envelopes: RegeneratorSignal[]","delay"],"sources":["../../src/regenerator/service.ts"],"sourcesContent":["import { setTimeout as delay } from 'node:timers/promises';\nimport type {\n ProposalSink,\n RegeneratorSignal,\n RegenerationRule,\n RegenerationContext,\n SpecChangeProposal,\n} from './types';\nimport type { SignalAdapters } from './adapters';\nimport { telemetryToEnvelope, errorToEnvelope, behaviorToEnvelope } from './utils';\n\nexport interface RegeneratorOptions {\n contexts: RegenerationContext[];\n adapters: SignalAdapters;\n rules: RegenerationRule[];\n sink: ProposalSink;\n pollIntervalMs?: number;\n batchDurationMs?: number;\n clock?: () => Date;\n}\n\nconst DEFAULT_POLL_INTERVAL = 60_000;\nconst DEFAULT_BATCH_DURATION = 5 * 60_000;\n\nexport class RegeneratorService {\n private readonly contexts: Map<string, RegenerationContext>;\n private readonly lastPoll = new Map<string, Date>();\n private timer?: NodeJS.Timeout;\n private running = false;\n private readonly pollInterval: number;\n private readonly batchDuration: number;\n private readonly clock: () => Date;\n\n constructor(private readonly options: RegeneratorOptions) {\n this.contexts = new Map(\n options.contexts.map((ctx) => [ctx.id, ctx])\n );\n this.pollInterval = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL;\n this.batchDuration = options.batchDurationMs ?? DEFAULT_BATCH_DURATION;\n this.clock = options.clock ?? (() => new Date());\n if (this.options.rules.length === 0) {\n throw new Error('RegeneratorService requires at least one rule');\n }\n }\n\n start() {\n if (this.running) return;\n this.running = true;\n void this.tick();\n this.timer = setInterval(() => {\n void this.tick();\n }, this.pollInterval);\n }\n\n stop() {\n if (!this.running) return;\n this.running = false;\n if (this.timer) {\n clearInterval(this.timer);\n this.timer = undefined;\n }\n }\n\n async runOnce(): Promise<void> {\n await this.tick();\n }\n\n private async tick(): Promise<void> {\n const now = this.clock();\n const sinceDefault = new Date(now.getTime() - this.batchDuration);\n for (const context of this.contexts.values()) {\n const last = this.lastPoll.get(context.id) ?? sinceDefault;\n await this.evaluateContext(context, last, now);\n this.lastPoll.set(context.id, now);\n }\n }\n\n private async evaluateContext(\n context: RegenerationContext,\n since: Date,\n until: Date\n ): Promise<void> {\n const signals = await this.collectSignals(context, since, until);\n if (signals.length === 0) return;\n\n for (const rule of this.options.rules) {\n let proposals: SpecChangeProposal[] = [];\n try {\n proposals = await rule.evaluate(context, signals);\n } catch (error) {\n // eslint-disable-next-line no-console\n console.error(\n `[regenerator] rule ${rule.id} failed`,\n error instanceof Error ? error : new Error(String(error))\n );\n continue;\n }\n await this.flushProposals(context, proposals);\n }\n }\n\n private async collectSignals(\n context: RegenerationContext,\n since: Date,\n until: Date\n ): Promise<RegeneratorSignal[]> {\n const envelopes: RegeneratorSignal[] = [];\n const { adapters } = this.options;\n if (adapters.telemetry) {\n const telemetrySignals = await adapters.telemetry.pollTelemetry(\n context,\n since,\n until\n );\n envelopes.push(\n ...telemetrySignals.map((signal) =>\n telemetryToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n if (adapters.errors) {\n const errorSignals = await adapters.errors.pollErrors(\n context,\n since,\n until\n );\n envelopes.push(\n ...errorSignals.map((signal) =>\n errorToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n if (adapters.behavior) {\n const behaviorSignals = await adapters.behavior.pollBehavior(\n context,\n since,\n until\n );\n envelopes.push(\n ...behaviorSignals.map((signal) =>\n behaviorToEnvelope(context.id, signal, this.clock)\n )\n );\n }\n return envelopes;\n }\n\n private async flushProposals(\n context: RegenerationContext,\n proposals: SpecChangeProposal[]\n ): Promise<void> {\n for (const proposal of proposals) {\n if (proposal.signalIds.length === 0) continue;\n await this.options.sink.submit(context, proposal);\n // allow event loop to breathe when large volumes\n if (proposals.length > 10) {\n await delay(0);\n }\n }\n }\n}\n\n\n\n\n\n\n\n"],"mappings":"gJAwBA,IAAa,EAAb,KAAgC,CAC9B,SACA,SAA4B,IAAI,IAChC,MACA,QAAkB,GAClB,aACA,cACA,MAEA,YAAY,EAA8C,CAOxD,GAP2B,KAAA,QAAA,EAC3B,KAAK,SAAW,IAAI,IAClB,EAAQ,SAAS,IAAK,GAAQ,CAAC,EAAI,GAAI,EAAI,CAAC,CAC7C,CACD,KAAK,aAAe,EAAQ,gBAAkB,IAC9C,KAAK,cAAgB,EAAQ,iBAAmB,IAChD,KAAK,MAAQ,EAAQ,YAAgB,IAAI,MACrC,KAAK,QAAQ,MAAM,SAAW,EAChC,MAAU,MAAM,gDAAgD,CAIpE,OAAQ,CACF,KAAK,UACT,KAAK,QAAU,GACV,KAAK,MAAM,CAChB,KAAK,MAAQ,gBAAkB,CACxB,KAAK,MAAM,EACf,KAAK,aAAa,EAGvB,MAAO,CACA,KAAK,UACV,KAAK,QAAU,GACf,AAEE,KAAK,SADL,cAAc,KAAK,MAAM,CACZ,IAAA,KAIjB,MAAM,SAAyB,CAC7B,MAAM,KAAK,MAAM,CAGnB,MAAc,MAAsB,CAClC,IAAM,EAAM,KAAK,OAAO,CAClB,EAAe,IAAI,KAAK,EAAI,SAAS,CAAG,KAAK,cAAc,CACjE,IAAK,IAAM,KAAW,KAAK,SAAS,QAAQ,CAAE,CAC5C,IAAM,EAAO,KAAK,SAAS,IAAI,EAAQ,GAAG,EAAI,EAC9C,MAAM,KAAK,gBAAgB,EAAS,EAAM,EAAI,CAC9C,KAAK,SAAS,IAAI,EAAQ,GAAI,EAAI,EAItC,MAAc,gBACZ,EACA,EACA,EACe,CACf,IAAM,EAAU,MAAM,KAAK,eAAe,EAAS,EAAO,EAAM,CAC5D,KAAQ,SAAW,EAEvB,IAAK,IAAM,KAAQ,KAAK,QAAQ,MAAO,CACrC,IAAIC,EAAkC,EAAE,CACxC,GAAI,CACF,EAAY,MAAM,EAAK,SAAS,EAAS,EAAQ,OAC1C,EAAO,CAEd,QAAQ,MACN,sBAAsB,EAAK,GAAG,SAC9B,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CAC1D,CACD,SAEF,MAAM,KAAK,eAAe,EAAS,EAAU,EAIjD,MAAc,eACZ,EACA,EACA,EAC8B,CAC9B,IAAMC,EAAiC,EAAE,CACnC,CAAE,YAAa,KAAK,QAC1B,GAAI,EAAS,UAAW,CACtB,IAAM,EAAmB,MAAM,EAAS,UAAU,cAChD,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAiB,IAAK,GACvB,EAAoB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CACpD,CACF,CAEH,GAAI,EAAS,OAAQ,CACnB,IAAM,EAAe,MAAM,EAAS,OAAO,WACzC,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAa,IAAK,GACnB,EAAgB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CAChD,CACF,CAEH,GAAI,EAAS,SAAU,CACrB,IAAM,EAAkB,MAAM,EAAS,SAAS,aAC9C,EACA,EACA,EACD,CACD,EAAU,KACR,GAAG,EAAgB,IAAK,GACtB,EAAmB,EAAQ,GAAI,EAAQ,KAAK,MAAM,CACnD,CACF,CAEH,OAAO,EAGT,MAAc,eACZ,EACA,EACe,CACf,IAAK,IAAM,KAAY,EACjB,EAAS,UAAU,SAAW,IAClC,MAAM,KAAK,QAAQ,KAAK,OAAO,EAAS,EAAS,CAE7C,EAAU,OAAS,IACrB,MAAMC,EAAM,EAAE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sinks.d.ts","names":[],"sources":["../../src/regenerator/sinks.ts"],"sourcesContent":[],"mappings":";;;;UAIiB,qBAAA;EAAA,OAAA,EACN,mBAD2B;EAC3B,QAAA,EACC,kBADD;EACC,MAAA,EACF,uBADE;;AACqB,UAGhB,kBAAA,CAHgB;EAGhB,IAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAkB,EAAA,IAAA,CAAA,EACD,MADC,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;EACD,KAAA,CAAA,EAAA,CAAA,OAAA,EAAA,MAAA,EAAA,KAAA,EACC,KADD,EAAA,IAAA,CAAA,EACe,MADf,CAAA,MAAA,EAAA,OAAA,CAAA,EAAA,GAAA,IAAA;;AACe,UAGhC,mBAAA,CAHgC;EAAM,MAAA,CAAA,EAAA,OAAA;EAGtC,QAAA,CAAA,EAAA,CAAA,OAAA,EAEM,qBAFa,EAAA,GAAA,IAAA,GAEoB,OAFpB,CAAA,IAAA,CAAA;EAEb,MAAA,CAAA,EACZ,kBADY;;AACZ,cAGE,oBAAA,YAAgC,YAHlC,CAAA;EAAkB,iBAAA,QAAA;EAGhB,iBAAA,OAAqB;EAEH,WAAA,CAAA,QAAA,EAAA,gBAAA,EAAA,OAAA,CAAA,EACD,mBADC;EACD,MAAA,CAAA,OAAA,EAIjB,mBAJiB,EAAA,QAAA,EAKhB,kBALgB,CAAA,EAMzB,OANyB,CAAA,IAAA,CAAA"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sinks.js","names":["executor: ProposalExecutor","options: ExecutorSinkOptions"],"sources":["../../src/regenerator/sinks.ts"],"sourcesContent":["import type { ProposalSink, RegenerationContext, SpecChangeProposal } from './types';\nimport { ProposalExecutor } from './executor';\nimport type { ProposalExecutionResult } from './executor';\n\nexport interface ExecutorResultPayload {\n context: RegenerationContext;\n proposal: SpecChangeProposal;\n result: ProposalExecutionResult;\n}\n\nexport interface ExecutorSinkLogger {\n info?: (message: string, meta?: Record<string, unknown>) => void;\n error?: (message: string, error: Error, meta?: Record<string, unknown>) => void;\n}\n\nexport interface ExecutorSinkOptions {\n dryRun?: boolean;\n onResult?: (payload: ExecutorResultPayload) => void | Promise<void>;\n logger?: ExecutorSinkLogger;\n}\n\nexport class ExecutorProposalSink implements ProposalSink {\n constructor(\n private readonly executor: ProposalExecutor,\n private readonly options: ExecutorSinkOptions = {}\n ) {}\n\n async submit(\n context: RegenerationContext,\n proposal: SpecChangeProposal\n ): Promise<void> {\n const dryRun = this.options.dryRun ?? false;\n try {\n const result = await this.executor.execute(context, proposal, { dryRun });\n if (this.options.logger?.info) {\n this.options.logger.info('[regenerator] proposal executed', {\n proposalId: proposal.id,\n contextId: context.id,\n status: result.status,\n });\n }\n if (this.options.onResult) {\n await this.options.onResult({ context, proposal, result });\n }\n } catch (error) {\n if (this.options.logger?.error) {\n this.options.logger.error(\n '[regenerator] proposal execution failed',\n error instanceof Error ? error : new Error(String(error)),\n { proposalId: proposal.id, contextId: context.id }\n );\n }\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n}\n\n\n\n\n\n\n\n"],"mappings":"AAqBA,IAAa,EAAb,KAA0D,CACxD,YACE,EACA,EAAgD,EAAE,CAClD,CAFiB,KAAA,SAAA,EACA,KAAA,QAAA,EAGnB,MAAM,OACJ,EACA,EACe,CACf,IAAM,EAAS,KAAK,QAAQ,QAAU,GACtC,GAAI,CACF,IAAM,EAAS,MAAM,KAAK,SAAS,QAAQ,EAAS,EAAU,CAAE,SAAQ,CAAC,CACrE,KAAK,QAAQ,QAAQ,MACvB,KAAK,QAAQ,OAAO,KAAK,kCAAmC,CAC1D,WAAY,EAAS,GACrB,UAAW,EAAQ,GACnB,OAAQ,EAAO,OAChB,CAAC,CAEA,KAAK,QAAQ,UACf,MAAM,KAAK,QAAQ,SAAS,CAAE,UAAS,WAAU,SAAQ,CAAC,OAErD,EAAO,CAQd,MAPI,KAAK,QAAQ,QAAQ,OACvB,KAAK,QAAQ,OAAO,MAClB,0CACA,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC,CACzD,CAAE,WAAY,EAAS,GAAI,UAAW,EAAQ,GAAI,CACnD,CAEG,aAAiB,MAAQ,EAAY,MAAM,OAAO,EAAM,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","names":[],"sources":["../../src/regenerator/types.ts"],"sourcesContent":[],"mappings":";;;;;KAOY,iBAAA,GACR,0BACA,sBACA;UAEa,uBAAA;EALL,IAAA,EAAA,WAAA;EACR,SAAA,EAAA,MAAA;EACA,MAAA,EAMM,eANN;;AACsB,UAQT,eAAA,CARS;EAET,SAAA,EAAA,MAAA;EAMA,YAAA,EAAA,MAAe;EAIjB,KAAA,EAAA,MAAA;EACF,WAAA,EADE,IACF;EAGA,SAAA,EAHA,IAGA;EACK,YAAA,CAAA,EAAA,MAAA;EAAa,cAAA,CAAA,EAAA,QAAA,GAAA,SAAA,GAAA,UAAA;EAGd,QAAA,CAAA,EAJJ,MAII,CAAA,MAAmB,EAAA,OAAA,CAAA;EAMnB,aAAA,CAAW,EATV,aAaJ;AAKd;AAMiB,UArBA,mBAAA,CAqBc;EAKhB,IAAA,EAAA,OAAA;EACF,SAAA,EAAA,MAAA;EACA,MAAA,EAzBH,WAyBG;;AAGI,UAzBA,WAAA,CAyBkB;EAIrB,EAAA,EAAA,MAAA;EAEJ,cAAA,EAAA,SAAA,GAAA,QAAA,GAAA,UAAA,GAAA,SAAA;EAEC,OAAA,EAAA,MAAA;EACE,UAAA,EA9BC,IA8BD;EACA,KAAA,EAAA,MAAA;EAAI,QAAA,CAAA,EA7BJ,MA6BI,CAAA,MAAA,EAAA,OAAA,CAAA;AAIjB;AAEiB,UAhCA,sBAAA,CAgCc;EAiBnB,IAAA,EAAA,UAAA;EAsBK,SAAA,EAAA,MAAA;EAKA,MAAA,EAzEP,cAyE0B;;AAGpB,UAzEC,cAAA,CAyED;EACJ,OAAA,EAAA,MAAA;EAAiB,MAAA,EAAA,OAAA,GAAA,YAAA,GAAA,SAAA,GAAA,QAAA;EAGZ,KAAA,EAAA,MAAA;EAIJ,QAAA,CAAA,EAAA,MAAA;EACA,WAAA,EA7EE,IA6EF;EACA,SAAA,EA7EA,IA6EA;EAAR,QAAA,CAAA,EA5EQ,MA4ER,CAAA,MAAA,EAAA,OAAA,CAAA;;AAGY,UA5EA,kBAAA,CA4EY;EAEhB,EAAA,EAAA,MAAA;EACC,KAAA,EAAA,MAAA;EACT,OAAA,EAAA,MAAA;EAAO,UAAA,EA5EE,kBA4EF;;UA1EF;;WAEC;aACE;aACA;;;KAID,kBAAA;UAEK,cAAA;;;;;;;;KAiBL,cAAA;;;;;;;;;;;;;;;;UAsBK,eAAA;;;;UAKA,mBAAA;;aAEJ;gBACG;YACJ;;UAGK,gBAAA;;;oBAIJ,8BACA,sBACR,QAAQ;;UAGI,YAAA;kBAEJ,+BACC,qBACT"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","names":[],"sources":["../../src/regenerator/utils.ts"],"sourcesContent":[],"mappings":";;;KASK,KAAA,SAAc;iBAEH,mBAAA,4BAEN,wBACD,QACN;AANE,iBAcW,eAAA,CAdO,SAAA,EAAA,MAAA,EAAA,MAAA,EAgBb,WAhBa,EAAA,KAAA,EAiBd,KAjBc,CAAA,EAkBpB,mBAlBoB;AAEP,iBAwBA,kBAAA,CAxBmB,SAAA,EAAA,MAAA,EAAA,MAAA,EA0BzB,cA1ByB,EAAA,KAAA,EA2B1B,KA3B0B,CAAA,EA4BhC,sBA5BgC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","names":[],"sources":["../../src/regenerator/utils.ts"],"sourcesContent":["import type {\n BehaviorSignal,\n BehaviorSignalEnvelope,\n ErrorSignal,\n ErrorSignalEnvelope,\n TelemetrySignal,\n TelemetrySignalEnvelope,\n} from './types';\n\ntype Clock = () => Date;\n\nexport function telemetryToEnvelope(\n contextId: string,\n signal: TelemetrySignal,\n clock: Clock\n): TelemetrySignalEnvelope {\n return {\n type: 'telemetry',\n contextId,\n signal: normalizeTelemetryDates(signal, clock),\n };\n}\n\nexport function errorToEnvelope(\n contextId: string,\n signal: ErrorSignal,\n clock: Clock\n): ErrorSignalEnvelope {\n return {\n type: 'error',\n contextId,\n signal: normalizeErrorDates(signal, clock),\n };\n}\n\nexport function behaviorToEnvelope(\n contextId: string,\n signal: BehaviorSignal,\n clock: Clock\n): BehaviorSignalEnvelope {\n return {\n type: 'behavior',\n contextId,\n signal: normalizeBehaviorDates(signal, clock),\n };\n}\n\nfunction normalizeTelemetryDates(\n signal: TelemetrySignal,\n clock: Clock\n): TelemetrySignal {\n return {\n ...signal,\n windowStart: toDate(signal.windowStart, clock),\n windowEnd: toDate(signal.windowEnd, clock),\n };\n}\n\nfunction normalizeErrorDates(\n signal: ErrorSignal,\n clock: Clock\n): ErrorSignal {\n return {\n ...signal,\n occurredAt: toDate(signal.occurredAt, clock),\n };\n}\n\nfunction normalizeBehaviorDates(\n signal: BehaviorSignal,\n clock: Clock\n): BehaviorSignal {\n return {\n ...signal,\n windowStart: toDate(signal.windowStart, clock),\n windowEnd: toDate(signal.windowEnd, clock),\n };\n}\n\nfunction toDate(value: Date | string, clock: Clock): Date {\n if (value instanceof Date) return value;\n const parsed = new Date(value);\n if (Number.isNaN(parsed.getTime())) {\n return clock();\n }\n return parsed;\n}\n\n\n\n\n\n\n\n"],"mappings":"AAWA,SAAgB,EACd,EACA,EACA,EACyB,CACzB,MAAO,CACL,KAAM,YACN,YACA,OAAQ,EAAwB,EAAQ,EAAM,CAC/C,CAGH,SAAgB,EACd,EACA,EACA,EACqB,CACrB,MAAO,CACL,KAAM,QACN,YACA,OAAQ,EAAoB,EAAQ,EAAM,CAC3C,CAGH,SAAgB,EACd,EACA,EACA,EACwB,CACxB,MAAO,CACL,KAAM,WACN,YACA,OAAQ,EAAuB,EAAQ,EAAM,CAC9C,CAGH,SAAS,EACP,EACA,EACiB,CACjB,MAAO,CACL,GAAG,EACH,YAAa,EAAO,EAAO,YAAa,EAAM,CAC9C,UAAW,EAAO,EAAO,UAAW,EAAM,CAC3C,CAGH,SAAS,EACP,EACA,EACa,CACb,MAAO,CACL,GAAG,EACH,WAAY,EAAO,EAAO,WAAY,EAAM,CAC7C,CAGH,SAAS,EACP,EACA,EACgB,CAChB,MAAO,CACL,GAAG,EACH,YAAa,EAAO,EAAO,YAAa,EAAM,CAC9C,UAAW,EAAO,EAAO,UAAW,EAAM,CAC3C,CAGH,SAAS,EAAO,EAAsB,EAAoB,CACxD,GAAI,aAAiB,KAAM,OAAO,EAClC,IAAM,EAAS,IAAI,KAAK,EAAM,CAI9B,OAHI,OAAO,MAAM,EAAO,SAAS,CAAC,CACzB,GAAO,CAET"}
|
package/dist/registry.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","names":[],"sources":["../src/registry.ts"],"sourcesContent":[],"mappings":";;;;;;;;AAyBe,KANH,YAAA,GAMG,GAAA,MAAA,KAAA,MAAA,EAAA;AAAY,iBAJX,KAAA,CAIW,IAAA,EAAA,MAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAJ2B,YAI3B;AAAA,KAAtB,OAAA,GAAU,YAIA,CAHb,cAGgD,EAFhD,cAEuD,GAFtC,qBAEsC,CAAA,OAAA,CAAA,CAAA;AAMzD,KANK,UAAA,GAMQ,CAAY,IAAA,EAAA,GAAA,EAAA,GAAA,EANU,UAMV,EAAA,GANyB,OAMzB,CAAA,OAAA,CAAA;;;;;AAcC,cAdb,YAAA,CAca;EAAhB,QAAA,KAAA;EAgBI,QAAA,QAAA;EACA;;;;;;;EACoC,QAAA,CAAA,UApBpC,cAoBoC,EAAA,UAnBpC,cAmBoC,GAnBnB,qBAmBmB,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,EAlBxC,YAkBwC,CAlB3B,CAkB2B,EAlBxB,CAkBwB,CAAA,CAAA,EAAA,IAAA;EAAX;;;;;;;;EA2E3B,IAAA,CAAA,UA7EE,cA6EF,EAAA,UA5EE,cA4EF,GA5EmB,qBA4EnB,CAAA,OAAA,CAAA,CAAA,CAAA,IAAA,EA3EF,YA2EE,CA3EW,CA2EX,EA3Ec,CA2Ed,CAAA,EAAA,OAAA,EA3E2B,UA2E3B,CA3EsC,YA2EtC,CA3EmD,CA2EnD,EA3EsD,CA2EtD,CAAA,CAAA,CAAA,EAAA,IAAA;;;;;;;;2CAzD+B;;;;8CAkBG;;eAO/B;;;UAKQ;aAAkB;;;;;;;;;;;;;;;6EA0BhC,aACJ"}
|