@plumbus/core 0.1.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/bin/plumbus.js +11 -0
- package/dist/.tsbuildinfo +1 -0
- package/dist/ai/__tests__/ai-service.test.d.ts +2 -0
- package/dist/ai/__tests__/ai-service.test.d.ts.map +1 -0
- package/dist/ai/__tests__/ai-service.test.js +347 -0
- package/dist/ai/__tests__/ai-service.test.js.map +1 -0
- package/dist/ai/__tests__/chunking.test.d.ts +2 -0
- package/dist/ai/__tests__/chunking.test.d.ts.map +1 -0
- package/dist/ai/__tests__/chunking.test.js +44 -0
- package/dist/ai/__tests__/chunking.test.js.map +1 -0
- package/dist/ai/__tests__/cost-tracker.test.d.ts +2 -0
- package/dist/ai/__tests__/cost-tracker.test.d.ts.map +1 -0
- package/dist/ai/__tests__/cost-tracker.test.js +201 -0
- package/dist/ai/__tests__/cost-tracker.test.js.map +1 -0
- package/dist/ai/__tests__/explainability.test.d.ts +2 -0
- package/dist/ai/__tests__/explainability.test.d.ts.map +1 -0
- package/dist/ai/__tests__/explainability.test.js +100 -0
- package/dist/ai/__tests__/explainability.test.js.map +1 -0
- package/dist/ai/__tests__/prompt-registry.test.d.ts +2 -0
- package/dist/ai/__tests__/prompt-registry.test.d.ts.map +1 -0
- package/dist/ai/__tests__/prompt-registry.test.js +56 -0
- package/dist/ai/__tests__/prompt-registry.test.js.map +1 -0
- package/dist/ai/__tests__/provider.test.d.ts +3 -0
- package/dist/ai/__tests__/provider.test.d.ts.map +1 -0
- package/dist/ai/__tests__/provider.test.js +151 -0
- package/dist/ai/__tests__/provider.test.js.map +1 -0
- package/dist/ai/__tests__/rag-pipeline.test.d.ts +2 -0
- package/dist/ai/__tests__/rag-pipeline.test.d.ts.map +1 -0
- package/dist/ai/__tests__/rag-pipeline.test.js +128 -0
- package/dist/ai/__tests__/rag-pipeline.test.js.map +1 -0
- package/dist/ai/__tests__/security.test.d.ts +2 -0
- package/dist/ai/__tests__/security.test.d.ts.map +1 -0
- package/dist/ai/__tests__/security.test.js +89 -0
- package/dist/ai/__tests__/security.test.js.map +1 -0
- package/dist/ai/__tests__/usage-client.test.d.ts +2 -0
- package/dist/ai/__tests__/usage-client.test.d.ts.map +1 -0
- package/dist/ai/__tests__/usage-client.test.js +120 -0
- package/dist/ai/__tests__/usage-client.test.js.map +1 -0
- package/dist/ai/__tests__/validation.test.d.ts +2 -0
- package/dist/ai/__tests__/validation.test.d.ts.map +1 -0
- package/dist/ai/__tests__/validation.test.js +114 -0
- package/dist/ai/__tests__/validation.test.js.map +1 -0
- package/dist/ai/ai-service.d.ts +36 -0
- package/dist/ai/ai-service.d.ts.map +1 -0
- package/dist/ai/ai-service.js +258 -0
- package/dist/ai/ai-service.js.map +1 -0
- package/dist/ai/cost-tracker.d.ts +53 -0
- package/dist/ai/cost-tracker.d.ts.map +1 -0
- package/dist/ai/cost-tracker.js +114 -0
- package/dist/ai/cost-tracker.js.map +1 -0
- package/dist/ai/explainability.d.ts +41 -0
- package/dist/ai/explainability.d.ts.map +1 -0
- package/dist/ai/explainability.js +38 -0
- package/dist/ai/explainability.js.map +1 -0
- package/dist/ai/index.d.ts +10 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +25 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/ai/prompt-registry.d.ts +16 -0
- package/dist/ai/prompt-registry.d.ts.map +1 -0
- package/dist/ai/prompt-registry.js +69 -0
- package/dist/ai/prompt-registry.js.map +1 -0
- package/dist/ai/provider.d.ts +73 -0
- package/dist/ai/provider.d.ts.map +1 -0
- package/dist/ai/provider.js +322 -0
- package/dist/ai/provider.js.map +1 -0
- package/dist/ai/rag/chunking.d.ts +18 -0
- package/dist/ai/rag/chunking.d.ts.map +1 -0
- package/dist/ai/rag/chunking.js +58 -0
- package/dist/ai/rag/chunking.js.map +1 -0
- package/dist/ai/rag/index.d.ts +4 -0
- package/dist/ai/rag/index.d.ts.map +1 -0
- package/dist/ai/rag/index.js +5 -0
- package/dist/ai/rag/index.js.map +1 -0
- package/dist/ai/rag/pipeline.d.ts +69 -0
- package/dist/ai/rag/pipeline.d.ts.map +1 -0
- package/dist/ai/rag/pipeline.js +135 -0
- package/dist/ai/rag/pipeline.js.map +1 -0
- package/dist/ai/rag/schema.d.ts +320 -0
- package/dist/ai/rag/schema.d.ts.map +1 -0
- package/dist/ai/rag/schema.js +31 -0
- package/dist/ai/rag/schema.js.map +1 -0
- package/dist/ai/security.d.ts +28 -0
- package/dist/ai/security.d.ts.map +1 -0
- package/dist/ai/security.js +78 -0
- package/dist/ai/security.js.map +1 -0
- package/dist/ai/usage-client.d.ts +31 -0
- package/dist/ai/usage-client.d.ts.map +1 -0
- package/dist/ai/usage-client.js +106 -0
- package/dist/ai/usage-client.js.map +1 -0
- package/dist/ai/validation.d.ts +20 -0
- package/dist/ai/validation.d.ts.map +1 -0
- package/dist/ai/validation.js +39 -0
- package/dist/ai/validation.js.map +1 -0
- package/dist/api/__tests__/route-generator.test.d.ts +2 -0
- package/dist/api/__tests__/route-generator.test.d.ts.map +1 -0
- package/dist/api/__tests__/route-generator.test.js +101 -0
- package/dist/api/__tests__/route-generator.test.js.map +1 -0
- package/dist/api/index.d.ts +3 -0
- package/dist/api/index.d.ts.map +1 -0
- package/dist/api/index.js +7 -0
- package/dist/api/index.js.map +1 -0
- package/dist/api/route-generator.d.ts +24 -0
- package/dist/api/route-generator.d.ts.map +1 -0
- package/dist/api/route-generator.js +77 -0
- package/dist/api/route-generator.js.map +1 -0
- package/dist/audit/__tests__/service.test.d.ts +2 -0
- package/dist/audit/__tests__/service.test.d.ts.map +1 -0
- package/dist/audit/__tests__/service.test.js +97 -0
- package/dist/audit/__tests__/service.test.js.map +1 -0
- package/dist/audit/index.d.ts +4 -0
- package/dist/audit/index.d.ts.map +1 -0
- package/dist/audit/index.js +8 -0
- package/dist/audit/index.js.map +1 -0
- package/dist/audit/schema.d.ts +164 -0
- package/dist/audit/schema.d.ts.map +1 -0
- package/dist/audit/schema.js +16 -0
- package/dist/audit/schema.js.map +1 -0
- package/dist/audit/service.d.ts +14 -0
- package/dist/audit/service.d.ts.map +1 -0
- package/dist/audit/service.js +28 -0
- package/dist/audit/service.js.map +1 -0
- package/dist/auth/__tests__/adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/adapter.test.js +218 -0
- package/dist/auth/__tests__/adapter.test.js.map +1 -0
- package/dist/auth/__tests__/oidc-adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/oidc-adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/oidc-adapter.test.js +232 -0
- package/dist/auth/__tests__/oidc-adapter.test.js.map +1 -0
- package/dist/auth/__tests__/password.test.d.ts +2 -0
- package/dist/auth/__tests__/password.test.d.ts.map +1 -0
- package/dist/auth/__tests__/password.test.js +30 -0
- package/dist/auth/__tests__/password.test.js.map +1 -0
- package/dist/auth/__tests__/saml-adapter.test.d.ts +2 -0
- package/dist/auth/__tests__/saml-adapter.test.d.ts.map +1 -0
- package/dist/auth/__tests__/saml-adapter.test.js +188 -0
- package/dist/auth/__tests__/saml-adapter.test.js.map +1 -0
- package/dist/auth/__tests__/scim.test.d.ts +2 -0
- package/dist/auth/__tests__/scim.test.d.ts.map +1 -0
- package/dist/auth/__tests__/scim.test.js +306 -0
- package/dist/auth/__tests__/scim.test.js.map +1 -0
- package/dist/auth/adapter.d.ts +60 -0
- package/dist/auth/adapter.d.ts.map +1 -0
- package/dist/auth/adapter.js +144 -0
- package/dist/auth/adapter.js.map +1 -0
- package/dist/auth/index.d.ts +11 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +9 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oidc-adapter.d.ts +32 -0
- package/dist/auth/oidc-adapter.d.ts.map +1 -0
- package/dist/auth/oidc-adapter.js +169 -0
- package/dist/auth/oidc-adapter.js.map +1 -0
- package/dist/auth/password.d.ts +13 -0
- package/dist/auth/password.d.ts.map +1 -0
- package/dist/auth/password.js +33 -0
- package/dist/auth/password.js.map +1 -0
- package/dist/auth/saml-adapter.d.ts +38 -0
- package/dist/auth/saml-adapter.d.ts.map +1 -0
- package/dist/auth/saml-adapter.js +209 -0
- package/dist/auth/saml-adapter.js.map +1 -0
- package/dist/auth/scim.d.ts +134 -0
- package/dist/auth/scim.d.ts.map +1 -0
- package/dist/auth/scim.js +207 -0
- package/dist/auth/scim.js.map +1 -0
- package/dist/cli/__tests__/agent.test.d.ts +2 -0
- package/dist/cli/__tests__/agent.test.d.ts.map +1 -0
- package/dist/cli/__tests__/agent.test.js +63 -0
- package/dist/cli/__tests__/agent.test.js.map +1 -0
- package/dist/cli/__tests__/certify.test.d.ts +2 -0
- package/dist/cli/__tests__/certify.test.d.ts.map +1 -0
- package/dist/cli/__tests__/certify.test.js +97 -0
- package/dist/cli/__tests__/certify.test.js.map +1 -0
- package/dist/cli/__tests__/cli.test.d.ts +2 -0
- package/dist/cli/__tests__/cli.test.d.ts.map +1 -0
- package/dist/cli/__tests__/cli.test.js +30 -0
- package/dist/cli/__tests__/cli.test.js.map +1 -0
- package/dist/cli/__tests__/create.test.d.ts +2 -0
- package/dist/cli/__tests__/create.test.d.ts.map +1 -0
- package/dist/cli/__tests__/create.test.js +46 -0
- package/dist/cli/__tests__/create.test.js.map +1 -0
- package/dist/cli/__tests__/dev.test.d.ts +2 -0
- package/dist/cli/__tests__/dev.test.d.ts.map +1 -0
- package/dist/cli/__tests__/dev.test.js +132 -0
- package/dist/cli/__tests__/dev.test.js.map +1 -0
- package/dist/cli/__tests__/discover.test.d.ts +2 -0
- package/dist/cli/__tests__/discover.test.d.ts.map +1 -0
- package/dist/cli/__tests__/discover.test.js +48 -0
- package/dist/cli/__tests__/discover.test.js.map +1 -0
- package/dist/cli/__tests__/doctor.test.d.ts +2 -0
- package/dist/cli/__tests__/doctor.test.d.ts.map +1 -0
- package/dist/cli/__tests__/doctor.test.js +56 -0
- package/dist/cli/__tests__/doctor.test.js.map +1 -0
- package/dist/cli/__tests__/generate.test.d.ts +2 -0
- package/dist/cli/__tests__/generate.test.d.ts.map +1 -0
- package/dist/cli/__tests__/generate.test.js +68 -0
- package/dist/cli/__tests__/generate.test.js.map +1 -0
- package/dist/cli/__tests__/init.test.d.ts +2 -0
- package/dist/cli/__tests__/init.test.d.ts.map +1 -0
- package/dist/cli/__tests__/init.test.js +75 -0
- package/dist/cli/__tests__/init.test.js.map +1 -0
- package/dist/cli/__tests__/migrate.test.d.ts +2 -0
- package/dist/cli/__tests__/migrate.test.d.ts.map +1 -0
- package/dist/cli/__tests__/migrate.test.js +285 -0
- package/dist/cli/__tests__/migrate.test.js.map +1 -0
- package/dist/cli/__tests__/templates.test.d.ts +2 -0
- package/dist/cli/__tests__/templates.test.d.ts.map +1 -0
- package/dist/cli/__tests__/templates.test.js +49 -0
- package/dist/cli/__tests__/templates.test.js.map +1 -0
- package/dist/cli/__tests__/test.test.d.ts +2 -0
- package/dist/cli/__tests__/test.test.d.ts.map +1 -0
- package/dist/cli/__tests__/test.test.js +40 -0
- package/dist/cli/__tests__/test.test.js.map +1 -0
- package/dist/cli/__tests__/ui.test.d.ts +2 -0
- package/dist/cli/__tests__/ui.test.d.ts.map +1 -0
- package/dist/cli/__tests__/ui.test.js +62 -0
- package/dist/cli/__tests__/ui.test.js.map +1 -0
- package/dist/cli/__tests__/utils.test.d.ts +2 -0
- package/dist/cli/__tests__/utils.test.d.ts.map +1 -0
- package/dist/cli/__tests__/utils.test.js +30 -0
- package/dist/cli/__tests__/utils.test.js.map +1 -0
- package/dist/cli/__tests__/verify.test.d.ts +2 -0
- package/dist/cli/__tests__/verify.test.d.ts.map +1 -0
- package/dist/cli/__tests__/verify.test.js +138 -0
- package/dist/cli/__tests__/verify.test.js.map +1 -0
- package/dist/cli/cli.d.ts +3 -0
- package/dist/cli/cli.d.ts.map +1 -0
- package/dist/cli/cli.js +33 -0
- package/dist/cli/cli.js.map +1 -0
- package/dist/cli/commands/__tests__/commands.test.d.ts +2 -0
- package/dist/cli/commands/__tests__/commands.test.d.ts.map +1 -0
- package/dist/cli/commands/__tests__/commands.test.js +180 -0
- package/dist/cli/commands/__tests__/commands.test.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +17 -0
- package/dist/cli/commands/agent.d.ts.map +1 -0
- package/dist/cli/commands/agent.js +154 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/capability.d.ts +7 -0
- package/dist/cli/commands/capability.d.ts.map +1 -0
- package/dist/cli/commands/capability.js +27 -0
- package/dist/cli/commands/capability.js.map +1 -0
- package/dist/cli/commands/certify.d.ts +24 -0
- package/dist/cli/commands/certify.d.ts.map +1 -0
- package/dist/cli/commands/certify.js +228 -0
- package/dist/cli/commands/certify.js.map +1 -0
- package/dist/cli/commands/create.d.ts +13 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +190 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/dev.d.ts +36 -0
- package/dist/cli/commands/dev.d.ts.map +1 -0
- package/dist/cli/commands/dev.js +178 -0
- package/dist/cli/commands/dev.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +31 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +233 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/e2e.d.ts +3 -0
- package/dist/cli/commands/e2e.d.ts.map +1 -0
- package/dist/cli/commands/e2e.js +165 -0
- package/dist/cli/commands/e2e.js.map +1 -0
- package/dist/cli/commands/entity.d.ts +3 -0
- package/dist/cli/commands/entity.d.ts.map +1 -0
- package/dist/cli/commands/entity.js +21 -0
- package/dist/cli/commands/entity.js.map +1 -0
- package/dist/cli/commands/event.d.ts +3 -0
- package/dist/cli/commands/event.d.ts.map +1 -0
- package/dist/cli/commands/event.js +21 -0
- package/dist/cli/commands/event.js.map +1 -0
- package/dist/cli/commands/flow.d.ts +3 -0
- package/dist/cli/commands/flow.d.ts.map +1 -0
- package/dist/cli/commands/flow.js +25 -0
- package/dist/cli/commands/flow.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +17 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +175 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/index.d.ts +20 -0
- package/dist/cli/commands/index.d.ts.map +1 -0
- package/dist/cli/commands/index.js +45 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/init.d.ts +20 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +261 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +7 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +523 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/commands/prompt.d.ts +3 -0
- package/dist/cli/commands/prompt.d.ts.map +1 -0
- package/dist/cli/commands/prompt.js +21 -0
- package/dist/cli/commands/prompt.js.map +1 -0
- package/dist/cli/commands/rag.d.ts +13 -0
- package/dist/cli/commands/rag.d.ts.map +1 -0
- package/dist/cli/commands/rag.js +100 -0
- package/dist/cli/commands/rag.js.map +1 -0
- package/dist/cli/commands/seed.d.ts +19 -0
- package/dist/cli/commands/seed.d.ts.map +1 -0
- package/dist/cli/commands/seed.js +183 -0
- package/dist/cli/commands/seed.js.map +1 -0
- package/dist/cli/commands/test.d.ts +17 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +128 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/ui.d.ts +53 -0
- package/dist/cli/commands/ui.d.ts.map +1 -0
- package/dist/cli/commands/ui.js +291 -0
- package/dist/cli/commands/ui.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +21 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +153 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/discover.d.ts +26 -0
- package/dist/cli/discover.d.ts.map +1 -0
- package/dist/cli/discover.js +127 -0
- package/dist/cli/discover.js.map +1 -0
- package/dist/cli/index.d.ts +12 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +21 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/templates/resources.d.ts +8 -0
- package/dist/cli/templates/resources.d.ts.map +1 -0
- package/dist/cli/templates/resources.js +157 -0
- package/dist/cli/templates/resources.js.map +1 -0
- package/dist/cli/utils.d.ts +27 -0
- package/dist/cli/utils.d.ts.map +1 -0
- package/dist/cli/utils.js +69 -0
- package/dist/cli/utils.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +2 -0
- package/dist/config/__tests__/loader.test.d.ts.map +1 -0
- package/dist/config/__tests__/loader.test.js +462 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/index.d.ts +3 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +21 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +190 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/data/__tests__/registry.test.d.ts +2 -0
- package/dist/data/__tests__/registry.test.d.ts.map +1 -0
- package/dist/data/__tests__/registry.test.js +55 -0
- package/dist/data/__tests__/registry.test.js.map +1 -0
- package/dist/data/__tests__/repository.test.d.ts +2 -0
- package/dist/data/__tests__/repository.test.d.ts.map +1 -0
- package/dist/data/__tests__/repository.test.js +197 -0
- package/dist/data/__tests__/repository.test.js.map +1 -0
- package/dist/data/__tests__/schema-generator.test.d.ts +2 -0
- package/dist/data/__tests__/schema-generator.test.d.ts.map +1 -0
- package/dist/data/__tests__/schema-generator.test.js +112 -0
- package/dist/data/__tests__/schema-generator.test.js.map +1 -0
- package/dist/data/index.d.ts +5 -0
- package/dist/data/index.d.ts.map +1 -0
- package/dist/data/index.js +10 -0
- package/dist/data/index.js.map +1 -0
- package/dist/data/migration.d.ts +35 -0
- package/dist/data/migration.d.ts.map +1 -0
- package/dist/data/migration.js +55 -0
- package/dist/data/migration.js.map +1 -0
- package/dist/data/registry.d.ts +49 -0
- package/dist/data/registry.d.ts.map +1 -0
- package/dist/data/registry.js +74 -0
- package/dist/data/registry.js.map +1 -0
- package/dist/data/repository.d.ts +22 -0
- package/dist/data/repository.d.ts.map +1 -0
- package/dist/data/repository.js +170 -0
- package/dist/data/repository.js.map +1 -0
- package/dist/data/schema-generator.d.ts +12 -0
- package/dist/data/schema-generator.d.ts.map +1 -0
- package/dist/data/schema-generator.js +123 -0
- package/dist/data/schema-generator.js.map +1 -0
- package/dist/define/__tests__/defineCapability.test.d.ts +2 -0
- package/dist/define/__tests__/defineCapability.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineCapability.test.js +66 -0
- package/dist/define/__tests__/defineCapability.test.js.map +1 -0
- package/dist/define/__tests__/defineEntity.test.d.ts +2 -0
- package/dist/define/__tests__/defineEntity.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineEntity.test.js +50 -0
- package/dist/define/__tests__/defineEntity.test.js.map +1 -0
- package/dist/define/__tests__/defineEvent.test.d.ts +2 -0
- package/dist/define/__tests__/defineEvent.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineEvent.test.js +35 -0
- package/dist/define/__tests__/defineEvent.test.js.map +1 -0
- package/dist/define/__tests__/defineFlow.test.d.ts +2 -0
- package/dist/define/__tests__/defineFlow.test.d.ts.map +1 -0
- package/dist/define/__tests__/defineFlow.test.js +49 -0
- package/dist/define/__tests__/defineFlow.test.js.map +1 -0
- package/dist/define/__tests__/definePrompt.test.d.ts +2 -0
- package/dist/define/__tests__/definePrompt.test.d.ts.map +1 -0
- package/dist/define/__tests__/definePrompt.test.js +40 -0
- package/dist/define/__tests__/definePrompt.test.js.map +1 -0
- package/dist/define/defineCapability.d.ts +38 -0
- package/dist/define/defineCapability.d.ts.map +1 -0
- package/dist/define/defineCapability.js +33 -0
- package/dist/define/defineCapability.js.map +1 -0
- package/dist/define/defineEntity.d.ts +16 -0
- package/dist/define/defineEntity.d.ts.map +1 -0
- package/dist/define/defineEntity.js +21 -0
- package/dist/define/defineEntity.js.map +1 -0
- package/dist/define/defineEvent.d.ts +13 -0
- package/dist/define/defineEvent.d.ts.map +1 -0
- package/dist/define/defineEvent.js +17 -0
- package/dist/define/defineEvent.js.map +1 -0
- package/dist/define/defineFlow.d.ts +17 -0
- package/dist/define/defineFlow.d.ts.map +1 -0
- package/dist/define/defineFlow.js +23 -0
- package/dist/define/defineFlow.js.map +1 -0
- package/dist/define/definePrompt.d.ts +15 -0
- package/dist/define/definePrompt.d.ts.map +1 -0
- package/dist/define/definePrompt.js +20 -0
- package/dist/define/definePrompt.js.map +1 -0
- package/dist/define/index.d.ts +6 -0
- package/dist/define/index.d.ts.map +1 -0
- package/dist/define/index.js +10 -0
- package/dist/define/index.js.map +1 -0
- package/dist/errors/__tests__/errors.test.d.ts +2 -0
- package/dist/errors/__tests__/errors.test.d.ts.map +1 -0
- package/dist/errors/__tests__/errors.test.js +42 -0
- package/dist/errors/__tests__/errors.test.js.map +1 -0
- package/dist/errors/__tests__/http.test.d.ts +2 -0
- package/dist/errors/__tests__/http.test.d.ts.map +1 -0
- package/dist/errors/__tests__/http.test.js +32 -0
- package/dist/errors/__tests__/http.test.js.map +1 -0
- package/dist/errors/http.d.ts +13 -0
- package/dist/errors/http.d.ts.map +1 -0
- package/dist/errors/http.js +26 -0
- package/dist/errors/http.js.map +1 -0
- package/dist/errors/index.d.ts +4 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +22 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/events/__tests__/consumer-registry.test.d.ts +2 -0
- package/dist/events/__tests__/consumer-registry.test.d.ts.map +1 -0
- package/dist/events/__tests__/consumer-registry.test.js +68 -0
- package/dist/events/__tests__/consumer-registry.test.js.map +1 -0
- package/dist/events/__tests__/dispatcher.test.d.ts +2 -0
- package/dist/events/__tests__/dispatcher.test.d.ts.map +1 -0
- package/dist/events/__tests__/dispatcher.test.js +168 -0
- package/dist/events/__tests__/dispatcher.test.js.map +1 -0
- package/dist/events/__tests__/event-emitter.test.d.ts +2 -0
- package/dist/events/__tests__/event-emitter.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-emitter.test.js +100 -0
- package/dist/events/__tests__/event-emitter.test.js.map +1 -0
- package/dist/events/__tests__/event-registry.test.d.ts +2 -0
- package/dist/events/__tests__/event-registry.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-registry.test.js +55 -0
- package/dist/events/__tests__/event-registry.test.js.map +1 -0
- package/dist/events/__tests__/event-worker.test.d.ts +2 -0
- package/dist/events/__tests__/event-worker.test.d.ts.map +1 -0
- package/dist/events/__tests__/event-worker.test.js +174 -0
- package/dist/events/__tests__/event-worker.test.js.map +1 -0
- package/dist/events/__tests__/queue.test.d.ts +2 -0
- package/dist/events/__tests__/queue.test.d.ts.map +1 -0
- package/dist/events/__tests__/queue.test.js +73 -0
- package/dist/events/__tests__/queue.test.js.map +1 -0
- package/dist/events/consumer-registry.d.ts +47 -0
- package/dist/events/consumer-registry.d.ts.map +1 -0
- package/dist/events/consumer-registry.js +79 -0
- package/dist/events/consumer-registry.js.map +1 -0
- package/dist/events/dispatcher.d.ts +31 -0
- package/dist/events/dispatcher.d.ts.map +1 -0
- package/dist/events/dispatcher.js +149 -0
- package/dist/events/dispatcher.js.map +1 -0
- package/dist/events/emitter.d.ts +22 -0
- package/dist/events/emitter.d.ts.map +1 -0
- package/dist/events/emitter.js +58 -0
- package/dist/events/emitter.js.map +1 -0
- package/dist/events/idempotency.d.ts +13 -0
- package/dist/events/idempotency.d.ts.map +1 -0
- package/dist/events/idempotency.js +25 -0
- package/dist/events/idempotency.js.map +1 -0
- package/dist/events/index.d.ts +15 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/index.js +23 -0
- package/dist/events/index.js.map +1 -0
- package/dist/events/outbox.d.ts +475 -0
- package/dist/events/outbox.d.ts.map +1 -0
- package/dist/events/outbox.js +48 -0
- package/dist/events/outbox.js.map +1 -0
- package/dist/events/queue.d.ts +58 -0
- package/dist/events/queue.d.ts.map +1 -0
- package/dist/events/queue.js +135 -0
- package/dist/events/queue.js.map +1 -0
- package/dist/events/registry.d.ts +36 -0
- package/dist/events/registry.d.ts.map +1 -0
- package/dist/events/registry.js +59 -0
- package/dist/events/registry.js.map +1 -0
- package/dist/events/worker.d.ts +34 -0
- package/dist/events/worker.d.ts.map +1 -0
- package/dist/events/worker.js +88 -0
- package/dist/events/worker.js.map +1 -0
- package/dist/execution/__tests__/authorization.test.d.ts +2 -0
- package/dist/execution/__tests__/authorization.test.d.ts.map +1 -0
- package/dist/execution/__tests__/authorization.test.js +88 -0
- package/dist/execution/__tests__/authorization.test.js.map +1 -0
- package/dist/execution/__tests__/capability-executor.test.d.ts +2 -0
- package/dist/execution/__tests__/capability-executor.test.d.ts.map +1 -0
- package/dist/execution/__tests__/capability-executor.test.js +184 -0
- package/dist/execution/__tests__/capability-executor.test.js.map +1 -0
- package/dist/execution/__tests__/capability-registry.test.d.ts +2 -0
- package/dist/execution/__tests__/capability-registry.test.d.ts.map +1 -0
- package/dist/execution/__tests__/capability-registry.test.js +50 -0
- package/dist/execution/__tests__/capability-registry.test.js.map +1 -0
- package/dist/execution/__tests__/context-factory.test.d.ts +2 -0
- package/dist/execution/__tests__/context-factory.test.d.ts.map +1 -0
- package/dist/execution/__tests__/context-factory.test.js +116 -0
- package/dist/execution/__tests__/context-factory.test.js.map +1 -0
- package/dist/execution/authorization.d.ts +11 -0
- package/dist/execution/authorization.d.ts.map +1 -0
- package/dist/execution/authorization.js +50 -0
- package/dist/execution/authorization.js.map +1 -0
- package/dist/execution/capability-executor.d.ts +23 -0
- package/dist/execution/capability-executor.d.ts.map +1 -0
- package/dist/execution/capability-executor.js +91 -0
- package/dist/execution/capability-executor.js.map +1 -0
- package/dist/execution/capability-registry.d.ts +33 -0
- package/dist/execution/capability-registry.d.ts.map +1 -0
- package/dist/execution/capability-registry.js +49 -0
- package/dist/execution/capability-registry.js.map +1 -0
- package/dist/execution/context-factory.d.ts +20 -0
- package/dist/execution/context-factory.d.ts.map +1 -0
- package/dist/execution/context-factory.js +98 -0
- package/dist/execution/context-factory.js.map +1 -0
- package/dist/execution/index.d.ts +8 -0
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +10 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/explanation/__tests__/tracker.test.d.ts +2 -0
- package/dist/explanation/__tests__/tracker.test.d.ts.map +1 -0
- package/dist/explanation/__tests__/tracker.test.js +169 -0
- package/dist/explanation/__tests__/tracker.test.js.map +1 -0
- package/dist/explanation/index.d.ts +3 -0
- package/dist/explanation/index.d.ts.map +1 -0
- package/dist/explanation/index.js +7 -0
- package/dist/explanation/index.js.map +1 -0
- package/dist/explanation/tracker.d.ts +81 -0
- package/dist/explanation/tracker.d.ts.map +1 -0
- package/dist/explanation/tracker.js +100 -0
- package/dist/explanation/tracker.js.map +1 -0
- package/dist/fields/__tests__/fields.test.d.ts +2 -0
- package/dist/fields/__tests__/fields.test.d.ts.map +1 -0
- package/dist/fields/__tests__/fields.test.js +60 -0
- package/dist/fields/__tests__/fields.test.js.map +1 -0
- package/dist/fields/index.d.ts +18 -0
- package/dist/fields/index.d.ts.map +1 -0
- package/dist/fields/index.js +51 -0
- package/dist/fields/index.js.map +1 -0
- package/dist/flows/__tests__/flow-engine.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-engine.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-engine.test.js +189 -0
- package/dist/flows/__tests__/flow-engine.test.js.map +1 -0
- package/dist/flows/__tests__/flow-registry.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-registry.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-registry.test.js +69 -0
- package/dist/flows/__tests__/flow-registry.test.js.map +1 -0
- package/dist/flows/__tests__/flow-service.test.d.ts +2 -0
- package/dist/flows/__tests__/flow-service.test.d.ts.map +1 -0
- package/dist/flows/__tests__/flow-service.test.js +47 -0
- package/dist/flows/__tests__/flow-service.test.js.map +1 -0
- package/dist/flows/__tests__/scheduler.test.d.ts +2 -0
- package/dist/flows/__tests__/scheduler.test.d.ts.map +1 -0
- package/dist/flows/__tests__/scheduler.test.js +120 -0
- package/dist/flows/__tests__/scheduler.test.js.map +1 -0
- package/dist/flows/__tests__/state-machine.test.d.ts +2 -0
- package/dist/flows/__tests__/state-machine.test.d.ts.map +1 -0
- package/dist/flows/__tests__/state-machine.test.js +62 -0
- package/dist/flows/__tests__/state-machine.test.js.map +1 -0
- package/dist/flows/__tests__/step-executor.test.d.ts +2 -0
- package/dist/flows/__tests__/step-executor.test.d.ts.map +1 -0
- package/dist/flows/__tests__/step-executor.test.js +139 -0
- package/dist/flows/__tests__/step-executor.test.js.map +1 -0
- package/dist/flows/__tests__/triggers.test.d.ts +2 -0
- package/dist/flows/__tests__/triggers.test.d.ts.map +1 -0
- package/dist/flows/__tests__/triggers.test.js +98 -0
- package/dist/flows/__tests__/triggers.test.js.map +1 -0
- package/dist/flows/dead-letter.d.ts +12 -0
- package/dist/flows/dead-letter.d.ts.map +1 -0
- package/dist/flows/dead-letter.js +63 -0
- package/dist/flows/dead-letter.js.map +1 -0
- package/dist/flows/engine.d.ts +35 -0
- package/dist/flows/engine.d.ts.map +1 -0
- package/dist/flows/engine.js +402 -0
- package/dist/flows/engine.js.map +1 -0
- package/dist/flows/flow-service.d.ts +10 -0
- package/dist/flows/flow-service.d.ts.map +1 -0
- package/dist/flows/flow-service.js +22 -0
- package/dist/flows/flow-service.js.map +1 -0
- package/dist/flows/index.d.ts +14 -0
- package/dist/flows/index.d.ts.map +1 -0
- package/dist/flows/index.js +25 -0
- package/dist/flows/index.js.map +1 -0
- package/dist/flows/registry.d.ts +47 -0
- package/dist/flows/registry.d.ts.map +1 -0
- package/dist/flows/registry.js +108 -0
- package/dist/flows/registry.js.map +1 -0
- package/dist/flows/scheduler.d.ts +41 -0
- package/dist/flows/scheduler.d.ts.map +1 -0
- package/dist/flows/scheduler.js +242 -0
- package/dist/flows/scheduler.js.map +1 -0
- package/dist/flows/schema.d.ts +627 -0
- package/dist/flows/schema.d.ts.map +1 -0
- package/dist/flows/schema.js +60 -0
- package/dist/flows/schema.js.map +1 -0
- package/dist/flows/state-machine.d.ts +41 -0
- package/dist/flows/state-machine.d.ts.map +1 -0
- package/dist/flows/state-machine.js +56 -0
- package/dist/flows/state-machine.js.map +1 -0
- package/dist/flows/step-executor.d.ts +36 -0
- package/dist/flows/step-executor.d.ts.map +1 -0
- package/dist/flows/step-executor.js +109 -0
- package/dist/flows/step-executor.js.map +1 -0
- package/dist/flows/triggers.d.ts +15 -0
- package/dist/flows/triggers.d.ts.map +1 -0
- package/dist/flows/triggers.js +36 -0
- package/dist/flows/triggers.js.map +1 -0
- package/dist/governance/__tests__/overrides.test.d.ts +2 -0
- package/dist/governance/__tests__/overrides.test.d.ts.map +1 -0
- package/dist/governance/__tests__/overrides.test.js +123 -0
- package/dist/governance/__tests__/overrides.test.js.map +1 -0
- package/dist/governance/__tests__/policies.test.d.ts +2 -0
- package/dist/governance/__tests__/policies.test.d.ts.map +1 -0
- package/dist/governance/__tests__/policies.test.js +203 -0
- package/dist/governance/__tests__/policies.test.js.map +1 -0
- package/dist/governance/__tests__/rules.test.d.ts +2 -0
- package/dist/governance/__tests__/rules.test.d.ts.map +1 -0
- package/dist/governance/__tests__/rules.test.js +342 -0
- package/dist/governance/__tests__/rules.test.js.map +1 -0
- package/dist/governance/index.d.ts +10 -0
- package/dist/governance/index.d.ts.map +1 -0
- package/dist/governance/index.js +12 -0
- package/dist/governance/index.js.map +1 -0
- package/dist/governance/overrides.d.ts +24 -0
- package/dist/governance/overrides.d.ts.map +1 -0
- package/dist/governance/overrides.js +74 -0
- package/dist/governance/overrides.js.map +1 -0
- package/dist/governance/policies.d.ts +22 -0
- package/dist/governance/policies.d.ts.map +1 -0
- package/dist/governance/policies.js +279 -0
- package/dist/governance/policies.js.map +1 -0
- package/dist/governance/reports.d.ts +15 -0
- package/dist/governance/reports.d.ts.map +1 -0
- package/dist/governance/reports.js +79 -0
- package/dist/governance/reports.js.map +1 -0
- package/dist/governance/rule-engine.d.ts +45 -0
- package/dist/governance/rule-engine.d.ts.map +1 -0
- package/dist/governance/rule-engine.js +60 -0
- package/dist/governance/rule-engine.js.map +1 -0
- package/dist/governance/rules/ai.d.ts +11 -0
- package/dist/governance/rules/ai.d.ts.map +1 -0
- package/dist/governance/rules/ai.js +88 -0
- package/dist/governance/rules/ai.js.map +1 -0
- package/dist/governance/rules/architecture.d.ts +13 -0
- package/dist/governance/rules/architecture.d.ts.map +1 -0
- package/dist/governance/rules/architecture.js +114 -0
- package/dist/governance/rules/architecture.js.map +1 -0
- package/dist/governance/rules/index.d.ts +5 -0
- package/dist/governance/rules/index.d.ts.map +1 -0
- package/dist/governance/rules/index.js +6 -0
- package/dist/governance/rules/index.js.map +1 -0
- package/dist/governance/rules/privacy.d.ts +11 -0
- package/dist/governance/rules/privacy.d.ts.map +1 -0
- package/dist/governance/rules/privacy.js +97 -0
- package/dist/governance/rules/privacy.js.map +1 -0
- package/dist/governance/rules/security.d.ts +11 -0
- package/dist/governance/rules/security.d.ts.map +1 -0
- package/dist/governance/rules/security.js +83 -0
- package/dist/governance/rules/security.js.map +1 -0
- package/dist/index.d.ts +40 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +79 -0
- package/dist/index.js.map +1 -0
- package/dist/observability/__tests__/metrics.test.d.ts +2 -0
- package/dist/observability/__tests__/metrics.test.d.ts.map +1 -0
- package/dist/observability/__tests__/metrics.test.js +301 -0
- package/dist/observability/__tests__/metrics.test.js.map +1 -0
- package/dist/observability/index.d.ts +3 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +7 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/metrics.d.ts +130 -0
- package/dist/observability/metrics.d.ts.map +1 -0
- package/dist/observability/metrics.js +255 -0
- package/dist/observability/metrics.js.map +1 -0
- package/dist/server/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/server/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/server/__tests__/bootstrap.test.js +223 -0
- package/dist/server/__tests__/bootstrap.test.js.map +1 -0
- package/dist/server/bootstrap.d.ts +44 -0
- package/dist/server/bootstrap.d.ts.map +1 -0
- package/dist/server/bootstrap.js +153 -0
- package/dist/server/bootstrap.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -0
- package/dist/testing/__tests__/context.test.d.ts +2 -0
- package/dist/testing/__tests__/context.test.d.ts.map +1 -0
- package/dist/testing/__tests__/context.test.js +341 -0
- package/dist/testing/__tests__/context.test.js.map +1 -0
- package/dist/testing/__tests__/e2e.test.d.ts +2 -0
- package/dist/testing/__tests__/e2e.test.d.ts.map +1 -0
- package/dist/testing/__tests__/e2e.test.js +119 -0
- package/dist/testing/__tests__/e2e.test.js.map +1 -0
- package/dist/testing/__tests__/field-validation.test.d.ts +2 -0
- package/dist/testing/__tests__/field-validation.test.d.ts.map +1 -0
- package/dist/testing/__tests__/field-validation.test.js +178 -0
- package/dist/testing/__tests__/field-validation.test.js.map +1 -0
- package/dist/testing/__tests__/governance.test.d.ts +2 -0
- package/dist/testing/__tests__/governance.test.d.ts.map +1 -0
- package/dist/testing/__tests__/governance.test.js +222 -0
- package/dist/testing/__tests__/governance.test.js.map +1 -0
- package/dist/testing/__tests__/run-capability.test.d.ts +2 -0
- package/dist/testing/__tests__/run-capability.test.d.ts.map +1 -0
- package/dist/testing/__tests__/run-capability.test.js +114 -0
- package/dist/testing/__tests__/run-capability.test.js.map +1 -0
- package/dist/testing/__tests__/scaffolding.test.d.ts +2 -0
- package/dist/testing/__tests__/scaffolding.test.d.ts.map +1 -0
- package/dist/testing/__tests__/scaffolding.test.js +70 -0
- package/dist/testing/__tests__/scaffolding.test.js.map +1 -0
- package/dist/testing/__tests__/security.test.d.ts +2 -0
- package/dist/testing/__tests__/security.test.d.ts.map +1 -0
- package/dist/testing/__tests__/security.test.js +186 -0
- package/dist/testing/__tests__/security.test.js.map +1 -0
- package/dist/testing/__tests__/simulate-flow.test.d.ts +2 -0
- package/dist/testing/__tests__/simulate-flow.test.d.ts.map +1 -0
- package/dist/testing/__tests__/simulate-flow.test.js +198 -0
- package/dist/testing/__tests__/simulate-flow.test.js.map +1 -0
- package/dist/testing/context.d.ts +90 -0
- package/dist/testing/context.d.ts.map +1 -0
- package/dist/testing/context.js +230 -0
- package/dist/testing/context.js.map +1 -0
- package/dist/testing/e2e.d.ts +58 -0
- package/dist/testing/e2e.d.ts.map +1 -0
- package/dist/testing/e2e.js +118 -0
- package/dist/testing/e2e.js.map +1 -0
- package/dist/testing/field-validation.d.ts +18 -0
- package/dist/testing/field-validation.d.ts.map +1 -0
- package/dist/testing/field-validation.js +99 -0
- package/dist/testing/field-validation.js.map +1 -0
- package/dist/testing/governance.d.ts +38 -0
- package/dist/testing/governance.d.ts.map +1 -0
- package/dist/testing/governance.js +104 -0
- package/dist/testing/governance.js.map +1 -0
- package/dist/testing/index.d.ts +18 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +29 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/run-capability.d.ts +20 -0
- package/dist/testing/run-capability.d.ts.map +1 -0
- package/dist/testing/run-capability.js +19 -0
- package/dist/testing/run-capability.js.map +1 -0
- package/dist/testing/scaffolding.d.ts +46 -0
- package/dist/testing/scaffolding.d.ts.map +1 -0
- package/dist/testing/scaffolding.js +266 -0
- package/dist/testing/scaffolding.js.map +1 -0
- package/dist/testing/security.d.ts +42 -0
- package/dist/testing/security.d.ts.map +1 -0
- package/dist/testing/security.js +102 -0
- package/dist/testing/security.js.map +1 -0
- package/dist/testing/simulate-flow.d.ts +45 -0
- package/dist/testing/simulate-flow.d.ts.map +1 -0
- package/dist/testing/simulate-flow.js +136 -0
- package/dist/testing/simulate-flow.js.map +1 -0
- package/dist/types/audit.d.ts +15 -0
- package/dist/types/audit.d.ts.map +1 -0
- package/dist/types/audit.js +2 -0
- package/dist/types/audit.js.map +1 -0
- package/dist/types/capability.d.ts +38 -0
- package/dist/types/capability.d.ts.map +1 -0
- package/dist/types/capability.js +2 -0
- package/dist/types/capability.js.map +1 -0
- package/dist/types/config.d.ts +60 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/context.d.ts +90 -0
- package/dist/types/context.d.ts.map +1 -0
- package/dist/types/context.js +2 -0
- package/dist/types/context.js.map +1 -0
- package/dist/types/entity.d.ts +16 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entity.js +2 -0
- package/dist/types/entity.js.map +1 -0
- package/dist/types/enums.d.ts +66 -0
- package/dist/types/enums.d.ts.map +1 -0
- package/dist/types/enums.js +66 -0
- package/dist/types/enums.js.map +1 -0
- package/dist/types/errors.d.ts +14 -0
- package/dist/types/errors.d.ts.map +1 -0
- package/dist/types/errors.js +2 -0
- package/dist/types/errors.js.map +1 -0
- package/dist/types/event.d.ts +21 -0
- package/dist/types/event.d.ts.map +1 -0
- package/dist/types/event.js +2 -0
- package/dist/types/event.js.map +1 -0
- package/dist/types/fields.d.ts +51 -0
- package/dist/types/fields.d.ts.map +1 -0
- package/dist/types/fields.js +2 -0
- package/dist/types/fields.js.map +1 -0
- package/dist/types/flow.d.ts +54 -0
- package/dist/types/flow.d.ts.map +1 -0
- package/dist/types/flow.js +2 -0
- package/dist/types/flow.js.map +1 -0
- package/dist/types/governance.d.ts +30 -0
- package/dist/types/governance.d.ts.map +1 -0
- package/dist/types/governance.js +2 -0
- package/dist/types/governance.js.map +1 -0
- package/dist/types/index.d.ts +14 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +7 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/prompt.d.ts +18 -0
- package/dist/types/prompt.d.ts.map +1 -0
- package/dist/types/prompt.js +2 -0
- package/dist/types/prompt.js.map +1 -0
- package/dist/types/security.d.ts +17 -0
- package/dist/types/security.d.ts.map +1 -0
- package/dist/types/security.js +2 -0
- package/dist/types/security.js.map +1 -0
- package/dist/vitest/index.d.ts +2 -0
- package/dist/vitest/index.d.ts.map +1 -0
- package/dist/vitest/index.js +5 -0
- package/dist/vitest/index.js.map +1 -0
- package/dist/worker/__tests__/bootstrap.test.d.ts +2 -0
- package/dist/worker/__tests__/bootstrap.test.d.ts.map +1 -0
- package/dist/worker/__tests__/bootstrap.test.js +211 -0
- package/dist/worker/__tests__/bootstrap.test.js.map +1 -0
- package/dist/worker/bootstrap.d.ts +51 -0
- package/dist/worker/bootstrap.d.ts.map +1 -0
- package/dist/worker/bootstrap.js +166 -0
- package/dist/worker/bootstrap.js.map +1 -0
- package/dist/worker/index.d.ts +3 -0
- package/dist/worker/index.d.ts.map +1 -0
- package/dist/worker/index.js +6 -0
- package/dist/worker/index.js.map +1 -0
- package/dist/zod/index.d.ts +2 -0
- package/dist/zod/index.d.ts.map +1 -0
- package/dist/zod/index.js +5 -0
- package/dist/zod/index.js.map +1 -0
- package/instructions/ai.md +183 -0
- package/instructions/capabilities.md +171 -0
- package/instructions/cli.md +113 -0
- package/instructions/entities.md +94 -0
- package/instructions/events.md +93 -0
- package/instructions/flows.md +114 -0
- package/instructions/framework.md +86 -0
- package/instructions/governance.md +78 -0
- package/instructions/patterns.md +107 -0
- package/instructions/security.md +79 -0
- package/instructions/testing.md +244 -0
- package/package.json +76 -0
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
# Flows
|
|
2
|
+
|
|
3
|
+
A flow is a multi-step workflow that orchestrates capabilities in sequence, with support for branching, parallel execution, waits, and delays.
|
|
4
|
+
|
|
5
|
+
## Defining a Flow
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { defineFlow } from "@plumbus/core";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
export const refundApproval = defineFlow({
|
|
12
|
+
name: "refundApproval",
|
|
13
|
+
domain: "billing",
|
|
14
|
+
|
|
15
|
+
input: z.object({ refundId: z.string(), amount: z.number() }),
|
|
16
|
+
state: z.object({ approved: z.boolean().default(false) }),
|
|
17
|
+
|
|
18
|
+
steps: [
|
|
19
|
+
{ type: "capability", name: "validateRefund" },
|
|
20
|
+
{ type: "conditional", name: "checkAmount", if: "amount > 100", then: "managerApproval", else: "autoApprove" },
|
|
21
|
+
{ type: "wait", name: "managerApproval", event: "refund.approved" },
|
|
22
|
+
{ type: "capability", name: "autoApprove" },
|
|
23
|
+
{ type: "capability", name: "processRefund" },
|
|
24
|
+
{ type: "eventEmit", name: "notifyCustomer", event: "refund.completed" },
|
|
25
|
+
],
|
|
26
|
+
|
|
27
|
+
trigger: { event: "refund.requested" },
|
|
28
|
+
retry: { attempts: 3, backoff: "exponential" },
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Step Types
|
|
33
|
+
|
|
34
|
+
| Type | Purpose | Key Fields |
|
|
35
|
+
|------|---------|-----------|
|
|
36
|
+
| `capability` | Execute a named capability | `name` (capability name) |
|
|
37
|
+
| `conditional` | Branch based on condition | `if`, `then`, `else` |
|
|
38
|
+
| `wait` | Pause until event or timeout | `event` |
|
|
39
|
+
| `delay` | Pause for a fixed duration | `duration` (e.g., `"24h"`, `"5m"`) |
|
|
40
|
+
| `parallel` | Run multiple steps concurrently | `branches` (step names) |
|
|
41
|
+
| `eventEmit` | Emit a framework event | `event` (event type) |
|
|
42
|
+
### Conditional Syntax
|
|
43
|
+
|
|
44
|
+
The `if` field accepts a JavaScript-like expression string. You can reference the flow `input` and `state` directly:
|
|
45
|
+
|
|
46
|
+
```ts
|
|
47
|
+
// Simple comparison against input
|
|
48
|
+
{ type: "conditional", name: "checkAmount", if: "input.amount > 100", then: "managerApproval", else: "autoApprove" }
|
|
49
|
+
|
|
50
|
+
// Reference flow state
|
|
51
|
+
{ type: "conditional", name: "checkApproval", if: "state.approved", then: "processRefund", else: "escalate" }
|
|
52
|
+
|
|
53
|
+
// Logical operators
|
|
54
|
+
{ type: "conditional", name: "checkBoth", if: "input.amount > 100 && state.retryCount < 3", then: "retry", else: "fail" }
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
The `then` and `else` values reference step **names** within the same flow. Execution jumps to the named step.
|
|
58
|
+
|
|
59
|
+
### Parallel Branches
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
{ type: "parallel", name: "notifyAll", branches: ["sendEmail", "sendSms", "logAudit"] }
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
All branches execute concurrently. The flow waits for **all** branches to complete before advancing. If any branch fails, the entire parallel step fails.
|
|
66
|
+
## State Management
|
|
67
|
+
|
|
68
|
+
Flows maintain a `state` object persisted across steps. Each step can read and modify state through the flow execution context.
|
|
69
|
+
|
|
70
|
+
```ts
|
|
71
|
+
state: z.object({
|
|
72
|
+
approved: z.boolean().default(false),
|
|
73
|
+
reviewerId: z.string().optional(),
|
|
74
|
+
retryCount: z.number().default(0),
|
|
75
|
+
})
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
## Triggers
|
|
79
|
+
|
|
80
|
+
### Event-triggered
|
|
81
|
+
```ts
|
|
82
|
+
trigger: { event: "order.placed" }
|
|
83
|
+
```
|
|
84
|
+
When the named event fires, a new flow execution starts with the event payload mapped to the flow input.
|
|
85
|
+
|
|
86
|
+
### Scheduled
|
|
87
|
+
```ts
|
|
88
|
+
schedule: { cron: "0 9 * * MON" } // Every Monday at 9 AM
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Manual
|
|
92
|
+
```ts
|
|
93
|
+
// From a capability handler:
|
|
94
|
+
await ctx.flows.start("refundApproval", { refundId: "rf_123", amount: 150 });
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
## Retry Policy
|
|
98
|
+
|
|
99
|
+
```ts
|
|
100
|
+
retry: {
|
|
101
|
+
attempts: 3, // Max retry attempts per failed step
|
|
102
|
+
backoff: "exponential" // "exponential" or "fixed"
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
Steps that fail with transient errors are retried. Permanent failures stop the flow and move it to the dead-letter queue.
|
|
107
|
+
|
|
108
|
+
## Flow Lifecycle
|
|
109
|
+
|
|
110
|
+
`created → running → waiting → running → completed | failed`
|
|
111
|
+
|
|
112
|
+
- Steps execute sequentially (except `parallel`)
|
|
113
|
+
- Every step produces an audit record
|
|
114
|
+
- Failed flows with exhausted retries land in a dead-letter queue for manual inspection
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# Plumbus Framework
|
|
2
|
+
|
|
3
|
+
Plumbus is an AI-native, contract-driven TypeScript application framework. You build applications by composing five primitives — **Entities**, **Capabilities**, **Flows**, **Events**, and **Prompts** — through a controlled execution context (`ctx`).
|
|
4
|
+
|
|
5
|
+
## Core Abstractions
|
|
6
|
+
|
|
7
|
+
| Primitive | Purpose | Defined with |
|
|
8
|
+
|-----------|---------|--------------|
|
|
9
|
+
| **Entity** | Data model with classification, retention, relations | `defineEntity()` |
|
|
10
|
+
| **Capability** | Discrete unit of business logic (query, action, job, event handler) | `defineCapability()` |
|
|
11
|
+
| **Flow** | Multi-step workflow orchestrating capabilities | `defineFlow()` |
|
|
12
|
+
| **Event** | Domain fact emitted by capabilities, consumed by handlers/flows | `defineEvent()` |
|
|
13
|
+
| **Prompt** | AI interaction template with typed input/output | `definePrompt()` |
|
|
14
|
+
|
|
15
|
+
## Execution Context (`ctx`)
|
|
16
|
+
|
|
17
|
+
Every capability handler receives `ctx` — the scoped runtime context:
|
|
18
|
+
|
|
19
|
+
| Property | Purpose |
|
|
20
|
+
|----------|---------|
|
|
21
|
+
| `ctx.auth` | Authenticated identity — userId, roles, scopes, tenantId |
|
|
22
|
+
| `ctx.data` | Entity repositories — `ctx.data.User.findById(id)` |
|
|
23
|
+
| `ctx.events` | Event emission — `ctx.events.emit("order.placed", payload)` |
|
|
24
|
+
| `ctx.flows` | Flow orchestration — `ctx.flows.start("processRefund", input)` |
|
|
25
|
+
| `ctx.ai` | AI operations — generate, extract, classify, retrieve |
|
|
26
|
+
| `ctx.audit` | Audit logging — `ctx.audit.record("user.updated", meta)` |
|
|
27
|
+
| `ctx.errors` | Structured errors — validation, notFound, forbidden, conflict, internal |
|
|
28
|
+
| `ctx.logger` | Structured logging — info, warn, error |
|
|
29
|
+
| `ctx.time` | Time utilities — `ctx.time.now()` |
|
|
30
|
+
| `ctx.config` | Read-only application configuration |
|
|
31
|
+
| `ctx.security` | Security service — policy evaluation and access enforcement |
|
|
32
|
+
|
|
33
|
+
## How Subsystems Connect
|
|
34
|
+
|
|
35
|
+
1. **Capabilities** are the only entry points for business logic. HTTP routes are auto-generated from capability contracts.
|
|
36
|
+
2. **Entities** provide typed data access via repositories injected on `ctx.data`.
|
|
37
|
+
3. **Events** are emitted inside capabilities (`ctx.events.emit`), persisted via the outbox pattern (same transaction as data), then dispatched to consumers.
|
|
38
|
+
4. **Flows** orchestrate multiple capabilities in sequence, with support for conditional branching, parallel execution, waits, and delays. Flows can be triggered by events or cron schedules.
|
|
39
|
+
5. **Prompts** provide structured AI interactions. Capabilities invoke AI via `ctx.ai.generate({ prompt: "promptName", input })`.
|
|
40
|
+
6. **Security** is deny-by-default. Every capability declares an `access` policy. The framework evaluates it against `ctx.auth` before executing the handler.
|
|
41
|
+
7. **Audit** records are automatically created for capability executions, data mutations, and AI invocations.
|
|
42
|
+
8. **Governance** rules analyze the entire system (entities, capabilities, flows, events, prompts) and produce advisory signals — warnings, not blockers.
|
|
43
|
+
|
|
44
|
+
## Project Structure
|
|
45
|
+
|
|
46
|
+
```
|
|
47
|
+
app/
|
|
48
|
+
capabilities/<domain>/<name>/
|
|
49
|
+
capability.ts # Contract (defineCapability)
|
|
50
|
+
impl.ts # Handler implementation
|
|
51
|
+
tests/ # Tests
|
|
52
|
+
flows/<domain>/<name>/
|
|
53
|
+
flow.ts # Contract (defineFlow)
|
|
54
|
+
tests/
|
|
55
|
+
entities/
|
|
56
|
+
<name>.entity.ts # Entity definition
|
|
57
|
+
events/
|
|
58
|
+
<name>.event.ts # Event definition
|
|
59
|
+
prompts/
|
|
60
|
+
<name>.prompt.ts # Prompt definition
|
|
61
|
+
config/
|
|
62
|
+
app.config.ts # PlumbusConfig
|
|
63
|
+
ai.config.ts # AI provider configuration
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
## Framework-Provided Dependencies
|
|
67
|
+
|
|
68
|
+
The framework provides common dependencies — **consumer apps must NOT install them separately**. Import through the framework's subpath exports:
|
|
69
|
+
|
|
70
|
+
| Dependency | Import from | Usage |
|
|
71
|
+
|-----------|-------------|-------|
|
|
72
|
+
| **Zod** | `@plumbus/core/zod` | `import { z } from "@plumbus/core/zod"` |
|
|
73
|
+
| **Vitest** | `@plumbus/core/testing` | `import { describe, it, expect } from "@plumbus/core/testing"` |
|
|
74
|
+
| **Playwright** | `@plumbus/core/testing` | `import { chromium } from "@plumbus/core/testing"` |
|
|
75
|
+
| **Vitest Config** | `@plumbus/core/vitest` | `import { defineConfig } from "@plumbus/core/vitest"` |
|
|
76
|
+
|
|
77
|
+
**CRITICAL**: Never add `zod`, `vitest`, `playwright`, or `@playwright/test` to a consumer app's `package.json`. They are provided by `@plumbus/core`.
|
|
78
|
+
|
|
79
|
+
### CLI Commands
|
|
80
|
+
|
|
81
|
+
| Task | Command |
|
|
82
|
+
|------|---------|
|
|
83
|
+
| Run tests | `plumbus test` |
|
|
84
|
+
| Watch mode | `plumbus test --watch` |
|
|
85
|
+
| Run e2e tests | `plumbus test --config frontend/e2e/vitest.config.e2e.ts` |
|
|
86
|
+
| Dev server | `plumbus dev` |
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# Governance
|
|
2
|
+
|
|
3
|
+
Plumbus governance is **advisory, not blocking** — "guardrails, not gates." Rules produce warnings that inform developers; they don't prevent deployment.
|
|
4
|
+
|
|
5
|
+
## Governance Signals
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
{
|
|
9
|
+
severity: "warning", // "info" | "warning" | "high"
|
|
10
|
+
rule: "security.missing-access-policy",
|
|
11
|
+
description: "Capability 'deleteUser' has no access policy",
|
|
12
|
+
affectedComponent: "capabilities/users/deleteUser",
|
|
13
|
+
remediation: "Add an access policy to restrict who can delete users"
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
## Built-in Rules
|
|
18
|
+
|
|
19
|
+
### Security
|
|
20
|
+
- Capabilities without access policies
|
|
21
|
+
- Overly permissive roles (e.g., `public: true` on mutations)
|
|
22
|
+
- Missing tenant isolation on multi-tenant entities
|
|
23
|
+
- Cross-tenant data access patterns
|
|
24
|
+
|
|
25
|
+
### Privacy
|
|
26
|
+
- `highly_sensitive` fields stored without `encrypted: true`
|
|
27
|
+
- Personal data fields without `maskedInLogs: true`
|
|
28
|
+
- Missing `classification` on entity fields
|
|
29
|
+
- Excessive data retention durations
|
|
30
|
+
|
|
31
|
+
### Architecture
|
|
32
|
+
- Capabilities with too many side effects
|
|
33
|
+
- Flows with excessive branching depth
|
|
34
|
+
- Large handler implementations (complexity warning)
|
|
35
|
+
|
|
36
|
+
### AI
|
|
37
|
+
- Prompts receiving sensitive classified data
|
|
38
|
+
- Missing output validation schemas
|
|
39
|
+
- Prompts without model configuration
|
|
40
|
+
|
|
41
|
+
## Running Governance Checks
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
plumbus verify # Run all rules, human-readable output
|
|
45
|
+
plumbus verify --json # Machine-readable output
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Exit code is non-zero if any `high` severity signals are found.
|
|
49
|
+
|
|
50
|
+
## Overrides
|
|
51
|
+
|
|
52
|
+
When a governance warning is acknowledged and accepted:
|
|
53
|
+
|
|
54
|
+
```yaml
|
|
55
|
+
# app/compliance/overrides/delete-user-public.yaml
|
|
56
|
+
rule: security.missing-access-policy
|
|
57
|
+
justification: "This is an internal admin tool with network-level access control"
|
|
58
|
+
author: "jane@company.com"
|
|
59
|
+
timestamp: "2026-01-15T10:30:00Z"
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Overrides appear in governance reports as acknowledged deviations.
|
|
63
|
+
|
|
64
|
+
## Policy Profiles
|
|
65
|
+
|
|
66
|
+
Assess compatibility with compliance frameworks:
|
|
67
|
+
|
|
68
|
+
```bash
|
|
69
|
+
plumbus certify policy gdpr
|
|
70
|
+
plumbus certify policy pci_dss
|
|
71
|
+
plumbus certify policy soc2
|
|
72
|
+
plumbus certify policy hipaa
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
Each profile defines rules specific to that standard. Reports include:
|
|
76
|
+
- Compatibility score (0-100%)
|
|
77
|
+
- Per-rule pass/partial/fail/override results
|
|
78
|
+
- Remediation recommendations
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
# Patterns & Conventions
|
|
2
|
+
|
|
3
|
+
## Naming Conventions
|
|
4
|
+
|
|
5
|
+
| Element | Convention | Example |
|
|
6
|
+
|---------|-----------|---------|
|
|
7
|
+
| Capability | camelCase verb+noun | `getUser`, `approveRefund`, `processPayment` |
|
|
8
|
+
| Entity | PascalCase noun | `User`, `Order`, `InvoiceLine` |
|
|
9
|
+
| Event | domain.pastTense | `order.placed`, `refund.requested`, `user.updated` |
|
|
10
|
+
| Flow | camelCase noun | `refundApproval`, `orderFulfillment` |
|
|
11
|
+
| Prompt | camelCase verb+noun | `summarizeTicket`, `classifyIntent` |
|
|
12
|
+
| Domain | lowercase singular | `users`, `billing`, `fulfillment` |
|
|
13
|
+
|
|
14
|
+
## File Structure
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
app/capabilities/<domain>/<name>/
|
|
18
|
+
capability.ts # defineCapability() — contract only
|
|
19
|
+
impl.ts # handler implementation (optional split)
|
|
20
|
+
tests/
|
|
21
|
+
<name>.test.ts
|
|
22
|
+
fixtures/
|
|
23
|
+
|
|
24
|
+
app/flows/<domain>/<name>/
|
|
25
|
+
flow.ts
|
|
26
|
+
tests/
|
|
27
|
+
|
|
28
|
+
app/entities/<name>.entity.ts
|
|
29
|
+
app/events/<name>.event.ts
|
|
30
|
+
app/prompts/<name>.prompt.ts
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Do's
|
|
34
|
+
|
|
35
|
+
- **Do** declare all side effects in `effects`. Governance relies on this.
|
|
36
|
+
- **Do** add `classification` to every entity field that contains user data.
|
|
37
|
+
- **Do** use `maskedInLogs: true` for passwords, tokens, and keys.
|
|
38
|
+
- **Do** keep handlers thin — delegate complex logic to helper functions.
|
|
39
|
+
- **Do** use `ctx.errors.*` for all error conditions (not raw `throw new Error`).
|
|
40
|
+
- **Do** write tests using `runCapability` and `simulateFlow` test utilities.
|
|
41
|
+
- **Do** use the outbox pattern for events — always emit via `ctx.events.emit`.
|
|
42
|
+
- **Do** add `tenantScoped: true` to entities that require multi-tenant isolation.
|
|
43
|
+
|
|
44
|
+
## Don'ts
|
|
45
|
+
|
|
46
|
+
- **Don't** access the database directly — always use `ctx.data.<Entity>`.
|
|
47
|
+
- **Don't** emit events outside of capabilities — the outbox pattern requires a capability transaction.
|
|
48
|
+
- **Don't** bypass `ctx.auth` checks — the framework evaluates access policies before your handler runs.
|
|
49
|
+
- **Don't** mutate the `ctx` object — it is scoped and controlled by the framework.
|
|
50
|
+
- **Don't** import framework internals — use only the public SDK surface (`defineCapability`, `defineFlow`, etc.).
|
|
51
|
+
- **Don't** store secrets in code — use `ctx.config` and environment variables.
|
|
52
|
+
- **Don't** edit files in `.plumbus/generated/` — they are regenerated on every build.
|
|
53
|
+
- **Don't** create capabilities without access policies (governance will warn).
|
|
54
|
+
|
|
55
|
+
## Common Patterns
|
|
56
|
+
|
|
57
|
+
### CRUD Capability Set
|
|
58
|
+
|
|
59
|
+
For a typical entity, create four capabilities:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
// app/capabilities/users/getUser/capability.ts
|
|
63
|
+
defineCapability({ name: "getUser", kind: "query", ... });
|
|
64
|
+
|
|
65
|
+
// app/capabilities/users/createUser/capability.ts
|
|
66
|
+
defineCapability({ name: "createUser", kind: "action", ... });
|
|
67
|
+
|
|
68
|
+
// app/capabilities/users/updateUser/capability.ts
|
|
69
|
+
defineCapability({ name: "updateUser", kind: "action", ... });
|
|
70
|
+
|
|
71
|
+
// app/capabilities/users/deleteUser/capability.ts
|
|
72
|
+
defineCapability({ name: "deleteUser", kind: "action", ... });
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
### Event-Driven Side Effects
|
|
76
|
+
|
|
77
|
+
Instead of calling multiple services in one capability, emit events and let handlers react:
|
|
78
|
+
|
|
79
|
+
```ts
|
|
80
|
+
// Capability: createOrder
|
|
81
|
+
handler: async (ctx, input) => {
|
|
82
|
+
const order = await ctx.data.Order.create(input);
|
|
83
|
+
await ctx.events.emit("order.placed", { orderId: order.id });
|
|
84
|
+
return { orderId: order.id };
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
// Separate event handlers react independently:
|
|
88
|
+
// onOrderPlaced → create shipment
|
|
89
|
+
// onOrderPlaced → send confirmation email
|
|
90
|
+
// onOrderPlaced → update analytics
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### AI-Augmented Capability
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
handler: async (ctx, input) => {
|
|
97
|
+
const classification = await ctx.ai.classify({
|
|
98
|
+
labels: ["billing", "technical", "general"],
|
|
99
|
+
text: input.message,
|
|
100
|
+
});
|
|
101
|
+
const ticket = await ctx.data.Ticket.create({
|
|
102
|
+
...input,
|
|
103
|
+
category: classification[0],
|
|
104
|
+
});
|
|
105
|
+
return { ticketId: ticket.id, category: classification[0] };
|
|
106
|
+
}
|
|
107
|
+
```
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Security Model
|
|
2
|
+
|
|
3
|
+
Plumbus uses a **deny-by-default** security model. Every capability must declare its access policy explicitly.
|
|
4
|
+
|
|
5
|
+
## Access Policies
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
access: {
|
|
9
|
+
roles: ["admin", "billing"], // Required roles (any match)
|
|
10
|
+
scopes: ["refunds:write"], // Required scopes (all must match)
|
|
11
|
+
public: false, // If true, no auth required
|
|
12
|
+
tenantScoped: true, // Enforce tenant isolation
|
|
13
|
+
serviceAccounts: ["payment-svc"], // Allow service-to-service auth
|
|
14
|
+
}
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
### Evaluation Order
|
|
18
|
+
1. If `public: true` → allow
|
|
19
|
+
2. Authenticate identity → populate `ctx.auth`
|
|
20
|
+
3. Check `roles` — user must have at least one matching role
|
|
21
|
+
4. Check `scopes` — user must have all required scopes
|
|
22
|
+
5. If `tenantScoped: true` — verify `ctx.auth.tenantId` matches target data
|
|
23
|
+
6. Check `serviceAccounts` — for service-to-service calls
|
|
24
|
+
|
|
25
|
+
If any check fails → **403 Forbidden** with audit record.
|
|
26
|
+
|
|
27
|
+
## Auth Context (`ctx.auth`)
|
|
28
|
+
|
|
29
|
+
| Property | Type | Description |
|
|
30
|
+
|----------|------|-------------|
|
|
31
|
+
| `userId` | string? | Authenticated user ID |
|
|
32
|
+
| `roles` | string[] | User's assigned roles |
|
|
33
|
+
| `scopes` | string[] | User's permission scopes |
|
|
34
|
+
| `tenantId` | string? | Tenant the user belongs to |
|
|
35
|
+
| `provider` | string | Auth provider (e.g., "oidc", "auth0") |
|
|
36
|
+
| `sessionId` | string? | Session identifier |
|
|
37
|
+
| `authenticatedAt` | Date? | When authentication occurred |
|
|
38
|
+
|
|
39
|
+
## Tenant Isolation
|
|
40
|
+
|
|
41
|
+
When `tenantScoped: true`:
|
|
42
|
+
- All repository queries automatically inject `WHERE tenantId = ctx.auth.tenantId`
|
|
43
|
+
- Cross-tenant data access is blocked at the framework level
|
|
44
|
+
- Events carry `tenantId` and are only delivered to matching consumers
|
|
45
|
+
|
|
46
|
+
## Field Classification & Edit Zones
|
|
47
|
+
|
|
48
|
+
Entity fields with `classification: "sensitive"` or `"highly_sensitive"`:
|
|
49
|
+
- Are masked in logs and audit records
|
|
50
|
+
- Trigger governance warnings if used in AI prompts
|
|
51
|
+
- Can be flagged for encryption at rest
|
|
52
|
+
|
|
53
|
+
### Edit Zones
|
|
54
|
+
|
|
55
|
+
| Zone | Description |
|
|
56
|
+
|------|-------------|
|
|
57
|
+
| **Safe** | Application code in `app/` — capabilities, flows, entities, events, prompts |
|
|
58
|
+
| **Restricted** | Configuration files in `config/` — changes may affect security posture |
|
|
59
|
+
| **Forbidden** | Framework internals, generated code in `.plumbus/generated/` |
|
|
60
|
+
|
|
61
|
+
## Authentication Adapters
|
|
62
|
+
|
|
63
|
+
Plumbus uses pluggable auth adapters. The default is JWT validation. The adapter normalizes tokens into `AuthContext`:
|
|
64
|
+
|
|
65
|
+
- JWT (default) — validates JWT tokens, extracts claims
|
|
66
|
+
- Auth0, Clerk, Cognito — provider-specific adapters (community)
|
|
67
|
+
- Custom — implement the adapter interface
|
|
68
|
+
|
|
69
|
+
## Password Utilities
|
|
70
|
+
|
|
71
|
+
When building first-party email/password authentication, use the framework helpers instead of app-local crypto:
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
import { hashPassword, verifyPassword } from "@plumbus/core";
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
- `hashPassword(password)` stores credentials as `salt:hash` using Node.js `scrypt`
|
|
78
|
+
- `verifyPassword(password, storedHash)` performs a timing-safe comparison
|
|
79
|
+
- Store only the returned hash string in entity fields marked `classification: "highly_sensitive"`
|