@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,183 @@
|
|
|
1
|
+
# AI Runtime
|
|
2
|
+
|
|
3
|
+
Plumbus provides structured AI interactions through prompts and the `ctx.ai` service.
|
|
4
|
+
|
|
5
|
+
## Defining a Prompt
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { definePrompt } from "@plumbus/core";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
export const summarizeTicket = definePrompt({
|
|
12
|
+
name: "summarizeTicket",
|
|
13
|
+
domain: "support",
|
|
14
|
+
|
|
15
|
+
input: z.object({ ticketText: z.string(), customerTier: z.string() }),
|
|
16
|
+
output: z.object({
|
|
17
|
+
summary: z.string(),
|
|
18
|
+
priority: z.enum(["low", "medium", "high"]),
|
|
19
|
+
sentiment: z.enum(["positive", "neutral", "negative"]),
|
|
20
|
+
}),
|
|
21
|
+
|
|
22
|
+
// provider and model are resolved from config/env at runtime — only set tuning params here
|
|
23
|
+
model: {
|
|
24
|
+
temperature: 0.3,
|
|
25
|
+
maxTokens: 500,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
Prompts should NOT hardcode `provider` or model `name`. These are resolved at runtime through the configuration chain (see below). Only set `temperature` and `maxTokens` in the prompt definition.
|
|
31
|
+
|
|
32
|
+
## `ctx.ai` Operations
|
|
33
|
+
|
|
34
|
+
### Generate
|
|
35
|
+
|
|
36
|
+
Invoke a named prompt with typed input, get validated output:
|
|
37
|
+
|
|
38
|
+
```ts
|
|
39
|
+
const result = await ctx.ai.generate({
|
|
40
|
+
prompt: "summarizeTicket",
|
|
41
|
+
input: { ticketText: input.text, customerTier: "enterprise" },
|
|
42
|
+
});
|
|
43
|
+
// result is typed: { summary: string, priority: "low"|"medium"|"high", sentiment: ... }
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
### Extract
|
|
47
|
+
|
|
48
|
+
Extract structured data from text using a Zod schema:
|
|
49
|
+
|
|
50
|
+
```ts
|
|
51
|
+
const invoice = await ctx.ai.extract({
|
|
52
|
+
schema: z.object({ invoiceNumber: z.string(), total: z.number(), dueDate: z.string() }),
|
|
53
|
+
text: input.emailBody,
|
|
54
|
+
});
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Classify
|
|
58
|
+
|
|
59
|
+
Classify text into provided categories:
|
|
60
|
+
|
|
61
|
+
```ts
|
|
62
|
+
const labels = await ctx.ai.classify({
|
|
63
|
+
labels: ["billing", "technical", "general", "urgent"],
|
|
64
|
+
text: input.ticketText,
|
|
65
|
+
});
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Retrieve (RAG)
|
|
69
|
+
|
|
70
|
+
Retrieve relevant documents from the vector store:
|
|
71
|
+
|
|
72
|
+
```ts
|
|
73
|
+
const docs = await ctx.ai.retrieve({ query: "refund policy for enterprise customers" });
|
|
74
|
+
// docs: Array<{ content: string, source: string, score: number, metadata?: Record<string, unknown> }>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Output Validation
|
|
78
|
+
|
|
79
|
+
All AI responses are validated against the prompt's output Zod schema. On failure, the framework retries generation (configurable). If retries are exhausted, a structured error is raised.
|
|
80
|
+
|
|
81
|
+
## Cost Tracking
|
|
82
|
+
|
|
83
|
+
Every AI invocation records: model used, input/output token counts, latency, and prompt name. Token counts come directly from provider responses and are always accurate.
|
|
84
|
+
|
|
85
|
+
**Actual costs** are fetched from provider usage APIs — the framework never guesses or hardcodes pricing. Use `createUsageAPIClient()` to configure OpenAI and Anthropic billing API access:
|
|
86
|
+
|
|
87
|
+
```ts
|
|
88
|
+
import { createUsageAPIClient, createCostTracker } from "@plumbus/core";
|
|
89
|
+
|
|
90
|
+
const openaiUsage = createUsageAPIClient({
|
|
91
|
+
provider: "openai",
|
|
92
|
+
apiKey: process.env.AI_OPENAI_API_KEY,
|
|
93
|
+
});
|
|
94
|
+
|
|
95
|
+
const anthropicUsage = createUsageAPIClient({
|
|
96
|
+
provider: "anthropic",
|
|
97
|
+
apiKey: process.env.AI_ANTHROPIC_API_KEY,
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const costTracker = createCostTracker(budgetConfig, [openaiUsage, anthropicUsage]);
|
|
101
|
+
|
|
102
|
+
// Fetch actual costs from billing APIs
|
|
103
|
+
const result = await costTracker.syncCosts();
|
|
104
|
+
if (!result.synced) {
|
|
105
|
+
console.warn("Cost sync failed:", result.error);
|
|
106
|
+
}
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
If the usage API is not configured or unavailable, `cost` on each record is `null` and dollar-based budget limits cannot be enforced. Token-based budget limits always work.
|
|
110
|
+
|
|
111
|
+
Budget limits (per-request token limit, daily cost limit, per-tenant daily limit) are enforced via `BudgetConfig`.
|
|
112
|
+
|
|
113
|
+
## Configuration via Environment Variables
|
|
114
|
+
|
|
115
|
+
Use `loadConfig()` from `@plumbus/core` in your `config/app.config.ts` — it reads AI provider settings from env vars automatically.
|
|
116
|
+
|
|
117
|
+
### Single Provider
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
AI_PROVIDER=openai
|
|
121
|
+
AI_API_KEY=sk-...
|
|
122
|
+
AI_BASE_URL=https://custom-endpoint.com/v1 # optional, omit for default
|
|
123
|
+
AI_MODEL=gpt-4o-mini
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
### Multi-Provider
|
|
127
|
+
|
|
128
|
+
Set `AI_DEFAULT_PROVIDER` to enable multi-provider mode. Providers are discovered from `AI_{NAME}_API_KEY` patterns:
|
|
129
|
+
|
|
130
|
+
```bash
|
|
131
|
+
AI_DEFAULT_PROVIDER=openai
|
|
132
|
+
|
|
133
|
+
AI_OPENAI_API_KEY=sk-...
|
|
134
|
+
AI_OPENAI_BASE_URL=https://custom-openai.com/v1 # optional
|
|
135
|
+
AI_OPENAI_MODEL=gpt-4o-mini
|
|
136
|
+
|
|
137
|
+
AI_ANTHROPIC_API_KEY=sk-ant-...
|
|
138
|
+
AI_ANTHROPIC_BASE_URL=https://custom-anthropic.com # optional
|
|
139
|
+
AI_ANTHROPIC_MODEL=claude-sonnet-4-20250514
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
Each prompt's `model.provider` routes to the named provider; prompts without a provider field use `defaultProvider`.
|
|
143
|
+
|
|
144
|
+
### Default Model
|
|
145
|
+
|
|
146
|
+
Set a global fallback model that all prompts use unless overridden:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
AI_DEFAULT_MODEL=gpt-4o
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### Per-Prompt Overrides
|
|
153
|
+
|
|
154
|
+
Override model, provider, temperature, or maxTokens for any specific prompt via env vars:
|
|
155
|
+
|
|
156
|
+
```bash
|
|
157
|
+
# Format: PROMPT_{NAME}_{FIELD}
|
|
158
|
+
# Name = prompt name with dots → underscores, UPPERCASED
|
|
159
|
+
# Fields: PROVIDER, MODEL, TEMPERATURE, MAX_TOKENS
|
|
160
|
+
|
|
161
|
+
# Route "writer.write_chapter" to Anthropic:
|
|
162
|
+
PROMPT_WRITER_WRITE_CHAPTER_PROVIDER=anthropic
|
|
163
|
+
PROMPT_WRITER_WRITE_CHAPTER_MODEL=claude-sonnet-4-20250514
|
|
164
|
+
|
|
165
|
+
# Use a cheaper model for metadata extraction:
|
|
166
|
+
PROMPT_INTERVIEW_EXTRACT_METADATA_MODEL=gpt-4o-mini
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Model Resolution Chain
|
|
170
|
+
|
|
171
|
+
When a prompt is invoked, the model is resolved in this order:
|
|
172
|
+
|
|
173
|
+
1. **Per-prompt env override** (`PROMPT_{NAME}_MODEL`) — highest priority
|
|
174
|
+
2. **Prompt definition** (`model.name` in `definePrompt`) — if set
|
|
175
|
+
3. **Default model** (`AI_DEFAULT_MODEL`) — global fallback
|
|
176
|
+
|
|
177
|
+
Provider resolution follows the same chain: per-prompt override → prompt definition → `AI_DEFAULT_PROVIDER`.
|
|
178
|
+
|
|
179
|
+
## Security
|
|
180
|
+
|
|
181
|
+
- Classified fields in prompt inputs are detected and warn/redact based on entity field classifications
|
|
182
|
+
- Tenant isolation is enforced — prompts cannot access cross-tenant data
|
|
183
|
+
- All AI invocations are recorded in the audit trail
|
|
@@ -0,0 +1,171 @@
|
|
|
1
|
+
# Capabilities
|
|
2
|
+
|
|
3
|
+
A capability is a discrete unit of business logic. It is the **only** way business logic executes in Plumbus.
|
|
4
|
+
|
|
5
|
+
## Defining a Capability
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { defineCapability } from "@plumbus/core";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
export const getUser = defineCapability({
|
|
12
|
+
name: "getUser",
|
|
13
|
+
kind: "query",
|
|
14
|
+
domain: "users",
|
|
15
|
+
description: "Fetches a user by ID",
|
|
16
|
+
|
|
17
|
+
input: z.object({ userId: z.string().uuid() }),
|
|
18
|
+
output: z.object({ id: z.string(), name: z.string(), email: z.string() }),
|
|
19
|
+
|
|
20
|
+
access: { roles: ["admin", "user"], tenantScoped: true },
|
|
21
|
+
|
|
22
|
+
effects: {
|
|
23
|
+
data: ["User"],
|
|
24
|
+
events: [],
|
|
25
|
+
external: [],
|
|
26
|
+
ai: false,
|
|
27
|
+
},
|
|
28
|
+
|
|
29
|
+
audit: { event: "user.fetched", includeInput: ["userId"] },
|
|
30
|
+
|
|
31
|
+
explanation: { enabled: true, summary: "Fetches user profile data" },
|
|
32
|
+
|
|
33
|
+
handler: async (ctx, input) => {
|
|
34
|
+
const user = await ctx.data.User.findById(input.userId);
|
|
35
|
+
if (!user) throw ctx.errors.notFound("User not found");
|
|
36
|
+
return { id: user.id, name: user.name, email: user.email };
|
|
37
|
+
},
|
|
38
|
+
});
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Capability Kinds
|
|
42
|
+
|
|
43
|
+
| Kind | HTTP Method | Behavior |
|
|
44
|
+
|------|------------|----------|
|
|
45
|
+
| `query` | GET | Read-only, idempotent, cacheable |
|
|
46
|
+
| `action` | POST | Write operation, side effects expected |
|
|
47
|
+
| `job` | POST (async) | Long-running, returns job handle immediately |
|
|
48
|
+
| `eventHandler` | Internal only | Triggered by event delivery, not exposed via HTTP |
|
|
49
|
+
|
|
50
|
+
## Handler Pattern
|
|
51
|
+
|
|
52
|
+
The handler receives two arguments:
|
|
53
|
+
- `ctx` — the execution context (see `framework.md`)
|
|
54
|
+
- `input` — pre-validated input matching the `input` Zod schema
|
|
55
|
+
|
|
56
|
+
The handler must return a value matching the `output` Zod schema.
|
|
57
|
+
|
|
58
|
+
### Using `ctx.data`
|
|
59
|
+
|
|
60
|
+
```ts
|
|
61
|
+
handler: async (ctx, input) => {
|
|
62
|
+
// Create
|
|
63
|
+
const order = await ctx.data.Order.create({ customerId: input.customerId, total: input.total });
|
|
64
|
+
// Read
|
|
65
|
+
const customer = await ctx.data.Customer.findById(input.customerId);
|
|
66
|
+
// Update
|
|
67
|
+
await ctx.data.Order.update(order.id, { status: "confirmed" });
|
|
68
|
+
// Query
|
|
69
|
+
const recent = await ctx.data.Order.findMany({ customerId: input.customerId });
|
|
70
|
+
return { orderId: order.id };
|
|
71
|
+
}
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### Using `ctx.events`
|
|
75
|
+
|
|
76
|
+
```ts
|
|
77
|
+
handler: async (ctx, input) => {
|
|
78
|
+
const refund = await ctx.data.Refund.create(input);
|
|
79
|
+
await ctx.events.emit("refund.requested", { refundId: refund.id, amount: refund.amount });
|
|
80
|
+
return { refundId: refund.id };
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
### Using `ctx.ai`
|
|
85
|
+
|
|
86
|
+
```ts
|
|
87
|
+
handler: async (ctx, input) => {
|
|
88
|
+
const result = await ctx.ai.generate({ prompt: "summarizeTicket", input: { text: input.ticketText } });
|
|
89
|
+
return { summary: result.summary };
|
|
90
|
+
}
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Using `ctx.flows`
|
|
94
|
+
|
|
95
|
+
```ts
|
|
96
|
+
handler: async (ctx, input) => {
|
|
97
|
+
const execution = await ctx.flows.start("approvalWorkflow", { requestId: input.requestId });
|
|
98
|
+
return { flowExecutionId: execution.id };
|
|
99
|
+
}
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
## Effects Declaration
|
|
103
|
+
|
|
104
|
+
Every capability must declare its side effects in the `effects` field:
|
|
105
|
+
|
|
106
|
+
- `data` — entity names this capability reads from or writes to
|
|
107
|
+
- `events` — event types this capability may emit
|
|
108
|
+
- `external` — external integrations this capability calls (APIs, services)
|
|
109
|
+
- `flows` — flow names this capability may start (optional)
|
|
110
|
+
- `ai` — whether this capability uses AI operations
|
|
111
|
+
|
|
112
|
+
Effects are used by governance rules to analyze the system.
|
|
113
|
+
|
|
114
|
+
## Explanation Tracking
|
|
115
|
+
|
|
116
|
+
Capabilities that use AI (`effects.ai: true`) should enable explanation tracking:
|
|
117
|
+
|
|
118
|
+
```ts
|
|
119
|
+
explanation: {
|
|
120
|
+
enabled: true, // Enable AI explanation tracking
|
|
121
|
+
summary: "...", // Human-readable description of AI usage
|
|
122
|
+
},
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
The governance rule `ruleAIWithoutExplanation` warns when a capability has `effects.ai: true` but doesn't set `explanation.enabled: true`.
|
|
126
|
+
|
|
127
|
+
## Error Handling
|
|
128
|
+
|
|
129
|
+
Use `ctx.errors` to throw structured errors:
|
|
130
|
+
|
|
131
|
+
```ts
|
|
132
|
+
throw ctx.errors.validation("Email is required");
|
|
133
|
+
throw ctx.errors.notFound("Invoice not found");
|
|
134
|
+
throw ctx.errors.forbidden("Cannot access this resource");
|
|
135
|
+
throw ctx.errors.conflict("Email already exists");
|
|
136
|
+
throw ctx.errors.internal("Payment provider unavailable");
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
These map to HTTP status codes: 400, 404, 403, 409, 500.
|
|
140
|
+
|
|
141
|
+
These are the **only** structured error types. If you need a custom error, use `ctx.errors.internal()` with a descriptive message.
|
|
142
|
+
|
|
143
|
+
## Job Capabilities
|
|
144
|
+
|
|
145
|
+
Capabilities with `kind: "job"` are for long-running operations. They return immediately with a job handle, and the work executes asynchronously.
|
|
146
|
+
|
|
147
|
+
```ts
|
|
148
|
+
export const generateReport = defineCapability({
|
|
149
|
+
name: "generateReport",
|
|
150
|
+
kind: "job",
|
|
151
|
+
domain: "reports",
|
|
152
|
+
|
|
153
|
+
input: z.object({ reportType: z.string(), dateRange: z.object({ from: z.string(), to: z.string() }) }),
|
|
154
|
+
output: z.object({ reportId: z.string(), estimatedDuration: z.number() }),
|
|
155
|
+
|
|
156
|
+
access: { roles: ["admin", "analyst"], tenantScoped: true },
|
|
157
|
+
effects: { data: ["Report"], events: ["report.generated"], external: [], ai: true },
|
|
158
|
+
|
|
159
|
+
handler: async (ctx, input) => {
|
|
160
|
+
const report = await ctx.data.Report.create({
|
|
161
|
+
type: input.reportType,
|
|
162
|
+
status: "queued",
|
|
163
|
+
dateFrom: input.dateRange.from,
|
|
164
|
+
dateTo: input.dateRange.to,
|
|
165
|
+
});
|
|
166
|
+
return { reportId: report.id, estimatedDuration: 120 };
|
|
167
|
+
},
|
|
168
|
+
});
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
Job capabilities are exposed as `POST` endpoints that return `202 Accepted` with the job output. The framework provides job status tracking and progress monitoring automatically.
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
# CLI Reference
|
|
2
|
+
|
|
3
|
+
The Plumbus CLI scaffolds and manages application primitives. **Always run CLI commands from your project root** (the consumer application directory), not from the framework source.
|
|
4
|
+
|
|
5
|
+
## Project Setup
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
# Create a new Plumbus project
|
|
9
|
+
plumbus create <project-name> [--auth jwt|auth0|clerk] [--ai openai|anthropic] [--compliance GDPR|HIPAA] [--skip-install] [--git]
|
|
10
|
+
|
|
11
|
+
# Initialize AI agent wiring (copilot, cursor, or agents-md)
|
|
12
|
+
plumbus init --agent copilot
|
|
13
|
+
|
|
14
|
+
# Check project health
|
|
15
|
+
plumbus doctor
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Scaffolding Primitives
|
|
19
|
+
|
|
20
|
+
Use these commands to create new entities, capabilities, events, flows, and prompts. The CLI generates correctly structured files with TODOs for you to fill in.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
# Create an entity
|
|
24
|
+
plumbus entity new <EntityName>
|
|
25
|
+
# → app/entities/<entity-name>.entity.ts
|
|
26
|
+
|
|
27
|
+
# Create a capability
|
|
28
|
+
plumbus capability new <CapabilityName>
|
|
29
|
+
# → app/capabilities/default/<capability-name>/capability.ts
|
|
30
|
+
|
|
31
|
+
# Create an event
|
|
32
|
+
plumbus event new <EventName>
|
|
33
|
+
# → app/events/<event-name>.event.ts
|
|
34
|
+
|
|
35
|
+
# Create a flow
|
|
36
|
+
plumbus flow new <FlowName>
|
|
37
|
+
# → app/flows/default/<flow-name>/flow.ts
|
|
38
|
+
|
|
39
|
+
# Create a prompt
|
|
40
|
+
plumbus prompt new <PromptName>
|
|
41
|
+
# → app/prompts/<prompt-name>.prompt.ts
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
Names are PascalCase on the command line and converted to kebab-case for file paths.
|
|
45
|
+
|
|
46
|
+
## Code Generation & Verification
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
# Generate client code, routes, and types from your contracts
|
|
50
|
+
plumbus generate
|
|
51
|
+
|
|
52
|
+
# Run governance checks (advisory signals, not hard blocks)
|
|
53
|
+
plumbus verify
|
|
54
|
+
plumbus verify --json
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Database Management
|
|
58
|
+
|
|
59
|
+
**All database operations must go through the framework. Never use manual SQL DDL queries.**
|
|
60
|
+
|
|
61
|
+
### Database Lifecycle
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Create the application database from config
|
|
65
|
+
plumbus db create
|
|
66
|
+
plumbus db create --test # Also create <dbname>_test for testing
|
|
67
|
+
|
|
68
|
+
# Reset (drop + recreate + apply migrations)
|
|
69
|
+
plumbus db reset
|
|
70
|
+
plumbus db reset --test # Reset the test database
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Migrations
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
# Generate migration SQL from entity definition diffs (programmatic, no drizzle-kit config needed)
|
|
77
|
+
plumbus migrate generate
|
|
78
|
+
|
|
79
|
+
# Apply pending migration files to the database
|
|
80
|
+
plumbus migrate apply
|
|
81
|
+
plumbus migrate apply --create-db # Create DB if it doesn't exist, then apply
|
|
82
|
+
|
|
83
|
+
# Push schema directly to DB (no migration files — ideal for rapid dev iteration)
|
|
84
|
+
plumbus migrate push
|
|
85
|
+
plumbus migrate push --create-db
|
|
86
|
+
|
|
87
|
+
# Rollback the last applied migration
|
|
88
|
+
plumbus migrate rollback
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
All migration commands accept `--json` for machine-readable output.
|
|
92
|
+
|
|
93
|
+
**Workflow:**
|
|
94
|
+
1. Define entities in `app/entities/` using `defineEntity()`
|
|
95
|
+
2. Run `plumbus migrate generate` to produce SQL migration files in `drizzle/`
|
|
96
|
+
3. Run `plumbus migrate apply` to execute pending migrations
|
|
97
|
+
4. For rapid development, use `plumbus migrate push` to sync schema directly (no migration files)
|
|
98
|
+
|
|
99
|
+
**Never run `drizzle-kit` manually** — the framework wraps it programmatically.
|
|
100
|
+
|
|
101
|
+
## Development
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
# Start development server with hot reload
|
|
105
|
+
plumbus dev
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Important Notes
|
|
109
|
+
|
|
110
|
+
- **Run from project root**: All commands must be executed from the consumer project directory where `package.json` lives.
|
|
111
|
+
- **Scaffolded files have TODOs**: After scaffolding, open the generated file and replace `// TODO` sections with your implementation.
|
|
112
|
+
- **`.plumbus/` is generated**: The `.plumbus/` directory contains auto-generated files. Don't edit them manually — they are regenerated by `plumbus generate`.
|
|
113
|
+
- **Use the framework's `define*()` functions**: Never create primitives by hand. Use the CLI to scaffold, then fill in the contracts using `defineEntity()`, `defineCapability()`, `defineFlow()`, `defineEvent()`, `definePrompt()`.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# Entities
|
|
2
|
+
|
|
3
|
+
An entity is a data model definition with field classifications, relations, and retention policies.
|
|
4
|
+
|
|
5
|
+
## Defining an Entity
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { defineEntity, field } from "@plumbus/core";
|
|
9
|
+
|
|
10
|
+
export const User = defineEntity({
|
|
11
|
+
name: "User",
|
|
12
|
+
domain: "identity",
|
|
13
|
+
tenantScoped: true,
|
|
14
|
+
|
|
15
|
+
fields: {
|
|
16
|
+
id: field.id(),
|
|
17
|
+
email: field.string({ required: true, unique: true, classification: "personal" }),
|
|
18
|
+
name: field.string({ required: true }),
|
|
19
|
+
passwordHash: field.string({ required: true, classification: "highly_sensitive", maskedInLogs: true }),
|
|
20
|
+
role: field.enum(["admin", "user", "viewer"], { required: true, default: "user" }),
|
|
21
|
+
organizationId: field.relation({ entity: "Organization", type: "many-to-one" }),
|
|
22
|
+
lastLoginAt: field.timestamp({ nullable: true }),
|
|
23
|
+
metadata: field.json({ classification: "internal" }),
|
|
24
|
+
active: field.boolean({ default: true }),
|
|
25
|
+
},
|
|
26
|
+
|
|
27
|
+
indexes: [["email"], ["organizationId", "active"]],
|
|
28
|
+
retention: { duration: "365d" },
|
|
29
|
+
});
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
## Field Types
|
|
33
|
+
|
|
34
|
+
| Constructor | Stored As | Notes |
|
|
35
|
+
|-------------|-----------|-------|
|
|
36
|
+
| `field.id()` | UUID string | Primary key |
|
|
37
|
+
| `field.string(opts)` | Text | General text |
|
|
38
|
+
| `field.number(opts)` | Numeric | Integer or decimal |
|
|
39
|
+
| `field.boolean(opts)` | Boolean | |
|
|
40
|
+
| `field.timestamp(opts)` | Datetime | ISO timestamps |
|
|
41
|
+
| `field.json(opts)` | JSONB | Arbitrary structured data |
|
|
42
|
+
| `field.enum(values, opts)` | Text | Constrained to provided values |
|
|
43
|
+
| `field.relation(config)` | Foreign key | Links to another entity |
|
|
44
|
+
|
|
45
|
+
## Field Options
|
|
46
|
+
|
|
47
|
+
All field types accept these options:
|
|
48
|
+
|
|
49
|
+
| Option | Type | Default | Purpose |
|
|
50
|
+
|--------|------|---------|---------|
|
|
51
|
+
| `required` | boolean | false | Field must have a value |
|
|
52
|
+
| `default` | any | — | Default value if not provided |
|
|
53
|
+
| `unique` | boolean | false | Unique constraint |
|
|
54
|
+
| `nullable` | boolean | false | Allow null |
|
|
55
|
+
| `classification` | FieldClassification | — | Data sensitivity level |
|
|
56
|
+
| `encrypted` | boolean | false | Encrypt at rest |
|
|
57
|
+
| `maskedInLogs` | boolean | false | Mask in audit/log output |
|
|
58
|
+
|
|
59
|
+
## Classification Levels
|
|
60
|
+
|
|
61
|
+
| Level | Meaning | Example |
|
|
62
|
+
|-------|---------|---------|
|
|
63
|
+
| `public` | No restrictions | Product name |
|
|
64
|
+
| `internal` | Internal use only | Internal notes |
|
|
65
|
+
| `personal` | Personally identifiable | Email, name |
|
|
66
|
+
| `sensitive` | Requires protection | Phone, address |
|
|
67
|
+
| `highly_sensitive` | Maximum protection | SSN, password hash |
|
|
68
|
+
|
|
69
|
+
Classifications drive: log masking, audit field tracking, governance warnings, and encryption requirements.
|
|
70
|
+
|
|
71
|
+
## Relations
|
|
72
|
+
|
|
73
|
+
```ts
|
|
74
|
+
field.relation({ entity: "Organization", type: "many-to-one" })
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
Relation types: `one-to-one`, `one-to-many`, `many-to-one`, `many-to-many`.
|
|
78
|
+
|
|
79
|
+
## Repository (generated)
|
|
80
|
+
|
|
81
|
+
Each entity gets a typed repository on `ctx.data`:
|
|
82
|
+
|
|
83
|
+
```ts
|
|
84
|
+
const user = await ctx.data.User.findById("usr_123");
|
|
85
|
+
const users = await ctx.data.User.findMany({ active: true });
|
|
86
|
+
const created = await ctx.data.User.create({ email: "a@b.com", name: "Alice" });
|
|
87
|
+
await ctx.data.User.update("usr_123", { active: false });
|
|
88
|
+
await ctx.data.User.delete("usr_123");
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
Repositories automatically:
|
|
92
|
+
- Inject `tenantId` from `ctx.auth.tenantId` (if `tenantScoped: true`)
|
|
93
|
+
- Record audit events for mutations
|
|
94
|
+
- Mask sensitive fields in logs
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
# Events
|
|
2
|
+
|
|
3
|
+
Events represent domain facts that have occurred. They are emitted by capabilities and consumed by event handlers or flow triggers.
|
|
4
|
+
|
|
5
|
+
## Defining an Event
|
|
6
|
+
|
|
7
|
+
```ts
|
|
8
|
+
import { defineEvent } from "@plumbus/core";
|
|
9
|
+
import { z } from "zod";
|
|
10
|
+
|
|
11
|
+
export const orderPlaced = defineEvent({
|
|
12
|
+
name: "order.placed",
|
|
13
|
+
domain: "orders",
|
|
14
|
+
version: "1.0.0",
|
|
15
|
+
|
|
16
|
+
payload: z.object({
|
|
17
|
+
orderId: z.string(),
|
|
18
|
+
customerId: z.string(),
|
|
19
|
+
amount: z.number(),
|
|
20
|
+
items: z.array(z.object({ productId: z.string(), quantity: z.number() })),
|
|
21
|
+
}),
|
|
22
|
+
});
|
|
23
|
+
```
|
|
24
|
+
|
|
25
|
+
## Naming Convention
|
|
26
|
+
|
|
27
|
+
Use `<domain>.<past-tense-verb>` format: `order.placed`, `refund.requested`, `user.updated`, `invoice.paid`.
|
|
28
|
+
|
|
29
|
+
## Emission
|
|
30
|
+
|
|
31
|
+
Events are emitted inside capability handlers via `ctx.events.emit`:
|
|
32
|
+
|
|
33
|
+
```ts
|
|
34
|
+
handler: async (ctx, input) => {
|
|
35
|
+
const order = await ctx.data.Order.create(input);
|
|
36
|
+
await ctx.events.emit("order.placed", {
|
|
37
|
+
orderId: order.id,
|
|
38
|
+
customerId: input.customerId,
|
|
39
|
+
amount: input.total,
|
|
40
|
+
items: input.items,
|
|
41
|
+
});
|
|
42
|
+
return { orderId: order.id };
|
|
43
|
+
}
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
## Outbox Pattern
|
|
47
|
+
|
|
48
|
+
Events are **not** dispatched immediately. They are written to an outbox table in the **same database transaction** as the capability's data changes. This guarantees at-least-once delivery with no data/event inconsistency.
|
|
49
|
+
|
|
50
|
+
A background dispatcher polls the outbox and publishes events to the queue system for delivery.
|
|
51
|
+
|
|
52
|
+
## Event Envelope
|
|
53
|
+
|
|
54
|
+
When delivered, each event is wrapped in an envelope:
|
|
55
|
+
|
|
56
|
+
```ts
|
|
57
|
+
{
|
|
58
|
+
id: "evt_abc123", // Unique event ID
|
|
59
|
+
eventType: "order.placed", // Event name
|
|
60
|
+
version: "1.0.0", // Schema version
|
|
61
|
+
occurredAt: Date, // When it happened
|
|
62
|
+
actor: "usr_456", // Who caused it
|
|
63
|
+
tenantId: "tnt_789", // Tenant scope
|
|
64
|
+
correlationId: "corr_xyz", // Request correlation
|
|
65
|
+
causationId: "evt_prev", // Causing event (if chained)
|
|
66
|
+
payload: { ... } // Typed payload
|
|
67
|
+
}
|
|
68
|
+
```
|
|
69
|
+
|
|
70
|
+
## Consuming Events
|
|
71
|
+
|
|
72
|
+
Events are consumed by capabilities with `kind: "eventHandler"`:
|
|
73
|
+
|
|
74
|
+
```ts
|
|
75
|
+
export const onOrderPlaced = defineCapability({
|
|
76
|
+
name: "onOrderPlaced",
|
|
77
|
+
kind: "eventHandler",
|
|
78
|
+
domain: "fulfillment",
|
|
79
|
+
// ...
|
|
80
|
+
handler: async (ctx, event) => {
|
|
81
|
+
// event is the typed payload
|
|
82
|
+
await ctx.data.Shipment.create({ orderId: event.orderId });
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
## Idempotency
|
|
88
|
+
|
|
89
|
+
Consumers should be idempotent — processing the same event twice must produce the same result. The framework tracks delivered event+consumer pairs to support this.
|
|
90
|
+
|
|
91
|
+
## Versioning
|
|
92
|
+
|
|
93
|
+
Include `version` in event definitions. When schemas evolve, bump the version. Consumers can specify version constraints.
|