@contractspec/lib.contracts 1.44.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +109 -0
- package/dist/_virtual/rolldown_runtime.js +37 -0
- package/dist/app-config/app-config.feature.d.ts +12 -0
- package/dist/app-config/app-config.feature.js +54 -0
- package/dist/app-config/branding.d.ts +55 -0
- package/dist/app-config/branding.js +0 -0
- package/dist/app-config/contracts.d.ts +245 -0
- package/dist/app-config/contracts.js +395 -0
- package/dist/app-config/docs/app-config.docblock.d.ts +6 -0
- package/dist/app-config/docs/app-config.docblock.js +21 -0
- package/dist/app-config/events.d.ts +122 -0
- package/dist/app-config/events.js +174 -0
- package/dist/app-config/index.d.ts +9 -0
- package/dist/app-config/index.js +8 -0
- package/dist/app-config/lifecycle-contracts.d.ts +273 -0
- package/dist/app-config/lifecycle-contracts.js +440 -0
- package/dist/app-config/lifecycle.d.ts +27 -0
- package/dist/app-config/lifecycle.js +0 -0
- package/dist/app-config/runtime.d.ts +120 -0
- package/dist/app-config/runtime.js +617 -0
- package/dist/app-config/spec.d.ts +173 -0
- package/dist/app-config/spec.js +36 -0
- package/dist/app-config/validation.d.ts +49 -0
- package/dist/app-config/validation.js +538 -0
- package/dist/capabilities/capabilities.d.ts +48 -0
- package/dist/capabilities/capabilities.js +50 -0
- package/dist/capabilities/docs/capabilities.docblock.d.ts +6 -0
- package/dist/capabilities/docs/capabilities.docblock.js +21 -0
- package/dist/capabilities/index.d.ts +3 -0
- package/dist/capabilities/index.js +4 -0
- package/dist/capabilities/openbanking.d.ts +10 -0
- package/dist/capabilities/openbanking.js +92 -0
- package/dist/client/index.d.ts +6 -0
- package/dist/client/index.js +9 -0
- package/dist/client/react/drivers/rn-reusables.d.ts +22 -0
- package/dist/client/react/drivers/rn-reusables.js +21 -0
- package/dist/client/react/drivers/shadcn.d.ts +12 -0
- package/dist/client/react/drivers/shadcn.js +11 -0
- package/dist/client/react/feature-render.d.ts +23 -0
- package/dist/client/react/feature-render.js +44 -0
- package/dist/client/react/form-render.d.ts +92 -0
- package/dist/client/react/form-render.js +298 -0
- package/dist/client/react/index.d.ts +5 -0
- package/dist/client/react/index.js +8 -0
- package/dist/contract-registry/index.d.ts +3 -0
- package/dist/contract-registry/index.js +3 -0
- package/dist/contract-registry/schemas.d.ts +124 -0
- package/dist/contract-registry/schemas.js +61 -0
- package/dist/contract-registry/types.d.ts +46 -0
- package/dist/contract-registry/types.js +0 -0
- package/dist/data-views/data-views.d.ts +5 -0
- package/dist/data-views/data-views.js +4 -0
- package/dist/data-views/docs/data-views.docblock.d.ts +6 -0
- package/dist/data-views/docs/data-views.docblock.js +21 -0
- package/dist/data-views/index.d.ts +4 -0
- package/dist/data-views/index.js +4 -0
- package/dist/data-views/query-generator.d.ts +40 -0
- package/dist/data-views/query-generator.js +48 -0
- package/dist/data-views/registry.d.ts +51 -0
- package/dist/data-views/registry.js +82 -0
- package/dist/data-views/runtime.d.ts +28 -0
- package/dist/data-views/runtime.js +39 -0
- package/dist/data-views/spec.d.ts +32 -0
- package/dist/data-views/spec.js +10 -0
- package/dist/data-views/types.d.ts +157 -0
- package/dist/data-views/types.js +0 -0
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.d.ts +6 -0
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +17 -0
- package/dist/docs/index.d.ts +6 -0
- package/dist/docs/index.js +29 -0
- package/dist/docs/meta.docs.d.ts +6 -0
- package/dist/docs/meta.docs.js +29 -0
- package/dist/docs/presentations.d.ts +33 -0
- package/dist/docs/presentations.js +64 -0
- package/dist/docs/registry.d.ts +23 -0
- package/dist/docs/registry.js +51 -0
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.d.ts +6 -0
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +81 -0
- package/dist/docs/tech/contracts/README.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/README.docblock.js +21 -0
- package/dist/docs/tech/contracts/create-subscription.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/create-subscription.docblock.js +21 -0
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +21 -0
- package/dist/docs/tech/contracts/migrations.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/migrations.docblock.js +21 -0
- package/dist/docs/tech/contracts/openapi-export.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/openapi-export.docblock.js +58 -0
- package/dist/docs/tech/contracts/openapi-import.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/openapi-import.docblock.js +65 -0
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +21 -0
- package/dist/docs/tech/contracts/overlays.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/overlays.docblock.js +21 -0
- package/dist/docs/tech/contracts/tests.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/tests.docblock.js +21 -0
- package/dist/docs/tech/contracts/themes.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/themes.docblock.js +21 -0
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.d.ts +6 -0
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +21 -0
- package/dist/docs/tech/lifecycle-stage-system.docblock.d.ts +6 -0
- package/dist/docs/tech/lifecycle-stage-system.docblock.js +17 -0
- package/dist/docs/tech/llm/llm-integration.docblock.d.ts +7 -0
- package/dist/docs/tech/llm/llm-integration.docblock.js +358 -0
- package/dist/docs/tech/mcp-endpoints.docblock.d.ts +6 -0
- package/dist/docs/tech/mcp-endpoints.docblock.js +38 -0
- package/dist/docs/tech/presentation-runtime.docblock.d.ts +6 -0
- package/dist/docs/tech/presentation-runtime.docblock.js +17 -0
- package/dist/docs/tech/schema/README.docblock.d.ts +6 -0
- package/dist/docs/tech/schema/README.docblock.js +21 -0
- package/dist/docs/tech/studio/learning-events.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/learning-events.docblock.js +49 -0
- package/dist/docs/tech/studio/learning-journeys.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/learning-journeys.docblock.js +80 -0
- package/dist/docs/tech/studio/platform-admin-panel.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/platform-admin-panel.docblock.js +85 -0
- package/dist/docs/tech/studio/project-access-teams.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/project-access-teams.docblock.js +46 -0
- package/dist/docs/tech/studio/project-routing.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/project-routing.docblock.js +68 -0
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +41 -0
- package/dist/docs/tech/studio/team-invitations.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/team-invitations.docblock.js +70 -0
- package/dist/docs/tech/studio/workspace-ops.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/workspace-ops.docblock.js +48 -0
- package/dist/docs/tech/studio/workspaces.docblock.d.ts +6 -0
- package/dist/docs/tech/studio/workspaces.docblock.js +63 -0
- package/dist/docs/tech/telemetry-ingest.docblock.d.ts +6 -0
- package/dist/docs/tech/telemetry-ingest.docblock.js +156 -0
- package/dist/docs/tech/templates/runtime.docblock.d.ts +6 -0
- package/dist/docs/tech/templates/runtime.docblock.js +21 -0
- package/dist/docs/tech/vscode-extension.docblock.d.ts +6 -0
- package/dist/docs/tech/vscode-extension.docblock.js +102 -0
- package/dist/docs/tech-contracts.docs.d.ts +6 -0
- package/dist/docs/tech-contracts.docs.js +96 -0
- package/dist/docs/types.d.ts +41 -0
- package/dist/docs/types.js +0 -0
- package/dist/events.d.ts +47 -0
- package/dist/events.js +19 -0
- package/dist/experiments/docs/experiments.docblock.d.ts +6 -0
- package/dist/experiments/docs/experiments.docblock.js +21 -0
- package/dist/experiments/evaluator.d.ts +37 -0
- package/dist/experiments/evaluator.js +101 -0
- package/dist/experiments/spec-resolver.d.ts +17 -0
- package/dist/experiments/spec-resolver.js +0 -0
- package/dist/experiments/spec.d.ts +82 -0
- package/dist/experiments/spec.js +33 -0
- package/dist/features/index.d.ts +5 -0
- package/dist/features/index.js +5 -0
- package/dist/features/install.d.ts +22 -0
- package/dist/features/install.js +36 -0
- package/dist/features/registry.d.ts +26 -0
- package/dist/features/registry.js +49 -0
- package/dist/features/types.d.ts +88 -0
- package/dist/features/types.js +0 -0
- package/dist/features/validation.d.ts +8 -0
- package/dist/features/validation.js +14 -0
- package/dist/forms/docs/forms.docblock.d.ts +6 -0
- package/dist/forms/docs/forms.docblock.js +21 -0
- package/dist/forms/forms.d.ts +266 -0
- package/dist/forms/forms.js +146 -0
- package/dist/forms/index.d.ts +2 -0
- package/dist/forms/index.js +3 -0
- package/dist/index.d.ts +147 -0
- package/dist/index.js +121 -0
- package/dist/install.d.ts +77 -0
- package/dist/install.js +40 -0
- package/dist/integrations/binding.d.ts +17 -0
- package/dist/integrations/binding.js +0 -0
- package/dist/integrations/connection.d.ts +51 -0
- package/dist/integrations/connection.js +0 -0
- package/dist/integrations/docs/integrations.docblock.d.ts +6 -0
- package/dist/integrations/docs/integrations.docblock.js +94 -0
- package/dist/integrations/health.d.ts +21 -0
- package/dist/integrations/health.js +69 -0
- package/dist/integrations/index.d.ts +34 -0
- package/dist/integrations/index.js +23 -0
- package/dist/integrations/integrations.feature.d.ts +12 -0
- package/dist/integrations/integrations.feature.js +60 -0
- package/dist/integrations/openbanking/contracts/accounts.d.ts +289 -0
- package/dist/integrations/openbanking/contracts/accounts.js +236 -0
- package/dist/integrations/openbanking/contracts/balances.d.ts +165 -0
- package/dist/integrations/openbanking/contracts/balances.js +166 -0
- package/dist/integrations/openbanking/contracts/index.d.ts +10 -0
- package/dist/integrations/openbanking/contracts/index.js +12 -0
- package/dist/integrations/openbanking/contracts/transactions.d.ts +213 -0
- package/dist/integrations/openbanking/contracts/transactions.js +217 -0
- package/dist/integrations/openbanking/guards.d.ts +12 -0
- package/dist/integrations/openbanking/guards.js +33 -0
- package/dist/integrations/openbanking/models.d.ts +228 -0
- package/dist/integrations/openbanking/models.js +240 -0
- package/dist/integrations/openbanking/openbanking.feature.d.ts +12 -0
- package/dist/integrations/openbanking/openbanking.feature.js +69 -0
- package/dist/integrations/openbanking/telemetry.d.ts +15 -0
- package/dist/integrations/openbanking/telemetry.js +39 -0
- package/dist/integrations/operations.d.ts +437 -0
- package/dist/integrations/operations.js +392 -0
- package/dist/integrations/providers/calendar.d.ts +78 -0
- package/dist/integrations/providers/calendar.js +0 -0
- package/dist/integrations/providers/elevenlabs.d.ts +7 -0
- package/dist/integrations/providers/elevenlabs.js +55 -0
- package/dist/integrations/providers/email.d.ts +86 -0
- package/dist/integrations/providers/email.js +0 -0
- package/dist/integrations/providers/embedding.d.ts +24 -0
- package/dist/integrations/providers/embedding.js +0 -0
- package/dist/integrations/providers/gcs-storage.d.ts +7 -0
- package/dist/integrations/providers/gcs-storage.js +78 -0
- package/dist/integrations/providers/gmail.d.ts +7 -0
- package/dist/integrations/providers/gmail.js +90 -0
- package/dist/integrations/providers/google-calendar.d.ts +7 -0
- package/dist/integrations/providers/google-calendar.js +69 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +20 -0
- package/dist/integrations/providers/impls/elevenlabs-voice.js +95 -0
- package/dist/integrations/providers/impls/gcs-storage.d.ts +24 -0
- package/dist/integrations/providers/impls/gcs-storage.js +88 -0
- package/dist/integrations/providers/impls/gmail-inbound.d.ts +26 -0
- package/dist/integrations/providers/impls/gmail-inbound.js +200 -0
- package/dist/integrations/providers/impls/gmail-outbound.d.ts +18 -0
- package/dist/integrations/providers/impls/gmail-outbound.js +105 -0
- package/dist/integrations/providers/impls/google-calendar.d.ts +23 -0
- package/dist/integrations/providers/impls/google-calendar.js +154 -0
- package/dist/integrations/providers/impls/index.d.ts +15 -0
- package/dist/integrations/providers/impls/index.js +16 -0
- package/dist/integrations/providers/impls/mistral-embedding.d.ts +23 -0
- package/dist/integrations/providers/impls/mistral-embedding.js +41 -0
- package/dist/integrations/providers/impls/mistral-llm.d.ts +31 -0
- package/dist/integrations/providers/impls/mistral-llm.js +247 -0
- package/dist/integrations/providers/impls/postmark-email.d.ts +19 -0
- package/dist/integrations/providers/impls/postmark-email.js +55 -0
- package/dist/integrations/providers/impls/powens-client.d.ts +124 -0
- package/dist/integrations/providers/impls/powens-client.js +171 -0
- package/dist/integrations/providers/impls/powens-openbanking.d.ts +27 -0
- package/dist/integrations/providers/impls/powens-openbanking.js +218 -0
- package/dist/integrations/providers/impls/provider-factory.d.ts +26 -0
- package/dist/integrations/providers/impls/provider-factory.js +145 -0
- package/dist/integrations/providers/impls/qdrant-vector.d.ts +24 -0
- package/dist/integrations/providers/impls/qdrant-vector.js +69 -0
- package/dist/integrations/providers/impls/stripe-payments.d.ts +28 -0
- package/dist/integrations/providers/impls/stripe-payments.js +202 -0
- package/dist/integrations/providers/impls/twilio-sms.d.ts +20 -0
- package/dist/integrations/providers/impls/twilio-sms.js +58 -0
- package/dist/integrations/providers/index.d.ts +22 -0
- package/dist/integrations/providers/index.js +13 -0
- package/dist/integrations/providers/llm.d.ts +82 -0
- package/dist/integrations/providers/llm.js +0 -0
- package/dist/integrations/providers/mistral.d.ts +7 -0
- package/dist/integrations/providers/mistral.js +71 -0
- package/dist/integrations/providers/openbanking.d.ts +128 -0
- package/dist/integrations/providers/openbanking.js +0 -0
- package/dist/integrations/providers/payments.d.ts +109 -0
- package/dist/integrations/providers/payments.js +0 -0
- package/dist/integrations/providers/postmark.d.ts +7 -0
- package/dist/integrations/providers/postmark.js +71 -0
- package/dist/integrations/providers/powens.d.ts +7 -0
- package/dist/integrations/providers/powens.js +119 -0
- package/dist/integrations/providers/qdrant.d.ts +7 -0
- package/dist/integrations/providers/qdrant.js +76 -0
- package/dist/integrations/providers/registry.d.ts +11 -0
- package/dist/integrations/providers/registry.js +34 -0
- package/dist/integrations/providers/sms.d.ts +34 -0
- package/dist/integrations/providers/sms.js +0 -0
- package/dist/integrations/providers/storage.d.ts +60 -0
- package/dist/integrations/providers/storage.js +0 -0
- package/dist/integrations/providers/stripe.d.ts +7 -0
- package/dist/integrations/providers/stripe.js +86 -0
- package/dist/integrations/providers/twilio-sms.d.ts +7 -0
- package/dist/integrations/providers/twilio-sms.js +64 -0
- package/dist/integrations/providers/vector-store.d.ts +43 -0
- package/dist/integrations/providers/vector-store.js +0 -0
- package/dist/integrations/providers/voice.d.ts +34 -0
- package/dist/integrations/providers/voice.js +0 -0
- package/dist/integrations/runtime.d.ts +99 -0
- package/dist/integrations/runtime.js +186 -0
- package/dist/integrations/secrets/aws-secret-manager.d.ts +31 -0
- package/dist/integrations/secrets/aws-secret-manager.js +231 -0
- package/dist/integrations/secrets/env-secret-provider.d.ts +31 -0
- package/dist/integrations/secrets/env-secret-provider.js +81 -0
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +32 -0
- package/dist/integrations/secrets/gcp-secret-manager.js +229 -0
- package/dist/integrations/secrets/index.d.ts +7 -0
- package/dist/integrations/secrets/index.js +8 -0
- package/dist/integrations/secrets/manager.d.ts +47 -0
- package/dist/integrations/secrets/manager.js +103 -0
- package/dist/integrations/secrets/provider.d.ts +52 -0
- package/dist/integrations/secrets/provider.js +58 -0
- package/dist/integrations/secrets/scaleway-secret-manager.d.ts +38 -0
- package/dist/integrations/secrets/scaleway-secret-manager.js +247 -0
- package/dist/integrations/secrets-types.d.ts +17 -0
- package/dist/integrations/secrets-types.js +0 -0
- package/dist/integrations/spec.d.ts +75 -0
- package/dist/integrations/spec.js +39 -0
- package/dist/jobs/define-job.d.ts +18 -0
- package/dist/jobs/define-job.js +16 -0
- package/dist/jobs/gcp-cloud-tasks.d.ts +41 -0
- package/dist/jobs/gcp-cloud-tasks.js +53 -0
- package/dist/jobs/gcp-pubsub.d.ts +25 -0
- package/dist/jobs/gcp-pubsub.js +39 -0
- package/dist/jobs/handlers/gmail-sync-handler.d.ts +9 -0
- package/dist/jobs/handlers/gmail-sync-handler.js +9 -0
- package/dist/jobs/handlers/index.d.ts +9 -0
- package/dist/jobs/handlers/index.js +12 -0
- package/dist/jobs/handlers/ping-handler.d.ts +10 -0
- package/dist/jobs/handlers/ping-handler.js +15 -0
- package/dist/jobs/handlers/storage-document-handler.d.ts +12 -0
- package/dist/jobs/handlers/storage-document-handler.js +14 -0
- package/dist/jobs/index.d.ts +3 -0
- package/dist/jobs/index.js +4 -0
- package/dist/jobs/memory-queue.d.ts +18 -0
- package/dist/jobs/memory-queue.js +71 -0
- package/dist/jobs/queue.d.ts +131 -0
- package/dist/jobs/queue.js +33 -0
- package/dist/jobs/scaleway-sqs-queue.d.ts +30 -0
- package/dist/jobs/scaleway-sqs-queue.js +153 -0
- package/dist/jsonschema.d.ts +27 -0
- package/dist/jsonschema.js +32 -0
- package/dist/knowledge/binding.d.ts +25 -0
- package/dist/knowledge/binding.js +0 -0
- package/dist/knowledge/docs/knowledge.docblock.d.ts +6 -0
- package/dist/knowledge/docs/knowledge.docblock.js +21 -0
- package/dist/knowledge/index.d.ts +11 -0
- package/dist/knowledge/index.js +10 -0
- package/dist/knowledge/ingestion/document-processor.d.ts +24 -0
- package/dist/knowledge/ingestion/document-processor.js +54 -0
- package/dist/knowledge/ingestion/embedding-service.d.ts +12 -0
- package/dist/knowledge/ingestion/embedding-service.js +25 -0
- package/dist/knowledge/ingestion/gmail-adapter.d.ts +18 -0
- package/dist/knowledge/ingestion/gmail-adapter.js +51 -0
- package/dist/knowledge/ingestion/index.d.ts +6 -0
- package/dist/knowledge/ingestion/index.js +7 -0
- package/dist/knowledge/ingestion/storage-adapter.d.ts +15 -0
- package/dist/knowledge/ingestion/storage-adapter.js +26 -0
- package/dist/knowledge/ingestion/vector-indexer.d.ts +18 -0
- package/dist/knowledge/ingestion/vector-indexer.js +32 -0
- package/dist/knowledge/knowledge.feature.d.ts +12 -0
- package/dist/knowledge/knowledge.feature.js +61 -0
- package/dist/knowledge/operations.d.ts +318 -0
- package/dist/knowledge/operations.js +321 -0
- package/dist/knowledge/query/index.d.ts +2 -0
- package/dist/knowledge/query/index.js +3 -0
- package/dist/knowledge/query/service.d.ts +29 -0
- package/dist/knowledge/query/service.js +65 -0
- package/dist/knowledge/runtime.d.ts +32 -0
- package/dist/knowledge/runtime.js +49 -0
- package/dist/knowledge/source.d.ts +32 -0
- package/dist/knowledge/source.js +0 -0
- package/dist/knowledge/spaces/email-threads.d.ts +7 -0
- package/dist/knowledge/spaces/email-threads.js +37 -0
- package/dist/knowledge/spaces/financial-docs.d.ts +7 -0
- package/dist/knowledge/spaces/financial-docs.js +37 -0
- package/dist/knowledge/spaces/financial-overview.d.ts +7 -0
- package/dist/knowledge/spaces/financial-overview.js +41 -0
- package/dist/knowledge/spaces/index.d.ts +7 -0
- package/dist/knowledge/spaces/index.js +8 -0
- package/dist/knowledge/spaces/product-canon.d.ts +7 -0
- package/dist/knowledge/spaces/product-canon.js +37 -0
- package/dist/knowledge/spaces/support-faq.d.ts +7 -0
- package/dist/knowledge/spaces/support-faq.js +40 -0
- package/dist/knowledge/spaces/uploaded-docs.d.ts +7 -0
- package/dist/knowledge/spaces/uploaded-docs.js +37 -0
- package/dist/knowledge/spec.d.ts +48 -0
- package/dist/knowledge/spec.js +39 -0
- package/dist/llm/exporters.d.ts +70 -0
- package/dist/llm/exporters.js +542 -0
- package/dist/llm/index.d.ts +4 -0
- package/dist/llm/index.js +4 -0
- package/dist/llm/prompts.d.ts +52 -0
- package/dist/llm/prompts.js +410 -0
- package/dist/llm/types.d.ts +215 -0
- package/dist/llm/types.js +0 -0
- package/dist/markdown.d.ts +22 -0
- package/dist/markdown.js +119 -0
- package/dist/migrations.d.ts +52 -0
- package/dist/migrations.js +33 -0
- package/dist/model-registry.d.ts +13 -0
- package/dist/model-registry.js +33 -0
- package/dist/onboarding-base.d.ts +138 -0
- package/dist/onboarding-base.js +195 -0
- package/dist/openapi.d.ts +31 -0
- package/dist/openapi.js +75 -0
- package/dist/operations/index.d.ts +3 -0
- package/dist/operations/index.js +4 -0
- package/dist/operations/operation.d.ts +186 -0
- package/dist/operations/operation.js +35 -0
- package/dist/operations/registry.d.ts +103 -0
- package/dist/operations/registry.js +252 -0
- package/dist/ownership.d.ts +84 -0
- package/dist/ownership.js +38 -0
- package/dist/policy/docs/policy.docblock.d.ts +6 -0
- package/dist/policy/docs/policy.docblock.js +21 -0
- package/dist/policy/engine.d.ts +40 -0
- package/dist/policy/engine.js +223 -0
- package/dist/policy/index.d.ts +5 -0
- package/dist/policy/index.js +5 -0
- package/dist/policy/opa-adapter.d.ts +45 -0
- package/dist/policy/opa-adapter.js +71 -0
- package/dist/policy/registry.d.ts +9 -0
- package/dist/policy/registry.js +11 -0
- package/dist/policy/spec.d.ts +103 -0
- package/dist/policy/spec.js +0 -0
- package/dist/presentations/docs/presentations-conventions.docblock.d.ts +6 -0
- package/dist/presentations/docs/presentations-conventions.docblock.js +21 -0
- package/dist/presentations/index.d.ts +4 -0
- package/dist/presentations/index.js +5 -0
- package/dist/presentations/presentations.d.ts +50 -0
- package/dist/presentations/presentations.js +7 -0
- package/dist/presentations/registry.d.ts +10 -0
- package/dist/presentations/registry.js +12 -0
- package/dist/presentations/transform-engine.d.ts +66 -0
- package/dist/presentations/transform-engine.js +282 -0
- package/dist/prompt.d.ts +60 -0
- package/dist/prompt.js +10 -0
- package/dist/promptRegistry.d.ts +15 -0
- package/dist/promptRegistry.js +34 -0
- package/dist/regenerator/adapters.d.ts +19 -0
- package/dist/regenerator/adapters.js +0 -0
- package/dist/regenerator/docs/regenerator.docblock.d.ts +6 -0
- package/dist/regenerator/docs/regenerator.docblock.js +21 -0
- package/dist/regenerator/executor.d.ts +70 -0
- package/dist/regenerator/executor.js +86 -0
- package/dist/regenerator/index.d.ts +7 -0
- package/dist/regenerator/index.js +6 -0
- package/dist/regenerator/service.d.ts +33 -0
- package/dist/regenerator/service.js +93 -0
- package/dist/regenerator/sinks.d.ts +26 -0
- package/dist/regenerator/sinks.js +32 -0
- package/dist/regenerator/types.d.ts +107 -0
- package/dist/regenerator/types.js +0 -0
- package/dist/regenerator/utils.d.ts +9 -0
- package/dist/regenerator/utils.js +51 -0
- package/dist/registry-utils.d.ts +106 -0
- package/dist/registry-utils.js +122 -0
- package/dist/registry.d.ts +31 -0
- package/dist/registry.js +61 -0
- package/dist/resources.d.ts +64 -0
- package/dist/resources.js +50 -0
- package/dist/schema-to-markdown.d.ts +54 -0
- package/dist/schema-to-markdown.js +217 -0
- package/dist/server/contracts-adapter-hydration.d.ts +15 -0
- package/dist/server/contracts-adapter-hydration.js +41 -0
- package/dist/server/contracts-adapter-input.d.ts +9 -0
- package/dist/server/contracts-adapter-input.js +83 -0
- package/dist/server/graphql-pothos.d.ts +31 -0
- package/dist/server/graphql-pothos.js +134 -0
- package/dist/server/index.d.ts +9 -0
- package/dist/server/index.js +10 -0
- package/dist/server/mcp/createMcpServer.d.ts +15 -0
- package/dist/server/mcp/createMcpServer.js +27 -0
- package/dist/server/mcp/mcpTypes.d.ts +27 -0
- package/dist/server/mcp/mcpTypes.js +0 -0
- package/dist/server/mcp/registerPresentations.d.ts +7 -0
- package/dist/server/mcp/registerPresentations.js +63 -0
- package/dist/server/mcp/registerPrompts.d.ts +8 -0
- package/dist/server/mcp/registerPrompts.js +37 -0
- package/dist/server/mcp/registerResources.d.ts +8 -0
- package/dist/server/mcp/registerResources.js +35 -0
- package/dist/server/mcp/registerTools.d.ts +8 -0
- package/dist/server/mcp/registerTools.js +22 -0
- package/dist/server/provider-mcp.d.ts +2 -0
- package/dist/server/provider-mcp.js +3 -0
- package/dist/server/rest-elysia.d.ts +40 -0
- package/dist/server/rest-elysia.js +20 -0
- package/dist/server/rest-express.d.ts +16 -0
- package/dist/server/rest-express.js +36 -0
- package/dist/server/rest-generic.d.ts +32 -0
- package/dist/server/rest-generic.js +124 -0
- package/dist/server/rest-next-app.d.ts +35 -0
- package/dist/server/rest-next-app.js +38 -0
- package/dist/server/rest-next-mcp.d.ts +11 -0
- package/dist/server/rest-next-mcp.js +45 -0
- package/dist/server/rest-next-pages.d.ts +9 -0
- package/dist/server/rest-next-pages.js +22 -0
- package/dist/telemetry/anomaly.d.ts +27 -0
- package/dist/telemetry/anomaly.js +48 -0
- package/dist/telemetry/docs/telemetry.docblock.d.ts +6 -0
- package/dist/telemetry/docs/telemetry.docblock.js +21 -0
- package/dist/telemetry/index.d.ts +4 -0
- package/dist/telemetry/index.js +5 -0
- package/dist/telemetry/spec.d.ts +91 -0
- package/dist/telemetry/spec.js +69 -0
- package/dist/telemetry/tracker.d.ts +51 -0
- package/dist/telemetry/tracker.js +76 -0
- package/dist/tests/index.d.ts +3 -0
- package/dist/tests/index.js +4 -0
- package/dist/tests/runner.d.ts +43 -0
- package/dist/tests/runner.js +150 -0
- package/dist/tests/spec.d.ts +81 -0
- package/dist/tests/spec.js +33 -0
- package/dist/themes.d.ts +53 -0
- package/dist/themes.js +39 -0
- package/dist/translations/catalog.d.ts +28 -0
- package/dist/translations/catalog.js +0 -0
- package/dist/translations/tenant.d.ts +15 -0
- package/dist/translations/tenant.js +0 -0
- package/dist/types.d.ts +92 -0
- package/dist/types.js +0 -0
- package/dist/workflow/adapters/db-adapter.d.ts +46 -0
- package/dist/workflow/adapters/db-adapter.js +83 -0
- package/dist/workflow/adapters/file-adapter.d.ts +14 -0
- package/dist/workflow/adapters/file-adapter.js +11 -0
- package/dist/workflow/adapters/index.d.ts +4 -0
- package/dist/workflow/adapters/index.js +5 -0
- package/dist/workflow/adapters/memory-store.d.ts +18 -0
- package/dist/workflow/adapters/memory-store.js +58 -0
- package/dist/workflow/expression.d.ts +9 -0
- package/dist/workflow/expression.js +99 -0
- package/dist/workflow/index.d.ts +10 -0
- package/dist/workflow/index.js +9 -0
- package/dist/workflow/overview.docblock.d.ts +6 -0
- package/dist/workflow/overview.docblock.js +21 -0
- package/dist/workflow/runner.d.ts +75 -0
- package/dist/workflow/runner.js +337 -0
- package/dist/workflow/sla-monitor.d.ts +20 -0
- package/dist/workflow/sla-monitor.js +47 -0
- package/dist/workflow/spec.d.ts +106 -0
- package/dist/workflow/spec.js +55 -0
- package/dist/workflow/state.d.ts +35 -0
- package/dist/workflow/state.js +0 -0
- package/dist/workflow/validation.d.ts +29 -0
- package/dist/workflow/validation.js +176 -0
- package/dist/workspace-config/contractsrc-schema.d.ts +862 -0
- package/dist/workspace-config/contractsrc-schema.js +281 -0
- package/dist/workspace-config/index.d.ts +2 -0
- package/dist/workspace-config/index.js +3 -0
- package/dist/workspace-config/workspace-config.docblock.d.ts +6 -0
- package/dist/workspace-config/workspace-config.docblock.js +45 -0
- package/package.json +598 -0
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { ProposalAction, RegenerationContext, SpecChangeProposal } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/regenerator/executor.d.ts
|
|
4
|
+
type ExecutionStatus = 'success' | 'skipped' | 'failed';
|
|
5
|
+
interface ActionExecutionResult {
|
|
6
|
+
index: number;
|
|
7
|
+
action: ProposalAction;
|
|
8
|
+
status: ExecutionStatus;
|
|
9
|
+
startedAt: Date;
|
|
10
|
+
finishedAt: Date;
|
|
11
|
+
reason?: string;
|
|
12
|
+
error?: Error;
|
|
13
|
+
output?: unknown;
|
|
14
|
+
}
|
|
15
|
+
interface ProposalExecutionResult {
|
|
16
|
+
proposalId: string;
|
|
17
|
+
contextId: string;
|
|
18
|
+
startedAt: Date;
|
|
19
|
+
finishedAt: Date;
|
|
20
|
+
status: 'success' | 'partial' | 'failed';
|
|
21
|
+
actions: ActionExecutionResult[];
|
|
22
|
+
}
|
|
23
|
+
type UpdateBlueprintAction = Extract<ProposalAction, {
|
|
24
|
+
kind: 'update_blueprint';
|
|
25
|
+
}>;
|
|
26
|
+
type UpdateTenantConfigAction = Extract<ProposalAction, {
|
|
27
|
+
kind: 'update_tenant_config';
|
|
28
|
+
}>;
|
|
29
|
+
type RunTestsAction = Extract<ProposalAction, {
|
|
30
|
+
kind: 'run_tests';
|
|
31
|
+
}>;
|
|
32
|
+
type RunMigrationsAction = Extract<ProposalAction, {
|
|
33
|
+
kind: 'run_migrations';
|
|
34
|
+
}>;
|
|
35
|
+
type TriggerRegenerationAction = Extract<ProposalAction, {
|
|
36
|
+
kind: 'trigger_regeneration';
|
|
37
|
+
}>;
|
|
38
|
+
interface BlueprintUpdater {
|
|
39
|
+
applyBlueprintUpdate(context: RegenerationContext, proposal: SpecChangeProposal, action: UpdateBlueprintAction): Promise<unknown>;
|
|
40
|
+
}
|
|
41
|
+
interface TenantConfigUpdater {
|
|
42
|
+
applyTenantConfigUpdate(context: RegenerationContext, proposal: SpecChangeProposal, action: UpdateTenantConfigAction): Promise<unknown>;
|
|
43
|
+
}
|
|
44
|
+
interface TestExecutor {
|
|
45
|
+
runTests(context: RegenerationContext, proposal: SpecChangeProposal, action: RunTestsAction): Promise<unknown>;
|
|
46
|
+
}
|
|
47
|
+
interface MigrationExecutor {
|
|
48
|
+
runMigrations(context: RegenerationContext, proposal: SpecChangeProposal, action: RunMigrationsAction): Promise<unknown>;
|
|
49
|
+
}
|
|
50
|
+
interface RegenerationTrigger {
|
|
51
|
+
triggerRegeneration(context: RegenerationContext, proposal: SpecChangeProposal, action: TriggerRegenerationAction): Promise<unknown>;
|
|
52
|
+
}
|
|
53
|
+
interface ProposalExecutorOptions {
|
|
54
|
+
dryRun?: boolean;
|
|
55
|
+
}
|
|
56
|
+
interface ProposalExecutorDeps {
|
|
57
|
+
blueprintUpdater?: BlueprintUpdater;
|
|
58
|
+
tenantConfigUpdater?: TenantConfigUpdater;
|
|
59
|
+
testExecutor?: TestExecutor;
|
|
60
|
+
migrationExecutor?: MigrationExecutor;
|
|
61
|
+
regenerationTrigger?: RegenerationTrigger;
|
|
62
|
+
}
|
|
63
|
+
declare class ProposalExecutor {
|
|
64
|
+
private readonly deps;
|
|
65
|
+
constructor(deps?: ProposalExecutorDeps);
|
|
66
|
+
execute(context: RegenerationContext, proposal: SpecChangeProposal, options?: ProposalExecutorOptions): Promise<ProposalExecutionResult>;
|
|
67
|
+
private executeAction;
|
|
68
|
+
}
|
|
69
|
+
//#endregion
|
|
70
|
+
export { ActionExecutionResult, BlueprintUpdater, ExecutionStatus, MigrationExecutor, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, RegenerationTrigger, RunMigrationsAction, RunTestsAction, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction };
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
//#region src/regenerator/executor.ts
|
|
2
|
+
var ProposalExecutor = class {
|
|
3
|
+
constructor(deps = {}) {
|
|
4
|
+
this.deps = deps;
|
|
5
|
+
}
|
|
6
|
+
async execute(context, proposal, options = {}) {
|
|
7
|
+
const startedAt = /* @__PURE__ */ new Date();
|
|
8
|
+
const actionResults = [];
|
|
9
|
+
for (const [index, action] of proposal.actions.entries()) {
|
|
10
|
+
const result = await this.executeAction({
|
|
11
|
+
index,
|
|
12
|
+
action,
|
|
13
|
+
context,
|
|
14
|
+
proposal,
|
|
15
|
+
options
|
|
16
|
+
});
|
|
17
|
+
actionResults.push(result);
|
|
18
|
+
}
|
|
19
|
+
const finishedAt = /* @__PURE__ */ new Date();
|
|
20
|
+
const summaryStatus = summarizeStatus(actionResults);
|
|
21
|
+
return {
|
|
22
|
+
proposalId: proposal.id,
|
|
23
|
+
contextId: context.id,
|
|
24
|
+
startedAt,
|
|
25
|
+
finishedAt,
|
|
26
|
+
status: summaryStatus,
|
|
27
|
+
actions: actionResults
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
async executeAction({ index, action, context, proposal, options }) {
|
|
31
|
+
const startedAt = /* @__PURE__ */ new Date();
|
|
32
|
+
const dryRun = options.dryRun ?? false;
|
|
33
|
+
const complete = (status, params = {}) => ({
|
|
34
|
+
index,
|
|
35
|
+
action,
|
|
36
|
+
status,
|
|
37
|
+
startedAt,
|
|
38
|
+
finishedAt: /* @__PURE__ */ new Date(),
|
|
39
|
+
reason: params.reason,
|
|
40
|
+
output: params.output,
|
|
41
|
+
error: params.error
|
|
42
|
+
});
|
|
43
|
+
if (dryRun) return complete("skipped", { reason: "dry_run" });
|
|
44
|
+
try {
|
|
45
|
+
switch (action.kind) {
|
|
46
|
+
case "update_blueprint": {
|
|
47
|
+
const updater = this.deps.blueprintUpdater;
|
|
48
|
+
if (!updater) return complete("skipped", { reason: "missing_blueprint_updater" });
|
|
49
|
+
return complete("success", { output: await updater.applyBlueprintUpdate(context, proposal, action) });
|
|
50
|
+
}
|
|
51
|
+
case "update_tenant_config": {
|
|
52
|
+
const updater = this.deps.tenantConfigUpdater;
|
|
53
|
+
if (!updater) return complete("skipped", { reason: "missing_tenant_config_updater" });
|
|
54
|
+
return complete("success", { output: await updater.applyTenantConfigUpdate(context, proposal, action) });
|
|
55
|
+
}
|
|
56
|
+
case "run_tests": {
|
|
57
|
+
const executor = this.deps.testExecutor;
|
|
58
|
+
if (!executor) return complete("skipped", { reason: "missing_test_executor" });
|
|
59
|
+
return complete("success", { output: await executor.runTests(context, proposal, action) });
|
|
60
|
+
}
|
|
61
|
+
case "run_migrations": {
|
|
62
|
+
const executor = this.deps.migrationExecutor;
|
|
63
|
+
if (!executor) return complete("skipped", { reason: "missing_migration_executor" });
|
|
64
|
+
return complete("success", { output: await executor.runMigrations(context, proposal, action) });
|
|
65
|
+
}
|
|
66
|
+
case "trigger_regeneration": {
|
|
67
|
+
const trigger = this.deps.regenerationTrigger;
|
|
68
|
+
if (!trigger) return complete("skipped", { reason: "missing_regeneration_trigger" });
|
|
69
|
+
return complete("success", { output: await trigger.triggerRegeneration(context, proposal, action) });
|
|
70
|
+
}
|
|
71
|
+
default: return complete("skipped", { reason: "unknown_action" });
|
|
72
|
+
}
|
|
73
|
+
} catch (error) {
|
|
74
|
+
return complete("failed", { error: error instanceof Error ? error : new Error(String(error)) });
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
function summarizeStatus(actionResults) {
|
|
79
|
+
if (actionResults.some((result) => result.status === "failed")) return "failed";
|
|
80
|
+
if (actionResults.some((result) => result.status === "success") && actionResults.some((result) => result.status === "skipped")) return "partial";
|
|
81
|
+
if (actionResults.every((result) => result.status === "skipped")) return "partial";
|
|
82
|
+
return "success";
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
//#endregion
|
|
86
|
+
export { ProposalExecutor };
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegeneratorSignal, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope } from "./types.js";
|
|
2
|
+
import { BehaviorSignalProvider, ErrorSignalProvider, SignalAdapters, TelemetrySignalProvider } from "./adapters.js";
|
|
3
|
+
import { RegeneratorOptions, RegeneratorService } from "./service.js";
|
|
4
|
+
import { ActionExecutionResult, BlueprintUpdater, ExecutionStatus, MigrationExecutor, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, RegenerationTrigger, RunMigrationsAction, RunTestsAction, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction } from "./executor.js";
|
|
5
|
+
import { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope } from "./utils.js";
|
|
6
|
+
import { ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions } from "./sinks.js";
|
|
7
|
+
export { ActionExecutionResult, BehaviorSignal, BehaviorSignalEnvelope, BehaviorSignalProvider, BlueprintUpdater, ErrorSignal, ErrorSignalEnvelope, ErrorSignalProvider, ExecutionStatus, ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions, MigrationExecutor, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalExecutionResult, ProposalExecutor, ProposalExecutorDeps, ProposalExecutorOptions, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegenerationTrigger, RegeneratorOptions, RegeneratorService, RegeneratorSignal, RunMigrationsAction, RunTestsAction, SignalAdapters, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope, TelemetrySignalProvider, TenantConfigUpdater, TestExecutor, TriggerRegenerationAction, UpdateBlueprintAction, UpdateTenantConfigAction, behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope } from "./utils.js";
|
|
2
|
+
import { RegeneratorService } from "./service.js";
|
|
3
|
+
import { ProposalExecutor } from "./executor.js";
|
|
4
|
+
import { ExecutorProposalSink } from "./sinks.js";
|
|
5
|
+
|
|
6
|
+
export { ExecutorProposalSink, ProposalExecutor, RegeneratorService, behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ProposalSink, RegenerationContext, RegenerationRule } from "./types.js";
|
|
2
|
+
import { SignalAdapters } from "./adapters.js";
|
|
3
|
+
|
|
4
|
+
//#region src/regenerator/service.d.ts
|
|
5
|
+
interface RegeneratorOptions {
|
|
6
|
+
contexts: RegenerationContext[];
|
|
7
|
+
adapters: SignalAdapters;
|
|
8
|
+
rules: RegenerationRule[];
|
|
9
|
+
sink: ProposalSink;
|
|
10
|
+
pollIntervalMs?: number;
|
|
11
|
+
batchDurationMs?: number;
|
|
12
|
+
clock?: () => Date;
|
|
13
|
+
}
|
|
14
|
+
declare class RegeneratorService {
|
|
15
|
+
private readonly options;
|
|
16
|
+
private readonly contexts;
|
|
17
|
+
private readonly lastPoll;
|
|
18
|
+
private timer?;
|
|
19
|
+
private running;
|
|
20
|
+
private readonly pollInterval;
|
|
21
|
+
private readonly batchDuration;
|
|
22
|
+
private readonly clock;
|
|
23
|
+
constructor(options: RegeneratorOptions);
|
|
24
|
+
start(): void;
|
|
25
|
+
stop(): void;
|
|
26
|
+
runOnce(): Promise<void>;
|
|
27
|
+
private tick;
|
|
28
|
+
private evaluateContext;
|
|
29
|
+
private collectSignals;
|
|
30
|
+
private flushProposals;
|
|
31
|
+
}
|
|
32
|
+
//#endregion
|
|
33
|
+
export { RegeneratorOptions, RegeneratorService };
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
import { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope } from "./utils.js";
|
|
2
|
+
|
|
3
|
+
//#region src/regenerator/service.ts
|
|
4
|
+
/** Cross-platform delay that works in browser and Node.js */
|
|
5
|
+
const delay = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
6
|
+
const DEFAULT_POLL_INTERVAL = 6e4;
|
|
7
|
+
const DEFAULT_BATCH_DURATION = 5 * 6e4;
|
|
8
|
+
var RegeneratorService = class {
|
|
9
|
+
contexts;
|
|
10
|
+
lastPoll = /* @__PURE__ */ new Map();
|
|
11
|
+
timer;
|
|
12
|
+
running = false;
|
|
13
|
+
pollInterval;
|
|
14
|
+
batchDuration;
|
|
15
|
+
clock;
|
|
16
|
+
constructor(options) {
|
|
17
|
+
this.options = options;
|
|
18
|
+
this.contexts = new Map(options.contexts.map((ctx) => [ctx.id, ctx]));
|
|
19
|
+
this.pollInterval = options.pollIntervalMs ?? DEFAULT_POLL_INTERVAL;
|
|
20
|
+
this.batchDuration = options.batchDurationMs ?? DEFAULT_BATCH_DURATION;
|
|
21
|
+
this.clock = options.clock ?? (() => /* @__PURE__ */ new Date());
|
|
22
|
+
if (this.options.rules.length === 0) throw new Error("RegeneratorService requires at least one rule");
|
|
23
|
+
}
|
|
24
|
+
start() {
|
|
25
|
+
if (this.running) return;
|
|
26
|
+
this.running = true;
|
|
27
|
+
this.tick();
|
|
28
|
+
this.timer = setInterval(() => {
|
|
29
|
+
this.tick();
|
|
30
|
+
}, this.pollInterval);
|
|
31
|
+
}
|
|
32
|
+
stop() {
|
|
33
|
+
if (!this.running) return;
|
|
34
|
+
this.running = false;
|
|
35
|
+
if (this.timer) {
|
|
36
|
+
clearInterval(this.timer);
|
|
37
|
+
this.timer = void 0;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
async runOnce() {
|
|
41
|
+
await this.tick();
|
|
42
|
+
}
|
|
43
|
+
async tick() {
|
|
44
|
+
const now = this.clock();
|
|
45
|
+
const sinceDefault = new Date(now.getTime() - this.batchDuration);
|
|
46
|
+
for (const context of this.contexts.values()) {
|
|
47
|
+
const last = this.lastPoll.get(context.id) ?? sinceDefault;
|
|
48
|
+
await this.evaluateContext(context, last, now);
|
|
49
|
+
this.lastPoll.set(context.id, now);
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
async evaluateContext(context, since, until) {
|
|
53
|
+
const signals = await this.collectSignals(context, since, until);
|
|
54
|
+
if (signals.length === 0) return;
|
|
55
|
+
for (const rule of this.options.rules) {
|
|
56
|
+
let proposals = [];
|
|
57
|
+
try {
|
|
58
|
+
proposals = await rule.evaluate(context, signals);
|
|
59
|
+
} catch (error) {
|
|
60
|
+
console.error(`[regenerator] rule ${rule.id} failed`, error instanceof Error ? error : new Error(String(error)));
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
await this.flushProposals(context, proposals);
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
async collectSignals(context, since, until) {
|
|
67
|
+
const envelopes = [];
|
|
68
|
+
const { adapters } = this.options;
|
|
69
|
+
if (adapters.telemetry) {
|
|
70
|
+
const telemetrySignals = await adapters.telemetry.pollTelemetry(context, since, until);
|
|
71
|
+
envelopes.push(...telemetrySignals.map((signal) => telemetryToEnvelope(context.id, signal, this.clock)));
|
|
72
|
+
}
|
|
73
|
+
if (adapters.errors) {
|
|
74
|
+
const errorSignals = await adapters.errors.pollErrors(context, since, until);
|
|
75
|
+
envelopes.push(...errorSignals.map((signal) => errorToEnvelope(context.id, signal, this.clock)));
|
|
76
|
+
}
|
|
77
|
+
if (adapters.behavior) {
|
|
78
|
+
const behaviorSignals = await adapters.behavior.pollBehavior(context, since, until);
|
|
79
|
+
envelopes.push(...behaviorSignals.map((signal) => behaviorToEnvelope(context.id, signal, this.clock)));
|
|
80
|
+
}
|
|
81
|
+
return envelopes;
|
|
82
|
+
}
|
|
83
|
+
async flushProposals(context, proposals) {
|
|
84
|
+
for (const proposal of proposals) {
|
|
85
|
+
if (proposal.signalIds.length === 0) continue;
|
|
86
|
+
await this.options.sink.submit(context, proposal);
|
|
87
|
+
if (proposals.length > 10) await delay(0);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
};
|
|
91
|
+
|
|
92
|
+
//#endregion
|
|
93
|
+
export { RegeneratorService };
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { ProposalSink, RegenerationContext, SpecChangeProposal } from "./types.js";
|
|
2
|
+
import { ProposalExecutionResult, ProposalExecutor } from "./executor.js";
|
|
3
|
+
|
|
4
|
+
//#region src/regenerator/sinks.d.ts
|
|
5
|
+
interface ExecutorResultPayload {
|
|
6
|
+
context: RegenerationContext;
|
|
7
|
+
proposal: SpecChangeProposal;
|
|
8
|
+
result: ProposalExecutionResult;
|
|
9
|
+
}
|
|
10
|
+
interface ExecutorSinkLogger {
|
|
11
|
+
info?: (message: string, meta?: Record<string, unknown>) => void;
|
|
12
|
+
error?: (message: string, error: Error, meta?: Record<string, unknown>) => void;
|
|
13
|
+
}
|
|
14
|
+
interface ExecutorSinkOptions {
|
|
15
|
+
dryRun?: boolean;
|
|
16
|
+
onResult?: (payload: ExecutorResultPayload) => void | Promise<void>;
|
|
17
|
+
logger?: ExecutorSinkLogger;
|
|
18
|
+
}
|
|
19
|
+
declare class ExecutorProposalSink implements ProposalSink {
|
|
20
|
+
private readonly executor;
|
|
21
|
+
private readonly options;
|
|
22
|
+
constructor(executor: ProposalExecutor, options?: ExecutorSinkOptions);
|
|
23
|
+
submit(context: RegenerationContext, proposal: SpecChangeProposal): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
//#endregion
|
|
26
|
+
export { ExecutorProposalSink, ExecutorResultPayload, ExecutorSinkLogger, ExecutorSinkOptions };
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
//#region src/regenerator/sinks.ts
|
|
2
|
+
var ExecutorProposalSink = class {
|
|
3
|
+
constructor(executor, options = {}) {
|
|
4
|
+
this.executor = executor;
|
|
5
|
+
this.options = options;
|
|
6
|
+
}
|
|
7
|
+
async submit(context, proposal) {
|
|
8
|
+
const dryRun = this.options.dryRun ?? false;
|
|
9
|
+
try {
|
|
10
|
+
const result = await this.executor.execute(context, proposal, { dryRun });
|
|
11
|
+
if (this.options.logger?.info) this.options.logger.info("[regenerator] proposal executed", {
|
|
12
|
+
proposalId: proposal.id,
|
|
13
|
+
contextId: context.id,
|
|
14
|
+
status: result.status
|
|
15
|
+
});
|
|
16
|
+
if (this.options.onResult) await this.options.onResult({
|
|
17
|
+
context,
|
|
18
|
+
proposal,
|
|
19
|
+
result
|
|
20
|
+
});
|
|
21
|
+
} catch (error) {
|
|
22
|
+
if (this.options.logger?.error) this.options.logger.error("[regenerator] proposal execution failed", error instanceof Error ? error : new Error(String(error)), {
|
|
23
|
+
proposalId: proposal.id,
|
|
24
|
+
contextId: context.id
|
|
25
|
+
});
|
|
26
|
+
throw error instanceof Error ? error : new Error(String(error));
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
//#endregion
|
|
32
|
+
export { ExecutorProposalSink };
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { TelemetrySpec } from "../telemetry/spec.js";
|
|
2
|
+
import { AppBlueprintSpec, TenantAppConfig } from "../app-config/spec.js";
|
|
3
|
+
import { ResolvedAppConfig } from "../app-config/runtime.js";
|
|
4
|
+
|
|
5
|
+
//#region src/regenerator/types.d.ts
|
|
6
|
+
type RegeneratorSignal = TelemetrySignalEnvelope | ErrorSignalEnvelope | BehaviorSignalEnvelope;
|
|
7
|
+
interface TelemetrySignalEnvelope {
|
|
8
|
+
type: 'telemetry';
|
|
9
|
+
contextId: string;
|
|
10
|
+
signal: TelemetrySignal;
|
|
11
|
+
}
|
|
12
|
+
interface TelemetrySignal {
|
|
13
|
+
eventName: string;
|
|
14
|
+
eventVersion: number;
|
|
15
|
+
count: number;
|
|
16
|
+
windowStart: Date;
|
|
17
|
+
windowEnd: Date;
|
|
18
|
+
anomalyScore?: number;
|
|
19
|
+
classification?: 'normal' | 'warning' | 'critical';
|
|
20
|
+
metadata?: Record<string, unknown>;
|
|
21
|
+
telemetrySpec?: TelemetrySpec;
|
|
22
|
+
}
|
|
23
|
+
interface ErrorSignalEnvelope {
|
|
24
|
+
type: 'error';
|
|
25
|
+
contextId: string;
|
|
26
|
+
signal: ErrorSignal;
|
|
27
|
+
}
|
|
28
|
+
interface ErrorSignal {
|
|
29
|
+
id: string;
|
|
30
|
+
classification: 'runtime' | 'policy' | 'workflow' | 'unknown';
|
|
31
|
+
message: string;
|
|
32
|
+
occurredAt: Date;
|
|
33
|
+
count: number;
|
|
34
|
+
metadata?: Record<string, unknown>;
|
|
35
|
+
}
|
|
36
|
+
interface BehaviorSignalEnvelope {
|
|
37
|
+
type: 'behavior';
|
|
38
|
+
contextId: string;
|
|
39
|
+
signal: BehaviorSignal;
|
|
40
|
+
}
|
|
41
|
+
interface BehaviorSignal {
|
|
42
|
+
feature: string;
|
|
43
|
+
metric: 'usage' | 'conversion' | 'latency' | 'custom';
|
|
44
|
+
value: number;
|
|
45
|
+
baseline?: number;
|
|
46
|
+
windowStart: Date;
|
|
47
|
+
windowEnd: Date;
|
|
48
|
+
metadata?: Record<string, unknown>;
|
|
49
|
+
}
|
|
50
|
+
interface SpecChangeProposal {
|
|
51
|
+
id: string;
|
|
52
|
+
title: string;
|
|
53
|
+
summary: string;
|
|
54
|
+
confidence: ProposalConfidence;
|
|
55
|
+
rationale: string[];
|
|
56
|
+
target: ProposalTarget;
|
|
57
|
+
diff?: string;
|
|
58
|
+
actions: ProposalAction[];
|
|
59
|
+
blockers?: ProposalBlocker[];
|
|
60
|
+
createdAt: Date;
|
|
61
|
+
signalIds: string[];
|
|
62
|
+
}
|
|
63
|
+
type ProposalConfidence = 'low' | 'medium' | 'high';
|
|
64
|
+
interface ProposalTarget {
|
|
65
|
+
specType: 'workflow' | 'capability' | 'policy' | 'dataView' | 'telemetry' | 'experiment' | 'theme' | 'unknown';
|
|
66
|
+
reference: {
|
|
67
|
+
key: string;
|
|
68
|
+
version?: number;
|
|
69
|
+
};
|
|
70
|
+
tenantScoped?: boolean;
|
|
71
|
+
}
|
|
72
|
+
type ProposalAction = {
|
|
73
|
+
kind: 'update_blueprint';
|
|
74
|
+
summary: string;
|
|
75
|
+
} | {
|
|
76
|
+
kind: 'update_tenant_config';
|
|
77
|
+
summary: string;
|
|
78
|
+
} | {
|
|
79
|
+
kind: 'run_tests';
|
|
80
|
+
tests: string[];
|
|
81
|
+
} | {
|
|
82
|
+
kind: 'run_migrations';
|
|
83
|
+
migrations: string[];
|
|
84
|
+
} | {
|
|
85
|
+
kind: 'trigger_regeneration';
|
|
86
|
+
summary?: string;
|
|
87
|
+
};
|
|
88
|
+
interface ProposalBlocker {
|
|
89
|
+
description: string;
|
|
90
|
+
kind: 'missing_context' | 'insufficient_data' | 'user_feedback' | 'manual_review';
|
|
91
|
+
}
|
|
92
|
+
interface RegenerationContext {
|
|
93
|
+
id: string;
|
|
94
|
+
blueprint: AppBlueprintSpec;
|
|
95
|
+
tenantConfig: TenantAppConfig;
|
|
96
|
+
resolved: ResolvedAppConfig;
|
|
97
|
+
}
|
|
98
|
+
interface RegenerationRule {
|
|
99
|
+
readonly id: string;
|
|
100
|
+
readonly description: string;
|
|
101
|
+
evaluate(context: RegenerationContext, signals: RegeneratorSignal[]): Promise<SpecChangeProposal[]>;
|
|
102
|
+
}
|
|
103
|
+
interface ProposalSink {
|
|
104
|
+
submit(context: RegenerationContext, proposal: SpecChangeProposal): Promise<void>;
|
|
105
|
+
}
|
|
106
|
+
//#endregion
|
|
107
|
+
export { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, ProposalAction, ProposalBlocker, ProposalConfidence, ProposalSink, ProposalTarget, RegenerationContext, RegenerationRule, RegeneratorSignal, SpecChangeProposal, TelemetrySignal, TelemetrySignalEnvelope };
|
|
File without changes
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { BehaviorSignal, BehaviorSignalEnvelope, ErrorSignal, ErrorSignalEnvelope, TelemetrySignal, TelemetrySignalEnvelope } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/regenerator/utils.d.ts
|
|
4
|
+
type Clock = () => Date;
|
|
5
|
+
declare function telemetryToEnvelope(contextId: string, signal: TelemetrySignal, clock: Clock): TelemetrySignalEnvelope;
|
|
6
|
+
declare function errorToEnvelope(contextId: string, signal: ErrorSignal, clock: Clock): ErrorSignalEnvelope;
|
|
7
|
+
declare function behaviorToEnvelope(contextId: string, signal: BehaviorSignal, clock: Clock): BehaviorSignalEnvelope;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
//#region src/regenerator/utils.ts
|
|
2
|
+
function telemetryToEnvelope(contextId, signal, clock) {
|
|
3
|
+
return {
|
|
4
|
+
type: "telemetry",
|
|
5
|
+
contextId,
|
|
6
|
+
signal: normalizeTelemetryDates(signal, clock)
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
function errorToEnvelope(contextId, signal, clock) {
|
|
10
|
+
return {
|
|
11
|
+
type: "error",
|
|
12
|
+
contextId,
|
|
13
|
+
signal: normalizeErrorDates(signal, clock)
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
function behaviorToEnvelope(contextId, signal, clock) {
|
|
17
|
+
return {
|
|
18
|
+
type: "behavior",
|
|
19
|
+
contextId,
|
|
20
|
+
signal: normalizeBehaviorDates(signal, clock)
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
function normalizeTelemetryDates(signal, clock) {
|
|
24
|
+
return {
|
|
25
|
+
...signal,
|
|
26
|
+
windowStart: toDate(signal.windowStart, clock),
|
|
27
|
+
windowEnd: toDate(signal.windowEnd, clock)
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function normalizeErrorDates(signal, clock) {
|
|
31
|
+
return {
|
|
32
|
+
...signal,
|
|
33
|
+
occurredAt: toDate(signal.occurredAt, clock)
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
function normalizeBehaviorDates(signal, clock) {
|
|
37
|
+
return {
|
|
38
|
+
...signal,
|
|
39
|
+
windowStart: toDate(signal.windowStart, clock),
|
|
40
|
+
windowEnd: toDate(signal.windowEnd, clock)
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
function toDate(value, clock) {
|
|
44
|
+
if (value instanceof Date) return value;
|
|
45
|
+
const parsed = new Date(value);
|
|
46
|
+
if (Number.isNaN(parsed.getTime())) return clock();
|
|
47
|
+
return parsed;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
//#endregion
|
|
51
|
+
export { behaviorToEnvelope, errorToEnvelope, telemetryToEnvelope };
|
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
import { Stability } from "./ownership.js";
|
|
2
|
+
|
|
3
|
+
//#region src/registry-utils.d.ts
|
|
4
|
+
|
|
5
|
+
/**
|
|
6
|
+
* Filter criteria for registry items.
|
|
7
|
+
* All criteria are optional and combined with AND logic.
|
|
8
|
+
*/
|
|
9
|
+
interface RegistryFilter {
|
|
10
|
+
/** Filter by tags (item must have at least one matching tag) */
|
|
11
|
+
tags?: string[];
|
|
12
|
+
/** Filter by owners (item must have at least one matching owner) */
|
|
13
|
+
owners?: string[];
|
|
14
|
+
/** Filter by stability levels */
|
|
15
|
+
stability?: Stability[];
|
|
16
|
+
/** Filter by domain (first segment of name) */
|
|
17
|
+
domain?: string;
|
|
18
|
+
/** Filter by key pattern (glob or regex) */
|
|
19
|
+
keyPattern?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Item with standard metadata for filtering.
|
|
23
|
+
*/
|
|
24
|
+
interface FilterableItem {
|
|
25
|
+
meta: {
|
|
26
|
+
key?: string;
|
|
27
|
+
tags?: string[];
|
|
28
|
+
owners?: string[];
|
|
29
|
+
stability?: Stability;
|
|
30
|
+
domain?: string;
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Grouping key function type.
|
|
35
|
+
*/
|
|
36
|
+
type GroupKeyFn<T> = (item: T) => string;
|
|
37
|
+
/**
|
|
38
|
+
* Grouped items result.
|
|
39
|
+
*/
|
|
40
|
+
interface GroupedItems<T> {
|
|
41
|
+
key: string;
|
|
42
|
+
items: T[];
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Pre-built grouping strategies for common use cases.
|
|
46
|
+
*/
|
|
47
|
+
declare const GroupingStrategies: {
|
|
48
|
+
/**
|
|
49
|
+
* Group by first tag.
|
|
50
|
+
*/
|
|
51
|
+
byTag: <T extends FilterableItem>(item: T) => string;
|
|
52
|
+
/**
|
|
53
|
+
* Group by all tags (item appears in multiple groups).
|
|
54
|
+
*/
|
|
55
|
+
byAllTags: <T extends FilterableItem>(item: T) => string[];
|
|
56
|
+
/**
|
|
57
|
+
* Group by first owner.
|
|
58
|
+
*/
|
|
59
|
+
byOwner: <T extends FilterableItem>(item: T) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Group by domain (first segment of name).
|
|
62
|
+
*/
|
|
63
|
+
byDomain: <T extends FilterableItem>(item: T) => string;
|
|
64
|
+
/**
|
|
65
|
+
* Group by stability level.
|
|
66
|
+
*/
|
|
67
|
+
byStability: <T extends FilterableItem>(item: T) => string;
|
|
68
|
+
/**
|
|
69
|
+
* Create URL path grouping strategy with configurable depth.
|
|
70
|
+
*/
|
|
71
|
+
byUrlPath: (level: number) => (item: {
|
|
72
|
+
path?: string;
|
|
73
|
+
}) => string;
|
|
74
|
+
};
|
|
75
|
+
/**
|
|
76
|
+
* Filter items by criteria.
|
|
77
|
+
* All criteria are combined with AND logic.
|
|
78
|
+
*/
|
|
79
|
+
declare function filterBy<T extends FilterableItem>(items: T[], filter: RegistryFilter): T[];
|
|
80
|
+
/**
|
|
81
|
+
* Group items by key function.
|
|
82
|
+
*/
|
|
83
|
+
declare function groupBy<T>(items: T[], keyFn: GroupKeyFn<T>): Map<string, T[]>;
|
|
84
|
+
/**
|
|
85
|
+
* Group items by key function, returning array format.
|
|
86
|
+
*/
|
|
87
|
+
declare function groupByToArray<T>(items: T[], keyFn: GroupKeyFn<T>): GroupedItems<T>[];
|
|
88
|
+
/**
|
|
89
|
+
* Group items where one item can belong to multiple groups.
|
|
90
|
+
* Useful for byAllTags grouping.
|
|
91
|
+
*/
|
|
92
|
+
declare function groupByMultiple<T>(items: T[], keysFn: (item: T) => string[]): Map<string, T[]>;
|
|
93
|
+
/**
|
|
94
|
+
* Get unique tags from a collection of items.
|
|
95
|
+
*/
|
|
96
|
+
declare function getUniqueTags<T extends FilterableItem>(items: T[]): string[];
|
|
97
|
+
/**
|
|
98
|
+
* Get unique owners from a collection of items.
|
|
99
|
+
*/
|
|
100
|
+
declare function getUniqueOwners<T extends FilterableItem>(items: T[]): string[];
|
|
101
|
+
/**
|
|
102
|
+
* Get unique domains from a collection of items.
|
|
103
|
+
*/
|
|
104
|
+
declare function getUniqueDomains<T extends FilterableItem>(items: T[]): string[];
|
|
105
|
+
//#endregion
|
|
106
|
+
export { FilterableItem, GroupKeyFn, GroupedItems, GroupingStrategies, RegistryFilter, filterBy, getUniqueDomains, getUniqueOwners, getUniqueTags, groupBy, groupByMultiple, groupByToArray };
|