@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,50 @@
|
|
|
1
|
+
import { OwnerShipMeta } from "../ownership.js";
|
|
2
|
+
import { AnySchemaModel } from "@contractspec/lib.schema";
|
|
3
|
+
import { BlockConfig } from "@blocknote/core";
|
|
4
|
+
|
|
5
|
+
//#region src/presentations/presentations.d.ts
|
|
6
|
+
/** Supported render targets for the transform engine and descriptors. */
|
|
7
|
+
type PresentationTarget = 'react' | 'markdown' | 'application/json' | 'application/xml';
|
|
8
|
+
interface PresentationSpecMeta extends OwnerShipMeta {
|
|
9
|
+
/** Business goal: why this exists */
|
|
10
|
+
goal: string;
|
|
11
|
+
/** Background, constraints, scope edges (feeds docs & LLM context) */
|
|
12
|
+
context: string;
|
|
13
|
+
}
|
|
14
|
+
/** React component presentation source. */
|
|
15
|
+
interface PresentationSourceComponentReact {
|
|
16
|
+
/** Source marker for React component presentations. */
|
|
17
|
+
type: 'component';
|
|
18
|
+
/** Framework for the component source (currently only 'react'). */
|
|
19
|
+
framework: 'react';
|
|
20
|
+
/** Component key resolved by host `componentMap`. */
|
|
21
|
+
componentKey: string;
|
|
22
|
+
/** Optional props schema to validate against. */
|
|
23
|
+
props?: AnySchemaModel;
|
|
24
|
+
}
|
|
25
|
+
/** BlockNoteJS document presentation source. */
|
|
26
|
+
interface PresentationSourceBlocknotejs {
|
|
27
|
+
/** Source marker for BlockNoteJS document presentations. */
|
|
28
|
+
type: 'blocknotejs';
|
|
29
|
+
/** BlockNoteJS JSON document. */
|
|
30
|
+
docJson: unknown;
|
|
31
|
+
/** Optional BlockNote config to guide rendering. */
|
|
32
|
+
blockConfig?: BlockConfig;
|
|
33
|
+
}
|
|
34
|
+
type PresentationSource = PresentationSourceComponentReact | PresentationSourceBlocknotejs;
|
|
35
|
+
/**
|
|
36
|
+
* Normalized presentation spec decoupled from framework/adapters.
|
|
37
|
+
* Renderers and validators are provided via TransformEngine.
|
|
38
|
+
*/
|
|
39
|
+
interface PresentationSpec {
|
|
40
|
+
meta: PresentationSpecMeta;
|
|
41
|
+
policy?: {
|
|
42
|
+
flags?: string[];
|
|
43
|
+
pii?: string[];
|
|
44
|
+
};
|
|
45
|
+
source: PresentationSource;
|
|
46
|
+
targets: PresentationTarget[];
|
|
47
|
+
}
|
|
48
|
+
declare const definePresentation: (spec: PresentationSpec) => PresentationSpec;
|
|
49
|
+
//#endregion
|
|
50
|
+
export { PresentationSource, PresentationSourceBlocknotejs, PresentationSourceComponentReact, PresentationSpec, PresentationSpecMeta, PresentationTarget, definePresentation };
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PresentationSpec } from "./presentations.js";
|
|
2
|
+
import { SpecContractRegistry } from "../registry.js";
|
|
3
|
+
|
|
4
|
+
//#region src/presentations/registry.d.ts
|
|
5
|
+
/** In-memory registry for PresentationSpec. */
|
|
6
|
+
declare class PresentationRegistry extends SpecContractRegistry<'presentation', PresentationSpec> {
|
|
7
|
+
constructor(items?: PresentationSpec[]);
|
|
8
|
+
}
|
|
9
|
+
//#endregion
|
|
10
|
+
export { PresentationRegistry };
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { SpecContractRegistry } from "../registry.js";
|
|
2
|
+
|
|
3
|
+
//#region src/presentations/registry.ts
|
|
4
|
+
/** In-memory registry for PresentationSpec. */
|
|
5
|
+
var PresentationRegistry = class extends SpecContractRegistry {
|
|
6
|
+
constructor(items) {
|
|
7
|
+
super("presentation", items);
|
|
8
|
+
}
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
//#endregion
|
|
12
|
+
export { PresentationRegistry };
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { PresentationSpec, PresentationTarget } from "./presentations.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import { BlockConfig } from "@blocknote/core";
|
|
4
|
+
|
|
5
|
+
//#region src/presentations/transform-engine.d.ts
|
|
6
|
+
interface RenderContext {
|
|
7
|
+
/** Optional locale hint (i18n). */
|
|
8
|
+
locale?: string;
|
|
9
|
+
/** Enabled feature flags to drive conditional rendering. */
|
|
10
|
+
featureFlags?: string[];
|
|
11
|
+
/** Redaction hook for custom PII handling. */
|
|
12
|
+
redact?: (path: string, value: unknown) => unknown;
|
|
13
|
+
/** Optional data for schema-driven rendering (arrays or objects). */
|
|
14
|
+
data?: unknown;
|
|
15
|
+
/** Optional async data fetcher for renderers that need to load data on demand. */
|
|
16
|
+
fetchData?: () => Promise<unknown>;
|
|
17
|
+
}
|
|
18
|
+
interface PresentationRenderer<TOut> {
|
|
19
|
+
target: PresentationTarget;
|
|
20
|
+
render: (desc: PresentationSpec, ctx?: RenderContext) => Promise<TOut>;
|
|
21
|
+
}
|
|
22
|
+
interface PresentationValidator {
|
|
23
|
+
validate: (desc: PresentationSpec, target: PresentationTarget, ctx?: RenderContext) => Promise<void> | void;
|
|
24
|
+
}
|
|
25
|
+
declare class TransformEngine {
|
|
26
|
+
private renderers;
|
|
27
|
+
private validators;
|
|
28
|
+
register<TOut>(renderer: PresentationRenderer<TOut>): this;
|
|
29
|
+
/**
|
|
30
|
+
* Register a renderer that will be tried BEFORE existing renderers for the same target.
|
|
31
|
+
* Useful for custom renderers that should take priority over default ones.
|
|
32
|
+
*/
|
|
33
|
+
prependRegister<TOut>(renderer: PresentationRenderer<TOut>): this;
|
|
34
|
+
addValidator(v: PresentationValidator): this;
|
|
35
|
+
render<TOut = unknown>(target: PresentationTarget, desc: PresentationSpec, ctx?: RenderContext): Promise<TOut>;
|
|
36
|
+
}
|
|
37
|
+
/** Create a TransformEngine instance with default markdown/json/xml renderers. */
|
|
38
|
+
declare function createDefaultTransformEngine(): TransformEngine;
|
|
39
|
+
/** Serializable render descriptor for React hosts. */
|
|
40
|
+
type ReactRenderDescriptor = {
|
|
41
|
+
kind: 'react_component';
|
|
42
|
+
componentKey: string;
|
|
43
|
+
props?: Record<string, unknown>;
|
|
44
|
+
} | {
|
|
45
|
+
kind: 'blocknotejs';
|
|
46
|
+
docJson: unknown;
|
|
47
|
+
blockConfig?: BlockConfig;
|
|
48
|
+
};
|
|
49
|
+
/** Register a default React target renderer that returns a serializable descriptor. */
|
|
50
|
+
declare function registerDefaultReactRenderer(engine: TransformEngine): TransformEngine;
|
|
51
|
+
/**
|
|
52
|
+
* Add basic validators (e.g., meta.description presence) to the engine.
|
|
53
|
+
*/
|
|
54
|
+
declare function registerBasicValidation(engine: TransformEngine): TransformEngine;
|
|
55
|
+
/**
|
|
56
|
+
* Component map type for React rendering.
|
|
57
|
+
*/
|
|
58
|
+
type ComponentMap = Record<string, React.ComponentType<any>>;
|
|
59
|
+
/**
|
|
60
|
+
* Register a React-to-markdown renderer that renders React components to HTML
|
|
61
|
+
* and converts them to markdown using turndown.
|
|
62
|
+
* This renderer takes priority over the default metadata-only renderer.
|
|
63
|
+
*/
|
|
64
|
+
declare function registerReactToMarkdownRenderer(engine: TransformEngine, componentMap: ComponentMap): TransformEngine;
|
|
65
|
+
//#endregion
|
|
66
|
+
export { ComponentMap, PresentationRenderer, PresentationValidator, ReactRenderDescriptor, RenderContext, TransformEngine, createDefaultTransformEngine, registerBasicValidation, registerDefaultReactRenderer, registerReactToMarkdownRenderer };
|
|
@@ -0,0 +1,282 @@
|
|
|
1
|
+
import { schemaToMarkdown } from "../schema-to-markdown.js";
|
|
2
|
+
import React from "react";
|
|
3
|
+
import TurndownService from "turndown";
|
|
4
|
+
|
|
5
|
+
//#region src/presentations/transform-engine.ts
|
|
6
|
+
/**
|
|
7
|
+
* Pluggable transform engine that renders descriptors to various targets
|
|
8
|
+
* and runs validators (e.g., basic metadata checks, PII redaction policies).
|
|
9
|
+
*/
|
|
10
|
+
const turndown = new TurndownService();
|
|
11
|
+
function renderTextNode(node) {
|
|
12
|
+
const text = node.text ?? "";
|
|
13
|
+
if (!node.marks || node.marks.length === 0) return text;
|
|
14
|
+
return node.marks.reduce((acc, mark) => {
|
|
15
|
+
switch (mark.type) {
|
|
16
|
+
case "bold": return `**${acc}**`;
|
|
17
|
+
case "italic": return `*${acc}*`;
|
|
18
|
+
case "underline": return `__${acc}__`;
|
|
19
|
+
case "strike": return `~~${acc}~~`;
|
|
20
|
+
case "code": return `\`${acc}\``;
|
|
21
|
+
case "link": {
|
|
22
|
+
const href = mark.attrs?.href ?? "";
|
|
23
|
+
return href ? `[${acc}](${href})` : acc;
|
|
24
|
+
}
|
|
25
|
+
default: return acc;
|
|
26
|
+
}
|
|
27
|
+
}, text);
|
|
28
|
+
}
|
|
29
|
+
function renderInline(nodes) {
|
|
30
|
+
if (!nodes?.length) return "";
|
|
31
|
+
return nodes.map((child) => renderNode(child)).join("");
|
|
32
|
+
}
|
|
33
|
+
function renderList(nodes, ordered = false) {
|
|
34
|
+
if (!nodes?.length) return "";
|
|
35
|
+
let counter = 1;
|
|
36
|
+
return nodes.map((item) => {
|
|
37
|
+
const body = renderInline(item.content ?? []);
|
|
38
|
+
if (!body) return "";
|
|
39
|
+
return `${ordered ? `${counter++}. ` : "- "}${body}`;
|
|
40
|
+
}).filter(Boolean).join("\n");
|
|
41
|
+
}
|
|
42
|
+
function renderNode(node) {
|
|
43
|
+
switch (node.type) {
|
|
44
|
+
case "doc": return renderInline(node.content);
|
|
45
|
+
case "paragraph": {
|
|
46
|
+
const text = renderInline(node.content);
|
|
47
|
+
return text.trim().length ? text : "";
|
|
48
|
+
}
|
|
49
|
+
case "heading": {
|
|
50
|
+
const levelAttr = node.attrs?.level;
|
|
51
|
+
const levelVal = typeof levelAttr === "number" ? levelAttr : 1;
|
|
52
|
+
const level = Math.min(Math.max(levelVal, 1), 6);
|
|
53
|
+
return `${"#".repeat(level)} ${renderInline(node.content)}`.trim();
|
|
54
|
+
}
|
|
55
|
+
case "bullet_list": return renderList(node.content, false);
|
|
56
|
+
case "ordered_list": return renderList(node.content, true);
|
|
57
|
+
case "list_item": return renderInline(node.content);
|
|
58
|
+
case "blockquote": return renderInline(node.content).split("\n").map((line) => `> ${line}`).join("\n");
|
|
59
|
+
case "code_block": {
|
|
60
|
+
const body = renderInline(node.content);
|
|
61
|
+
return body ? `\`\`\`\n${body}\n\`\`\`` : "";
|
|
62
|
+
}
|
|
63
|
+
case "horizontal_rule": return "---";
|
|
64
|
+
case "hard_break": return "\n";
|
|
65
|
+
case "text": return renderTextNode(node);
|
|
66
|
+
default:
|
|
67
|
+
if (node.text) return renderTextNode(node);
|
|
68
|
+
return "";
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
function blockNoteToMarkdown(docJson) {
|
|
72
|
+
if (typeof docJson === "string") return docJson;
|
|
73
|
+
if (docJson && typeof docJson === "object" && "html" in docJson) {
|
|
74
|
+
const html = String(docJson.html);
|
|
75
|
+
return turndown.turndown(html);
|
|
76
|
+
}
|
|
77
|
+
const root = docJson;
|
|
78
|
+
if (root?.type === "doc" || root?.content) return (root.content ?? []).map((n) => renderNode(n)).filter(Boolean).join("\n\n").trim();
|
|
79
|
+
try {
|
|
80
|
+
return JSON.stringify(docJson, null, 2);
|
|
81
|
+
} catch {
|
|
82
|
+
return String(docJson);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
var TransformEngine = class {
|
|
86
|
+
renderers = /* @__PURE__ */ new Map();
|
|
87
|
+
validators = [];
|
|
88
|
+
register(renderer) {
|
|
89
|
+
const arr = this.renderers.get(renderer.target) ?? [];
|
|
90
|
+
arr.push(renderer);
|
|
91
|
+
this.renderers.set(renderer.target, arr);
|
|
92
|
+
return this;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Register a renderer that will be tried BEFORE existing renderers for the same target.
|
|
96
|
+
* Useful for custom renderers that should take priority over default ones.
|
|
97
|
+
*/
|
|
98
|
+
prependRegister(renderer) {
|
|
99
|
+
const arr = this.renderers.get(renderer.target) ?? [];
|
|
100
|
+
arr.unshift(renderer);
|
|
101
|
+
this.renderers.set(renderer.target, arr);
|
|
102
|
+
return this;
|
|
103
|
+
}
|
|
104
|
+
addValidator(v) {
|
|
105
|
+
this.validators.push(v);
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
async render(target, desc, ctx) {
|
|
109
|
+
if (!desc.targets.includes(target)) throw new Error(`Target ${target} not declared for ${desc.meta.key}.v${desc.meta.version}`);
|
|
110
|
+
for (const v of this.validators) await v.validate(desc, target, ctx);
|
|
111
|
+
const arr = this.renderers.get(target) ?? [];
|
|
112
|
+
for (const r of arr) try {
|
|
113
|
+
return await r.render(desc, ctx);
|
|
114
|
+
} catch (_e) {}
|
|
115
|
+
throw new Error(`No renderer available for ${target}`);
|
|
116
|
+
}
|
|
117
|
+
};
|
|
118
|
+
/** Create a TransformEngine instance with default markdown/json/xml renderers. */
|
|
119
|
+
function createDefaultTransformEngine() {
|
|
120
|
+
const engine = new TransformEngine();
|
|
121
|
+
const applyPii = (desc, obj) => {
|
|
122
|
+
const clone = JSON.parse(JSON.stringify(obj));
|
|
123
|
+
const paths = desc.policy?.pii ?? [];
|
|
124
|
+
const setAtPath = (root, path) => {
|
|
125
|
+
const segs = path.replace(/^\//, "").replace(/\[(\d+)\]/g, ".$1").split(".").filter(Boolean);
|
|
126
|
+
let cur = root;
|
|
127
|
+
for (let i = 0; i < segs.length - 1; i++) {
|
|
128
|
+
const k = segs[i];
|
|
129
|
+
if (!k) continue;
|
|
130
|
+
if (cur && typeof cur === "object" && k in cur) cur = cur[k];
|
|
131
|
+
else return;
|
|
132
|
+
}
|
|
133
|
+
const last = segs[segs.length - 1];
|
|
134
|
+
if (cur && typeof cur === "object" && last && last in cur) cur[last] = "[REDACTED]";
|
|
135
|
+
};
|
|
136
|
+
for (const p of paths) setAtPath(clone, p);
|
|
137
|
+
return clone;
|
|
138
|
+
};
|
|
139
|
+
engine.register({
|
|
140
|
+
target: "markdown",
|
|
141
|
+
async render(desc, ctx) {
|
|
142
|
+
let data = ctx?.data;
|
|
143
|
+
if (!data && ctx?.fetchData) data = await ctx.fetchData();
|
|
144
|
+
if (desc.source.type === "component" && desc.source.props && data !== void 0) {
|
|
145
|
+
const isArray = Array.isArray(data);
|
|
146
|
+
const isSimpleObject = !isArray && typeof data === "object" && data !== null && !Object.values(data).some((v) => Array.isArray(v) || typeof v === "object" && v !== null);
|
|
147
|
+
if (isArray || isSimpleObject) return {
|
|
148
|
+
mimeType: "text/markdown",
|
|
149
|
+
body: schemaToMarkdown(desc.source.props, data, {
|
|
150
|
+
title: desc.meta.description ?? desc.meta.key,
|
|
151
|
+
description: `${desc.meta.key} v${desc.meta.version}`
|
|
152
|
+
})
|
|
153
|
+
};
|
|
154
|
+
throw new Error(`Complex data structure for ${desc.meta.key} - expecting custom renderer`);
|
|
155
|
+
}
|
|
156
|
+
if (desc.source.type === "blocknotejs") {
|
|
157
|
+
const redacted = applyPii(desc, { text: blockNoteToMarkdown(desc.source.docJson) });
|
|
158
|
+
return {
|
|
159
|
+
mimeType: "text/markdown",
|
|
160
|
+
body: String(redacted.text)
|
|
161
|
+
};
|
|
162
|
+
}
|
|
163
|
+
if (desc.source.type === "component" && data !== void 0) throw new Error(`No schema (source.props) available for ${desc.meta.key} - expecting custom renderer`);
|
|
164
|
+
if (desc.source.type === "component") return {
|
|
165
|
+
mimeType: "text/markdown",
|
|
166
|
+
body: `${`# ${desc.meta.key} v${desc.meta.version}`}${desc.meta.description ? `\n\n${desc.meta.description}` : ""}${desc.meta.tags && desc.meta.tags.length ? `\n\nTags: ${desc.meta.tags.join(", ")}` : ""}${desc.meta.owners && desc.meta.owners.length ? `\n\nOwners: ${desc.meta.owners.join(", ")}` : ""}${`\n\nComponent: \`${desc.source.componentKey}\``}${desc.policy?.pii?.length ? `\n\nRedacted paths: ${desc.policy.pii.map((p) => `\`${p}\``).join(", ")}` : ""}`
|
|
167
|
+
};
|
|
168
|
+
throw new Error("unsupported");
|
|
169
|
+
}
|
|
170
|
+
});
|
|
171
|
+
engine.register({
|
|
172
|
+
target: "application/json",
|
|
173
|
+
async render(desc) {
|
|
174
|
+
const payload = applyPii(desc, {
|
|
175
|
+
meta: desc.meta,
|
|
176
|
+
source: desc.source
|
|
177
|
+
});
|
|
178
|
+
return {
|
|
179
|
+
mimeType: "application/json",
|
|
180
|
+
body: JSON.stringify(payload, null, 2)
|
|
181
|
+
};
|
|
182
|
+
}
|
|
183
|
+
});
|
|
184
|
+
engine.register({
|
|
185
|
+
target: "application/xml",
|
|
186
|
+
async render(desc) {
|
|
187
|
+
const json = applyPii(desc, {
|
|
188
|
+
meta: desc.meta,
|
|
189
|
+
source: desc.source
|
|
190
|
+
});
|
|
191
|
+
return {
|
|
192
|
+
mimeType: "application/xml",
|
|
193
|
+
body: `<presentation name="${desc.meta.key}" version="${desc.meta.version}"><json>${encodeURIComponent(JSON.stringify(json))}</json></presentation>`
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
});
|
|
197
|
+
return engine;
|
|
198
|
+
}
|
|
199
|
+
/** Register a default React target renderer that returns a serializable descriptor. */
|
|
200
|
+
function registerDefaultReactRenderer(engine) {
|
|
201
|
+
engine.register({
|
|
202
|
+
target: "react",
|
|
203
|
+
async render(desc) {
|
|
204
|
+
if (desc.source.type === "component") {
|
|
205
|
+
const props = desc.source.props ? desc.source.props.getZod().safeParse({}).success ? {} : void 0 : void 0;
|
|
206
|
+
return {
|
|
207
|
+
kind: "react_component",
|
|
208
|
+
componentKey: desc.source.componentKey,
|
|
209
|
+
props
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
return {
|
|
213
|
+
kind: "blocknotejs",
|
|
214
|
+
docJson: desc.source.docJson,
|
|
215
|
+
blockConfig: desc.source.blockConfig
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
return engine;
|
|
220
|
+
}
|
|
221
|
+
/**
|
|
222
|
+
* Add basic validators (e.g., meta.description presence) to the engine.
|
|
223
|
+
*/
|
|
224
|
+
function registerBasicValidation(engine) {
|
|
225
|
+
engine.addValidator({ validate(desc) {
|
|
226
|
+
if (!desc.meta.description || desc.meta.description.length < 3) throw new Error(`Presentation ${desc.meta.key}.v${desc.meta.version} missing meta.description`);
|
|
227
|
+
} });
|
|
228
|
+
return engine;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Register a React-to-markdown renderer that renders React components to HTML
|
|
232
|
+
* and converts them to markdown using turndown.
|
|
233
|
+
* This renderer takes priority over the default metadata-only renderer.
|
|
234
|
+
*/
|
|
235
|
+
function registerReactToMarkdownRenderer(engine, componentMap) {
|
|
236
|
+
const turndownService = new TurndownService({
|
|
237
|
+
headingStyle: "atx",
|
|
238
|
+
codeBlockStyle: "fenced",
|
|
239
|
+
bulletListMarker: "-"
|
|
240
|
+
});
|
|
241
|
+
turndownService.addRule("link", {
|
|
242
|
+
filter: "a",
|
|
243
|
+
replacement: (content, node) => {
|
|
244
|
+
const href = node.href;
|
|
245
|
+
if (href && content) return `[${content}](${href})`;
|
|
246
|
+
return content || "";
|
|
247
|
+
}
|
|
248
|
+
});
|
|
249
|
+
engine.prependRegister({
|
|
250
|
+
target: "markdown",
|
|
251
|
+
async render(desc, _ctx) {
|
|
252
|
+
if (desc.source.type !== "component") throw new Error("React-to-markdown renderer only handles component presentations");
|
|
253
|
+
const { renderToStaticMarkup } = await import("react-dom/server");
|
|
254
|
+
const Component = componentMap[desc.source.componentKey];
|
|
255
|
+
if (!Component) throw new Error(`Component ${desc.source.componentKey} not found in componentMap`);
|
|
256
|
+
let html;
|
|
257
|
+
try {
|
|
258
|
+
html = renderToStaticMarkup(React.createElement(Component, desc.source.props ? {} : void 0));
|
|
259
|
+
} catch (error) {
|
|
260
|
+
throw new Error(`Failed to render component ${desc.source.componentKey}: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
261
|
+
}
|
|
262
|
+
let markdown;
|
|
263
|
+
try {
|
|
264
|
+
markdown = turndownService.turndown(html);
|
|
265
|
+
} catch (error) {
|
|
266
|
+
throw new Error(`Failed to convert HTML to markdown: ${error instanceof Error ? error.message : "Unknown error"}`);
|
|
267
|
+
}
|
|
268
|
+
if (desc.policy?.pii && desc.policy.pii.length > 0) return {
|
|
269
|
+
mimeType: "text/markdown",
|
|
270
|
+
body: markdown.replace(/\[REDACTED\]/g, "[REDACTED]")
|
|
271
|
+
};
|
|
272
|
+
return {
|
|
273
|
+
mimeType: "text/markdown",
|
|
274
|
+
body: markdown
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
});
|
|
278
|
+
return engine;
|
|
279
|
+
}
|
|
280
|
+
|
|
281
|
+
//#endregion
|
|
282
|
+
export { TransformEngine, createDefaultTransformEngine, registerBasicValidation, registerDefaultReactRenderer, registerReactToMarkdownRenderer };
|
package/dist/prompt.d.ts
ADDED
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
import * as z$1 from "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/prompt.d.ts
|
|
4
|
+
type PromptStability = 'experimental' | 'beta' | 'stable' | 'deprecated';
|
|
5
|
+
/** Parameter definition for a prompt argument. */
|
|
6
|
+
interface PromptArg {
|
|
7
|
+
name: string;
|
|
8
|
+
description?: string;
|
|
9
|
+
required?: boolean;
|
|
10
|
+
schema: z$1.ZodType;
|
|
11
|
+
completeWith?: string;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Rendered content part for a prompt. Clients (MCP) can fetch referenced resources.
|
|
15
|
+
*/
|
|
16
|
+
type PromptContentPart = {
|
|
17
|
+
type: 'text';
|
|
18
|
+
text: string;
|
|
19
|
+
} | {
|
|
20
|
+
type: 'resource';
|
|
21
|
+
uri: string;
|
|
22
|
+
title?: string;
|
|
23
|
+
};
|
|
24
|
+
/** Prompt metadata for discoverability and governance. */
|
|
25
|
+
interface PromptMeta {
|
|
26
|
+
key: string;
|
|
27
|
+
version: number;
|
|
28
|
+
title: string;
|
|
29
|
+
description: string;
|
|
30
|
+
tags?: string[];
|
|
31
|
+
stability?: PromptStability;
|
|
32
|
+
owners?: string[];
|
|
33
|
+
}
|
|
34
|
+
/** Policy constraints for prompts (flags, PII paths, rate limits). */
|
|
35
|
+
interface PromptPolicy {
|
|
36
|
+
flags?: string[];
|
|
37
|
+
pii?: string[];
|
|
38
|
+
rateLimit?: {
|
|
39
|
+
rpm: number;
|
|
40
|
+
key: 'user' | 'org' | 'global';
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
/** Full prompt specification including args schema and render function. */
|
|
44
|
+
interface PromptSpec<I extends z$1.ZodType> {
|
|
45
|
+
meta: PromptMeta;
|
|
46
|
+
args: PromptArg[];
|
|
47
|
+
input: I;
|
|
48
|
+
policy?: PromptPolicy;
|
|
49
|
+
/** Render MCP-friendly content parts. DO NOT perform side effects here. */
|
|
50
|
+
render: (args: z$1.infer<I>, ctx: {
|
|
51
|
+
userId?: string | null;
|
|
52
|
+
orgId?: string | null;
|
|
53
|
+
locale?: string;
|
|
54
|
+
link: (template: string, vars: Record<string, string | number>) => string;
|
|
55
|
+
}) => Promise<PromptContentPart[]>;
|
|
56
|
+
}
|
|
57
|
+
/** Identity helper that preserves generic inference when declaring prompts. */
|
|
58
|
+
declare function definePrompt<I extends z$1.ZodType>(spec: PromptSpec<I>): PromptSpec<I>;
|
|
59
|
+
//#endregion
|
|
60
|
+
export { PromptArg, PromptContentPart, PromptMeta, PromptPolicy, PromptSpec, PromptStability, definePrompt };
|
package/dist/prompt.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { PromptSpec } from "./prompt.js";
|
|
2
|
+
import * as z$1 from "zod";
|
|
3
|
+
|
|
4
|
+
//#region src/promptRegistry.d.ts
|
|
5
|
+
declare class PromptRegistry {
|
|
6
|
+
private prompts;
|
|
7
|
+
/** Register a prompt. Throws on duplicate name+version. */
|
|
8
|
+
register<I extends z$1.ZodType>(p: PromptSpec<I>): this;
|
|
9
|
+
/** List all registered prompts. */
|
|
10
|
+
list(): PromptSpec<z$1.ZodType<unknown, unknown, z$1.core.$ZodTypeInternals<unknown, unknown>>>[];
|
|
11
|
+
/** Get prompt by name; when version omitted, returns highest version. */
|
|
12
|
+
get(name: string, version?: number): PromptSpec<z$1.ZodType<unknown, unknown, z$1.core.$ZodTypeInternals<unknown, unknown>>> | undefined;
|
|
13
|
+
}
|
|
14
|
+
//#endregion
|
|
15
|
+
export { PromptRegistry };
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import "zod";
|
|
2
|
+
|
|
3
|
+
//#region src/promptRegistry.ts
|
|
4
|
+
var PromptRegistry = class {
|
|
5
|
+
prompts = /* @__PURE__ */ new Map();
|
|
6
|
+
/** Register a prompt. Throws on duplicate name+version. */
|
|
7
|
+
register(p) {
|
|
8
|
+
const key = `${p.meta.key}-v${p.meta.version}`;
|
|
9
|
+
if (this.prompts.has(key)) throw new Error(`Duplicate prompt ${key}`);
|
|
10
|
+
this.prompts.set(key, p);
|
|
11
|
+
return this;
|
|
12
|
+
}
|
|
13
|
+
/** List all registered prompts. */
|
|
14
|
+
list() {
|
|
15
|
+
return [...this.prompts.values()];
|
|
16
|
+
}
|
|
17
|
+
/** Get prompt by name; when version omitted, returns highest version. */
|
|
18
|
+
get(name, version) {
|
|
19
|
+
if (version != null) return this.prompts.get(`${name}-v${version}`);
|
|
20
|
+
let candidate;
|
|
21
|
+
let max = -Infinity;
|
|
22
|
+
for (const [k, p] of this.prompts.entries()) {
|
|
23
|
+
if (!k.startsWith(`${name}.v`)) continue;
|
|
24
|
+
if (p.meta.version > max) {
|
|
25
|
+
max = p.meta.version;
|
|
26
|
+
candidate = p;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
return candidate;
|
|
30
|
+
}
|
|
31
|
+
};
|
|
32
|
+
|
|
33
|
+
//#endregion
|
|
34
|
+
export { PromptRegistry };
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { BehaviorSignal, ErrorSignal, RegenerationContext, TelemetrySignal } from "./types.js";
|
|
2
|
+
|
|
3
|
+
//#region src/regenerator/adapters.d.ts
|
|
4
|
+
interface TelemetrySignalProvider {
|
|
5
|
+
pollTelemetry(context: RegenerationContext, since: Date, until: Date): Promise<TelemetrySignal[]>;
|
|
6
|
+
}
|
|
7
|
+
interface ErrorSignalProvider {
|
|
8
|
+
pollErrors(context: RegenerationContext, since: Date, until: Date): Promise<ErrorSignal[]>;
|
|
9
|
+
}
|
|
10
|
+
interface BehaviorSignalProvider {
|
|
11
|
+
pollBehavior(context: RegenerationContext, since: Date, until: Date): Promise<BehaviorSignal[]>;
|
|
12
|
+
}
|
|
13
|
+
interface SignalAdapters {
|
|
14
|
+
telemetry?: TelemetrySignalProvider;
|
|
15
|
+
errors?: ErrorSignalProvider;
|
|
16
|
+
behavior?: BehaviorSignalProvider;
|
|
17
|
+
}
|
|
18
|
+
//#endregion
|
|
19
|
+
export { BehaviorSignalProvider, ErrorSignalProvider, SignalAdapters, TelemetrySignalProvider };
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { registerDocBlocks } from "../../docs/registry.js";
|
|
2
|
+
|
|
3
|
+
//#region src/regenerator/docs/regenerator.docblock.ts
|
|
4
|
+
const tech_contracts_regenerator_DocBlocks = [{
|
|
5
|
+
id: "docs.tech.contracts.regenerator",
|
|
6
|
+
title: "Regenerator Service",
|
|
7
|
+
summary: "The Regenerator daemon observes telemetry, error, and behavior streams, then suggests spec-level changes (not code patches) that can be reviewed and applied through the App Studio.",
|
|
8
|
+
kind: "reference",
|
|
9
|
+
visibility: "public",
|
|
10
|
+
route: "/docs/tech/contracts/regenerator",
|
|
11
|
+
tags: [
|
|
12
|
+
"tech",
|
|
13
|
+
"contracts",
|
|
14
|
+
"regenerator"
|
|
15
|
+
],
|
|
16
|
+
body: "## Regenerator Service\n\nThe Regenerator daemon observes telemetry, error, and behavior streams, then suggests spec-level changes (not code patches) that can be reviewed and applied through the App Studio.\n\n- Runtime entrypoint: `packages/libs/contracts/src/regenerator/service.ts`\n- Types/interfaces: `packages/libs/contracts/src/regenerator/types.ts`\n- Signal adapters: `packages/libs/contracts/src/regenerator/adapters.ts`\n\n### Architecture\n\n```text\nSignal Adapters ──► RegeneratorService ──► Rules ──► ProposalSink\n ▲ │\n │ ▼\n Telemetry / Errors / Behavior Spec change proposals\n```\n\n1. **Signal adapters** pull batches of telemetry, error logs, or behavior metrics for each `RegenerationContext`.\n2. `RegeneratorService` schedules polling (`resolveAppConfig` + `composeAppConfig` provide context).\n3. **Rules** implement domain heuristics and emit `SpecChangeProposal` objects.\n4. **Proposal sinks** persist or forward proposals for human review.\n\n### Key types\n\n```ts\nexport interface RegenerationContext {\n id: string;\n blueprint: AppBlueprintSpec;\n tenantConfig: TenantAppConfig;\n resolved: ResolvedAppConfig;\n}\n\nexport interface RegeneratorRule {\n id: string;\n description: string;\n evaluate(\n context: RegenerationContext,\n signals: RegeneratorSignal[]\n ): Promise<SpecChangeProposal[]>;\n}\n\nexport interface SpecChangeProposal {\n id: string;\n title: string;\n summary: string;\n confidence: 'low' | 'medium' | 'high';\n target: ProposalTarget;\n actions: ProposalAction[];\n blockers?: ProposalBlocker[];\n signalIds: string[];\n createdAt: Date;\n}\n```\n\n- Signals are normalized envelopes: telemetry (`count`, anomaly score), errors, and behavior trends.\n- Proposals reference blueprint or tenant specs via `ProposalTarget`.\n- Actions encode what the automation should perform (update blueprint, run tests/migrations, trigger regeneration).\n\n### Providing signals\n\nImplement `TelemetrySignalProvider`, `ErrorSignalProvider`, or `BehaviorSignalProvider`:\n\n```ts\nconst service = new RegeneratorService({\n contexts,\n adapters: {\n telemetry: new PosthogTelemetryAdapter(),\n errors: new SentryErrorAdapter(),\n },\n rules: [new WorkflowFailureRule(), new DataViewUsageRule()],\n sink: new ProposalQueueSink(),\n pollIntervalMs: 60_000,\n});\n```\n\nAdapters receive the full `RegenerationContext`, making it easy to scope queries per tenant/app.\n\n### Authoring rules\n\nRules focus on signals → proposals:\n\n```ts\nclass WorkflowFailureRule implements RegeneratorRule {\n id = 'workflow-failure';\n description = 'Suggest splitting workflows that exceed failure thresholds';\n\n async evaluate(context, signals) {\n const failures = signals.filter(\n (signal) =>\n signal.type === 'telemetry' &&\n signal.signal.eventName === 'workflow.failure' &&\n signal.signal.count >= 10\n );\n\n if (failures.length === 0) return [];\n\n return [\n {\n id: `${this.id}-${context.id}`,\n title: 'Split onboarding workflow',\n summary: 'Step 3 fails consistently; propose dedicated remediation branch.',\n confidence: 'medium',\n rationale: ['Failure count ≥ 10 within last window'],\n target: {\n specType: 'workflow',\n reference: { name: 'onboarding.workflow', version: 1 },\n tenantScoped: true,\n },\n actions: [\n { kind: 'update_tenant_config', summary: 'Add alternate fallback path' },\n { kind: 'run_tests', tests: ['workflows/onboarding.spec.ts'] },\n ],\n signalIds: failures.map((f) => f.signal.eventName),\n createdAt: new Date(),\n },\n ];\n }\n}\n```\n\n### Reviewing proposals\n\nProposals flow to a `ProposalSink` (queue, DB, messaging bus). The Studio will surface:\n\n1. Signal evidence (telemetry counts, error metadata)\n2. Proposed spec diffs and required actions (tests/migrations)\n3. Approval workflow (approve → write spec diff → run automation)\n\n### CLI driver\n\nRun the regenerator daemon from the CLI:\n\n```bash\nbunx contracts regenerator ./app.blueprint.ts ./tenant.config.ts ./regenerator.rules.ts auto \\\n --executor ./regenerator.executor.ts \\\n --poll-interval 60000 \\\n --batch-duration 300000 \\\n --dry-run\n```\n\n- Expects modules exporting default `AppBlueprintSpec`, `TenantAppConfig`, and one or more `RegenerationRule`s.\n- Pass a sink module path, or use the special `auto` value with `--executor <module>` to instantiate an `ExecutorProposalSink`.\n- Executor modules can export a `ProposalExecutor` instance, a factory, or a plain dependency object for the executor constructor. Optional exports: `sinkOptions`, `logger`, `onResult`, `dryRun`.\n- Optionally provide `--contexts ./contexts.ts` to load custom context arrays (advanced multi-tenant scenarios).\n- Use `--dry-run` to preview actions without mutating specs/configs, and `--once` for CI smoke tests.\n\n### Proposal executor\n\n`ProposalExecutor` + `ExecutorProposalSink` orchestrate follow-up actions once a proposal is approved:\n\n- Interfaces for applying blueprint or tenant-config updates (`BlueprintUpdater`, `TenantConfigUpdater`).\n- Hooks for running contract tests and migrations (`TestExecutor`, `MigrationExecutor`).\n- Optional trigger to recompose the runtime (`RegenerationTrigger`).\n- Built-in `dryRun` mode to preview outcomes.\n- Pluggable result logging/forwarding via `ExecutorSinkOptions`.\n\n```ts\nimport {\n ProposalExecutor,\n ExecutorProposalSink,\n} from '@contractspec/lib.contracts/regenerator';\n\nconst executor = new ProposalExecutor({\n tenantConfigUpdater,\n testExecutor,\n migrationExecutor,\n regenerationTrigger,\n});\n\nconst sink = new ExecutorProposalSink(executor, {\n dryRun: false,\n onResult: ({ result }) => console.log(result.status),\n});\n```\n\nExecution results include per-action status (`success`, `skipped`, `failed`) plus aggregated proposal status (`success`, `partial`, `failed`). Missing dependencies mark actions as `skipped`, making it easy to plug into partial automation flows today and extend later.\n\n### Next steps\n\n- Build adapters for existing telemetry/error providers.\n- Encode canonical rules (workflow failure, feature under-use, high latency).\n- Integrate with App Studio proposal inbox and automate acceptance (write spec diff, run tests, queue migrations).\n\n"
|
|
17
|
+
}];
|
|
18
|
+
registerDocBlocks(tech_contracts_regenerator_DocBlocks);
|
|
19
|
+
|
|
20
|
+
//#endregion
|
|
21
|
+
export { tech_contracts_regenerator_DocBlocks };
|