@lssm/lib.contracts 1.11.0 → 1.41.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/README.md +1 -1
- package/dist/_virtual/rolldown_runtime.js +1 -0
- package/dist/app-config/app-config.feature.js +1 -0
- package/dist/app-config/contracts.js +1 -2
- package/dist/app-config/docs/app-config.docblock.js +220 -0
- package/dist/app-config/events.js +1 -2
- package/dist/app-config/index.js +1 -1
- package/dist/app-config/lifecycle-contracts.js +1 -2
- package/dist/app-config/runtime.js +1 -2
- package/dist/app-config/spec.js +1 -2
- package/dist/app-config/validation.js +1 -2
- package/dist/capabilities/docs/capabilities.docblock.js +1 -0
- package/dist/capabilities/openbanking.js +1 -2
- package/dist/capabilities.js +1 -2
- package/dist/client/react/drivers/rn-reusables.js +1 -2
- package/dist/client/react/drivers/shadcn.js +1 -2
- package/dist/client/react/feature-render.js +1 -2
- package/dist/client/react/form-render.js +1 -2
- package/dist/contract-registry/index.js +1 -0
- package/dist/contract-registry/schemas.js +1 -0
- package/dist/contract-registry/types.js +0 -0
- package/dist/contracts-adapter-hydration.js +1 -2
- package/dist/contracts-adapter-input.js +1 -2
- package/dist/data-views/docs/data-views.docblock.js +1 -0
- package/dist/data-views/query-generator.js +1 -2
- package/dist/data-views/runtime.js +1 -2
- package/dist/data-views.js +1 -2
- package/dist/docs/PUBLISHING.docblock.js +76 -0
- package/dist/docs/accessibility_wcag_compliance_specs.docblock.js +350 -0
- package/dist/docs/index.js +1 -0
- package/dist/docs/meta.docs.js +13 -0
- package/dist/docs/presentations.js +1 -0
- package/dist/docs/registry.js +1 -0
- package/dist/docs/tech/PHASE_1_QUICKSTART.docblock.js +383 -0
- package/dist/docs/tech/PHASE_2_AI_NATIVE_OPERATIONS.docblock.js +68 -0
- package/dist/docs/tech/PHASE_3_AUTO_EVOLUTION.docblock.js +140 -0
- package/dist/docs/tech/PHASE_4_PERSONALIZATION_ENGINE.docblock.js +86 -0
- package/dist/docs/tech/PHASE_5_ZERO_TOUCH_OPERATIONS.docblock.js +1 -0
- package/dist/docs/tech/auth/better-auth-nextjs.docblock.js +58 -0
- package/dist/docs/tech/contracts/README.docblock.js +1 -0
- package/dist/docs/tech/contracts/create-subscription.docblock.js +1 -0
- package/dist/docs/tech/contracts/graphql-typed-outputs.docblock.js +180 -0
- package/dist/docs/tech/contracts/migrations.docblock.js +1 -0
- package/dist/docs/tech/contracts/openapi-export.docblock.js +38 -0
- package/dist/docs/tech/contracts/ops-to-presentation-linking.docblock.js +62 -0
- package/dist/docs/tech/contracts/overlays.docblock.js +68 -0
- package/dist/docs/tech/contracts/tests.docblock.js +132 -0
- package/dist/docs/tech/contracts/themes.docblock.js +1 -0
- package/dist/docs/tech/contracts/vertical-pocket-family-office.docblock.js +106 -0
- package/dist/docs/tech/lifecycle-stage-system.docblock.js +213 -0
- package/dist/docs/tech/llm/llm-integration.docblock.js +289 -0
- package/dist/docs/tech/mcp-endpoints.docblock.js +1 -0
- package/dist/docs/tech/presentation-runtime.docblock.js +1 -0
- package/dist/docs/tech/schema/README.docblock.js +262 -0
- package/dist/docs/tech/studio/learning-events.docblock.js +1 -0
- package/dist/docs/tech/studio/learning-journeys.docblock.js +57 -0
- package/dist/docs/tech/studio/platform-admin-panel.docblock.js +63 -0
- package/dist/docs/tech/studio/project-access-teams.docblock.js +36 -0
- package/dist/docs/tech/studio/project-routing.docblock.js +1 -0
- package/dist/docs/tech/studio/sandbox-unlogged.docblock.js +20 -0
- package/dist/docs/tech/studio/team-invitations.docblock.js +65 -0
- package/dist/docs/tech/studio/workspace-ops.docblock.js +1 -0
- package/dist/docs/tech/studio/workspaces.docblock.js +41 -0
- package/dist/docs/tech/telemetry-ingest.docblock.js +122 -0
- package/dist/docs/tech/templates/runtime.docblock.js +1 -0
- package/dist/docs/tech/vscode-extension.docblock.js +68 -0
- package/dist/docs/tech/workflows/overview.docblock.js +1 -0
- package/dist/docs/tech-contracts.docs.js +76 -0
- package/dist/docs/types.js +0 -0
- package/dist/events.js +1 -2
- package/dist/experiments/docs/experiments.docblock.js +128 -0
- package/dist/experiments/evaluator.js +1 -2
- package/dist/experiments/spec.js +1 -2
- package/dist/features.js +1 -2
- package/dist/forms/docs/forms.docblock.js +1 -0
- package/dist/forms.js +1 -2
- package/dist/index.js +1 -1
- package/dist/install.js +1 -2
- package/dist/integrations/contracts.js +1 -2
- package/dist/integrations/docs/integrations.docblock.js +1 -0
- package/dist/integrations/health.js +1 -2
- package/dist/integrations/index.js +1 -1
- package/dist/integrations/openbanking/contracts/accounts.js +1 -2
- package/dist/integrations/openbanking/contracts/balances.js +1 -2
- package/dist/integrations/openbanking/contracts/index.js +1 -2
- package/dist/integrations/openbanking/contracts/transactions.js +1 -2
- package/dist/integrations/openbanking/guards.js +1 -2
- package/dist/integrations/openbanking/models.js +1 -2
- package/dist/integrations/openbanking/openbanking.feature.js +1 -0
- package/dist/integrations/openbanking/telemetry.js +1 -2
- package/dist/integrations/providers/elevenlabs.js +1 -2
- package/dist/integrations/providers/gcs-storage.js +1 -2
- package/dist/integrations/providers/gmail.js +1 -2
- package/dist/integrations/providers/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/elevenlabs-voice.js +1 -2
- package/dist/integrations/providers/impls/gcs-storage.js +1 -2
- package/dist/integrations/providers/impls/gmail-inbound.js +1 -2
- package/dist/integrations/providers/impls/gmail-outbound.js +1 -2
- package/dist/integrations/providers/impls/google-calendar.js +1 -2
- package/dist/integrations/providers/impls/index.js +1 -1
- package/dist/integrations/providers/impls/mistral-embedding.js +1 -2
- package/dist/integrations/providers/impls/mistral-llm.js +1 -2
- package/dist/integrations/providers/impls/postmark-email.js +1 -2
- package/dist/integrations/providers/impls/powens-client.js +1 -2
- package/dist/integrations/providers/impls/powens-openbanking.js +1 -2
- package/dist/integrations/providers/impls/provider-factory.js +1 -2
- package/dist/integrations/providers/impls/qdrant-vector.js +1 -2
- package/dist/integrations/providers/impls/stripe-payments.js +1 -2
- package/dist/integrations/providers/impls/twilio-sms.js +1 -2
- package/dist/integrations/providers/index.js +1 -1
- package/dist/integrations/providers/mistral.js +1 -2
- package/dist/integrations/providers/postmark.js +1 -2
- package/dist/integrations/providers/powens.js +1 -2
- package/dist/integrations/providers/qdrant.js +1 -2
- package/dist/integrations/providers/registry.js +1 -0
- package/dist/integrations/providers/stripe.js +1 -2
- package/dist/integrations/providers/twilio-sms.js +1 -2
- package/dist/integrations/runtime.js +1 -2
- package/dist/integrations/secrets/aws-secret-manager.js +1 -0
- package/dist/integrations/secrets/env-secret-provider.js +1 -2
- package/dist/integrations/secrets/gcp-secret-manager.js +1 -2
- package/dist/integrations/secrets/index.js +1 -1
- package/dist/integrations/secrets/manager.js +1 -2
- package/dist/integrations/secrets/provider.js +1 -2
- package/dist/integrations/secrets/scaleway-secret-manager.js +1 -0
- package/dist/integrations/spec.js +1 -2
- package/dist/jobs/define-job.js +1 -0
- package/dist/jobs/gcp-cloud-tasks.js +1 -2
- package/dist/jobs/gcp-pubsub.js +1 -2
- package/dist/jobs/handlers/gmail-sync-handler.js +1 -2
- package/dist/jobs/handlers/index.js +1 -1
- package/dist/jobs/handlers/ping-handler.js +1 -0
- package/dist/jobs/handlers/storage-document-handler.js +1 -2
- package/dist/jobs/index.js +1 -1
- package/dist/jobs/memory-queue.js +1 -2
- package/dist/jobs/queue.js +1 -0
- package/dist/jobs/scaleway-sqs-queue.js +1 -0
- package/dist/jsonschema.js +1 -2
- package/dist/knowledge/contracts.js +1 -2
- package/dist/knowledge/docs/knowledge.docblock.js +138 -0
- package/dist/knowledge/ingestion/document-processor.js +1 -2
- package/dist/knowledge/ingestion/embedding-service.js +1 -2
- package/dist/knowledge/ingestion/gmail-adapter.js +1 -2
- package/dist/knowledge/ingestion/storage-adapter.js +1 -2
- package/dist/knowledge/ingestion/vector-indexer.js +1 -2
- package/dist/knowledge/query/service.js +1 -2
- package/dist/knowledge/runtime.js +1 -2
- package/dist/knowledge/spaces/email-threads.js +1 -2
- package/dist/knowledge/spaces/financial-docs.js +1 -2
- package/dist/knowledge/spaces/financial-overview.js +1 -2
- package/dist/knowledge/spaces/product-canon.js +1 -2
- package/dist/knowledge/spaces/support-faq.js +1 -2
- package/dist/knowledge/spaces/uploaded-docs.js +1 -2
- package/dist/knowledge/spec.js +1 -2
- package/dist/llm/exporters.js +8 -0
- package/dist/llm/index.js +1 -0
- package/dist/llm/prompts.js +220 -0
- package/dist/llm/types.js +0 -0
- package/dist/markdown.js +1 -2
- package/dist/migrations.js +1 -2
- package/dist/node_modules/@pothos/plugin-complexity/esm/calculate-complexity.js +1 -0
- package/dist/node_modules/@pothos/plugin-complexity/esm/defaults.js +1 -0
- package/dist/node_modules/@pothos/plugin-complexity/esm/index.js +1 -0
- package/dist/node_modules/@pothos/plugin-complexity/esm/types.js +1 -0
- package/dist/node_modules/@pothos/plugin-complexity/esm/util.js +1 -0
- package/dist/node_modules/@pothos/plugin-complexity/esm/validator.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/field-builder.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/index.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/index.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/interface.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/node.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/object.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/refs/union.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/schema-builder.js +1 -0
- package/dist/node_modules/@pothos/plugin-dataloader/esm/util.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/connection-helpers.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/field-builder.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/index.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/interface-ref.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/model-loader.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/node-ref.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/object-ref.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/prisma-field-builder.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/schema-builder.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/types.js +0 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/cursors.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/datamodel.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/deep-equal.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/description.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/get-client.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/loader-map.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/map-query.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/relation-map.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/selections.js +1 -0
- package/dist/node_modules/@pothos/plugin-prisma/esm/util/usage.js +1 -0
- package/dist/node_modules/@pothos/plugin-tracing/esm/index.js +1 -0
- package/dist/node_modules/@pothos/plugin-tracing/esm/util.js +1 -0
- package/dist/node_modules/dataloader/index.js +7 -0
- package/dist/node_modules/graphql/error/GraphQLError.js +5 -0
- package/dist/node_modules/graphql/error/index.js +1 -0
- package/dist/node_modules/graphql/error/locatedError.js +1 -0
- package/dist/node_modules/graphql/error/syntaxError.js +1 -0
- package/dist/node_modules/graphql/execution/collectFields.js +1 -0
- package/dist/node_modules/graphql/execution/execute.js +1 -0
- package/dist/node_modules/graphql/execution/index.js +1 -0
- package/dist/node_modules/graphql/execution/mapAsyncIterator.js +1 -0
- package/dist/node_modules/graphql/execution/subscribe.js +1 -0
- package/dist/node_modules/graphql/execution/values.js +1 -0
- package/dist/node_modules/graphql/graphql.js +1 -0
- package/dist/node_modules/graphql/index.js +1 -0
- package/dist/node_modules/graphql/jsutils/Path.js +1 -0
- package/dist/node_modules/graphql/jsutils/devAssert.js +1 -0
- package/dist/node_modules/graphql/jsutils/didYouMean.js +1 -0
- package/dist/node_modules/graphql/jsutils/groupBy.js +1 -0
- package/dist/node_modules/graphql/jsutils/identityFunc.js +1 -0
- package/dist/node_modules/graphql/jsutils/inspect.js +1 -0
- package/dist/node_modules/graphql/jsutils/instanceOf.js +12 -0
- package/dist/node_modules/graphql/jsutils/invariant.js +1 -0
- package/dist/node_modules/graphql/jsutils/isAsyncIterable.js +1 -0
- package/dist/node_modules/graphql/jsutils/isIterableObject.js +1 -0
- package/dist/node_modules/graphql/jsutils/isObjectLike.js +1 -0
- package/dist/node_modules/graphql/jsutils/isPromise.js +1 -0
- package/dist/node_modules/graphql/jsutils/keyMap.js +1 -0
- package/dist/node_modules/graphql/jsutils/keyValMap.js +1 -0
- package/dist/node_modules/graphql/jsutils/mapValue.js +1 -0
- package/dist/node_modules/graphql/jsutils/memoize3.js +1 -0
- package/dist/node_modules/graphql/jsutils/naturalCompare.js +1 -0
- package/dist/node_modules/graphql/jsutils/printPathArray.js +1 -0
- package/dist/node_modules/graphql/jsutils/promiseForObject.js +1 -0
- package/dist/node_modules/graphql/jsutils/promiseReduce.js +1 -0
- package/dist/node_modules/graphql/jsutils/suggestionList.js +1 -0
- package/dist/node_modules/graphql/jsutils/toError.js +1 -0
- package/dist/node_modules/graphql/jsutils/toObjMap.js +1 -0
- package/dist/node_modules/graphql/language/ast.js +1 -0
- package/dist/node_modules/graphql/language/blockString.js +3 -0
- package/dist/node_modules/graphql/language/characterClasses.js +1 -0
- package/dist/node_modules/graphql/language/directiveLocation.js +1 -0
- package/dist/node_modules/graphql/language/index.js +1 -0
- package/dist/node_modules/graphql/language/kinds.js +1 -0
- package/dist/node_modules/graphql/language/lexer.js +3 -0
- package/dist/node_modules/graphql/language/location.js +1 -0
- package/dist/node_modules/graphql/language/parser.js +1 -0
- package/dist/node_modules/graphql/language/predicates.js +1 -0
- package/dist/node_modules/graphql/language/printLocation.js +2 -0
- package/dist/node_modules/graphql/language/printString.js +1 -0
- package/dist/node_modules/graphql/language/printer.js +34 -0
- package/dist/node_modules/graphql/language/schemaCoordinateLexer.js +1 -0
- package/dist/node_modules/graphql/language/source.js +1 -0
- package/dist/node_modules/graphql/language/tokenKind.js +1 -0
- package/dist/node_modules/graphql/language/visitor.js +1 -0
- package/dist/node_modules/graphql/type/assertName.js +1 -0
- package/dist/node_modules/graphql/type/definition.js +1 -0
- package/dist/node_modules/graphql/type/directives.js +1 -0
- package/dist/node_modules/graphql/type/index.js +1 -0
- package/dist/node_modules/graphql/type/introspection.js +3 -0
- package/dist/node_modules/graphql/type/scalars.js +1 -0
- package/dist/node_modules/graphql/type/schema.js +1 -0
- package/dist/node_modules/graphql/type/validate.js +3 -0
- package/dist/node_modules/graphql/utilities/TypeInfo.js +1 -0
- package/dist/node_modules/graphql/utilities/assertValidName.js +1 -0
- package/dist/node_modules/graphql/utilities/astFromValue.js +1 -0
- package/dist/node_modules/graphql/utilities/buildASTSchema.js +1 -0
- package/dist/node_modules/graphql/utilities/buildClientSchema.js +1 -0
- package/dist/node_modules/graphql/utilities/coerceInputValue.js +1 -0
- package/dist/node_modules/graphql/utilities/concatAST.js +1 -0
- package/dist/node_modules/graphql/utilities/extendSchema.js +1 -0
- package/dist/node_modules/graphql/utilities/findBreakingChanges.js +1 -0
- package/dist/node_modules/graphql/utilities/getIntrospectionQuery.js +107 -0
- package/dist/node_modules/graphql/utilities/getOperationAST.js +1 -0
- package/dist/node_modules/graphql/utilities/getOperationRootType.js +1 -0
- package/dist/node_modules/graphql/utilities/index.js +1 -0
- package/dist/node_modules/graphql/utilities/introspectionFromSchema.js +1 -0
- package/dist/node_modules/graphql/utilities/lexicographicSortSchema.js +1 -0
- package/dist/node_modules/graphql/utilities/printSchema.js +13 -0
- package/dist/node_modules/graphql/utilities/resolveSchemaCoordinate.js +1 -0
- package/dist/node_modules/graphql/utilities/separateOperations.js +1 -0
- package/dist/node_modules/graphql/utilities/sortValueNode.js +1 -0
- package/dist/node_modules/graphql/utilities/stripIgnoredCharacters.js +1 -0
- package/dist/node_modules/graphql/utilities/typeComparators.js +1 -0
- package/dist/node_modules/graphql/utilities/typeFromAST.js +1 -0
- package/dist/node_modules/graphql/utilities/valueFromAST.js +1 -0
- package/dist/node_modules/graphql/utilities/valueFromASTUntyped.js +1 -0
- package/dist/node_modules/graphql/validation/ValidationContext.js +1 -0
- package/dist/node_modules/graphql/validation/index.js +1 -0
- package/dist/node_modules/graphql/validation/rules/ExecutableDefinitionsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/FieldsOnCorrectTypeRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/FragmentsOnCompositeTypesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/KnownArgumentNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/KnownDirectivesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/KnownFragmentNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/KnownTypeNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/LoneAnonymousOperationRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/LoneSchemaDefinitionRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/MaxIntrospectionDepthRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/NoFragmentCyclesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/NoUndefinedVariablesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/NoUnusedFragmentsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/NoUnusedVariablesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/OverlappingFieldsCanBeMergedRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/PossibleFragmentSpreadsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/PossibleTypeExtensionsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/ProvidedRequiredArgumentsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/ScalarLeafsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/SingleFieldSubscriptionsRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueArgumentDefinitionNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueArgumentNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueDirectiveNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueDirectivesPerLocationRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueEnumValueNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueFieldDefinitionNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueFragmentNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueInputFieldNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueOperationNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueOperationTypesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueTypeNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/UniqueVariableNamesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/ValuesOfCorrectTypeRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/VariablesAreInputTypesRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/VariablesInAllowedPositionRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/custom/NoDeprecatedCustomRule.js +1 -0
- package/dist/node_modules/graphql/validation/rules/custom/NoSchemaIntrospectionCustomRule.js +1 -0
- package/dist/node_modules/graphql/validation/specifiedRules.js +1 -0
- package/dist/node_modules/graphql/validation/validate.js +5 -0
- package/dist/node_modules/graphql/version.js +1 -0
- package/dist/onboarding-base.js +1 -2
- package/dist/openapi.js +1 -0
- package/dist/openbanking/docs/openbanking.docblock.js +109 -0
- package/dist/ownership.js +1 -2
- package/dist/policy/docs/policy.docblock.js +1 -0
- package/dist/policy/engine.js +1 -2
- package/dist/policy/opa-adapter.js +1 -2
- package/dist/policy/spec.js +1 -2
- package/dist/presentations/docs/presentations-conventions.docblock.js +8 -0
- package/dist/presentations.backcompat.js +1 -2
- package/dist/presentations.js +1 -2
- package/dist/presentations.v2.js +7 -2
- package/dist/prompt.js +1 -2
- package/dist/promptRegistry.js +1 -2
- package/dist/regenerator/docs/regenerator.docblock.js +184 -0
- package/dist/regenerator/executor.js +1 -2
- package/dist/regenerator/service.js +1 -2
- package/dist/regenerator/sinks.js +1 -2
- package/dist/regenerator/utils.js +1 -2
- package/dist/registry.js +1 -2
- package/dist/resources.js +1 -2
- package/dist/schema-to-markdown.js +10 -0
- package/dist/server/graphql-pothos.js +1 -2
- package/dist/server/index.js +1 -1
- package/dist/server/mcp/createMcpServer.js +1 -0
- package/dist/server/mcp/mcpTypes.js +0 -0
- package/dist/server/mcp/registerPresentations.js +1 -0
- package/dist/server/mcp/registerPrompts.js +3 -0
- package/dist/server/mcp/registerResources.js +1 -0
- package/dist/server/mcp/registerTools.js +1 -0
- package/dist/server/provider-mcp.js +1 -2
- package/dist/server/rest-elysia.js +1 -2
- package/dist/server/rest-express.js +1 -2
- package/dist/server/rest-generic.js +1 -2
- package/dist/server/rest-next-app.js +1 -2
- package/dist/server/rest-next-mcp.js +1 -2
- package/dist/server/rest-next-pages.js +1 -2
- package/dist/spec.js +1 -2
- package/dist/telemetry/anomaly.js +1 -2
- package/dist/telemetry/docs/telemetry.docblock.js +139 -0
- package/dist/telemetry/spec.js +1 -2
- package/dist/telemetry/tracker.js +1 -2
- package/dist/tests/runner.js +1 -2
- package/dist/tests/spec.js +1 -2
- package/dist/themes.js +1 -2
- package/dist/workflow/adapters/db-adapter.js +1 -2
- package/dist/workflow/adapters/file-adapter.js +1 -2
- package/dist/workflow/adapters/memory-store.js +1 -2
- package/dist/workflow/expression.js +1 -2
- package/dist/workflow/runner.js +1 -2
- package/dist/workflow/sla-monitor.js +1 -2
- package/dist/workflow/spec.js +1 -2
- package/dist/workflow/validation.js +1 -2
- package/package.json +353 -193
- package/dist/app-config/branding.d.ts +0 -56
- package/dist/app-config/branding.d.ts.map +0 -1
- package/dist/app-config/contracts.d.ts +0 -245
- package/dist/app-config/contracts.d.ts.map +0 -1
- package/dist/app-config/contracts.js.map +0 -1
- package/dist/app-config/events.d.ts +0 -123
- package/dist/app-config/events.d.ts.map +0 -1
- package/dist/app-config/events.js.map +0 -1
- package/dist/app-config/index.d.ts +0 -8
- package/dist/app-config/lifecycle-contracts.d.ts +0 -383
- package/dist/app-config/lifecycle-contracts.d.ts.map +0 -1
- package/dist/app-config/lifecycle-contracts.js.map +0 -1
- package/dist/app-config/lifecycle.d.ts +0 -28
- package/dist/app-config/lifecycle.d.ts.map +0 -1
- package/dist/app-config/runtime.d.ts +0 -115
- package/dist/app-config/runtime.d.ts.map +0 -1
- package/dist/app-config/runtime.js.map +0 -1
- package/dist/app-config/spec.d.ts +0 -176
- package/dist/app-config/spec.d.ts.map +0 -1
- package/dist/app-config/spec.js.map +0 -1
- package/dist/app-config/validation.d.ts +0 -48
- package/dist/app-config/validation.d.ts.map +0 -1
- package/dist/app-config/validation.js.map +0 -1
- package/dist/capabilities/openbanking.d.ts +0 -10
- package/dist/capabilities/openbanking.d.ts.map +0 -1
- package/dist/capabilities/openbanking.js.map +0 -1
- package/dist/capabilities.d.ts +0 -46
- package/dist/capabilities.d.ts.map +0 -1
- package/dist/capabilities.js.map +0 -1
- package/dist/client/index.d.ts +0 -6
- package/dist/client/react/drivers/rn-reusables.d.ts +0 -23
- package/dist/client/react/drivers/rn-reusables.d.ts.map +0 -1
- package/dist/client/react/drivers/rn-reusables.js.map +0 -1
- package/dist/client/react/drivers/shadcn.d.ts +0 -13
- package/dist/client/react/drivers/shadcn.d.ts.map +0 -1
- package/dist/client/react/drivers/shadcn.js.map +0 -1
- package/dist/client/react/feature-render.d.ts +0 -21
- package/dist/client/react/feature-render.d.ts.map +0 -1
- package/dist/client/react/feature-render.js.map +0 -1
- package/dist/client/react/form-render.d.ts +0 -92
- package/dist/client/react/form-render.d.ts.map +0 -1
- package/dist/client/react/form-render.js.map +0 -1
- package/dist/client/react/index.d.ts +0 -5
- package/dist/contracts-adapter-hydration.d.ts +0 -16
- package/dist/contracts-adapter-hydration.d.ts.map +0 -1
- package/dist/contracts-adapter-hydration.js.map +0 -1
- package/dist/contracts-adapter-input.d.ts +0 -11
- package/dist/contracts-adapter-input.d.ts.map +0 -1
- package/dist/contracts-adapter-input.js.map +0 -1
- package/dist/data-views/query-generator.d.ts +0 -40
- package/dist/data-views/query-generator.d.ts.map +0 -1
- package/dist/data-views/query-generator.js.map +0 -1
- package/dist/data-views/runtime.d.ts +0 -27
- package/dist/data-views/runtime.d.ts.map +0 -1
- package/dist/data-views/runtime.js.map +0 -1
- package/dist/data-views.d.ts +0 -132
- package/dist/data-views.d.ts.map +0 -1
- package/dist/data-views.js.map +0 -1
- package/dist/events.d.ts +0 -45
- package/dist/events.d.ts.map +0 -1
- package/dist/events.js.map +0 -1
- package/dist/experiments/evaluator.d.ts +0 -38
- package/dist/experiments/evaluator.d.ts.map +0 -1
- package/dist/experiments/evaluator.js.map +0 -1
- package/dist/experiments/spec-resolver.d.ts +0 -17
- package/dist/experiments/spec-resolver.d.ts.map +0 -1
- package/dist/experiments/spec.d.ts +0 -90
- package/dist/experiments/spec.d.ts.map +0 -1
- package/dist/experiments/spec.js.map +0 -1
- package/dist/features.d.ts +0 -88
- package/dist/features.d.ts.map +0 -1
- package/dist/features.js.map +0 -1
- package/dist/forms.d.ts +0 -259
- package/dist/forms.d.ts.map +0 -1
- package/dist/forms.js.map +0 -1
- package/dist/graphql-federation/dist/index.js +0 -2
- package/dist/graphql-federation/dist/index.js.map +0 -1
- package/dist/index.d.ts +0 -130
- package/dist/install.d.ts +0 -77
- package/dist/install.d.ts.map +0 -1
- package/dist/install.js.map +0 -1
- package/dist/integrations/binding.d.ts +0 -18
- package/dist/integrations/binding.d.ts.map +0 -1
- package/dist/integrations/connection.d.ts +0 -52
- package/dist/integrations/connection.d.ts.map +0 -1
- package/dist/integrations/contracts.d.ts +0 -436
- package/dist/integrations/contracts.d.ts.map +0 -1
- package/dist/integrations/contracts.js.map +0 -1
- package/dist/integrations/health.d.ts +0 -22
- package/dist/integrations/health.d.ts.map +0 -1
- package/dist/integrations/health.js.map +0 -1
- package/dist/integrations/index.d.ts +0 -53
- package/dist/integrations/openbanking/contracts/accounts.d.ts +0 -288
- package/dist/integrations/openbanking/contracts/accounts.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/accounts.js.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.d.ts +0 -164
- package/dist/integrations/openbanking/contracts/balances.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/balances.js.map +0 -1
- package/dist/integrations/openbanking/contracts/index.d.ts +0 -10
- package/dist/integrations/openbanking/contracts/index.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/index.js.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.d.ts +0 -212
- package/dist/integrations/openbanking/contracts/transactions.d.ts.map +0 -1
- package/dist/integrations/openbanking/contracts/transactions.js.map +0 -1
- package/dist/integrations/openbanking/guards.d.ts +0 -13
- package/dist/integrations/openbanking/guards.d.ts.map +0 -1
- package/dist/integrations/openbanking/guards.js.map +0 -1
- package/dist/integrations/openbanking/models.d.ts +0 -229
- package/dist/integrations/openbanking/models.d.ts.map +0 -1
- package/dist/integrations/openbanking/models.js.map +0 -1
- package/dist/integrations/openbanking/telemetry.d.ts +0 -16
- package/dist/integrations/openbanking/telemetry.d.ts.map +0 -1
- package/dist/integrations/openbanking/telemetry.js.map +0 -1
- package/dist/integrations/providers/calendar.d.ts +0 -79
- package/dist/integrations/providers/calendar.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.d.ts +0 -8
- package/dist/integrations/providers/elevenlabs.d.ts.map +0 -1
- package/dist/integrations/providers/elevenlabs.js.map +0 -1
- package/dist/integrations/providers/email.d.ts +0 -87
- package/dist/integrations/providers/email.d.ts.map +0 -1
- package/dist/integrations/providers/embedding.d.ts +0 -25
- package/dist/integrations/providers/embedding.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.d.ts +0 -8
- package/dist/integrations/providers/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/gmail.d.ts +0 -8
- package/dist/integrations/providers/gmail.d.ts.map +0 -1
- package/dist/integrations/providers/gmail.js.map +0 -1
- package/dist/integrations/providers/google-calendar.d.ts +0 -8
- package/dist/integrations/providers/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts +0 -21
- package/dist/integrations/providers/impls/elevenlabs-voice.d.ts.map +0 -1
- package/dist/integrations/providers/impls/elevenlabs-voice.js.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.d.ts +0 -25
- package/dist/integrations/providers/impls/gcs-storage.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gcs-storage.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.d.ts +0 -27
- package/dist/integrations/providers/impls/gmail-inbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-inbound.js.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.d.ts +0 -19
- package/dist/integrations/providers/impls/gmail-outbound.d.ts.map +0 -1
- package/dist/integrations/providers/impls/gmail-outbound.js.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.d.ts +0 -24
- package/dist/integrations/providers/impls/google-calendar.d.ts.map +0 -1
- package/dist/integrations/providers/impls/google-calendar.js.map +0 -1
- package/dist/integrations/providers/impls/index.d.ts +0 -15
- package/dist/integrations/providers/impls/mistral-embedding.d.ts +0 -24
- package/dist/integrations/providers/impls/mistral-embedding.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-embedding.js.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.d.ts +0 -32
- package/dist/integrations/providers/impls/mistral-llm.d.ts.map +0 -1
- package/dist/integrations/providers/impls/mistral-llm.js.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.d.ts +0 -20
- package/dist/integrations/providers/impls/postmark-email.d.ts.map +0 -1
- package/dist/integrations/providers/impls/postmark-email.js.map +0 -1
- package/dist/integrations/providers/impls/powens-client.d.ts +0 -125
- package/dist/integrations/providers/impls/powens-client.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-client.js.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.d.ts +0 -28
- package/dist/integrations/providers/impls/powens-openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/impls/powens-openbanking.js.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.d.ts +0 -27
- package/dist/integrations/providers/impls/provider-factory.d.ts.map +0 -1
- package/dist/integrations/providers/impls/provider-factory.js.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.d.ts +0 -25
- package/dist/integrations/providers/impls/qdrant-vector.d.ts.map +0 -1
- package/dist/integrations/providers/impls/qdrant-vector.js.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.d.ts +0 -29
- package/dist/integrations/providers/impls/stripe-payments.d.ts.map +0 -1
- package/dist/integrations/providers/impls/stripe-payments.js.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.d.ts +0 -21
- package/dist/integrations/providers/impls/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/impls/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/index.d.ts +0 -36
- package/dist/integrations/providers/llm.d.ts +0 -83
- package/dist/integrations/providers/llm.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.d.ts +0 -8
- package/dist/integrations/providers/mistral.d.ts.map +0 -1
- package/dist/integrations/providers/mistral.js.map +0 -1
- package/dist/integrations/providers/openbanking.d.ts +0 -129
- package/dist/integrations/providers/openbanking.d.ts.map +0 -1
- package/dist/integrations/providers/payments.d.ts +0 -110
- package/dist/integrations/providers/payments.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.d.ts +0 -8
- package/dist/integrations/providers/postmark.d.ts.map +0 -1
- package/dist/integrations/providers/postmark.js.map +0 -1
- package/dist/integrations/providers/powens.d.ts +0 -8
- package/dist/integrations/providers/powens.d.ts.map +0 -1
- package/dist/integrations/providers/powens.js.map +0 -1
- package/dist/integrations/providers/qdrant.d.ts +0 -8
- package/dist/integrations/providers/qdrant.d.ts.map +0 -1
- package/dist/integrations/providers/qdrant.js.map +0 -1
- package/dist/integrations/providers/sms.d.ts +0 -35
- package/dist/integrations/providers/sms.d.ts.map +0 -1
- package/dist/integrations/providers/storage.d.ts +0 -61
- package/dist/integrations/providers/storage.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.d.ts +0 -8
- package/dist/integrations/providers/stripe.d.ts.map +0 -1
- package/dist/integrations/providers/stripe.js.map +0 -1
- package/dist/integrations/providers/twilio-sms.d.ts +0 -8
- package/dist/integrations/providers/twilio-sms.d.ts.map +0 -1
- package/dist/integrations/providers/twilio-sms.js.map +0 -1
- package/dist/integrations/providers/vector-store.d.ts +0 -44
- package/dist/integrations/providers/vector-store.d.ts.map +0 -1
- package/dist/integrations/providers/voice.d.ts +0 -35
- package/dist/integrations/providers/voice.d.ts.map +0 -1
- package/dist/integrations/runtime.d.ts +0 -100
- package/dist/integrations/runtime.d.ts.map +0 -1
- package/dist/integrations/runtime.js.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.d.ts +0 -32
- package/dist/integrations/secrets/env-secret-provider.d.ts.map +0 -1
- package/dist/integrations/secrets/env-secret-provider.js.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.d.ts +0 -33
- package/dist/integrations/secrets/gcp-secret-manager.d.ts.map +0 -1
- package/dist/integrations/secrets/gcp-secret-manager.js.map +0 -1
- package/dist/integrations/secrets/index.d.ts +0 -5
- package/dist/integrations/secrets/manager.d.ts +0 -48
- package/dist/integrations/secrets/manager.d.ts.map +0 -1
- package/dist/integrations/secrets/manager.js.map +0 -1
- package/dist/integrations/secrets/provider.d.ts +0 -53
- package/dist/integrations/secrets/provider.d.ts.map +0 -1
- package/dist/integrations/secrets/provider.js.map +0 -1
- package/dist/integrations/spec.d.ts +0 -80
- package/dist/integrations/spec.d.ts.map +0 -1
- package/dist/integrations/spec.js.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.d.ts +0 -42
- package/dist/jobs/gcp-cloud-tasks.d.ts.map +0 -1
- package/dist/jobs/gcp-cloud-tasks.js.map +0 -1
- package/dist/jobs/gcp-pubsub.d.ts +0 -26
- package/dist/jobs/gcp-pubsub.d.ts.map +0 -1
- package/dist/jobs/gcp-pubsub.js.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.d.ts +0 -10
- package/dist/jobs/handlers/gmail-sync-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/gmail-sync-handler.js.map +0 -1
- package/dist/jobs/handlers/index.d.ts +0 -3
- package/dist/jobs/handlers/storage-document-handler.d.ts +0 -13
- package/dist/jobs/handlers/storage-document-handler.d.ts.map +0 -1
- package/dist/jobs/handlers/storage-document-handler.js.map +0 -1
- package/dist/jobs/index.d.ts +0 -7
- package/dist/jobs/memory-queue.d.ts +0 -19
- package/dist/jobs/memory-queue.d.ts.map +0 -1
- package/dist/jobs/memory-queue.js.map +0 -1
- package/dist/jobs/queue.d.ts +0 -27
- package/dist/jobs/queue.d.ts.map +0 -1
- package/dist/jsonschema.d.ts +0 -27
- package/dist/jsonschema.d.ts.map +0 -1
- package/dist/jsonschema.js.map +0 -1
- package/dist/knowledge/binding.d.ts +0 -26
- package/dist/knowledge/binding.d.ts.map +0 -1
- package/dist/knowledge/contracts.d.ts +0 -317
- package/dist/knowledge/contracts.d.ts.map +0 -1
- package/dist/knowledge/contracts.js.map +0 -1
- package/dist/knowledge/index.d.ts +0 -10
- package/dist/knowledge/ingestion/document-processor.d.ts +0 -25
- package/dist/knowledge/ingestion/document-processor.d.ts.map +0 -1
- package/dist/knowledge/ingestion/document-processor.js.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.d.ts +0 -13
- package/dist/knowledge/ingestion/embedding-service.d.ts.map +0 -1
- package/dist/knowledge/ingestion/embedding-service.js.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.d.ts +0 -19
- package/dist/knowledge/ingestion/gmail-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/gmail-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/index.d.ts +0 -6
- package/dist/knowledge/ingestion/storage-adapter.d.ts +0 -16
- package/dist/knowledge/ingestion/storage-adapter.d.ts.map +0 -1
- package/dist/knowledge/ingestion/storage-adapter.js.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.d.ts +0 -19
- package/dist/knowledge/ingestion/vector-indexer.d.ts.map +0 -1
- package/dist/knowledge/ingestion/vector-indexer.js.map +0 -1
- package/dist/knowledge/query/index.d.ts +0 -2
- package/dist/knowledge/query/service.d.ts +0 -30
- package/dist/knowledge/query/service.d.ts.map +0 -1
- package/dist/knowledge/query/service.js.map +0 -1
- package/dist/knowledge/runtime.d.ts +0 -33
- package/dist/knowledge/runtime.d.ts.map +0 -1
- package/dist/knowledge/runtime.js.map +0 -1
- package/dist/knowledge/source.d.ts +0 -33
- package/dist/knowledge/source.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.d.ts +0 -8
- package/dist/knowledge/spaces/email-threads.d.ts.map +0 -1
- package/dist/knowledge/spaces/email-threads.js.map +0 -1
- package/dist/knowledge/spaces/financial-docs.d.ts +0 -8
- package/dist/knowledge/spaces/financial-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-docs.js.map +0 -1
- package/dist/knowledge/spaces/financial-overview.d.ts +0 -8
- package/dist/knowledge/spaces/financial-overview.d.ts.map +0 -1
- package/dist/knowledge/spaces/financial-overview.js.map +0 -1
- package/dist/knowledge/spaces/index.d.ts +0 -7
- package/dist/knowledge/spaces/product-canon.d.ts +0 -8
- package/dist/knowledge/spaces/product-canon.d.ts.map +0 -1
- package/dist/knowledge/spaces/product-canon.js.map +0 -1
- package/dist/knowledge/spaces/support-faq.d.ts +0 -8
- package/dist/knowledge/spaces/support-faq.d.ts.map +0 -1
- package/dist/knowledge/spaces/support-faq.js.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.d.ts +0 -8
- package/dist/knowledge/spaces/uploaded-docs.d.ts.map +0 -1
- package/dist/knowledge/spaces/uploaded-docs.js.map +0 -1
- package/dist/knowledge/spec.d.ts +0 -53
- package/dist/knowledge/spec.d.ts.map +0 -1
- package/dist/knowledge/spec.js.map +0 -1
- package/dist/markdown.d.ts +0 -22
- package/dist/markdown.d.ts.map +0 -1
- package/dist/markdown.js.map +0 -1
- package/dist/migrations.d.ts +0 -53
- package/dist/migrations.d.ts.map +0 -1
- package/dist/migrations.js.map +0 -1
- package/dist/onboarding-base.d.ts +0 -138
- package/dist/onboarding-base.d.ts.map +0 -1
- package/dist/onboarding-base.js.map +0 -1
- package/dist/ownership.d.ts +0 -76
- package/dist/ownership.d.ts.map +0 -1
- package/dist/ownership.js.map +0 -1
- package/dist/policy/engine.d.ts +0 -40
- package/dist/policy/engine.d.ts.map +0 -1
- package/dist/policy/engine.js.map +0 -1
- package/dist/policy/opa-adapter.d.ts +0 -46
- package/dist/policy/opa-adapter.d.ts.map +0 -1
- package/dist/policy/opa-adapter.js.map +0 -1
- package/dist/policy/spec.d.ts +0 -115
- package/dist/policy/spec.d.ts.map +0 -1
- package/dist/policy/spec.js.map +0 -1
- package/dist/presentations.backcompat.d.ts +0 -8
- package/dist/presentations.backcompat.d.ts.map +0 -1
- package/dist/presentations.backcompat.js.map +0 -1
- package/dist/presentations.d.ts +0 -97
- package/dist/presentations.d.ts.map +0 -1
- package/dist/presentations.js.map +0 -1
- package/dist/presentations.v2.d.ts +0 -96
- package/dist/presentations.v2.d.ts.map +0 -1
- package/dist/presentations.v2.js.map +0 -1
- package/dist/prompt.d.ts +0 -61
- package/dist/prompt.d.ts.map +0 -1
- package/dist/prompt.js.map +0 -1
- package/dist/promptRegistry.d.ts +0 -16
- package/dist/promptRegistry.d.ts.map +0 -1
- package/dist/promptRegistry.js.map +0 -1
- package/dist/regenerator/adapters.d.ts +0 -20
- package/dist/regenerator/adapters.d.ts.map +0 -1
- package/dist/regenerator/executor.d.ts +0 -71
- package/dist/regenerator/executor.d.ts.map +0 -1
- package/dist/regenerator/executor.js.map +0 -1
- package/dist/regenerator/index.d.ts +0 -7
- package/dist/regenerator/service.d.ts +0 -34
- package/dist/regenerator/service.d.ts.map +0 -1
- package/dist/regenerator/service.js.map +0 -1
- package/dist/regenerator/sinks.d.ts +0 -27
- package/dist/regenerator/sinks.d.ts.map +0 -1
- package/dist/regenerator/sinks.js.map +0 -1
- package/dist/regenerator/types.d.ts +0 -108
- package/dist/regenerator/types.d.ts.map +0 -1
- package/dist/regenerator/utils.d.ts +0 -10
- package/dist/regenerator/utils.d.ts.map +0 -1
- package/dist/regenerator/utils.js.map +0 -1
- package/dist/registry.d.ts +0 -73
- package/dist/registry.d.ts.map +0 -1
- package/dist/registry.js.map +0 -1
- package/dist/resources.d.ts +0 -65
- package/dist/resources.d.ts.map +0 -1
- package/dist/resources.js.map +0 -1
- package/dist/schema/dist/EnumType.js +0 -1
- package/dist/schema/dist/FieldType.js +0 -2
- package/dist/schema/dist/FieldType.js.map +0 -1
- package/dist/schema/dist/ScalarTypeEnum.js +0 -2
- package/dist/schema/dist/ScalarTypeEnum.js.map +0 -1
- package/dist/schema/dist/SchemaModel.js +0 -2
- package/dist/schema/dist/SchemaModel.js.map +0 -1
- package/dist/schema/dist/index.js +0 -1
- package/dist/server/graphql-pothos.d.ts +0 -32
- package/dist/server/graphql-pothos.d.ts.map +0 -1
- package/dist/server/graphql-pothos.js.map +0 -1
- package/dist/server/graphql-schema-export.d.ts +0 -7
- package/dist/server/graphql-schema-export.d.ts.map +0 -1
- package/dist/server/graphql-schema-export.js +0 -2
- package/dist/server/graphql-schema-export.js.map +0 -1
- package/dist/server/index.d.ts +0 -9
- package/dist/server/provider-mcp.d.ts +0 -52
- package/dist/server/provider-mcp.d.ts.map +0 -1
- package/dist/server/provider-mcp.js.map +0 -1
- package/dist/server/rest-elysia.d.ts +0 -41
- package/dist/server/rest-elysia.d.ts.map +0 -1
- package/dist/server/rest-elysia.js.map +0 -1
- package/dist/server/rest-express.d.ts +0 -17
- package/dist/server/rest-express.d.ts.map +0 -1
- package/dist/server/rest-express.js.map +0 -1
- package/dist/server/rest-generic.d.ts +0 -33
- package/dist/server/rest-generic.d.ts.map +0 -1
- package/dist/server/rest-generic.js.map +0 -1
- package/dist/server/rest-next-app.d.ts +0 -36
- package/dist/server/rest-next-app.d.ts.map +0 -1
- package/dist/server/rest-next-app.js.map +0 -1
- package/dist/server/rest-next-mcp.d.ts +0 -12
- package/dist/server/rest-next-mcp.d.ts.map +0 -1
- package/dist/server/rest-next-mcp.js.map +0 -1
- package/dist/server/rest-next-pages.d.ts +0 -10
- package/dist/server/rest-next-pages.d.ts.map +0 -1
- package/dist/server/rest-next-pages.js.map +0 -1
- package/dist/spec.d.ts +0 -172
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js.map +0 -1
- package/dist/telemetry/anomaly.d.ts +0 -28
- package/dist/telemetry/anomaly.d.ts.map +0 -1
- package/dist/telemetry/anomaly.js.map +0 -1
- package/dist/telemetry/index.d.ts +0 -4
- package/dist/telemetry/spec.d.ts +0 -99
- package/dist/telemetry/spec.d.ts.map +0 -1
- package/dist/telemetry/spec.js.map +0 -1
- package/dist/telemetry/tracker.d.ts +0 -52
- package/dist/telemetry/tracker.d.ts.map +0 -1
- package/dist/telemetry/tracker.js.map +0 -1
- package/dist/tests/index.d.ts +0 -3
- package/dist/tests/runner.d.ts +0 -44
- package/dist/tests/runner.d.ts.map +0 -1
- package/dist/tests/runner.js.map +0 -1
- package/dist/tests/spec.d.ts +0 -90
- package/dist/tests/spec.d.ts.map +0 -1
- package/dist/tests/spec.js.map +0 -1
- package/dist/themes.d.ts +0 -56
- package/dist/themes.d.ts.map +0 -1
- package/dist/themes.js.map +0 -1
- package/dist/translations/catalog.d.ts +0 -29
- package/dist/translations/catalog.d.ts.map +0 -1
- package/dist/translations/tenant.d.ts +0 -16
- package/dist/translations/tenant.d.ts.map +0 -1
- package/dist/types/all.d.ts +0 -60
- package/dist/types.d.ts +0 -89
- package/dist/types.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.d.ts +0 -35
- package/dist/workflow/adapters/db-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/db-adapter.js.map +0 -1
- package/dist/workflow/adapters/file-adapter.d.ts +0 -15
- package/dist/workflow/adapters/file-adapter.d.ts.map +0 -1
- package/dist/workflow/adapters/file-adapter.js.map +0 -1
- package/dist/workflow/adapters/index.d.ts +0 -4
- package/dist/workflow/adapters/memory-store.d.ts +0 -19
- package/dist/workflow/adapters/memory-store.d.ts.map +0 -1
- package/dist/workflow/adapters/memory-store.js.map +0 -1
- package/dist/workflow/expression.d.ts +0 -10
- package/dist/workflow/expression.d.ts.map +0 -1
- package/dist/workflow/expression.js.map +0 -1
- package/dist/workflow/index.d.ts +0 -10
- package/dist/workflow/runner.d.ts +0 -75
- package/dist/workflow/runner.d.ts.map +0 -1
- package/dist/workflow/runner.js.map +0 -1
- package/dist/workflow/sla-monitor.d.ts +0 -21
- package/dist/workflow/sla-monitor.d.ts.map +0 -1
- package/dist/workflow/sla-monitor.js.map +0 -1
- package/dist/workflow/spec.d.ts +0 -100
- package/dist/workflow/spec.d.ts.map +0 -1
- package/dist/workflow/spec.js.map +0 -1
- package/dist/workflow/state.d.ts +0 -36
- package/dist/workflow/state.d.ts.map +0 -1
- package/dist/workflow/validation.d.ts +0 -29
- package/dist/workflow/validation.d.ts.map +0 -1
- package/dist/workflow/validation.js.map +0 -1
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{
|
|
2
|
-
//# sourceMappingURL=provider-mcp.js.map
|
|
1
|
+
import{createMcpServer as e}from"./mcp/createMcpServer.js";export{e as createMcpServer};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r,i){let a=e(n,e=>r({request:e,store:t.store}),i);for(let e of n.listSpecs()){let n=e.transport?.rest?.method??(e.meta.kind===`query`?`GET`:`POST`),r=(i?.basePath??``)+(e.transport?.rest?.path??`/${e.meta.name.replace(/\./g,`/`)}/v${e.meta.version}`);t[n.toLowerCase()](r,({request:e})=>a(e))}return i?.cors&&t.options(`*`,({request:e})=>a(e)),t}export{t as elysiaPlugin};
|
|
2
|
-
//# sourceMappingURL=rest-elysia.js.map
|
|
1
|
+
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r,i){let a=e(n,e=>r({request:e,store:t.store}),i);for(let e of n.listSpecs()){let n=e.transport?.rest?.method??(e.meta.kind===`query`?`GET`:`POST`),r=(i?.basePath??``)+(e.transport?.rest?.path??`/${e.meta.name.replace(/\./g,`/`)}/v${e.meta.version}`);t[n.toLowerCase()](r,({request:e})=>a(e))}return i?.cors&&t.options(`*`,({request:e})=>a(e)),t}export{t as elysiaPlugin};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r,i){let a=t.Router();e(n,e=>{throw Error(`ctxFactory must be called from route`)},i);for(let t of n.listSpecs()){let o=t.transport?.rest?.method??(t.meta.kind===`query`?`GET`:`POST`),s=(i?.basePath??``)+(t.transport?.rest?.path??`/${t.meta.name.replace(/\./g,`/`)}/v${t.meta.version}`);a[o.toLowerCase()](s,async(t,a)=>{let s=new URL(`${t.protocol}://${t.get(`host`)}${t.originalUrl}`),c=new Request(s.toString(),{method:o,headers:Object.fromEntries(Object.entries(t.headers).map(([e,t])=>[e,String(t)])),body:o===`POST`?JSON.stringify(t.body??{}):void 0}),l=await e(n,()=>r(t),i)(c);a.status(l.status),l.headers.forEach((e,t)=>a.setHeader(t,e));let u=await l.text();a.send(u)})}return i?.cors&&a.options(`*`,(e,t)=>{let n=new Headers;new Response(null,{status:204}).headers.forEach((e,t)=>n.set(t,e)),t.status(204).send()}),a}export{t as expressRouter};
|
|
2
|
-
//# sourceMappingURL=rest-express.js.map
|
|
1
|
+
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r,i){let a=t.Router();e(n,e=>{throw Error(`ctxFactory must be called from route`)},i);for(let t of n.listSpecs()){let o=t.transport?.rest?.method??(t.meta.kind===`query`?`GET`:`POST`),s=(i?.basePath??``)+(t.transport?.rest?.path??`/${t.meta.name.replace(/\./g,`/`)}/v${t.meta.version}`);a[o.toLowerCase()](s,async(t,a)=>{let s=new URL(`${t.protocol}://${t.get(`host`)}${t.originalUrl}`),c=new Request(s.toString(),{method:o,headers:Object.fromEntries(Object.entries(t.headers).map(([e,t])=>[e,String(t)])),body:o===`POST`?JSON.stringify(t.body??{}):void 0}),l=await e(n,()=>r(t),i)(c);a.status(l.status),l.headers.forEach((e,t)=>a.setHeader(t,e));let u=await l.text();a.send(u)})}return i?.cors&&a.options(`*`,(e,t)=>{let n=new Headers;new Response(null,{status:204}).headers.forEach((e,t)=>n.set(t,e)),t.status(204).send()}),a}export{t as expressRouter};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{defaultRestPath as e}from"../jsonschema.js";function t(e){let t={};return t[`access-control-allow-origin`]=typeof e==`object`?e.origin??`*`:`*`,t.vary=`Origin`,typeof e==`object`?(e.methods&&(t[`access-control-allow-methods`]=e.methods.join(`, `)),e.headers&&(t[`access-control-allow-headers`]=e.headers.join(`, `)),e.credentials&&(t[`access-control-allow-credentials`]=`true`),typeof e.maxAge==`number`&&(t[`access-control-max-age`]=String(e.maxAge))):(t[`access-control-allow-methods`]=`GET,POST,OPTIONS`,t[`access-control-allow-headers`]=`content-type,x-idempotency-key,x-trace-id`),t}function n(e,t){return`${(e??``).replace(/\/+$/g,``)}/${t.replace(/^\/+/g,``)}`.replace(/\/{2,}/g,`/`)}function r(r,i,a){let o={basePath:a?.basePath??``,cors:a?.cors??!1,prettyJson:a?.prettyJson??!1,onError:a?.onError},s=r.listSpecs().map(t=>({method:t.transport?.rest?.method??(t.meta.kind===`query`?`GET`:`POST`),path:n(o.basePath,t.transport?.rest?.path??e(t.meta.name,t.meta.version)),name:t.meta.name,version:t.meta.version})),c=new Map;for(let e of s)c.set(`${e.method} ${e.path}`,e);Array.from(new Set(s.map(e=>e.method))).join(`, `);let l=(e,t,n)=>{let r=o.prettyJson?JSON.stringify(t,null,o.prettyJson):JSON.stringify(t),i={"content-type":`application/json; charset=utf-8`};return new Response(r,{status:e,headers:n?{...i,...n}:i})};return async function(e){let n=new URL(e.url),a=`${e.method.toUpperCase()} ${n.pathname}`;if(o.cors&&e.method.toUpperCase()===`OPTIONS`){let e=t(o.cors===!0?{}:o.cors);return new Response(null,{status:204,headers:{...e,"content-length":`0`}})}let s=c.get(a);if(!s){let e={};return o.cors&&Object.assign(e,t(o.cors===!0?{}:o.cors)),l(404,{error:`NotFound`,path:n.pathname},e)}try{let a={};if(s.method===`GET`)if(n.searchParams.has(`input`)){let e=n.searchParams.get(`input`);a=e?JSON.parse(e):{}}else{let e={};for(let[t,r]of n.searchParams.entries())e[t]=r;a=e}else{let t=e.headers.get(`content-type`)||``;if(t.includes(`application/json`))a=await e.json();else if(t.includes(`application/x-www-form-urlencoded`)){let t=await e.formData();a=Object.fromEntries(t.entries())}else if(!t)a={};else return l(415,{error:`UnsupportedMediaType`,contentType:t})}let c=i(e),u=await r.execute(s.name,s.version,a,c),d={};return o.cors&&Object.assign(d,t(o.cors===!0?{}:o.cors)),l(200,u,d)}catch(e){if(o.onError){let n=o.onError(e),r={};return o.cors&&Object.assign(r,t(o.cors===!0?{}:o.cors)),l(n.status,n.body,r)}let n={};return o.cors&&Object.assign(n,t(o.cors===!0?{}:o.cors)),e?.issues?l(400,{error:`ValidationError`,issues:e.issues},n):typeof e?.message==`string`&&e.message.startsWith(`PolicyDenied`)?l(403,{error:`PolicyDenied`},n):l(500,{error:`InternalError`},n)}}}export{r as createFetchHandler};
|
|
2
|
-
//# sourceMappingURL=rest-generic.js.map
|
|
1
|
+
import{defaultRestPath as e}from"../jsonschema.js";function t(e){let t={};return t[`access-control-allow-origin`]=typeof e==`object`?e.origin??`*`:`*`,t.vary=`Origin`,typeof e==`object`?(e.methods&&(t[`access-control-allow-methods`]=e.methods.join(`, `)),e.headers&&(t[`access-control-allow-headers`]=e.headers.join(`, `)),e.credentials&&(t[`access-control-allow-credentials`]=`true`),typeof e.maxAge==`number`&&(t[`access-control-max-age`]=String(e.maxAge))):(t[`access-control-allow-methods`]=`GET,POST,OPTIONS`,t[`access-control-allow-headers`]=`content-type,x-idempotency-key,x-trace-id`),t}function n(e,t){return`${(e??``).replace(/\/+$/g,``)}/${t.replace(/^\/+/g,``)}`.replace(/\/{2,}/g,`/`)}function r(r,i,a){let o={basePath:a?.basePath??``,cors:a?.cors??!1,prettyJson:a?.prettyJson??!1,onError:a?.onError},s=r.listSpecs().map(t=>({method:t.transport?.rest?.method??(t.meta.kind===`query`?`GET`:`POST`),path:n(o.basePath,t.transport?.rest?.path??e(t.meta.name,t.meta.version)),name:t.meta.name,version:t.meta.version})),c=new Map;for(let e of s)c.set(`${e.method} ${e.path}`,e);Array.from(new Set(s.map(e=>e.method))).join(`, `);let l=(e,t,n)=>{let r=o.prettyJson?JSON.stringify(t,null,o.prettyJson):JSON.stringify(t),i={"content-type":`application/json; charset=utf-8`};return new Response(r,{status:e,headers:n?{...i,...n}:i})};return async function(e){let n=new URL(e.url),a=`${e.method.toUpperCase()} ${n.pathname}`;if(o.cors&&e.method.toUpperCase()===`OPTIONS`){let e=t(o.cors===!0?{}:o.cors);return new Response(null,{status:204,headers:{...e,"content-length":`0`}})}let s=c.get(a);if(!s){let e={};return o.cors&&Object.assign(e,t(o.cors===!0?{}:o.cors)),l(404,{error:`NotFound`,path:n.pathname},e)}try{let a={};if(s.method===`GET`)if(n.searchParams.has(`input`)){let e=n.searchParams.get(`input`);a=e?JSON.parse(e):{}}else{let e={};for(let[t,r]of n.searchParams.entries())e[t]=r;a=e}else{let t=e.headers.get(`content-type`)||``;if(t.includes(`application/json`))a=await e.json();else if(t.includes(`application/x-www-form-urlencoded`)){let t=await e.formData();a=Object.fromEntries(t.entries())}else if(!t)a={};else return l(415,{error:`UnsupportedMediaType`,contentType:t})}let c=i(e),u=await r.execute(s.name,s.version,a,c),d={};return o.cors&&Object.assign(d,t(o.cors===!0?{}:o.cors)),l(200,u,d)}catch(e){if(o.onError){let n=o.onError(e),r={};return o.cors&&Object.assign(r,t(o.cors===!0?{}:o.cors)),l(n.status,n.body,r)}let n={};return o.cors&&Object.assign(n,t(o.cors===!0?{}:o.cors)),e?.issues?l(400,{error:`ValidationError`,issues:e.issues},n):typeof e?.message==`string`&&e.message.startsWith(`PolicyDenied`)?l(403,{error:`PolicyDenied`},n):l(500,{error:`InternalError`},n)}}}export{r as createFetchHandler};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r){let i=e(t,n,r);return async function(e){return i(e)}}export{t as makeNextAppHandler};
|
|
2
|
-
//# sourceMappingURL=rest-next-app.js.map
|
|
1
|
+
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r){let i=e(t,n,r);return async function(e){return i(e)}}export{t as makeNextAppHandler};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{defaultMcpTool as e,jsonSchemaForSpec as t}from"../jsonschema.js";import{ResourceTemplate as n}from"@modelcontextprotocol/sdk/server/mcp.js";import{createMcpHandler as r}from"mcp-handler";function i(i,a){let o=r(r=>{for(let o of i.listSpecs()){let{input:s,output:c,meta:l}=t(o);if(l.kind===`query`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerResource(t,new n(`users://{userId}/profile`,{list:void 0}),{description:o.meta.description,inputSchema:s},(async(e,t,n)=>{let r=await i.execute(o.meta.name,o.meta.version,t??{},a());return{contents:[{uri:e.href,text:String(r)}]}}))}else if(l.kind===`command`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerTool(t,{description:o.meta.description,inputSchema:s},(async(e,t)=>{let n=await i.execute(o.meta.name,o.meta.version,e??{},a());return{content:[{type:`text`,text:String(n)}]}}))}else throw Error(`Unsupported kind: ${l.kind}`)}},{},{basePath:`/api`});return{GET:o,POST:o,DELETE:o}}export{i as makeNextMcpServerFromRegistry};
|
|
2
|
-
//# sourceMappingURL=rest-next-mcp.js.map
|
|
1
|
+
import{defaultMcpTool as e,jsonSchemaForSpec as t}from"../jsonschema.js";import{ResourceTemplate as n}from"@modelcontextprotocol/sdk/server/mcp.js";import{createMcpHandler as r}from"mcp-handler";function i(i,a){let o=r(r=>{for(let o of i.listSpecs()){let{input:s,output:c,meta:l}=t(o);if(l.kind===`query`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerResource(t,new n(`users://{userId}/profile`,{list:void 0}),{description:o.meta.description,inputSchema:s},(async(e,t,n)=>{let r=await i.execute(o.meta.name,o.meta.version,t??{},a());return{contents:[{uri:e.href,text:String(r)}]}}))}else if(l.kind===`command`){let t=o.transport?.mcp?.toolName??e(o.meta.name,o.meta.version);r.registerTool(t,{description:o.meta.description,inputSchema:s},(async(e,t)=>{let n=await i.execute(o.meta.name,o.meta.version,e??{},a());return{content:[{type:`text`,text:String(n)}]}}))}else throw Error(`Unsupported kind: ${l.kind}`)}},{},{basePath:`/api`});return{GET:o,POST:o,DELETE:o}}export{i as makeNextMcpServerFromRegistry};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r){return e(t,e=>{throw Error(`Use per-request wrapper`)},r),async function(i,a){let o=`${i.headers[`x-forwarded-proto`]??`http`}://${i.headers.host}${i.url}`,s=i.method?.toUpperCase()||`GET`,c=new Request(o,{method:s,headers:Object.fromEntries(Object.entries(i.headers).map(([e,t])=>[e,String(t)])),body:s===`POST`?JSON.stringify(i.body??{}):void 0}),l=await e(t,()=>n(i),r)(c);a.status(l.status),l.headers.forEach((e,t)=>a.setHeader(t,e));let u=await l.text();a.send(u)}}export{t as makeNextPagesHandler};
|
|
2
|
-
//# sourceMappingURL=rest-next-pages.js.map
|
|
1
|
+
import{createFetchHandler as e}from"./rest-generic.js";function t(t,n,r){return e(t,e=>{throw Error(`Use per-request wrapper`)},r),async function(i,a){let o=`${i.headers[`x-forwarded-proto`]??`http`}://${i.headers.host}${i.url}`,s=i.method?.toUpperCase()||`GET`,c=new Request(o,{method:s,headers:Object.fromEntries(Object.entries(i.headers).map(([e,t])=>[e,String(t)])),body:s===`POST`?JSON.stringify(i.body??{}):void 0}),l=await e(t,()=>n(i),r)(c);a.status(l.status),l.headers.forEach((e,t)=>a.setHeader(t,e));let u=await l.text();a.send(u)}}export{t as makeNextPagesHandler};
|
package/dist/spec.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
const e=e=>`ref`in e,t=e=>({...e,meta:{...e.meta,kind:`command`},policy:{...e.policy,idempotent:e.policy?.policy?.idempotent??!1}}),n=e=>({...e,meta:{...e.meta,kind:`query`},policy:{...e.policy,idempotent:!0}});export{t as defineCommand,n as defineQuery,e as isEmitDeclRef};
|
|
2
|
-
//# sourceMappingURL=spec.js.map
|
|
1
|
+
const e=e=>`ref`in e,t=e=>({...e,meta:{...e.meta,kind:`command`},policy:{...e.policy,idempotent:e.policy?.policy?.idempotent??!1}}),n=e=>({...e,meta:{...e.meta,kind:`query`},policy:{...e.policy,idempotent:!0}});export{t as defineCommand,n as defineQuery,e as isEmitDeclRef};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var e=class{onAnomaly;now;samples=new Map;constructor(e={}){this.onAnomaly=e.onAnomaly,this.now=e.now??(()=>new Date)}observe(e){let t=e.definition.anomalyDetection;if(!t?.enabled||!t.thresholds?.length)return;let n=`${e.name}.v${e.version}`,r=(this.samples.get(n)??0)+1;if(this.samples.set(n,r),!(typeof t.minimumSample==`number`&&r<t.minimumSample))for(let n of t.thresholds){let r=this.extractMetric(e,n.metric);typeof r==`number`&&(typeof n.min==`number`&&r<n.min&&this.emit(e,t,n.metric,r,`min`),typeof n.max==`number`&&r>n.max&&this.emit(e,t,n.metric,r,`max`))}}extractMetric(e,t){let n=e.properties[t];if(typeof n==`number`)return n;if(typeof n==`object`&&n&&`value`in n){let e=n.value;return typeof e==`number`?e:void 0}}emit(e,t,n,r,i){this.onAnomaly?.({dispatch:e,threshold:t,metric:n,value:r,type:i})}reset(){this.samples.clear()}};export{e as TelemetryAnomalyMonitor};
|
|
2
|
-
//# sourceMappingURL=anomaly.js.map
|
|
1
|
+
var e=class{onAnomaly;now;samples=new Map;constructor(e={}){this.onAnomaly=e.onAnomaly,this.now=e.now??(()=>new Date)}observe(e){let t=e.definition.anomalyDetection;if(!t?.enabled||!t.thresholds?.length)return;let n=`${e.name}.v${e.version}`,r=(this.samples.get(n)??0)+1;if(this.samples.set(n,r),!(typeof t.minimumSample==`number`&&r<t.minimumSample))for(let n of t.thresholds){let r=this.extractMetric(e,n.metric);typeof r==`number`&&(typeof n.min==`number`&&r<n.min&&this.emit(e,t,n.metric,r,`min`),typeof n.max==`number`&&r>n.max&&this.emit(e,t,n.metric,r,`max`))}}extractMetric(e,t){let n=e.properties[t];if(typeof n==`number`)return n;if(typeof n==`object`&&n&&`value`in n){let e=n.value;return typeof e==`number`?e:void 0}}emit(e,t,n,r,i){this.onAnomaly?.({dispatch:e,threshold:t,metric:n,value:r,type:i})}reset(){this.samples.clear()}};export{e as TelemetryAnomalyMonitor};
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import{registerDocBlocks as e}from"../../docs/registry.js";import"../../registry.js";const t=[{id:`docs.tech.contracts.telemetry`,title:`TelemetrySpec`,summary:"Telemetry specs describe product analytics in a durable, type-safe way. They reference existing `EventSpec`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.",kind:`reference`,visibility:`public`,route:`/docs/tech/contracts/telemetry`,tags:[`tech`,`contracts`,`telemetry`],body:`## TelemetrySpec
|
|
2
|
+
|
|
3
|
+
Telemetry specs describe product analytics in a durable, type-safe way. They reference existing \`EventSpec\`s (same name/version) but layer on privacy classification, retention, sampling, and anomaly detection so instrumentation stays compliant and observable.
|
|
4
|
+
|
|
5
|
+
- **File location**: \`packages/libs/contracts/src/telemetry/spec.ts\`
|
|
6
|
+
- **Runtime tracker**: \`packages/libs/contracts/src/telemetry/tracker.ts\`
|
|
7
|
+
- **Anomaly monitor**: \`packages/libs/contracts/src/telemetry/anomaly.ts\`
|
|
8
|
+
|
|
9
|
+
### Core concepts
|
|
10
|
+
|
|
11
|
+
\`\`\`ts
|
|
12
|
+
export interface TelemetrySpec {
|
|
13
|
+
meta: TelemetryMeta;
|
|
14
|
+
events: TelemetryEventDef[];
|
|
15
|
+
config?: TelemetryConfig;
|
|
16
|
+
}
|
|
17
|
+
\`\`\`
|
|
18
|
+
|
|
19
|
+
- \`meta\`: ownership + identifiers (\`name\`, \`version\`, \`domain\`)
|
|
20
|
+
- \`events\`: per-event semantics, property definitions, privacy level, retention, sampling, anomaly rules
|
|
21
|
+
- \`config\`: defaults and provider configuration
|
|
22
|
+
- \`TelemetryRegistry\`: registers specs, resolves latest version, finds event definitions by name/version
|
|
23
|
+
|
|
24
|
+
### An example
|
|
25
|
+
|
|
26
|
+
\`\`\`ts
|
|
27
|
+
export const SigilTelemetry: TelemetrySpec = {
|
|
28
|
+
meta: {
|
|
29
|
+
name: 'sigil.telemetry',
|
|
30
|
+
version: 1,
|
|
31
|
+
title: 'Sigil telemetry',
|
|
32
|
+
description: 'Core Sigil product telemetry',
|
|
33
|
+
domain: 'sigil',
|
|
34
|
+
owners: ['@team.analytics'],
|
|
35
|
+
tags: ['telemetry'],
|
|
36
|
+
stability: StabilityEnum.Experimental,
|
|
37
|
+
},
|
|
38
|
+
config: {
|
|
39
|
+
defaultRetentionDays: 30,
|
|
40
|
+
defaultSamplingRate: 1,
|
|
41
|
+
providers: [
|
|
42
|
+
{ type: 'posthog', config: { projectApiKey: process.env.POSTHOG_KEY } },
|
|
43
|
+
],
|
|
44
|
+
},
|
|
45
|
+
events: [
|
|
46
|
+
{
|
|
47
|
+
name: 'sigil.telemetry.workflow_step',
|
|
48
|
+
version: 1,
|
|
49
|
+
semantics: {
|
|
50
|
+
what: 'Workflow step executed',
|
|
51
|
+
who: 'Actor executing the workflow',
|
|
52
|
+
},
|
|
53
|
+
privacy: 'internal',
|
|
54
|
+
properties: {
|
|
55
|
+
workflow: { type: 'string', required: true },
|
|
56
|
+
step: { type: 'string', required: true },
|
|
57
|
+
durationMs: { type: 'number' },
|
|
58
|
+
userId: { type: 'string', pii: true, redact: true },
|
|
59
|
+
},
|
|
60
|
+
anomalyDetection: {
|
|
61
|
+
enabled: true,
|
|
62
|
+
minimumSample: 10,
|
|
63
|
+
thresholds: [
|
|
64
|
+
{ metric: 'durationMs', max: 1500 },
|
|
65
|
+
],
|
|
66
|
+
actions: ['alert', 'trigger_regen'],
|
|
67
|
+
},
|
|
68
|
+
},
|
|
69
|
+
],
|
|
70
|
+
};
|
|
71
|
+
\`\`\`
|
|
72
|
+
|
|
73
|
+
### Tracking events at runtime
|
|
74
|
+
|
|
75
|
+
\`TelemetryTracker\` performs sampling, PII redaction, provider dispatch, and anomaly detection.
|
|
76
|
+
|
|
77
|
+
\`\`\`ts
|
|
78
|
+
const tracker = new TelemetryTracker({
|
|
79
|
+
registry: telemetryRegistry,
|
|
80
|
+
providers: [
|
|
81
|
+
{
|
|
82
|
+
id: 'posthog',
|
|
83
|
+
async send(dispatch) {
|
|
84
|
+
posthog.capture({
|
|
85
|
+
event: dispatch.name,
|
|
86
|
+
properties: dispatch.properties,
|
|
87
|
+
distinctId: dispatch.context.userId ?? dispatch.context.sessionId,
|
|
88
|
+
});
|
|
89
|
+
},
|
|
90
|
+
},
|
|
91
|
+
],
|
|
92
|
+
anomalyMonitor: new TelemetryAnomalyMonitor({
|
|
93
|
+
onAnomaly(event) {
|
|
94
|
+
console.warn('Telemetry anomaly detected', event);
|
|
95
|
+
},
|
|
96
|
+
}),
|
|
97
|
+
});
|
|
98
|
+
|
|
99
|
+
await tracker.track('sigil.telemetry.workflow_step', 1, {
|
|
100
|
+
workflow: 'onboarding',
|
|
101
|
+
step: 'verify_email',
|
|
102
|
+
durationMs: 2100,
|
|
103
|
+
userId: 'user-123',
|
|
104
|
+
});
|
|
105
|
+
\`\`\`
|
|
106
|
+
|
|
107
|
+
- Sampling obeys the event-specific rate (fallback to spec defaults)
|
|
108
|
+
- Properties flagged with \`pii\` or \`redact\` are masked before dispatch
|
|
109
|
+
- Anomaly monitor evaluates thresholds and triggers actions (e.g., log, alert, regeneration)
|
|
110
|
+
|
|
111
|
+
### Spec integration
|
|
112
|
+
|
|
113
|
+
- \`ContractSpec.telemetry\` allows operations to emit success/failure events automatically
|
|
114
|
+
- \`SpecRegistry.execute()\` uses the tracker when \`ctx.telemetry\` is provided
|
|
115
|
+
- \`WorkflowRunner\` (Phase 4 follow-up) will emit telemetry during step transitions
|
|
116
|
+
- \`TelemetrySpec\` events should reuse \`EventSpec\` names/versions to keep analytics/contract parity
|
|
117
|
+
|
|
118
|
+
### CLI workflow
|
|
119
|
+
|
|
120
|
+
\`\`\`
|
|
121
|
+
contracts-cli create telemetry
|
|
122
|
+
\`\`\`
|
|
123
|
+
|
|
124
|
+
- Interactive wizard prompts for meta, providers, events, properties, retention, anomaly rules
|
|
125
|
+
- Output: \`*.telemetry.ts\` file using \`TelemetrySpec\`
|
|
126
|
+
|
|
127
|
+
### Best practices
|
|
128
|
+
|
|
129
|
+
- Prefer \`internal\` privacy for non-PII; mark PII properties explicitly with \`pii\` + \`redact\`
|
|
130
|
+
- Keep sampling ≥0.05 except for high-volume events
|
|
131
|
+
- Configure anomaly detection on key metrics (duration, error count, conversion)
|
|
132
|
+
- Check telemetry into source control alongside contracts; regenerate via CLI when specs change
|
|
133
|
+
|
|
134
|
+
### Next steps
|
|
135
|
+
|
|
136
|
+
- Phase 5: Regenerator monitors telemetry anomalies to propose spec improvements
|
|
137
|
+
- Phase 6: Studio surfaces telemetry controls per tenant via \`TenantAppConfig\`
|
|
138
|
+
|
|
139
|
+
`}];e(t);export{t as tech_contracts_telemetry_DocBlocks};
|
package/dist/telemetry/spec.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;eventsByKey=new Map;specByEventKey=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TelemetrySpec registration for ${n}`);this.items.set(n,t);for(let e of t.events)this.eventsByKey.set(`${e.name}.v${e.version}`,e),this.specByEventKey.set(`${e.name}.v${e.version}`,t);return this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}findEventDef(e,t){if(t!=null)return this.eventsByKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.eventsByKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}getSpecForEvent(e,t){if(t!=null)return this.specByEventKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.specByEventKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}};function n(t){return e(t)}export{t as TelemetryRegistry,n as makeTelemetryKey};
|
|
2
|
-
//# sourceMappingURL=spec.js.map
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;eventsByKey=new Map;specByEventKey=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TelemetrySpec registration for ${n}`);this.items.set(n,t);for(let e of t.events)this.eventsByKey.set(`${e.name}.v${e.version}`,e),this.specByEventKey.set(`${e.name}.v${e.version}`,t);return this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}findEventDef(e,t){if(t!=null)return this.eventsByKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.eventsByKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}getSpecForEvent(e,t){if(t!=null)return this.specByEventKey.get(`${e}.v${t}`);let n,r=-1/0;for(let[t,i]of this.specByEventKey.entries()){let[a,o]=t.split(`.v`);if(a!==e)continue;let s=Number(o);Number.isFinite(s)&&s>r&&(r=s,n=i)}return n}};function n(t){return e(t)}export{t as TelemetryRegistry,n as makeTelemetryKey};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{randomUUID as e}from"crypto";const t=e=>e==null?e:typeof e==`string`?`REDACTED`:typeof e==`number`?0:typeof e==`boolean`?!1:Array.isArray(e)?e.map(()=>`REDACTED`):typeof e==`object`?Object.fromEntries(Object.keys(e).map(e=>[e,`REDACTED`])):`REDACTED`;var n=class{providers=new Map;registry;anomalyMonitor;random;clock;constructor(e){this.registry=e.registry,this.anomalyMonitor=e.anomalyMonitor,this.random=e.random??Math.random,this.clock=e.clock??(()=>new Date);for(let t of e.providers??[])this.providers.set(t.id,t)}registerProvider(e){this.providers.set(e.id,e)}unregisterProvider(e){this.providers.delete(e)}async track(t,n,r,i={}){let a=this.registry.findEventDef(t,n);if(!a)return!1;let o=this.registry.getSpecForEvent(a.name,a.version);if(!o||!this.shouldSample(a.sampling??o.config?.defaultSamplingRate))return!1;let s=this.redactProperties(a,r),c={id:e(),name:a.name,version:a.version,occurredAt:this.clock().toISOString(),properties:s,privacy:a.privacy,context:i,tags:a.tags,spec:o,definition:a};return await Promise.all([...this.providers.values()].map(e=>e.send(c))),this.anomalyMonitor?.observe(c),!0}shouldSample(e){return typeof e==`number`?this.random()<e:e?this.random()<e.rate:!0}redactProperties(e,n){let r={};for(let[i,a]of Object.entries(n)){let n=e.properties[i];if(!n){r[i]=a;continue}n.redact||n.pii||e.privacy===`sensitive`?r[i]=t(a):r[i]=a}return r}};export{n as TelemetryTracker};
|
|
2
|
-
//# sourceMappingURL=tracker.js.map
|
|
1
|
+
import{randomUUID as e}from"crypto";const t=e=>e==null?e:typeof e==`string`?`REDACTED`:typeof e==`number`?0:typeof e==`boolean`?!1:Array.isArray(e)?e.map(()=>`REDACTED`):typeof e==`object`?Object.fromEntries(Object.keys(e).map(e=>[e,`REDACTED`])):`REDACTED`;var n=class{providers=new Map;registry;anomalyMonitor;random;clock;constructor(e){this.registry=e.registry,this.anomalyMonitor=e.anomalyMonitor,this.random=e.random??Math.random,this.clock=e.clock??(()=>new Date);for(let t of e.providers??[])this.providers.set(t.id,t)}registerProvider(e){this.providers.set(e.id,e)}unregisterProvider(e){this.providers.delete(e)}async track(t,n,r,i={}){let a=this.registry.findEventDef(t,n);if(!a)return!1;let o=this.registry.getSpecForEvent(a.name,a.version);if(!o||!this.shouldSample(a.sampling??o.config?.defaultSamplingRate))return!1;let s=this.redactProperties(a,r),c={id:e(),name:a.name,version:a.version,occurredAt:this.clock().toISOString(),properties:s,privacy:a.privacy,context:i,tags:a.tags,spec:o,definition:a};return await Promise.all([...this.providers.values()].map(e=>e.send(c))),this.anomalyMonitor?.observe(c),!0}shouldSample(e){return typeof e==`number`?this.random()<e:e?this.random()<e.rate:!0}redactProperties(e,n){let r={};for(let[i,a]of Object.entries(n)){let n=e.properties[i];if(!n){r[i]=a;continue}n.redact||n.pii||e.privacy===`sensitive`?r[i]=t(a):r[i]=a}return r}};export{n as TelemetryTracker};
|
package/dist/tests/runner.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import"../index.js";import{deepStrictEqual as e}from"node:assert";var t=class{constructor(e){this.config=e}async run(e){let t=[],n=0,r=0;for(let i of e.scenarios){await this.config.beforeEach?.(i);let a=await this.runScenario(e,i);t.push(a),a.status===`passed`?n+=1:r+=1,await this.config.afterEach?.(i,a)}return{spec:e,scenarios:t,passed:n,failed:r}}async runScenario(e,t){let n=[];try{let r=await this.createContext(),i=[...e.fixtures??[],...t.given??[]],a=[];for(let e of i)await this.executeOperation(e,r,a);let o=await this.executeOperation(t.when,r,a),s=t.then??[];for(let e of s){let t=this.evaluateAssertion(e,o,a);n.push(t)}return{scenario:t,status:n.some(e=>e.status===`failed`)?`failed`:`passed`,assertionResults:n}}catch(e){return{scenario:t,status:`failed`,error:e,assertionResults:n}}}async createContext(){return{...await this.config.createContext?.()??{}}}async executeOperation(e,t,n){let r={...t,eventPublisher:async e=>{n.push({name:e.name,version:e.version,payload:e.payload}),await t.eventPublisher?.(e)}};try{return{output:await this.config.registry.execute(e.operation.name,e.operation.version,e.input??null,r),events:n}}catch(e){return{error:e,events:n}}}evaluateAssertion(e,t,n){switch(e.type){case`expectOutput`:return this.evaluateOutputAssertion(e,t);case`expectError`:return this.evaluateErrorAssertion(e,t);case`expectEvents`:return this.evaluateEventsAssertion(e,n);default:return{assertion:e,status:`failed`,message:`Unknown assertion type ${e.type}`}}}evaluateOutputAssertion(t,n){if(n.error)return{assertion:t,status:`failed`,message:`Expected output but operation threw error: ${n.error.message}`};try{return e(n.output,t.match),{assertion:t,status:`passed`}}catch(e){return{assertion:t,status:`failed`,message:e instanceof Error?e.message:`Output assertion failed`}}}evaluateErrorAssertion(e,t){return t.error?e.messageIncludes&&!t.error.message.includes(e.messageIncludes)?{assertion:e,status:`failed`,message:`Error message "${t.error.message}" did not include expected substring "${e.messageIncludes}"`}:{assertion:e,status:`passed`}:{assertion:e,status:`failed`,message:`Expected an error but operation completed successfully`}}evaluateEventsAssertion(e,t){let n=[];for(let r of e.events){let e=t.filter(e=>e.name===r.name&&e.version===r.version).length;typeof r.min==`number`&&e<r.min||typeof r.max==`number`&&e>r.max?n.push(`Event ${r.name}.v${r.version} occurred ${e} times (expected ${r.min??0} - ${r.max??`∞`})`):r.min===void 0&&r.max===void 0&&e===0&&n.push(`Event ${r.name}.v${r.version} did not occur`)}return n.length>0?{assertion:e,status:`failed`,message:n.join(`; `)}:{assertion:e,status:`passed`}}};export{t as TestRunner};
|
|
2
|
-
//# sourceMappingURL=runner.js.map
|
|
1
|
+
import"../index.js";import{deepStrictEqual as e}from"node:assert";var t=class{constructor(e){this.config=e}async run(e){let t=[],n=0,r=0;for(let i of e.scenarios){await this.config.beforeEach?.(i);let a=await this.runScenario(e,i);t.push(a),a.status===`passed`?n+=1:r+=1,await this.config.afterEach?.(i,a)}return{spec:e,scenarios:t,passed:n,failed:r}}async runScenario(e,t){let n=[];try{let r=await this.createContext(),i=[...e.fixtures??[],...t.given??[]],a=[];for(let e of i)await this.executeOperation(e,r,a);let o=await this.executeOperation(t.when,r,a),s=t.then??[];for(let e of s){let t=this.evaluateAssertion(e,o,a);n.push(t)}return{scenario:t,status:n.some(e=>e.status===`failed`)?`failed`:`passed`,assertionResults:n}}catch(e){return{scenario:t,status:`failed`,error:e,assertionResults:n}}}async createContext(){return{...await this.config.createContext?.()??{}}}async executeOperation(e,t,n){let r={...t,eventPublisher:async e=>{n.push({name:e.name,version:e.version,payload:e.payload}),await t.eventPublisher?.(e)}};try{return{output:await this.config.registry.execute(e.operation.name,e.operation.version,e.input??null,r),events:n}}catch(e){return{error:e,events:n}}}evaluateAssertion(e,t,n){switch(e.type){case`expectOutput`:return this.evaluateOutputAssertion(e,t);case`expectError`:return this.evaluateErrorAssertion(e,t);case`expectEvents`:return this.evaluateEventsAssertion(e,n);default:return{assertion:e,status:`failed`,message:`Unknown assertion type ${e.type}`}}}evaluateOutputAssertion(t,n){if(n.error)return{assertion:t,status:`failed`,message:`Expected output but operation threw error: ${n.error.message}`};try{return e(n.output,t.match),{assertion:t,status:`passed`}}catch(e){return{assertion:t,status:`failed`,message:e instanceof Error?e.message:`Output assertion failed`}}}evaluateErrorAssertion(e,t){return t.error?e.messageIncludes&&!t.error.message.includes(e.messageIncludes)?{assertion:e,status:`failed`,message:`Error message "${t.error.message}" did not include expected substring "${e.messageIncludes}"`}:{assertion:e,status:`passed`}:{assertion:e,status:`failed`,message:`Expected an error but operation completed successfully`}}evaluateEventsAssertion(e,t){let n=[];for(let r of e.events){let e=t.filter(e=>e.name===r.name&&e.version===r.version).length;typeof r.min==`number`&&e<r.min||typeof r.max==`number`&&e>r.max?n.push(`Event ${r.name}.v${r.version} occurred ${e} times (expected ${r.min??0} - ${r.max??`∞`})`):r.min===void 0&&r.max===void 0&&e===0&&n.push(`Event ${r.name}.v${r.version} did not occur`)}return n.length>0?{assertion:e,status:`failed`,message:n.join(`; `)}:{assertion:e,status:`passed`}}};export{t as TestRunner};
|
package/dist/tests/spec.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TestSpec registration for ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};function n(t){return e(t)}export{t as TestRegistry,n as makeTestKey};
|
|
2
|
-
//# sourceMappingURL=spec.js.map
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate TestSpec registration for ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};function n(t){return e(t)}export{t as TestRegistry,n as makeTestKey};
|
package/dist/themes.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate theme ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({name:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.name===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}};function n(e){return{name:e.meta.name,version:e.meta.version}}export{t as ThemeRegistry,n as makeThemeRef};
|
|
2
|
-
//# sourceMappingURL=themes.js.map
|
|
1
|
+
const e=e=>`${e.name}.v${e.version}`;var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate theme ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(t,n){if(n!=null)return this.items.get(e({name:t,version:n}));let r,i=-1/0;for(let e of this.items.values())e.meta.name===t&&e.meta.version>i&&(i=e.meta.version,r=e);return r}};function n(e){return{name:e.meta.name,version:e.meta.version}}export{t as ThemeRegistry,n as makeThemeRef};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var e=class{constructor(e){this.prisma=e}async create(e){await this.prisma.workflowState.create({data:{id:e.workflowId,name:e.workflowName,version:e.workflowVersion,status:e.status,currentStep:e.currentStep,data:e.data,history:e.history,retryCounts:e.retryCounts??{},createdAt:e.createdAt,updatedAt:e.updatedAt}})}async get(e){let t=await this.prisma.workflowState.findUnique({where:{id:e}});if(t)return{workflowId:t.id,workflowName:t.name,workflowVersion:t.version,currentStep:t.currentStep,data:t.data,history:t.history,retryCounts:t.retryCounts,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}async update(e,t){let n=await this.get(e);if(!n)throw Error(`Workflow ${e} not found`);let r=t(n),i=await this.prisma.workflowState.update({where:{id:e},data:{status:r.status,currentStep:r.currentStep,data:r.data,history:r.history,retryCounts:r.retryCounts,updatedAt:r.updatedAt}});return{workflowId:i.id,workflowName:i.name,workflowVersion:i.version,currentStep:i.currentStep,data:i.data,history:i.history,retryCounts:i.retryCounts,status:i.status,createdAt:i.createdAt,updatedAt:i.updatedAt}}async list(e){let t={};return e?.status&&(t.status=e.status),(await this.prisma.workflowState.findMany({where:t})).map(e=>({workflowId:e.id,workflowName:e.name,workflowVersion:e.version,currentStep:e.currentStep,data:e.data,history:e.history,retryCounts:e.retryCounts,status:e.status,createdAt:e.createdAt,updatedAt:e.updatedAt}))}};export{e as PrismaStateStore};
|
|
2
|
-
//# sourceMappingURL=db-adapter.js.map
|
|
1
|
+
var e=class{constructor(e){this.prisma=e}async create(e){await this.prisma.workflowState.create({data:{id:e.workflowId,name:e.workflowName,version:e.workflowVersion,status:e.status,currentStep:e.currentStep,data:e.data,history:e.history,retryCounts:e.retryCounts??{},createdAt:e.createdAt,updatedAt:e.updatedAt}})}async get(e){let t=await this.prisma.workflowState.findUnique({where:{id:e}});if(t)return{workflowId:t.id,workflowName:t.name,workflowVersion:t.version,currentStep:t.currentStep,data:t.data,history:t.history,retryCounts:t.retryCounts,status:t.status,createdAt:t.createdAt,updatedAt:t.updatedAt}}async update(e,t){let n=await this.get(e);if(!n)throw Error(`Workflow ${e} not found`);let r=t(n),i=await this.prisma.workflowState.update({where:{id:e},data:{status:r.status,currentStep:r.currentStep,data:r.data,history:r.history,retryCounts:r.retryCounts,updatedAt:r.updatedAt}});return{workflowId:i.id,workflowName:i.name,workflowVersion:i.version,currentStep:i.currentStep,data:i.data,history:i.history,retryCounts:i.retryCounts,status:i.status,createdAt:i.createdAt,updatedAt:i.updatedAt}}async list(e){let t={};return e?.status&&(t.status=e.status),(await this.prisma.workflowState.findMany({where:t})).map(e=>({workflowId:e.id,workflowName:e.name,workflowVersion:e.version,currentStep:e.currentStep,data:e.data,history:e.history,retryCounts:e.retryCounts,status:e.status,createdAt:e.createdAt,updatedAt:e.updatedAt}))}};export{e as PrismaStateStore};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
function e(e){throw Error(`File-backed state store adapter not implemented. Provide a custom adapter that satisfies StateStore.`)}export{e as createFileStateStore};
|
|
2
|
-
//# sourceMappingURL=file-adapter.js.map
|
|
1
|
+
function e(e){throw Error(`File-backed state store adapter not implemented. Provide a custom adapter that satisfies StateStore.`)}export{e as createFileStateStore};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
function e(e){return{...e,data:n(e.data),history:e.history.map(e=>({...e,input:n(e.input),output:n(e.output),startedAt:new Date(e.startedAt),completedAt:e.completedAt?new Date(e.completedAt):void 0})),createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt)}}var t=class{items=new Map;async create(t){if(this.items.has(t.workflowId))throw Error(`Workflow state already exists: ${t.workflowId}`);this.items.set(t.workflowId,e(t))}async get(t){let n=this.items.get(t);return n?e(n):void 0}async update(t,n){let r=this.items.get(t);if(!r)throw Error(`Workflow state not found for ${t}`);let i=e(n(e(r)));return this.items.set(t,i),e(i)}async list(t){let n=[...this.items.values()];return(t?.status?n.filter(e=>e.status===t.status):n).map(e)}clear(){this.items.clear()}};function n(e){if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e))return e.map(e=>n(e));if(e&&typeof e==`object`){let t={};for(let[r,i]of Object.entries(e))t[r]=n(i);return t}return e}export{t as InMemoryStateStore};
|
|
2
|
-
//# sourceMappingURL=memory-store.js.map
|
|
1
|
+
function e(e){return{...e,data:n(e.data),history:e.history.map(e=>({...e,input:n(e.input),output:n(e.output),startedAt:new Date(e.startedAt),completedAt:e.completedAt?new Date(e.completedAt):void 0})),createdAt:new Date(e.createdAt),updatedAt:new Date(e.updatedAt)}}var t=class{items=new Map;async create(t){if(this.items.has(t.workflowId))throw Error(`Workflow state already exists: ${t.workflowId}`);this.items.set(t.workflowId,e(t))}async get(t){let n=this.items.get(t);return n?e(n):void 0}async update(t,n){let r=this.items.get(t);if(!r)throw Error(`Workflow state not found for ${t}`);let i=e(n(e(r)));return this.items.set(t,i),e(i)}async list(t){let n=[...this.items.values()];return(t?.status?n.filter(e=>e.status===t.status):n).map(e)}clear(){this.items.clear()}};function n(e){if(e instanceof Date)return new Date(e.getTime());if(Array.isArray(e))return e.map(e=>n(e));if(e&&typeof e==`object`){let t={};for(let[r,i]of Object.entries(e))t[r]=n(i);return t}return e}export{t as InMemoryStateStore};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
function e(n,r){if(!n)return!0;let i=n.trim();if(!i)return!0;let a=o(i,`||`);if(a.length>1)return a.some(t=>e(t,r));let s=o(i,`&&`);return s.length>1?s.every(t=>e(t,r)):t(i,r)}function t(e,a){let o=e.trim();if(!o)return!0;if(o.startsWith(`!`))return!t(o.slice(1),a);let s=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)\s*(===|==|!==|!=|>=|<=|>|<)\s*(.+)$/);if(s){let[,e,t,o,c]=s;return n(i(e,a,t),r(c),o)}let c=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)$/);if(c){let[,e,t]=c;return!!i(e,a,t)}return!!r(o)}function n(e,t,n){switch(n){case`===`:case`==`:return e===t;case`!==`:case`!=`:return e!==t;case`>`:return Number(e)>Number(t);case`>=`:return Number(e)>=Number(t);case`<`:return Number(e)<Number(t);case`<=`:return Number(e)<=Number(t);default:return!1}}function r(e){let t=(e??``).trim();if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(/^true$/i.test(t))return!0;if(/^false$/i.test(t))return!1;if(/^null$/i.test(t))return null;if(!/^undefined$/i.test(t))return t}function i(e,t,n){return a(e===`data`?t.data:e===`input`?t.input:t.output,n)}function a(e,t){if(e==null)return;if(!t)return e;let n=t.replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e of n){if(r==null)return;r=r[e]}return r}function o(e,t){let n=[],r=``,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o],c=e.slice(o,o+t.length);if(s===`'`&&!a){i=!i,r+=s;continue}if(s===`"`&&!i){a=!a,r+=s;continue}if(!i&&!a&&c===t){n.push(r.trim()),r=``,o+=t.length-1;continue}r+=s}return r.trim().length&&n.push(r.trim()),n}export{e as evaluateExpression};
|
|
2
|
-
//# sourceMappingURL=expression.js.map
|
|
1
|
+
function e(n,r){if(!n)return!0;let i=n.trim();if(!i)return!0;let a=o(i,`||`);if(a.length>1)return a.some(t=>e(t,r));let s=o(i,`&&`);return s.length>1?s.every(t=>e(t,r)):t(i,r)}function t(e,a){let o=e.trim();if(!o)return!0;if(o.startsWith(`!`))return!t(o.slice(1),a);let s=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)\s*(===|==|!==|!=|>=|<=|>|<)\s*(.+)$/);if(s){let[,e,t,o,c]=s;return n(i(e,a,t),r(c),o)}let c=o.match(/^(data|input|output)\.([A-Za-z0-9_.\[\]]+)$/);if(c){let[,e,t]=c;return!!i(e,a,t)}return!!r(o)}function n(e,t,n){switch(n){case`===`:case`==`:return e===t;case`!==`:case`!=`:return e!==t;case`>`:return Number(e)>Number(t);case`>=`:return Number(e)>=Number(t);case`<`:return Number(e)<Number(t);case`<=`:return Number(e)<=Number(t);default:return!1}}function r(e){let t=(e??``).trim();if(t.startsWith(`"`)&&t.endsWith(`"`)||t.startsWith(`'`)&&t.endsWith(`'`))return t.slice(1,-1);if(/^-?\d+(\.\d+)?$/.test(t))return Number(t);if(/^true$/i.test(t))return!0;if(/^false$/i.test(t))return!1;if(/^null$/i.test(t))return null;if(!/^undefined$/i.test(t))return t}function i(e,t,n){return a(e===`data`?t.data:e===`input`?t.input:t.output,n)}function a(e,t){if(e==null)return;if(!t)return e;let n=t.replace(/\[(\d+)\]/g,`.$1`).split(`.`).filter(Boolean),r=e;for(let e of n){if(r==null)return;r=r[e]}return r}function o(e,t){let n=[],r=``,i=!1,a=!1;for(let o=0;o<e.length;o++){let s=e[o],c=e.slice(o,o+t.length);if(s===`'`&&!a){i=!i,r+=s;continue}if(s===`"`&&!i){a=!a,r+=s;continue}if(!i&&!a&&c===t){n.push(r.trim()),r=``,o+=t.length-1;continue}r+=s}return r.trim().length&&n.push(r.trim()),n}export{e as evaluateExpression};
|
package/dist/workflow/runner.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{evaluateExpression as e}from"./expression.js";import{randomUUID as t}from"node:crypto";var n=class{constructor(e){this.config=e}async preFlightCheck(e,t,n){let r=this.getSpec(e,t);return this.performPreFlight(r,n)}async start(e,n,i){let a=this.getSpec(e,n),o=r(a),s=new Date,l=t(),u={workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o,data:{...i??{}},retryCounts:{},history:[],status:`running`,createdAt:s,updatedAt:s},d=this.config.appConfigProvider?await this.config.appConfigProvider(u):void 0,f=await this.performPreFlight(a,d);if(!f.canStart)throw new c(f.issues);return await this.config.stateStore.create(u),this.emit(`workflow.started`,{workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o}),l}async executeStep(e,t){let n=await this.getStateOrThrow(e);if(s(n.status))throw Error(`Workflow ${e} is in terminal status "${n.status}".`);let r=this.getSpec(n.workflowName,n.workflowVersion),c=i(r,n.currentStep);if(!await this.evaluateGuard(c,n,t))throw Error(`GuardRejected: ${n.workflowName} -> ${c.id}`);let l={stepId:c.id,startedAt:new Date,status:`running`,input:t},u={...n,data:{...n.data},history:[...n.history]};try{let i=await this.runStepAction(c,u,t);l.output=i,l.status=`completed`,l.completedAt=new Date,u.history.push(l),u.updatedAt=new Date,o(t)&&(u.data={...u.data,...t}),o(i)&&(u.data={...u.data,...i});let s=this.pickNextStepId(r,u,c,t,i);if(s)u.currentStep=s,u.status=`running`;else if(!a(r,c.id))u.status=`completed`;else throw Error(`No transition matched after executing step "${c.id}".`);await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_completed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,status:u.status})}catch(i){if(l.status=`failed`,l.completedAt=new Date,l.error=i instanceof Error?i.message:String(i),u.history.push(l),u.updatedAt=new Date,c.retry){let r=n.retryCounts?.[c.id]??0;if(r<c.retry.maxAttempts){let i=c.retry.backoff??`exponential`,a=c.retry.delayMs??1e3,o=i===`exponential`?a*2**r:a,s=Math.min(o,c.retry.maxDelayMs??1/0);return u.retryCounts={...n.retryCounts??{},[c.id]:r+1},u.status=`running`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_retrying`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,attempt:r+1,delay:s,error:l.error}),await new Promise(e=>setTimeout(e,s)),this.executeStep(e,t)}}throw u.status=`failed`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_failed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,error:l.error??`unknown`}),r.definition.compensation?.trigger===`on_failure`&&await this.rollback(e),i}}async rollback(e){let t=await this.getStateOrThrow(e),n=this.getSpec(t.workflowName,t.workflowVersion);if(!n.definition.compensation)return;this.emit(`workflow.rollback_started`,{workflowId:e});let r=t.history.filter(e=>e.status===`completed`).reverse();for(let a of r){let r=n.definition.compensation.steps.find(e=>e.stepId===a.stepId);if(r){let o={stepId:a.stepId,originalInput:a.input,originalOutput:a.output,workflowData:t.data};try{let s=i(n,a.stepId),c=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,l={workflow:t,step:s,resolvedAppConfig:c,integrations:c?.integrations??[],knowledge:c?.knowledge??[],branding:c?.branding,translation:c?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};await this.config.opExecutor(r.operation,o,l),this.emit(`workflow.compensation_step_completed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name})}catch(t){let n=t instanceof Error?t.message:String(t);this.emit(`workflow.compensation_step_failed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name,error:n})}}}this.emit(`workflow.rollback_completed`,{workflowId:e})}async getState(e){return this.getStateOrThrow(e)}async cancel(e){let t=await this.getStateOrThrow(e);if(t.status===`cancelled`)return;let n={...t,status:`cancelled`,updatedAt:new Date};await this.config.stateStore.update(e,()=>n),this.emit(`workflow.cancelled`,{workflowId:e,workflowName:t.workflowName})}async performPreFlight(e,t){if(!t)return{canStart:!0,issues:[]};let n=[],r=new Map;for(let e of t.integrations)r.set(e.slot.slotId,e);for(let t of e.definition.steps)for(let e of t.requiredIntegrations??[]){let i=r.get(e);if(!i){n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is not bound in the resolved app config.`});continue}let a=i.connection.status;a===`disconnected`||a===`error`?n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is in status "${a}".`}):a===`unknown`&&n.push({stepId:t.id,type:`integration`,identifier:e,severity:`warning`,reason:`Integration slot "${e}" reports unknown health status.`})}let i=new Set(t.capabilities.enabled.map(l));for(let t of e.definition.steps)for(let e of t.requiredCapabilities??[])i.has(l(e))||n.push({stepId:t.id,type:`capability`,identifier:l(e),severity:`error`,reason:`Capability "${e.key}@${e.version}" is not enabled.`});return{canStart:n.every(e=>e.severity!==`error`),issues:n}}async evaluateGuard(t,n,r){return t.guard?this.config.guardEvaluator?this.config.guardEvaluator(t.guard,{workflow:n,step:t,input:r}):t.guard.type===`expression`?e(t.guard.value,{data:n.data,input:r}):!0:!0}async runStepAction(e,t,n){if(e.type===`automation`){let r=e.action?.operation;if(!r)throw Error(`Automation step "${e.id}" requires an operation.`);let i=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,a={workflow:t,step:e,resolvedAppConfig:i,integrations:i?.integrations??[],knowledge:i?.knowledge??[],branding:i?.branding,translation:i?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};return this.config.enforceCapabilities&&await this.config.enforceCapabilities(r,a),this.config.opExecutor(r,n,a)}return e.type,n}pickNextStepId(t,n,r,i,a){let o=t.definition.transitions.filter(e=>e.from===r.id);for(let r of o)if(e(r.condition,{data:n.data,input:i,output:a})){let e=t.definition.steps.find(e=>e.id===r.to);if(!e)throw Error(`Transition ${r.from} -> ${r.to} points to missing step.`);return e.id}return null}getSpec(e,t){let n=this.config.registry.get(e,t);if(!n)throw Error(`Workflow spec not found for ${e}${t?`.v${t}`:``}`);return n}async getStateOrThrow(e){let t=await this.config.stateStore.get(e);if(!t)throw Error(`Workflow state not found for ${e}`);return t}emit(e,t){this.config.eventEmitter?.(e,t)}};function r(e){let t=e.definition.entryStepId??e.definition.steps[0]?.id??null;if(!t)throw Error(`Workflow ${e.meta.name}.v${e.meta.version} has no entry step.`);return t}function i(e,t){let n=e.definition.steps.find(e=>e.id===t);if(!n)throw Error(`Step "${t}" not found in workflow ${e.meta.name}.v${e.meta.version}.`);return n}function a(e,t){return e.definition.transitions.some(e=>e.from===t)}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){return e===`completed`||e===`failed`||e===`cancelled`}var c=class extends Error{constructor(e){super(`Workflow pre-flight failed: ${e.filter(e=>e.severity===`error`).map(e=>`${e.type}:${e.identifier}`).join(`, `)}`),this.issues=e,this.name=`WorkflowPreFlightError`}};function l(e){return`${e.key}@${e.version}`}export{c as WorkflowPreFlightError,n as WorkflowRunner};
|
|
2
|
-
//# sourceMappingURL=runner.js.map
|
|
1
|
+
import{evaluateExpression as e}from"./expression.js";import{randomUUID as t}from"node:crypto";var n=class{constructor(e){this.config=e}async preFlightCheck(e,t,n){let r=this.getSpec(e,t);return this.performPreFlight(r,n)}async start(e,n,i){let a=this.getSpec(e,n),o=r(a),s=new Date,l=t(),u={workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o,data:{...i??{}},retryCounts:{},history:[],status:`running`,createdAt:s,updatedAt:s},d=this.config.appConfigProvider?await this.config.appConfigProvider(u):void 0,f=await this.performPreFlight(a,d);if(!f.canStart)throw new c(f.issues);return await this.config.stateStore.create(u),this.emit(`workflow.started`,{workflowId:l,workflowName:a.meta.name,workflowVersion:a.meta.version,currentStep:o}),l}async executeStep(e,t){let n=await this.getStateOrThrow(e);if(s(n.status))throw Error(`Workflow ${e} is in terminal status "${n.status}".`);let r=this.getSpec(n.workflowName,n.workflowVersion),c=i(r,n.currentStep);if(!await this.evaluateGuard(c,n,t))throw Error(`GuardRejected: ${n.workflowName} -> ${c.id}`);let l={stepId:c.id,startedAt:new Date,status:`running`,input:t},u={...n,data:{...n.data},history:[...n.history]};try{let i=await this.runStepAction(c,u,t);l.output=i,l.status=`completed`,l.completedAt=new Date,u.history.push(l),u.updatedAt=new Date,o(t)&&(u.data={...u.data,...t}),o(i)&&(u.data={...u.data,...i});let s=this.pickNextStepId(r,u,c,t,i);if(s)u.currentStep=s,u.status=`running`;else if(!a(r,c.id))u.status=`completed`;else throw Error(`No transition matched after executing step "${c.id}".`);await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_completed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,status:u.status})}catch(i){if(l.status=`failed`,l.completedAt=new Date,l.error=i instanceof Error?i.message:String(i),u.history.push(l),u.updatedAt=new Date,c.retry){let r=n.retryCounts?.[c.id]??0;if(r<c.retry.maxAttempts){let i=c.retry.backoff??`exponential`,a=c.retry.delayMs??1e3,o=i===`exponential`?a*2**r:a,s=Math.min(o,c.retry.maxDelayMs??1/0);return u.retryCounts={...n.retryCounts??{},[c.id]:r+1},u.status=`running`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_retrying`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,attempt:r+1,delay:s,error:l.error}),await new Promise(e=>setTimeout(e,s)),this.executeStep(e,t)}}throw u.status=`failed`,await this.config.stateStore.update(e,()=>u),this.emit(`workflow.step_failed`,{workflowId:e,workflowName:n.workflowName,stepId:c.id,error:l.error??`unknown`}),r.definition.compensation?.trigger===`on_failure`&&await this.rollback(e),i}}async rollback(e){let t=await this.getStateOrThrow(e),n=this.getSpec(t.workflowName,t.workflowVersion);if(!n.definition.compensation)return;this.emit(`workflow.rollback_started`,{workflowId:e});let r=t.history.filter(e=>e.status===`completed`).reverse();for(let a of r){let r=n.definition.compensation.steps.find(e=>e.stepId===a.stepId);if(r){let o={stepId:a.stepId,originalInput:a.input,originalOutput:a.output,workflowData:t.data};try{let s=i(n,a.stepId),c=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,l={workflow:t,step:s,resolvedAppConfig:c,integrations:c?.integrations??[],knowledge:c?.knowledge??[],branding:c?.branding,translation:c?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};await this.config.opExecutor(r.operation,o,l),this.emit(`workflow.compensation_step_completed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name})}catch(t){let n=t instanceof Error?t.message:String(t);this.emit(`workflow.compensation_step_failed`,{workflowId:e,stepId:a.stepId,compensationOp:r.operation.name,error:n})}}}this.emit(`workflow.rollback_completed`,{workflowId:e})}async getState(e){return this.getStateOrThrow(e)}async cancel(e){let t=await this.getStateOrThrow(e);if(t.status===`cancelled`)return;let n={...t,status:`cancelled`,updatedAt:new Date};await this.config.stateStore.update(e,()=>n),this.emit(`workflow.cancelled`,{workflowId:e,workflowName:t.workflowName})}async performPreFlight(e,t){if(!t)return{canStart:!0,issues:[]};let n=[],r=new Map;for(let e of t.integrations)r.set(e.slot.slotId,e);for(let t of e.definition.steps)for(let e of t.requiredIntegrations??[]){let i=r.get(e);if(!i){n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is not bound in the resolved app config.`});continue}let a=i.connection.status;a===`disconnected`||a===`error`?n.push({stepId:t.id,type:`integration`,identifier:e,severity:`error`,reason:`Integration slot "${e}" is in status "${a}".`}):a===`unknown`&&n.push({stepId:t.id,type:`integration`,identifier:e,severity:`warning`,reason:`Integration slot "${e}" reports unknown health status.`})}let i=new Set(t.capabilities.enabled.map(l));for(let t of e.definition.steps)for(let e of t.requiredCapabilities??[])i.has(l(e))||n.push({stepId:t.id,type:`capability`,identifier:l(e),severity:`error`,reason:`Capability "${e.key}@${e.version}" is not enabled.`});return{canStart:n.every(e=>e.severity!==`error`),issues:n}}async evaluateGuard(t,n,r){return t.guard?this.config.guardEvaluator?this.config.guardEvaluator(t.guard,{workflow:n,step:t,input:r}):t.guard.type===`expression`?e(t.guard.value,{data:n.data,input:r}):!0:!0}async runStepAction(e,t,n){if(e.type===`automation`){let r=e.action?.operation;if(!r)throw Error(`Automation step "${e.id}" requires an operation.`);let i=this.config.appConfigProvider?await this.config.appConfigProvider(t):void 0,a={workflow:t,step:e,resolvedAppConfig:i,integrations:i?.integrations??[],knowledge:i?.knowledge??[],branding:i?.branding,translation:i?.translation,translationResolver:this.config.translationResolver,secretProvider:this.config.secretProvider};return this.config.enforceCapabilities&&await this.config.enforceCapabilities(r,a),this.config.opExecutor(r,n,a)}return e.type,n}pickNextStepId(t,n,r,i,a){let o=t.definition.transitions.filter(e=>e.from===r.id);for(let r of o)if(e(r.condition,{data:n.data,input:i,output:a})){let e=t.definition.steps.find(e=>e.id===r.to);if(!e)throw Error(`Transition ${r.from} -> ${r.to} points to missing step.`);return e.id}return null}getSpec(e,t){let n=this.config.registry.get(e,t);if(!n)throw Error(`Workflow spec not found for ${e}${t?`.v${t}`:``}`);return n}async getStateOrThrow(e){let t=await this.config.stateStore.get(e);if(!t)throw Error(`Workflow state not found for ${e}`);return t}emit(e,t){this.config.eventEmitter?.(e,t)}};function r(e){let t=e.definition.entryStepId??e.definition.steps[0]?.id??null;if(!t)throw Error(`Workflow ${e.meta.name}.v${e.meta.version} has no entry step.`);return t}function i(e,t){let n=e.definition.steps.find(e=>e.id===t);if(!n)throw Error(`Step "${t}" not found in workflow ${e.meta.name}.v${e.meta.version}.`);return n}function a(e,t){return e.definition.transitions.some(e=>e.from===t)}function o(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function s(e){return e===`completed`||e===`failed`||e===`cancelled`}var c=class extends Error{constructor(e){super(`Workflow pre-flight failed: ${e.filter(e=>e.severity===`error`).map(e=>`${e.type}:${e.identifier}`).join(`, `)}`),this.issues=e,this.name=`WorkflowPreFlightError`}};function l(e){return`${e.key}@${e.version}`}export{c as WorkflowPreFlightError,n as WorkflowRunner};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var e=class{constructor(e){this.eventEmitter=e}check(e,t){let n=t.definition.sla;if(!n)return;let r=new Date().getTime();if(n.totalDurationMs){let t=r-e.createdAt.getTime();t>n.totalDurationMs&&(e.status===`running`||e.status===`paused`)&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`workflow_duration`,expectedMs:n.totalDurationMs,actualMs:t,breachedAt:new Date})}if(n.stepDurationMs&&e.status===`running`&&e.currentStep){let t=e.history.find(t=>t.stepId===e.currentStep&&t.status===`running`);if(t){let i=n.stepDurationMs[e.currentStep];if(i){let n=r-t.startedAt.getTime();n>i&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`step_duration`,stepId:e.currentStep,expectedMs:i,actualMs:n,breachedAt:new Date})}}}}};export{e as SLAMonitor};
|
|
2
|
-
//# sourceMappingURL=sla-monitor.js.map
|
|
1
|
+
var e=class{constructor(e){this.eventEmitter=e}check(e,t){let n=t.definition.sla;if(!n)return;let r=new Date().getTime();if(n.totalDurationMs){let t=r-e.createdAt.getTime();t>n.totalDurationMs&&(e.status===`running`||e.status===`paused`)&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`workflow_duration`,expectedMs:n.totalDurationMs,actualMs:t,breachedAt:new Date})}if(n.stepDurationMs&&e.status===`running`&&e.currentStep){let t=e.history.find(t=>t.stepId===e.currentStep&&t.status===`running`);if(t){let i=n.stepDurationMs[e.currentStep];if(i){let n=r-t.startedAt.getTime();n>i&&this.eventEmitter(`workflow.sla_breach`,{workflowId:e.workflowId,workflowName:e.workflowName,type:`step_duration`,stepId:e.currentStep,expectedMs:i,actualMs:n,breachedAt:new Date})}}}}};export{e as SLAMonitor};
|
package/dist/workflow/spec.js
CHANGED
|
@@ -1,2 +1 @@
|
|
|
1
|
-
function e(e){return`${e.name}.v${e.version}`}var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate workflow ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};export{t as WorkflowRegistry};
|
|
2
|
-
//# sourceMappingURL=spec.js.map
|
|
1
|
+
function e(e){return`${e.name}.v${e.version}`}var t=class{items=new Map;register(t){let n=e(t.meta);if(this.items.has(n))throw Error(`Duplicate workflow ${n}`);return this.items.set(n,t),this}list(){return[...this.items.values()]}get(e,t){if(t!=null)return this.items.get(`${e}.v${t}`);let n,r=-1/0;for(let t of this.items.values())t.meta.name===e&&t.meta.version>r&&(r=t.meta.version,n=t);return n}};export{t as WorkflowRegistry};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
var e=class extends Error{constructor(e,t){super(e),this.issues=t,this.name=`WorkflowValidationError`}};function t(e,t={}){let n=[],{definition:a}=e;if(!a.steps.length)return n.push({level:`error`,message:`Workflow must declare at least one step.`}),n;let l=r(a,n),u=a.entryStepId??a.steps[0]?.id??null;u?l.has(u)||n.push({level:`error`,message:`Entry step "${u}" is not defined in steps.`}):n.push({level:`error`,message:`Workflow requires an entry step (definition.entryStepId).`});let d=i(a,l,n);return o(a.steps,t,n),s(u,l,d,n),c(d,n),n}function n(n,r={}){let i=t(n,r);if(i.filter(e=>e.level===`error`).length)throw new e(`Workflow ${n.meta.name}.v${n.meta.version} is invalid`,i)}function r(e,t){let n=new Map;for(let r of e.steps){if(n.has(r.id)){t.push({level:`error`,message:`Duplicate step id "${r.id}" detected.`});continue}n.set(r.id,r),r.type===`automation`&&!r.action?.operation&&t.push({level:`warning`,message:`Automation step "${r.id}" does not declare an operation.`}),r.type===`human`&&!r.action?.form&&t.push({level:`warning`,message:`Human step "${r.id}" does not declare a form.`}),r.guard&&!r.guard.value.trim()&&t.push({level:`error`,message:`Guard for step "${r.id}" must have a non-empty value.`})}return n}function i(e,t,n){let r=new Map,i=new Map;for(let e of t.keys())r.set(e,new Set),i.set(e,0);for(let o of e.transitions){let e=t.get(o.from),s=t.get(o.to);if(!e){n.push({level:`error`,message:`Transition refers to unknown "from" step "${o.from}".`});continue}if(!s){n.push({level:`error`,message:`Transition refers to unknown "to" step "${o.to}".`});continue}r.get(o.from)?.add(o.to),i.set(o.to,(i.get(o.to)??0)+1),a(o,n)}let o=[...i.entries()].filter(([,e])=>e===0).map(([e])=>e);return o.length>1&&n.push({level:`warning`,message:`Workflow has multiple potential entry steps: ${o.join(`, `)}`}),r}function a(e,t){e.condition&&!e.condition.trim()&&t.push({level:`error`,message:`Transition ${e.from} -> ${e.to} declares an empty condition.`})}function o(e,t,n){for(let r of e){let e=r.action;e&&(e.operation&&t.operations&&(t.operations.getSpec(e.operation.name,e.operation.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown operation ${e.operation.name}.v${e.operation.version}.`})),e.form&&t.forms&&(t.forms.get(e.form.key,e.form.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown form ${e.form.key}.v${e.form.version}.`})))}}function s(e,t,n,r){if(!e||!t.has(e))return;let i=new Set,a=[e];for(i.add(e);a.length;){let e=a.shift(),t=n.get(e);if(t)for(let e of t)i.has(e)||(i.add(e),a.push(e))}for(let n of t.keys())i.has(n)||r.push({level:`error`,message:`Step "${n}" is unreachable from entry step "${e}".`})}function c(e,t){let n=new Set,r=new Set,i=!1,a=o=>{if(r.has(o)){i||=(t.push({level:`error`,message:`Workflow contains a cycle involving step "${o}".`}),!0);return}if(n.has(o))return;r.add(o);let s=e.get(o);if(s)for(let e of s)a(e);r.delete(o),n.add(o)};for(let t of e.keys())a(t)}export{e as WorkflowValidationError,n as assertWorkflowSpecValid,t as validateWorkflowSpec};
|
|
2
|
-
//# sourceMappingURL=validation.js.map
|
|
1
|
+
var e=class extends Error{constructor(e,t){super(e),this.issues=t,this.name=`WorkflowValidationError`}};function t(e,t={}){let n=[],{definition:a}=e;if(!a.steps.length)return n.push({level:`error`,message:`Workflow must declare at least one step.`}),n;let l=r(a,n),u=a.entryStepId??a.steps[0]?.id??null;u?l.has(u)||n.push({level:`error`,message:`Entry step "${u}" is not defined in steps.`}):n.push({level:`error`,message:`Workflow requires an entry step (definition.entryStepId).`});let d=i(a,l,n);return o(a.steps,t,n),s(u,l,d,n),c(d,n),n}function n(n,r={}){let i=t(n,r);if(i.filter(e=>e.level===`error`).length)throw new e(`Workflow ${n.meta.name}.v${n.meta.version} is invalid`,i)}function r(e,t){let n=new Map;for(let r of e.steps){if(n.has(r.id)){t.push({level:`error`,message:`Duplicate step id "${r.id}" detected.`});continue}n.set(r.id,r),r.type===`automation`&&!r.action?.operation&&t.push({level:`warning`,message:`Automation step "${r.id}" does not declare an operation.`}),r.type===`human`&&!r.action?.form&&t.push({level:`warning`,message:`Human step "${r.id}" does not declare a form.`}),r.guard&&!r.guard.value.trim()&&t.push({level:`error`,message:`Guard for step "${r.id}" must have a non-empty value.`})}return n}function i(e,t,n){let r=new Map,i=new Map;for(let e of t.keys())r.set(e,new Set),i.set(e,0);for(let o of e.transitions){let e=t.get(o.from),s=t.get(o.to);if(!e){n.push({level:`error`,message:`Transition refers to unknown "from" step "${o.from}".`});continue}if(!s){n.push({level:`error`,message:`Transition refers to unknown "to" step "${o.to}".`});continue}r.get(o.from)?.add(o.to),i.set(o.to,(i.get(o.to)??0)+1),a(o,n)}let o=[...i.entries()].filter(([,e])=>e===0).map(([e])=>e);return o.length>1&&n.push({level:`warning`,message:`Workflow has multiple potential entry steps: ${o.join(`, `)}`}),r}function a(e,t){e.condition&&!e.condition.trim()&&t.push({level:`error`,message:`Transition ${e.from} -> ${e.to} declares an empty condition.`})}function o(e,t,n){for(let r of e){let e=r.action;e&&(e.operation&&t.operations&&(t.operations.getSpec(e.operation.name,e.operation.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown operation ${e.operation.name}.v${e.operation.version}.`})),e.form&&t.forms&&(t.forms.get(e.form.key,e.form.version)||n.push({level:`error`,message:`Step "${r.id}" references unknown form ${e.form.key}.v${e.form.version}.`})))}}function s(e,t,n,r){if(!e||!t.has(e))return;let i=new Set,a=[e];for(i.add(e);a.length;){let e=a.shift(),t=n.get(e);if(t)for(let e of t)i.has(e)||(i.add(e),a.push(e))}for(let n of t.keys())i.has(n)||r.push({level:`error`,message:`Step "${n}" is unreachable from entry step "${e}".`})}function c(e,t){let n=new Set,r=new Set,i=!1,a=o=>{if(r.has(o)){i||=(t.push({level:`error`,message:`Workflow contains a cycle involving step "${o}".`}),!0);return}if(n.has(o))return;r.add(o);let s=e.get(o);if(s)for(let e of s)a(e);r.delete(o),n.add(o)};for(let t of e.keys())a(t)}export{e as WorkflowValidationError,n as assertWorkflowSpecValid,t as validateWorkflowSpec};
|