@aotter/mantle 0.1.4 → 0.2.0-alpha.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +39 -306
- package/dist/admin/consent.d.ts +17 -0
- package/dist/admin/consent.d.ts.map +1 -0
- package/dist/admin/consent.js +17 -0
- package/dist/admin/consent.js.map +1 -0
- package/dist/admin/createAdminSurface.d.ts +22 -0
- package/dist/admin/createAdminSurface.d.ts.map +1 -0
- package/dist/admin/createAdminSurface.js +589 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +264 -0
- package/dist/admin/developerConsole.d.ts.map +1 -0
- package/dist/admin/developerConsole.js +136 -0
- package/dist/admin/developerConsole.js.map +1 -0
- package/dist/admin/identity.d.ts +62 -0
- package/dist/admin/identity.d.ts.map +1 -0
- package/dist/admin/identity.js +7 -0
- package/dist/admin/identity.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +4 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/procedureFlow.d.ts +25 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +154 -0
- package/dist/admin/procedureFlow.js.map +1 -0
- package/dist/auth/ConsoleEmailSender.d.ts +15 -0
- package/dist/auth/ConsoleEmailSender.d.ts.map +1 -0
- package/dist/auth/ConsoleEmailSender.js +19 -0
- package/dist/auth/ConsoleEmailSender.js.map +1 -0
- package/dist/auth/appleClientSecret.d.ts +75 -0
- package/dist/auth/appleClientSecret.d.ts.map +1 -0
- package/dist/auth/appleClientSecret.js +116 -0
- package/dist/auth/appleClientSecret.js.map +1 -0
- package/dist/auth/buildAuth.d.ts +4565 -0
- package/dist/auth/buildAuth.d.ts.map +1 -0
- package/dist/auth/buildAuth.js +307 -0
- package/dist/auth/buildAuth.js.map +1 -0
- package/dist/auth/callerResolver.d.ts +48 -0
- package/dist/auth/callerResolver.d.ts.map +1 -0
- package/dist/auth/callerResolver.js +49 -0
- package/dist/auth/callerResolver.js.map +1 -0
- package/dist/auth/createAuthRoutes.d.ts +22 -0
- package/dist/auth/createAuthRoutes.d.ts.map +1 -0
- package/dist/auth/createAuthRoutes.js +128 -0
- package/dist/auth/createAuthRoutes.js.map +1 -0
- package/dist/auth/createMantleAuth.d.ts +3 -0
- package/dist/auth/createMantleAuth.d.ts.map +1 -0
- package/dist/auth/createMantleAuth.js +483 -0
- package/dist/auth/createMantleAuth.js.map +1 -0
- package/dist/auth/db.d.ts +17 -0
- package/dist/auth/db.d.ts.map +1 -0
- package/dist/auth/db.js +24 -0
- package/dist/auth/db.js.map +1 -0
- package/dist/auth/emailTemplates.d.ts +7 -0
- package/dist/auth/emailTemplates.d.ts.map +1 -0
- package/dist/auth/emailTemplates.js +27 -0
- package/dist/auth/emailTemplates.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/methods.d.ts +717 -0
- package/dist/auth/methods.d.ts.map +1 -0
- package/dist/auth/methods.js +321 -0
- package/dist/auth/methods.js.map +1 -0
- package/dist/auth/oauthTokens.d.ts +24 -0
- package/dist/auth/oauthTokens.d.ts.map +1 -0
- package/dist/auth/oauthTokens.js +146 -0
- package/dist/auth/oauthTokens.js.map +1 -0
- package/dist/auth/setupIncomplete.d.ts +16 -0
- package/dist/auth/setupIncomplete.d.ts.map +1 -0
- package/dist/auth/setupIncomplete.js +50 -0
- package/dist/auth/setupIncomplete.js.map +1 -0
- package/dist/auth/types.d.ts +440 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bun/index.d.ts +65 -0
- package/dist/bun/index.d.ts.map +1 -0
- package/dist/bun/index.js +130 -0
- package/dist/bun/index.js.map +1 -0
- package/dist/cli/emitModule.d.ts +7 -0
- package/dist/cli/emitModule.d.ts.map +1 -0
- package/dist/cli/emitModule.js +127 -0
- package/dist/cli/emitModule.js.map +1 -0
- package/dist/cli/generate.d.ts +4 -16
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +332 -165
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +15 -71
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/preset.d.ts +18 -0
- package/dist/cli/preset.d.ts.map +1 -0
- package/dist/cli/preset.js +352 -0
- package/dist/cli/preset.js.map +1 -0
- package/dist/cloudflare/index.d.ts +21 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +14 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/r2Media.d.ts +43 -0
- package/dist/cloudflare/r2Media.d.ts.map +1 -0
- package/dist/cloudflare/r2Media.js +69 -0
- package/dist/cloudflare/r2Media.js.map +1 -0
- package/dist/core/caller.d.ts +35 -0
- package/dist/core/caller.d.ts.map +1 -0
- package/dist/core/caller.js +3 -0
- package/dist/core/caller.js.map +1 -0
- package/dist/core/createMantle.d.ts +22 -0
- package/dist/core/createMantle.d.ts.map +1 -0
- package/dist/core/createMantle.js +117 -0
- package/dist/core/createMantle.js.map +1 -0
- package/dist/core/dialect.d.ts +41 -0
- package/dist/core/dialect.d.ts.map +1 -0
- package/dist/core/dialect.js +7 -0
- package/dist/core/dialect.js.map +1 -0
- package/dist/core/driver.d.ts +17 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +2 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/email.d.ts +17 -0
- package/dist/core/email.d.ts.map +1 -0
- package/dist/core/email.js +2 -0
- package/dist/core/email.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/invocation.d.ts +66 -0
- package/dist/core/invocation.d.ts.map +1 -0
- package/dist/core/invocation.js +3 -0
- package/dist/core/invocation.js.map +1 -0
- package/dist/core/runtime/auth.d.ts +9 -0
- package/dist/core/runtime/auth.d.ts.map +1 -0
- package/dist/core/runtime/auth.js +39 -0
- package/dist/core/runtime/auth.js.map +1 -0
- package/dist/core/runtime/createRuntime.d.ts +23 -0
- package/dist/core/runtime/createRuntime.d.ts.map +1 -0
- package/dist/core/runtime/createRuntime.js +214 -0
- package/dist/core/runtime/createRuntime.js.map +1 -0
- package/dist/core/runtime/verifyPlan.d.ts +34 -0
- package/dist/core/runtime/verifyPlan.d.ts.map +1 -0
- package/dist/core/runtime/verifyPlan.js +301 -0
- package/dist/core/runtime/verifyPlan.js.map +1 -0
- package/dist/core/service.d.ts +45 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +2 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/site.d.ts +117 -0
- package/dist/core/site.d.ts.map +1 -0
- package/dist/core/site.js +2 -0
- package/dist/core/site.js.map +1 -0
- package/dist/core/siteConfig.d.ts +5 -0
- package/dist/core/siteConfig.d.ts.map +1 -0
- package/dist/core/siteConfig.js +24 -0
- package/dist/core/siteConfig.js.map +1 -0
- package/dist/core/sql/allowlist.d.ts +65 -0
- package/dist/core/sql/allowlist.d.ts.map +1 -0
- package/dist/core/sql/allowlist.js +705 -0
- package/dist/core/sql/allowlist.js.map +1 -0
- package/dist/core/sql/ast.d.ts +24 -0
- package/dist/core/sql/ast.d.ts.map +1 -0
- package/dist/core/sql/ast.js +32 -0
- package/dist/core/sql/ast.js.map +1 -0
- package/dist/core/sql/compile.d.ts +50 -0
- package/dist/core/sql/compile.d.ts.map +1 -0
- package/dist/core/sql/compile.js +48 -0
- package/dist/core/sql/compile.js.map +1 -0
- package/dist/core/sql/policy.d.ts +121 -0
- package/dist/core/sql/policy.d.ts.map +1 -0
- package/dist/core/sql/policy.js +379 -0
- package/dist/core/sql/policy.js.map +1 -0
- package/dist/core/sql/positions.d.ts +30 -0
- package/dist/core/sql/positions.d.ts.map +1 -0
- package/dist/core/sql/positions.js +22 -0
- package/dist/core/sql/positions.js.map +1 -0
- package/dist/core/sql/run.d.ts +76 -0
- package/dist/core/sql/run.d.ts.map +1 -0
- package/dist/core/sql/run.js +267 -0
- package/dist/core/sql/run.js.map +1 -0
- package/dist/core/store/createStore.d.ts +49 -0
- package/dist/core/store/createStore.d.ts.map +1 -0
- package/dist/core/store/createStore.js +227 -0
- package/dist/core/store/createStore.js.map +1 -0
- package/dist/core/store/cursor.d.ts +4 -0
- package/dist/core/store/cursor.d.ts.map +1 -0
- package/dist/core/store/cursor.js +22 -0
- package/dist/core/store/cursor.js.map +1 -0
- package/dist/core/store/json.d.ts +80 -0
- package/dist/core/store/json.d.ts.map +1 -0
- package/dist/core/store/json.js +342 -0
- package/dist/core/store/json.js.map +1 -0
- package/dist/core/store.d.ts +160 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/wire.d.ts +20 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/core/wire.js +84 -0
- package/dist/core/wire.js.map +1 -0
- package/dist/core/withCaller.d.ts +16 -0
- package/dist/core/withCaller.d.ts.map +1 -0
- package/dist/core/withCaller.js +29 -0
- package/dist/core/withCaller.js.map +1 -0
- package/dist/d1/adapter.d.ts +12 -0
- package/dist/d1/adapter.d.ts.map +1 -0
- package/dist/d1/adapter.js +23 -0
- package/dist/d1/adapter.js.map +1 -0
- package/dist/d1/codec.d.ts +14 -0
- package/dist/d1/codec.d.ts.map +1 -0
- package/dist/d1/codec.js +136 -0
- package/dist/d1/codec.js.map +1 -0
- package/dist/d1/compile/index.d.ts +9 -0
- package/dist/d1/compile/index.d.ts.map +1 -0
- package/dist/d1/compile/index.js +9 -0
- package/dist/d1/compile/index.js.map +1 -0
- package/dist/d1/dialect.d.ts +4 -0
- package/dist/d1/dialect.d.ts.map +1 -0
- package/dist/d1/dialect.js +13 -0
- package/dist/d1/dialect.js.map +1 -0
- package/dist/d1/executor.d.ts +13 -0
- package/dist/d1/executor.d.ts.map +1 -0
- package/dist/d1/executor.js +91 -0
- package/dist/d1/executor.js.map +1 -0
- package/dist/d1/index.d.ts +6 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +6 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/d1/lower.d.ts +8 -0
- package/dist/d1/lower.d.ts.map +1 -0
- package/dist/d1/lower.js +167 -0
- package/dist/d1/lower.js.map +1 -0
- package/dist/d1/media.d.ts +5 -0
- package/dist/d1/media.d.ts.map +1 -0
- package/dist/d1/media.js +157 -0
- package/dist/d1/media.js.map +1 -0
- package/dist/d1/migrations.d.ts +12 -0
- package/dist/d1/migrations.d.ts.map +1 -0
- package/dist/d1/migrations.js +111 -0
- package/dist/d1/migrations.js.map +1 -0
- package/dist/d1/print.d.ts +28 -0
- package/dist/d1/print.d.ts.map +1 -0
- package/dist/d1/print.js +54 -0
- package/dist/d1/print.js.map +1 -0
- package/dist/d1/site.d.ts +17 -0
- package/dist/d1/site.d.ts.map +1 -0
- package/dist/d1/site.js +63 -0
- package/dist/d1/site.js.map +1 -0
- package/dist/d1/storage.d.ts +34 -0
- package/dist/d1/storage.d.ts.map +1 -0
- package/dist/d1/storage.js +288 -0
- package/dist/d1/storage.js.map +1 -0
- package/dist/d1/tz.d.ts +21 -0
- package/dist/d1/tz.d.ts.map +1 -0
- package/dist/d1/tz.js +54 -0
- package/dist/d1/tz.js.map +1 -0
- package/dist/d1/validator.d.ts +10 -0
- package/dist/d1/validator.d.ts.map +1 -0
- package/dist/d1/validator.js +33 -0
- package/dist/d1/validator.js.map +1 -0
- package/dist/mcp/apps.d.ts +43 -0
- package/dist/mcp/apps.d.ts.map +1 -0
- package/dist/mcp/apps.js +57 -0
- package/dist/mcp/apps.js.map +1 -0
- package/dist/mcp/catalog.d.ts +55 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +81 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/createMcpSurface.d.ts +34 -0
- package/dist/mcp/createMcpSurface.d.ts.map +1 -0
- package/dist/mcp/createMcpSurface.js +150 -0
- package/dist/mcp/createMcpSurface.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/postgres/adapter.d.ts +20 -0
- package/dist/postgres/adapter.d.ts.map +1 -0
- package/dist/postgres/adapter.js +44 -0
- package/dist/postgres/adapter.js.map +1 -0
- package/dist/postgres/codec.d.ts +13 -0
- package/dist/postgres/codec.d.ts.map +1 -0
- package/dist/postgres/codec.js +110 -0
- package/dist/postgres/codec.js.map +1 -0
- package/dist/postgres/compile/index.d.ts +9 -0
- package/dist/postgres/compile/index.d.ts.map +1 -0
- package/dist/postgres/compile/index.js +9 -0
- package/dist/postgres/compile/index.js.map +1 -0
- package/dist/postgres/driver.d.ts +92 -0
- package/dist/postgres/driver.d.ts.map +1 -0
- package/dist/postgres/driver.js +110 -0
- package/dist/postgres/driver.js.map +1 -0
- package/dist/postgres/executor.d.ts +20 -0
- package/dist/postgres/executor.d.ts.map +1 -0
- package/dist/postgres/executor.js +69 -0
- package/dist/postgres/executor.js.map +1 -0
- package/dist/postgres/index.d.ts +7 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/lower.d.ts +6 -0
- package/dist/postgres/lower.d.ts.map +1 -0
- package/dist/postgres/lower.js +157 -0
- package/dist/postgres/lower.js.map +1 -0
- package/dist/postgres/print.d.ts +11 -0
- package/dist/postgres/print.d.ts.map +1 -0
- package/dist/postgres/print.js +121 -0
- package/dist/postgres/print.js.map +1 -0
- package/dist/postgres/storage.d.ts +19 -0
- package/dist/postgres/storage.d.ts.map +1 -0
- package/dist/postgres/storage.js +201 -0
- package/dist/postgres/storage.js.map +1 -0
- package/dist/postgres/textRows.d.ts +10 -0
- package/dist/postgres/textRows.d.ts.map +1 -0
- package/dist/postgres/textRows.js +44 -0
- package/dist/postgres/textRows.js.map +1 -0
- package/dist/postgres/validator.d.ts +12 -0
- package/dist/postgres/validator.d.ts.map +1 -0
- package/dist/postgres/validator.js +46 -0
- package/dist/postgres/validator.js.map +1 -0
- package/dist/spec/domain/index.d.ts +3 -0
- package/dist/spec/domain/index.d.ts.map +1 -0
- package/dist/spec/domain/index.js +3 -0
- package/dist/spec/domain/index.js.map +1 -0
- package/dist/spec/domain/model/ContentState.d.ts +8 -0
- package/dist/spec/domain/model/ContentState.d.ts.map +1 -0
- package/dist/spec/domain/model/ContentState.js +7 -0
- package/dist/spec/domain/model/ContentState.js.map +1 -0
- package/dist/spec/domain/model/Entry.d.ts +29 -0
- package/dist/spec/domain/model/Entry.d.ts.map +1 -0
- package/dist/spec/domain/model/Entry.js +16 -0
- package/dist/spec/domain/model/Entry.js.map +1 -0
- package/dist/spec/domain/model/Locale.d.ts +30 -0
- package/dist/spec/domain/model/Locale.d.ts.map +1 -0
- package/dist/spec/domain/model/Locale.js +33 -0
- package/dist/spec/domain/model/Locale.js.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts +452 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.js +149 -0
- package/dist/spec/domain/model/ManifestGrammar.js.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +55 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.js +90 -0
- package/dist/spec/domain/model/MediaMimeAccept.js.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts +94 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.js +4 -0
- package/dist/spec/domain/model/RuntimePlan.js.map +1 -0
- package/dist/spec/domain/model/SiteConfig.d.ts +173 -0
- package/dist/spec/domain/model/SiteConfig.d.ts.map +1 -0
- package/dist/spec/domain/model/SiteConfig.js +13 -0
- package/dist/spec/domain/model/SiteConfig.js.map +1 -0
- package/dist/spec/domain/model/SqlIr.d.ts +96 -0
- package/dist/spec/domain/model/SqlIr.d.ts.map +1 -0
- package/dist/spec/domain/model/SqlIr.js +95 -0
- package/dist/spec/domain/model/SqlIr.js.map +1 -0
- package/dist/spec/domain/model/index.d.ts +14 -0
- package/dist/spec/domain/model/index.d.ts.map +1 -0
- package/dist/spec/domain/model/index.js +14 -0
- package/dist/spec/domain/model/index.js.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts +2 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.js +63 -0
- package/dist/spec/domain/service/CloudflareCron.js.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +34 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js +114 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts +56 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.js +88 -0
- package/dist/spec/domain/service/EntryDataValidator.js.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +29 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js +156 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +75 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js +76 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +29 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js +96 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +60 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js +116 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +15 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js +225 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts +45 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.js +92 -0
- package/dist/spec/domain/service/ManifestLinker.js.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +16 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +76 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +1 -0
- package/dist/spec/domain/service/ManifestParser.d.ts +49 -0
- package/dist/spec/domain/service/ManifestParser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestParser.js +203 -0
- package/dist/spec/domain/service/ManifestParser.js.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts +9 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.js +19 -0
- package/dist/spec/domain/service/ManifestPartition.js.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +33 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +43 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +10 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js +76 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts +25 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.js +50 -0
- package/dist/spec/domain/service/McpToolNaming.js.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts +4 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.js +14 -0
- package/dist/spec/domain/service/PlanFingerprint.js.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +211 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +42 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +289 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +33 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js +256 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +11 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js +78 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +31 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js +445 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +39 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js +194 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +1 -0
- package/dist/spec/domain/service/SqlClassify.d.ts +19 -0
- package/dist/spec/domain/service/SqlClassify.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlClassify.js +42 -0
- package/dist/spec/domain/service/SqlClassify.js.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts +16 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.js +20 -0
- package/dist/spec/domain/service/SqlRefusal.js.map +1 -0
- package/dist/spec/domain/service/SqlTypes.d.ts +40 -0
- package/dist/spec/domain/service/SqlTypes.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlTypes.js +110 -0
- package/dist/spec/domain/service/SqlTypes.js.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +3 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js +19 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +16 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js +337 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js +89 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +11 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +26 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +14 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js +53 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/index.d.ts +24 -0
- package/dist/spec/domain/service/index.d.ts.map +1 -0
- package/dist/spec/domain/service/index.js +24 -0
- package/dist/spec/domain/service/index.js.map +1 -0
- package/dist/spec/index.d.ts +10 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +12 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +16 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js +34 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +1 -0
- package/dist/spec/infrastructure/index.d.ts +2 -0
- package/dist/spec/infrastructure/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/index.js +2 -0
- package/dist/spec/infrastructure/index.js.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +18 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js +17 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +37 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.js +282 -0
- package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts +35 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.js +92 -0
- package/dist/spec/infrastructure/sql/compileSql.js.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +8 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.js +100 -0
- package/dist/spec/infrastructure/sql/frontEnd.js.map +1 -0
- package/dist/spec/infrastructure/sql/index.d.ts +4 -0
- package/dist/spec/infrastructure/sql/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/index.js +4 -0
- package/dist/spec/infrastructure/sql/index.js.map +1 -0
- package/dist/spec/kernel/diagnostic.d.ts +137 -0
- package/dist/spec/kernel/diagnostic.d.ts.map +1 -0
- package/dist/spec/kernel/diagnostic.js +296 -0
- package/dist/spec/kernel/diagnostic.js.map +1 -0
- package/dist/spec/kernel/index.d.ts +8 -0
- package/dist/spec/kernel/index.d.ts.map +1 -0
- package/dist/spec/kernel/index.js +8 -0
- package/dist/spec/kernel/index.js.map +1 -0
- package/dist/spec/usecase/EmitTypes.d.ts +22 -0
- package/dist/spec/usecase/EmitTypes.d.ts.map +1 -0
- package/dist/spec/usecase/EmitTypes.js +182 -0
- package/dist/spec/usecase/EmitTypes.js.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +8 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js +101 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +27 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +14 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +1 -0
- package/dist/spec/usecase/dto/index.d.ts +3 -0
- package/dist/spec/usecase/dto/index.d.ts.map +1 -0
- package/dist/spec/usecase/dto/index.js +3 -0
- package/dist/spec/usecase/dto/index.js.map +1 -0
- package/dist/spec/usecase/index.d.ts +10 -0
- package/dist/spec/usecase/index.d.ts.map +1 -0
- package/dist/spec/usecase/index.js +10 -0
- package/dist/spec/usecase/index.js.map +1 -0
- package/dist/testing/cases/before-hook.d.ts +4 -0
- package/dist/testing/cases/before-hook.d.ts.map +1 -0
- package/dist/testing/cases/before-hook.js +71 -0
- package/dist/testing/cases/before-hook.js.map +1 -0
- package/dist/testing/cases/corpus.d.ts +12 -0
- package/dist/testing/cases/corpus.d.ts.map +1 -0
- package/dist/testing/cases/corpus.js +91 -0
- package/dist/testing/cases/corpus.js.map +1 -0
- package/dist/testing/cases/policy.d.ts +74 -0
- package/dist/testing/cases/policy.d.ts.map +1 -0
- package/dist/testing/cases/policy.js +142 -0
- package/dist/testing/cases/policy.js.map +1 -0
- package/dist/testing/cases/printer.d.ts +4 -0
- package/dist/testing/cases/printer.d.ts.map +1 -0
- package/dist/testing/cases/printer.js +32 -0
- package/dist/testing/cases/printer.js.map +1 -0
- package/dist/testing/cases/report-view.d.ts +5 -0
- package/dist/testing/cases/report-view.d.ts.map +1 -0
- package/dist/testing/cases/report-view.js +33 -0
- package/dist/testing/cases/report-view.js.map +1 -0
- package/dist/testing/cases/requisition.d.ts +4 -0
- package/dist/testing/cases/requisition.d.ts.map +1 -0
- package/dist/testing/cases/requisition.js +38 -0
- package/dist/testing/cases/requisition.js.map +1 -0
- package/dist/testing/cases/search-places.d.ts +4 -0
- package/dist/testing/cases/search-places.d.ts.map +1 -0
- package/dist/testing/cases/search-places.js +60 -0
- package/dist/testing/cases/search-places.js.map +1 -0
- package/dist/testing/cases/stock.d.ts +4 -0
- package/dist/testing/cases/stock.d.ts.map +1 -0
- package/dist/testing/cases/stock.js +35 -0
- package/dist/testing/cases/stock.js.map +1 -0
- package/dist/testing/cases/store.d.ts +4 -0
- package/dist/testing/cases/store.d.ts.map +1 -0
- package/dist/testing/cases/store.js +100 -0
- package/dist/testing/cases/store.js.map +1 -0
- package/dist/testing/harness.d.ts +94 -0
- package/dist/testing/harness.d.ts.map +1 -0
- package/dist/testing/harness.js +168 -0
- package/dist/testing/harness.js.map +1 -0
- package/dist/testing/index.d.ts +37 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +43 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/report.d.ts +15 -0
- package/dist/testing/report.d.ts.map +1 -0
- package/dist/testing/report.js +22 -0
- package/dist/testing/report.js.map +1 -0
- package/dist/web/createRestSurface.d.ts +7 -0
- package/dist/web/createRestSurface.d.ts.map +1 -0
- package/dist/web/createRestSurface.js +39 -0
- package/dist/web/createRestSurface.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -0
- package/docs/adr/0008-structured-diagnostic-shape.md +2 -2
- package/docs/adr/0011-adapter-port-spec.md +2 -2
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +21 -2
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +5 -1
- package/docs/adr/0021-retire-starter-scaffolding.md +1 -1
- package/docs/adr/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0026-progressive-generate.md +36 -0
- package/docs/adr/0027-scheduled-procedure-triggers.md +31 -0
- package/docs/adr/0028-schema-ttl-expiry.md +33 -0
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +324 -0
- package/docs/adr/0030-store.md +40 -0
- package/docs/adr/0031-host-cloud-core-contract.md +25 -0
- package/docs/adr/0032-store-centric-core-and-service-contract.md +361 -0
- package/docs/adr/0033-storage-converges-to-the-plan.md +92 -0
- package/docs/adr/0034-store-is-authored-as-sql.md +192 -0
- package/docs/adr/0035-sql-dialects.md +154 -0
- package/docs/adr/0036-host-and-dialect.md +65 -0
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +124 -0
- package/docs/adr/0038-bun-native-host.md +63 -0
- package/docs/adr/README.md +26 -8
- package/docs/adr/adr-lite-861-admin-webmcp.md +6 -0
- package/docs/adr/adr-lite-909-admin-ui-kit.md +1 -1
- package/docs/examples/README.md +16 -18
- package/docs/examples/commerce-inventory.md +481 -0
- package/docs/examples/commerce.md +254 -0
- package/docs/examples/guarded-api.md +238 -0
- package/docs/examples/intake-hooks.md +237 -0
- package/docs/examples/intake.md +127 -0
- package/docs/examples/legal-documents.md +218 -0
- package/docs/examples/procurement.md +215 -0
- package/docs/examples/publication.md +211 -0
- package/docs/examples/reference-service/.dev.vars.example +4 -0
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +174 -0
- package/docs/examples/reference-service/.mantle/generated/plan.json +1936 -0
- package/docs/examples/reference-service/README.md +33 -0
- package/docs/examples/reference-service/manifests/catalog.yaml +103 -0
- package/docs/examples/reference-service/manifests/orders.yaml +120 -0
- package/docs/examples/reference-service/mantle.config.json +1 -0
- package/docs/examples/reference-service/package.json +27 -0
- package/docs/examples/reference-service/smoke.mjs +156 -0
- package/docs/examples/reference-service/src/handlers.ts +36 -0
- package/docs/examples/reference-service/src/index.ts +33 -0
- package/docs/examples/reference-service/src/service.ts +78 -0
- package/docs/examples/{host-minimal-worker → reference-service}/tsconfig.json +7 -2
- package/docs/examples/reference-service/wrangler.jsonc +26 -0
- package/docs/examples/reservation.md +142 -0
- package/docs/handbook/cloudflare/authentication.md +96 -299
- package/docs/handbook/cloudflare/chatgpt-sites.md +104 -15
- package/docs/handbook/cloudflare/deploy-and-operate.md +77 -71
- package/docs/handbook/cloudflare/media-r2.md +64 -187
- package/docs/handbook/cloudflare/service-entry.md +138 -0
- package/docs/handbook/concepts/authorization.md +104 -94
- package/docs/handbook/concepts/four-atoms.md +68 -144
- package/docs/handbook/concepts/lifecycle-and-locales.md +62 -114
- package/docs/handbook/concepts/mcp-and-agents.md +112 -117
- package/docs/handbook/concepts/procedures-and-triggers.md +126 -181
- package/docs/handbook/concepts/runtime-and-adapters.md +177 -156
- package/docs/handbook/concepts/views.md +97 -173
- package/docs/handbook/examples/hub.md +17 -6
- package/docs/handbook/guides/admin-ui.md +101 -96
- package/docs/handbook/guides/agent-setup.md +56 -71
- package/docs/handbook/guides/typed-queries.md +105 -111
- package/docs/handbook/navigation.json +8 -32
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -173
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +92 -229
- package/docs/handbook/reference/schema.md +156 -215
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +73 -162
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -22
- package/docs/handbook/start/overview.md +59 -48
- package/docs/handbook/start/project-and-cli.md +127 -116
- package/docs/handbook/start/quickstart-worker.md +102 -151
- package/docs/skills/develop/SKILL.md +114 -232
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +96 -0
- package/docs/skills/media-gc/SKILL.md +21 -10
- package/docs/skills/provision/SKILL.md +68 -162
- package/docs/skills/update/SKILL.md +33 -34
- package/docs/upgrade-0.1-to-0.2.md +211 -0
- package/package.json +87 -105
- package/dist/admin-ui.d.ts +0 -2
- package/dist/admin-ui.d.ts.map +0 -1
- package/dist/admin-ui.js +0 -2
- package/dist/admin-ui.js.map +0 -1
- package/dist/admin.d.ts +0 -2
- package/dist/admin.d.ts.map +0 -1
- package/dist/admin.js +0 -2
- package/dist/admin.js.map +0 -1
- package/dist/auth.d.ts +0 -2
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -2
- package/dist/auth.js.map +0 -1
- package/dist/bun.d.ts +0 -2
- package/dist/bun.d.ts.map +0 -1
- package/dist/bun.js +0 -2
- package/dist/bun.js.map +0 -1
- package/dist/cli/harness.d.ts +0 -3
- package/dist/cli/harness.d.ts.map +0 -1
- package/dist/cli/harness.js +0 -214
- package/dist/cli/harness.js.map +0 -1
- package/dist/cli/skills.d.ts +0 -3
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/skills.js +0 -128
- package/dist/cli/skills.js.map +0 -1
- package/dist/cloudflare.d.ts +0 -2
- package/dist/cloudflare.d.ts.map +0 -1
- package/dist/cloudflare.js +0 -2
- package/dist/cloudflare.js.map +0 -1
- package/dist/codegen/emitMantleModule.d.ts +0 -22
- package/dist/codegen/emitMantleModule.d.ts.map +0 -1
- package/dist/codegen/emitMantleModule.js +0 -291
- package/dist/codegen/emitMantleModule.js.map +0 -1
- package/dist/codegen.d.ts +0 -2
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -2
- package/dist/codegen.js.map +0 -1
- package/dist/runtime-testing.d.ts +0 -2
- package/dist/runtime-testing.d.ts.map +0 -1
- package/dist/runtime-testing.js +0 -2
- package/dist/runtime-testing.js.map +0 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -2
- package/dist/runtime.js.map +0 -1
- package/dist/spec.d.ts +0 -2
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js +0 -2
- package/dist/spec.js.map +0 -1
- package/dist/vercel-libsql.d.ts +0 -2
- package/dist/vercel-libsql.d.ts.map +0 -1
- package/dist/vercel-libsql.js +0 -2
- package/dist/vercel-libsql.js.map +0 -1
- package/dist/vercel.d.ts +0 -2
- package/dist/vercel.d.ts.map +0 -1
- package/dist/vercel.js +0 -2
- package/dist/vercel.js.map +0 -1
- package/dist/web.d.ts +0 -2
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js +0 -2
- package/dist/web.js.map +0 -1
- package/docs/adapter-guide.md +0 -222
- package/docs/agent-prompts.md +0 -102
- package/docs/api-mcp-authorization.md +0 -5
- package/docs/assets/mantle-admin-developer.png +0 -0
- package/docs/assets/mantle-admin-operations.png +0 -0
- package/docs/assets/mantle-hero.jpg +0 -0
- package/docs/auth-hosting-model.md +0 -166
- package/docs/cloudflare-low-level-composition.md +0 -5
- package/docs/consumer-onboarding-audit.md +0 -65
- package/docs/deferred-lifecycle-queues.md +0 -5
- package/docs/design-atoms.md +0 -16
- package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
- package/docs/direct-authoring.md +0 -5
- package/docs/examples/builtin-commerce.md +0 -269
- package/docs/examples/builtin-intake.md +0 -143
- package/docs/examples/builtin-legal-documents.md +0 -189
- package/docs/examples/builtin-procurement.md +0 -241
- package/docs/examples/builtin-publication.md +0 -241
- package/docs/examples/builtin-reservation.md +0 -149
- package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
- package/docs/examples/cf-primitives-guarded-api.md +0 -429
- package/docs/examples/cf-primitives-intake-hooks.md +0 -319
- package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
- package/docs/examples/host-chatgpt-sites/README.md +0 -70
- package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
- package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
- package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
- package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
- package/docs/examples/host-chatgpt-sites/package.json +0 -1
- package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
- package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
- package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
- package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -9
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -63
- package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
- package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
- package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
- package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
- package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
- package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
- package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
- package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
- package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
- package/docs/examples/host-local-admin-otp/README.md +0 -80
- package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
- package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
- package/docs/examples/host-local-admin-otp/package.json +0 -29
- package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
- package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
- package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
- package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
- package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
- package/docs/examples/host-minimal-worker/README.md +0 -41
- package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
- package/docs/examples/host-minimal-worker/package.json +0 -26
- package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
- package/docs/examples/host-minimal-worker/src/index.ts +0 -4
- package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
- package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -123
- package/docs/handbook/cloudflare/bindings.md +0 -298
- package/docs/handbook/cloudflare/conventional-worker.md +0 -162
- package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
- package/docs/handbook/cloudflare/low-level-composition.md +0 -169
- package/docs/handbook/cloudflare/public-web.md +0 -144
- package/docs/handbook/cloudflare/site-chrome.md +0 -75
- package/docs/handbook/examples/commerce-transaction.md +0 -11
- package/docs/handbook/examples/commerce.md +0 -11
- package/docs/handbook/examples/guarded-api.md +0 -10
- package/docs/handbook/examples/intake-form.md +0 -12
- package/docs/handbook/examples/intake-hooks.md +0 -11
- package/docs/handbook/examples/legal-documents.md +0 -10
- package/docs/handbook/examples/procurement-approvals.md +0 -10
- package/docs/handbook/examples/publication.md +0 -10
- package/docs/handbook/examples/reservation.md +0 -10
- package/docs/handbook/start/quickstart-admin.md +0 -50
- package/docs/labels.md +0 -71
- package/docs/media-uploads.md +0 -5
- package/docs/migration-0.1.2.md +0 -13
- package/docs/performance-harness.md +0 -228
- package/docs/release-process.md +0 -244
- package/docs/schema-indexes.md +0 -5
- package/docs/sealed-pipeline-ownership.md +0 -101
- package/docs/skills/plugin/SKILL.md +0 -132
- package/docs/skills/theme/SKILL.md +0 -77
- package/docs/spec-only-host-adoption.md +0 -157
- package/docs/transaction-patterns.md +0 -5
- package/skills/README.md +0 -125
- package/skills/develop/SKILL.md +0 -250
- package/skills/install/SKILL.md +0 -149
- package/skills/media-gc/SKILL.md +0 -85
- package/skills/plugin/SKILL.md +0 -132
- package/skills/provision/SKILL.md +0 -194
- package/skills/theme/SKILL.md +0 -77
- package/skills/update/SKILL.md +0 -51
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Members submit purchase requisitions and see only their own; staff review the queue with an optimistic lock.
|
|
3
|
+
---
|
|
4
|
+
# Procurement approvals with member and staff roles
|
|
5
|
+
|
|
6
|
+
[Examples hub](./README.md)
|
|
7
|
+
|
|
8
|
+
Two audiences share one table: signed-in members submit and track their own
|
|
9
|
+
requisitions, and staff approve or reject them. Every Procedure is SQL.
|
|
10
|
+
|
|
11
|
+
## Problem
|
|
12
|
+
|
|
13
|
+
A signed-in member submits a request number, an item, a quantity, a need-by
|
|
14
|
+
date and a justification, and sees only their own requisitions. Staff with the
|
|
15
|
+
`owner` or `editor` role see every `submitted` requisition, soonest need-by
|
|
16
|
+
date first, and mark each `approved` or `rejected` with a note. Two reviewers
|
|
17
|
+
must not silently overwrite each other's decision.
|
|
18
|
+
|
|
19
|
+
## Manifest
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
23
|
+
kind: Schema
|
|
24
|
+
metadata: { name: purchase-requisitions }
|
|
25
|
+
spec:
|
|
26
|
+
title: Purchase requisitions
|
|
27
|
+
description: Member-submitted purchase needs waiting for staff review.
|
|
28
|
+
lifecycle: operational
|
|
29
|
+
uniqueIndexes: [[requestNumber]]
|
|
30
|
+
indexes:
|
|
31
|
+
- [requestedBy, needBy]
|
|
32
|
+
- [requestStatus, needBy]
|
|
33
|
+
schema:
|
|
34
|
+
type: object
|
|
35
|
+
additionalProperties: false
|
|
36
|
+
required: [requestNumber, requestedBy, item, quantity, needBy, justification, requestStatus]
|
|
37
|
+
properties:
|
|
38
|
+
requestNumber: { type: string, maxLength: 40, pattern: "^REQ-[A-Z0-9-]+$" }
|
|
39
|
+
requestedBy: { type: string }
|
|
40
|
+
item: { type: string, minLength: 1, maxLength: 160 }
|
|
41
|
+
quantity: { type: integer, minimum: 1 }
|
|
42
|
+
needBy: { type: string, format: date }
|
|
43
|
+
justification: { type: string, minLength: 1, maxLength: 1000 }
|
|
44
|
+
requestStatus: { type: string, enum: [submitted, approved, rejected] }
|
|
45
|
+
reviewerNote: { type: string, maxLength: 1000 }
|
|
46
|
+
---
|
|
47
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
48
|
+
kind: View
|
|
49
|
+
metadata: { name: my-requisitions }
|
|
50
|
+
spec:
|
|
51
|
+
title: My requisitions
|
|
52
|
+
description: The signed-in member's own purchase requisitions and their approval status.
|
|
53
|
+
surface: public
|
|
54
|
+
requires: { auth: { all: [ctx.user] } }
|
|
55
|
+
sql: |
|
|
56
|
+
SELECT id, requestNumber, item, quantity, needBy, justification, requestStatus, reviewerNote, created_at
|
|
57
|
+
FROM "purchase-requisitions"
|
|
58
|
+
WHERE requestedBy = auth.uid()
|
|
59
|
+
ORDER BY created_at DESC LIMIT 100
|
|
60
|
+
---
|
|
61
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
62
|
+
kind: View
|
|
63
|
+
metadata: { name: pending-approvals }
|
|
64
|
+
spec:
|
|
65
|
+
title: Pending approvals
|
|
66
|
+
description: Purchase requisitions waiting for a staff decision, soonest need-by date first.
|
|
67
|
+
surface: staff
|
|
68
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
69
|
+
sql: |
|
|
70
|
+
SELECT id, version, requestNumber, requestedBy, item, quantity, needBy, justification, created_at
|
|
71
|
+
FROM "purchase-requisitions"
|
|
72
|
+
WHERE requestStatus = 'submitted'
|
|
73
|
+
ORDER BY needBy LIMIT 100
|
|
74
|
+
---
|
|
75
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
76
|
+
kind: Procedure
|
|
77
|
+
metadata: { name: submit-requisition }
|
|
78
|
+
spec:
|
|
79
|
+
title: Submit requisition
|
|
80
|
+
description: Submit a purchase requisition as the signed-in member.
|
|
81
|
+
requires: { auth: { all: [ctx.user] } }
|
|
82
|
+
input:
|
|
83
|
+
type: object
|
|
84
|
+
additionalProperties: false
|
|
85
|
+
required: [requestNumber, item, quantity, needBy, justification]
|
|
86
|
+
properties:
|
|
87
|
+
requestNumber: { type: string, maxLength: 40, pattern: "^REQ-[A-Z0-9-]+$" }
|
|
88
|
+
item: { type: string, minLength: 1, maxLength: 160 }
|
|
89
|
+
quantity: { type: integer, minimum: 1 }
|
|
90
|
+
needBy: { type: string, format: date }
|
|
91
|
+
justification: { type: string, minLength: 1, maxLength: 1000 }
|
|
92
|
+
output: { type: object }
|
|
93
|
+
handler:
|
|
94
|
+
sql: |
|
|
95
|
+
INSERT INTO "purchase-requisitions" (requestNumber, requestedBy, item, quantity, needBy, justification, requestStatus)
|
|
96
|
+
VALUES (input.requestNumber, auth.uid(), input.item, input.quantity, input.needBy, input.justification, 'submitted')
|
|
97
|
+
RETURNING id, requestNumber AS "requestNumber"
|
|
98
|
+
---
|
|
99
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
100
|
+
kind: Procedure
|
|
101
|
+
metadata: { name: review-requisition }
|
|
102
|
+
spec:
|
|
103
|
+
title: Review requisition
|
|
104
|
+
description: Approve or reject a submitted requisition, with the version the reviewer saw.
|
|
105
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
106
|
+
input:
|
|
107
|
+
type: object
|
|
108
|
+
additionalProperties: false
|
|
109
|
+
required: [id, expectedVersion, requestStatus]
|
|
110
|
+
properties:
|
|
111
|
+
id:
|
|
112
|
+
type: string
|
|
113
|
+
x-mantle-ref: { schema: purchase-requisitions, field: id }
|
|
114
|
+
expectedVersion: { type: integer, minimum: 1 }
|
|
115
|
+
requestStatus: { type: string, enum: [approved, rejected] }
|
|
116
|
+
reviewerNote: { type: string, maxLength: 1000 }
|
|
117
|
+
output: { type: object }
|
|
118
|
+
handler:
|
|
119
|
+
sql: |
|
|
120
|
+
UPDATE "purchase-requisitions"
|
|
121
|
+
SET requestStatus = input.requestStatus, reviewerNote = COALESCE(input.reviewerNote, reviewerNote)
|
|
122
|
+
WHERE id = input.id AND version = input.expectedVersion AND requestStatus = 'submitted'
|
|
123
|
+
RETURNING id, version, requestStatus AS "requestStatus"
|
|
124
|
+
---
|
|
125
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
126
|
+
kind: Trigger
|
|
127
|
+
metadata: { name: submit-requisition-http }
|
|
128
|
+
spec:
|
|
129
|
+
source: { kind: http, method: POST, path: /api/requisitions }
|
|
130
|
+
target: { procedure: submit-requisition }
|
|
131
|
+
---
|
|
132
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
133
|
+
kind: Trigger
|
|
134
|
+
metadata: { name: submit-requisition-mcp }
|
|
135
|
+
spec:
|
|
136
|
+
source: { kind: mcp, surface: public }
|
|
137
|
+
target: { procedure: submit-requisition }
|
|
138
|
+
---
|
|
139
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
140
|
+
kind: Trigger
|
|
141
|
+
metadata: { name: review-requisition-mcp }
|
|
142
|
+
spec:
|
|
143
|
+
source: { kind: mcp, surface: staff }
|
|
144
|
+
target: { procedure: review-requisition }
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
### Ownership without trusting the caller
|
|
148
|
+
|
|
149
|
+
- **The writer is `auth.uid()`, never an input.** `submit-requisition` sets
|
|
150
|
+
`requestedBy` to the caller's subject key in its SQL, and its input has no
|
|
151
|
+
such field. The status starts as the literal `'submitted'`.
|
|
152
|
+
- **Why not `scope`?** `scope: { requestedBy: auth.uid() }` would hide every
|
|
153
|
+
other member's rows from *every* user caller, staff included, so reviewers
|
|
154
|
+
could not see the queue. Scope is for rows only their owner may ever see.
|
|
155
|
+
Here the member View filters on `requestedBy = auth.uid()` instead, and
|
|
156
|
+
`requires: ctx.user` means an anonymous caller is 401 before the query runs.
|
|
157
|
+
- **A Schema whose name is not a plain identifier is quoted in SQL**:
|
|
158
|
+
`"purchase-requisitions"`.
|
|
159
|
+
|
|
160
|
+
### Optimistic concurrency
|
|
161
|
+
|
|
162
|
+
`review-requisition` pins one row with `id = input.id AND version =
|
|
163
|
+
input.expectedVersion`. `expectedVersion` is the version the reviewer read,
|
|
164
|
+
not that value plus one. A stale version matches no row, and a row op that
|
|
165
|
+
writes nothing fails with `CONFLICT` (HTTP 409), so nothing changes and the
|
|
166
|
+
reviewer reads again. `requestStatus = 'submitted'` in the same `WHERE` keeps a
|
|
167
|
+
decided row from being decided twice. The Procedure's `target` is inferred from
|
|
168
|
+
that `WHERE`.
|
|
169
|
+
|
|
170
|
+
The object form of `x-mantle-ref` names the bound field. The Schema's one
|
|
171
|
+
single-field unique index is `[requestNumber]`, so the string form would leave
|
|
172
|
+
Admin to guess, and it would pick the request number.
|
|
173
|
+
|
|
174
|
+
## Handlers
|
|
175
|
+
|
|
176
|
+
None.
|
|
177
|
+
|
|
178
|
+
## Try it
|
|
179
|
+
|
|
180
|
+
```sh
|
|
181
|
+
curl -i http://127.0.0.1:8787/api/views/my-requisitions
|
|
182
|
+
# HTTP 401, {"error":{"code":"UNAUTHENTICATED",...}}
|
|
183
|
+
|
|
184
|
+
curl -sS -X POST http://127.0.0.1:8787/api/requisitions \
|
|
185
|
+
-H 'content-type: application/json' -H "origin: http://127.0.0.1:8787" -H "cookie: $SESSION_COOKIE" \
|
|
186
|
+
-d '{"requestNumber":"REQ-2026-0002","item":"Monitor arm","quantity":2,"needBy":"2026-11-02","justification":"Second screen for review work."}'
|
|
187
|
+
```
|
|
188
|
+
|
|
189
|
+
A duplicate `requestNumber` is HTTP 409 `CONFLICT`. Staff call
|
|
190
|
+
`pending_approvals` on `/mcp/staff`, then:
|
|
191
|
+
|
|
192
|
+
```json
|
|
193
|
+
{
|
|
194
|
+
"jsonrpc": "2.0", "id": 2, "method": "tools/call",
|
|
195
|
+
"params": { "name": "review_requisition", "arguments": { "id": "<id>", "expectedVersion": 1, "requestStatus": "approved", "reviewerNote": "Within budget." } }
|
|
196
|
+
}
|
|
197
|
+
```
|
|
198
|
+
|
|
199
|
+
Replaying `expectedVersion: 1` afterwards is an error result with code
|
|
200
|
+
`CONFLICT`. A contributor gets `AUTH_DENIED`. The public surface lists
|
|
201
|
+
`submit_requisition` and `my_requisitions`; `review_requisition` is only on the
|
|
202
|
+
staff surface.
|
|
203
|
+
|
|
204
|
+
## What this leaves out
|
|
205
|
+
|
|
206
|
+
- **Approval chains.** One decision by one staff member. Sequential approvers
|
|
207
|
+
need a step field and a `before_update` hook that checks the transition.
|
|
208
|
+
- **Budgets.** A live budget check belongs in a `requires.guard` handler.
|
|
209
|
+
- **Notifications.** See the `after_create` hook in
|
|
210
|
+
[Intake with bot check and notification](./intake-hooks.md).
|
|
211
|
+
|
|
212
|
+
## Source
|
|
213
|
+
|
|
214
|
+
- [Authorization](../handbook/concepts/authorization.md): `scope`, `auth.uid()` and `requires`
|
|
215
|
+
- [Procedure reference](../handbook/reference/procedure.md): row ops and locks
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Localized posts with a stable parent identity, a public per-locale list, public full-text search and a reader suggestion box.
|
|
3
|
+
---
|
|
4
|
+
# Publication: localized posts with a public list
|
|
5
|
+
|
|
6
|
+
[Examples hub](./README.md)
|
|
7
|
+
|
|
8
|
+
Posts in several languages, a public list per locale, public search, and
|
|
9
|
+
reader suggestions. Every Procedure is SQL; editors draft and publish through
|
|
10
|
+
Admin.
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
Editors draft posts in one or more locales and publish each language version
|
|
15
|
+
on its own. Every language version shares one stable identity, its slug, so
|
|
16
|
+
the site can link translations and Admin can group them. Visitors read a
|
|
17
|
+
per-locale list of published posts, newest first, and search them. Readers may
|
|
18
|
+
suggest topics; suggestions are records staff read, never published.
|
|
19
|
+
|
|
20
|
+
## Manifest
|
|
21
|
+
|
|
22
|
+
```yaml
|
|
23
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
24
|
+
kind: Schema
|
|
25
|
+
metadata: { name: posts }
|
|
26
|
+
spec:
|
|
27
|
+
title: Posts
|
|
28
|
+
description: Stable post identities shared by every language version.
|
|
29
|
+
lifecycle: publishing
|
|
30
|
+
uniqueIndexes: [[slug]]
|
|
31
|
+
schema:
|
|
32
|
+
type: object
|
|
33
|
+
required: [slug]
|
|
34
|
+
properties:
|
|
35
|
+
slug: { type: string, maxLength: 120, pattern: "^[a-z0-9-]+$" }
|
|
36
|
+
---
|
|
37
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
38
|
+
kind: Schema
|
|
39
|
+
metadata: { name: post-translations }
|
|
40
|
+
spec:
|
|
41
|
+
title: Post translations
|
|
42
|
+
description: Localized titles and bodies for each post.
|
|
43
|
+
localized: true
|
|
44
|
+
translates: { parent: posts, on: slug }
|
|
45
|
+
lifecycle: publishing
|
|
46
|
+
uniqueIndexes: [[slug, locale]]
|
|
47
|
+
indexes: [[locale, publishedAt]]
|
|
48
|
+
searchableFields: [title, excerpt, body]
|
|
49
|
+
schema:
|
|
50
|
+
type: object
|
|
51
|
+
required: [slug, locale, title, publishedAt]
|
|
52
|
+
properties:
|
|
53
|
+
slug: { type: string, maxLength: 120, pattern: "^[a-z0-9-]+$" }
|
|
54
|
+
locale: { type: string }
|
|
55
|
+
title: { type: string }
|
|
56
|
+
excerpt: { type: string }
|
|
57
|
+
body: { type: string, x-mcp-hint: markdown }
|
|
58
|
+
publishedAt: { type: string, format: date-time }
|
|
59
|
+
---
|
|
60
|
+
# Public Views over publishing Schemas see published rows only.
|
|
61
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
62
|
+
kind: View
|
|
63
|
+
metadata: { name: published-posts }
|
|
64
|
+
spec:
|
|
65
|
+
title: Published posts
|
|
66
|
+
description: Published posts in one locale, newest first.
|
|
67
|
+
surface: public
|
|
68
|
+
input:
|
|
69
|
+
type: object
|
|
70
|
+
additionalProperties: false
|
|
71
|
+
required: [locale]
|
|
72
|
+
properties:
|
|
73
|
+
locale: { type: string }
|
|
74
|
+
sql: |
|
|
75
|
+
SELECT id, slug, locale, title, excerpt, publishedAt, updated_at
|
|
76
|
+
FROM "post-translations"
|
|
77
|
+
WHERE locale = input.locale
|
|
78
|
+
ORDER BY publishedAt DESC LIMIT 50
|
|
79
|
+
---
|
|
80
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
81
|
+
kind: View
|
|
82
|
+
metadata: { name: search-posts }
|
|
83
|
+
spec:
|
|
84
|
+
title: Search posts
|
|
85
|
+
description: Full-text search over published posts in one locale.
|
|
86
|
+
surface: public
|
|
87
|
+
input:
|
|
88
|
+
type: object
|
|
89
|
+
additionalProperties: false
|
|
90
|
+
required: [locale, q]
|
|
91
|
+
properties:
|
|
92
|
+
locale: { type: string }
|
|
93
|
+
q: { type: string, minLength: 1 }
|
|
94
|
+
sql: |
|
|
95
|
+
SELECT t.id, t.slug, t.title, t.excerpt FROM "post-translations" t
|
|
96
|
+
WHERE t.locale = input.locale AND mantle.search(t, input.q)
|
|
97
|
+
ORDER BY mantle.search_rank(t), t.id
|
|
98
|
+
LIMIT 20
|
|
99
|
+
---
|
|
100
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
101
|
+
kind: Schema
|
|
102
|
+
metadata: { name: post-suggestions }
|
|
103
|
+
spec:
|
|
104
|
+
title: Post suggestions
|
|
105
|
+
description: Reader suggestions for future posts.
|
|
106
|
+
lifecycle: operational
|
|
107
|
+
schema:
|
|
108
|
+
type: object
|
|
109
|
+
required: [title, email]
|
|
110
|
+
properties:
|
|
111
|
+
title: { type: string }
|
|
112
|
+
email: { type: string, format: email }
|
|
113
|
+
note: { type: string }
|
|
114
|
+
---
|
|
115
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
116
|
+
kind: Procedure
|
|
117
|
+
metadata: { name: submit-post-suggestion }
|
|
118
|
+
spec:
|
|
119
|
+
input:
|
|
120
|
+
type: object
|
|
121
|
+
additionalProperties: false
|
|
122
|
+
required: [title, email]
|
|
123
|
+
properties:
|
|
124
|
+
title: { type: string }
|
|
125
|
+
email: { type: string, format: email }
|
|
126
|
+
note: { type: string }
|
|
127
|
+
output: { type: object }
|
|
128
|
+
handler:
|
|
129
|
+
sql: |
|
|
130
|
+
INSERT INTO "post-suggestions" (title, email, note)
|
|
131
|
+
VALUES (input.title, input.email, input.note)
|
|
132
|
+
RETURNING id
|
|
133
|
+
---
|
|
134
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
135
|
+
kind: Trigger
|
|
136
|
+
metadata: { name: submit-post-suggestion-http }
|
|
137
|
+
spec:
|
|
138
|
+
source: { kind: http, method: POST, path: /api/post-suggestions }
|
|
139
|
+
target: { procedure: submit-post-suggestion }
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
How the pieces fit:
|
|
143
|
+
|
|
144
|
+
- **`posts` is the parent** and holds only what every language shares: the
|
|
145
|
+
slug.
|
|
146
|
+
- **`post-translations` is the localized child.** `translates: { parent: posts,
|
|
147
|
+
on: slug }` needs `localized: true`, at least one content field besides
|
|
148
|
+
`slug` and `locale`, and a parent that exists and is not itself localized.
|
|
149
|
+
Admin uses it to group translations under their post.
|
|
150
|
+
- **`locale` is a plain field in 0.2.0.** `localized` is presentation
|
|
151
|
+
metadata: Store does not check a row's `locale` against the site's locales.
|
|
152
|
+
Validate it in the Procedure or guard that writes it if it matters.
|
|
153
|
+
- **Published-only is injected.** Both public Views read a `publishing`
|
|
154
|
+
Schema, so drafts and archived rows never appear, and the SQL does not test
|
|
155
|
+
`status`.
|
|
156
|
+
- **Search is `mantle.search`** over `searchableFields`, a trigram full-text
|
|
157
|
+
index, so a three-character Chinese substring matches. A shorter query falls
|
|
158
|
+
back to a scan. `mantle.search_rank` orders by relevance; the trailing `t.id`
|
|
159
|
+
is the tiebreak a cursor needs. `publishedAt` is a display time set by
|
|
160
|
+
editors; nothing publishes a draft at that time.
|
|
161
|
+
|
|
162
|
+
### The single-Schema alternative
|
|
163
|
+
|
|
164
|
+
One localized `posts` Schema with `uniqueIndexes: [[slug, locale]]` and no
|
|
165
|
+
parent also works: each locale row is independent, and only the slug
|
|
166
|
+
convention links them. Choose it when translations share no fields and editors
|
|
167
|
+
do not need to see which languages are missing. Both shapes serve the same
|
|
168
|
+
`published-posts` View.
|
|
169
|
+
|
|
170
|
+
## Handlers
|
|
171
|
+
|
|
172
|
+
None.
|
|
173
|
+
|
|
174
|
+
## Rendering
|
|
175
|
+
|
|
176
|
+
0.2.0 has no Mantle-rendered public pages; `createWebSurface` is not ported.
|
|
177
|
+
Render `/en/posts/<slug>` from the service's own `fetch` (or any frontend) over
|
|
178
|
+
the REST View, escape every field, and render `body` from Markdown with HTML
|
|
179
|
+
disabled.
|
|
180
|
+
|
|
181
|
+
## Try it
|
|
182
|
+
|
|
183
|
+
```sh
|
|
184
|
+
curl -sS 'http://127.0.0.1:8787/api/views/published-posts?locale=en&limit=10'
|
|
185
|
+
curl -sS 'http://127.0.0.1:8787/api/views/search-posts?locale=en&q=index'
|
|
186
|
+
curl -sS -X POST http://127.0.0.1:8787/api/post-suggestions \
|
|
187
|
+
-H 'content-type: application/json' \
|
|
188
|
+
-d '{"title":"Write about indexes","email":"reader@example.test"}'
|
|
189
|
+
```
|
|
190
|
+
|
|
191
|
+
A View answers `{ "rows": [...], "nextCursor": "…" }`; pass `cursor` back for
|
|
192
|
+
the next page. Leaving out `locale` is HTTP 400 `INPUT_VALIDATION_FAILED`.
|
|
193
|
+
|
|
194
|
+
| MCP surface | Tool | From |
|
|
195
|
+
|---|---|---|
|
|
196
|
+
| `/mcp` | `published_posts`, `search_posts` (plus `limit` and `cursor`) | the public Views |
|
|
197
|
+
|
|
198
|
+
There is no `submit_post_suggestion` tool, because no MCP Trigger targets that
|
|
199
|
+
Procedure. Editors write posts through Admin's API, not through generated
|
|
200
|
+
record tools.
|
|
201
|
+
|
|
202
|
+
## What this leaves out
|
|
203
|
+
|
|
204
|
+
- **Comments.** Another operational Schema with its own moderation Procedures.
|
|
205
|
+
- **Scheduled publishing.** A schedule Trigger whose `ref` handler sets
|
|
206
|
+
`status` with `ctx.store.write` could do it; SQL cannot set `status`.
|
|
207
|
+
|
|
208
|
+
## Source
|
|
209
|
+
|
|
210
|
+
- [Schema reference](../handbook/reference/schema.md) and [View reference](../handbook/reference/view.md): `localized`, `translates`, `searchableFields`, `input`
|
|
211
|
+
- [Lifecycle and locales](../handbook/concepts/lifecycle-and-locales.md)
|
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
// Generated by `mantle generate`. Do not edit by hand.
|
|
2
|
+
import type { Caller, HandlerContext, InvocationCause, MantleStore, StoreDelete, StoreInsert, StoreRow, StoreSelect, StoreSelectResult, StoreUpdate, StoreViewOptions, StoreWriteResult } from "@aotter/mantle";
|
|
3
|
+
import type { ContentState, RuntimePlan } from "@aotter/mantle/spec";
|
|
4
|
+
import planFile from "./plan.json" with { type: "json" };
|
|
5
|
+
|
|
6
|
+
/** The sealed plan, for `createMantle(service, { plan })`. */
|
|
7
|
+
export const plan = planFile.plan as unknown as RuntimePlan;
|
|
8
|
+
/** SHA-256 of the manifest sources the plan was compiled from; not part of the fingerprint. */
|
|
9
|
+
export const sourceHash: string = planFile.sourceHash;
|
|
10
|
+
|
|
11
|
+
export namespace Mantle {
|
|
12
|
+
|
|
13
|
+
/** Entry data for Schema 'items' */
|
|
14
|
+
export interface Entry_items {
|
|
15
|
+
sku: string;
|
|
16
|
+
name: string;
|
|
17
|
+
priceCents?: number;
|
|
18
|
+
stock: number;
|
|
19
|
+
[key: string]: unknown;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
/** Entry data for Schema 'orders' */
|
|
23
|
+
export interface Entry_orders {
|
|
24
|
+
owner: string;
|
|
25
|
+
itemId: string;
|
|
26
|
+
qty: number;
|
|
27
|
+
orderStatus: "placed" | "cancelled";
|
|
28
|
+
placedAt?: string;
|
|
29
|
+
[key: string]: unknown;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
/** Entry data for Schema 'activity' */
|
|
33
|
+
export interface Entry_activity {
|
|
34
|
+
kind: string;
|
|
35
|
+
subject: string;
|
|
36
|
+
detail?: string;
|
|
37
|
+
[key: string]: unknown;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/** Procedure 'place-order' input */
|
|
41
|
+
export interface ProcInput_place_u002d_order {
|
|
42
|
+
itemId: string;
|
|
43
|
+
qty: number;
|
|
44
|
+
[key: string]: unknown;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
/** Procedure 'place-order' output */
|
|
48
|
+
export interface ProcOutput_place_u002d_order {
|
|
49
|
+
[key: string]: unknown;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/** Procedure 'cancel-order' input */
|
|
53
|
+
export interface ProcInput_cancel_u002d_order {
|
|
54
|
+
orderId: string;
|
|
55
|
+
expectedVersion: number;
|
|
56
|
+
[key: string]: unknown;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/** Procedure 'cancel-order' output */
|
|
60
|
+
export interface ProcOutput_cancel_u002d_order {
|
|
61
|
+
[key: string]: unknown;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/** Procedure 'restock' input */
|
|
65
|
+
export interface ProcInput_restock {
|
|
66
|
+
sku: string;
|
|
67
|
+
name: string;
|
|
68
|
+
qty: number;
|
|
69
|
+
[key: string]: unknown;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
/** Procedure 'restock' output */
|
|
73
|
+
export interface ProcOutput_restock {
|
|
74
|
+
[key: string]: unknown;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
/** Procedure 'record-orders' input */
|
|
78
|
+
export interface ProcInput_record_u002d_orders {
|
|
79
|
+
[key: string]: unknown;
|
|
80
|
+
}
|
|
81
|
+
|
|
82
|
+
/** Procedure 'record-orders' output */
|
|
83
|
+
export interface ProcOutput_record_u002d_orders {
|
|
84
|
+
[key: string]: unknown;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/** Procedure 'weekly-digest' input */
|
|
88
|
+
export interface ProcInput_weekly_u002d_digest {
|
|
89
|
+
[key: string]: unknown;
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** Procedure 'weekly-digest' output */
|
|
93
|
+
export interface ProcOutput_weekly_u002d_digest {
|
|
94
|
+
[key: string]: unknown;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
/** Row shape returned by View 'catalog' */
|
|
98
|
+
export type ViewRow_catalog = { readonly "id": unknown; readonly "sku": NonNullable<Entry_items["sku"]> | null; readonly "name": NonNullable<Entry_items["name"]> | null; readonly "priceCents": NonNullable<Entry_items["priceCents"]> | null; readonly "stock": NonNullable<Entry_items["stock"]> | null; };
|
|
99
|
+
|
|
100
|
+
/** Input accepted by View 'search-items' */
|
|
101
|
+
export type ViewInput_search_u002d_items = {
|
|
102
|
+
q: string;
|
|
103
|
+
[key: string]: unknown;
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
/** Row shape returned by View 'search-items' */
|
|
107
|
+
export type ViewRow_search_u002d_items = { readonly "id": unknown; readonly "name": NonNullable<Entry_items["name"]> | null; readonly "stock": NonNullable<Entry_items["stock"]> | null; };
|
|
108
|
+
|
|
109
|
+
/** Row shape returned by View 'my-orders' */
|
|
110
|
+
export type ViewRow_my_u002d_orders = { readonly "id": unknown; readonly "qty": NonNullable<Entry_orders["qty"]> | null; readonly "orderStatus": NonNullable<Entry_orders["orderStatus"]> | null; readonly "item": NonNullable<Entry_items["name"]> | null; readonly "version": unknown; };
|
|
111
|
+
|
|
112
|
+
/** Row shape returned by View 'sales-by-item' */
|
|
113
|
+
export type ViewRow_sales_u002d_by_u002d_item = { readonly "name": NonNullable<Entry_items["name"]> | null; readonly "orders": unknown; readonly "units": unknown; };
|
|
114
|
+
|
|
115
|
+
/** Row shape returned by View 'recent-activity' */
|
|
116
|
+
export type ViewRow_recent_u002d_activity = { readonly "kind": NonNullable<Entry_activity["kind"]> | null; readonly "subject": NonNullable<Entry_activity["subject"]> | null; readonly "detail": NonNullable<Entry_activity["detail"]> | null; };
|
|
117
|
+
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
export interface Schemas {
|
|
121
|
+
readonly "activity": Mantle.Entry_activity;
|
|
122
|
+
readonly "items": Mantle.Entry_items;
|
|
123
|
+
readonly "orders": Mantle.Entry_orders;
|
|
124
|
+
}
|
|
125
|
+
/** Optional fields: omitted, a value, or `null` to leave or make them empty. */
|
|
126
|
+
type Nullable<T> = { readonly [K in keyof T]?: T[K] | null };
|
|
127
|
+
type InsertValues = {
|
|
128
|
+
readonly "activity": Pick<Schemas["activity"], "kind" | "subject"> & Nullable<Pick<Schemas["activity"], "detail">>;
|
|
129
|
+
readonly "items": Pick<Schemas["items"], "sku" | "name"> & Partial<Pick<Schemas["items"], "stock">> & Nullable<Pick<Schemas["items"], "priceCents">>;
|
|
130
|
+
readonly "orders": Pick<Schemas["orders"], "itemId" | "qty" | "orderStatus"> & Nullable<Pick<Schemas["orders"], "placedAt">>;
|
|
131
|
+
};
|
|
132
|
+
type UpdateSet = {
|
|
133
|
+
readonly "activity": Partial<InsertValues["activity"]>;
|
|
134
|
+
readonly "items": Partial<InsertValues["items"]>;
|
|
135
|
+
readonly "orders": Partial<InsertValues["orders"]>;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export interface Views {
|
|
139
|
+
readonly "catalog": { readonly input: undefined; readonly row: Mantle.ViewRow_catalog; readonly required: false };
|
|
140
|
+
readonly "my-orders": { readonly input: undefined; readonly row: Mantle.ViewRow_my_u002d_orders; readonly required: false };
|
|
141
|
+
readonly "recent-activity": { readonly input: undefined; readonly row: Mantle.ViewRow_recent_u002d_activity; readonly required: false };
|
|
142
|
+
readonly "sales-by-item": { readonly input: undefined; readonly row: Mantle.ViewRow_sales_u002d_by_u002d_item; readonly required: false };
|
|
143
|
+
readonly "search-items": { readonly input: Mantle.ViewInput_search_u002d_items; readonly row: Mantle.ViewRow_search_u002d_items; readonly required: true };
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/** Views page with `limit` and `cursor`; `search` and `filters` match the View's `uiSchema.list` fields (ADR-0032 decision 5). */
|
|
147
|
+
export type ViewOptions<N extends keyof Views> = { readonly limit?: number; readonly cursor?: string } & Pick<StoreViewOptions, "search" | "filters"> &
|
|
148
|
+
(Views[N]["input"] extends undefined ? {} : Views[N]["required"] extends true ? { readonly input: Views[N]["input"] } : { readonly input?: Views[N]["input"] });
|
|
149
|
+
type Write = { [N in keyof Schemas & string]:
|
|
150
|
+
| (Omit<StoreInsert, "insert" | "values"> & { readonly insert: N; readonly values: InsertValues[N] })
|
|
151
|
+
| (Omit<StoreUpdate, "update" | "set"> & { readonly update: N; readonly set: UpdateSet[N] })
|
|
152
|
+
| (Omit<StoreDelete, "delete"> & { readonly delete: N })
|
|
153
|
+
}[keyof Schemas & string];
|
|
154
|
+
|
|
155
|
+
/** `runtime.store`, typed over this plan's Schemas and Views. */
|
|
156
|
+
export type Store = Omit<MantleStore, "as" | "select" | "write" | "view"> & {
|
|
157
|
+
as(caller: Caller, cause?: InvocationCause): CallerStore;
|
|
158
|
+
select(query: Omit<StoreSelect, "from"> & { readonly from: "activity" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["activity"]>>>;
|
|
159
|
+
select(query: Omit<StoreSelect, "from"> & { readonly from: "items" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["items"]>>>;
|
|
160
|
+
select(query: Omit<StoreSelect, "from"> & { readonly from: "orders" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["orders"]>>>;
|
|
161
|
+
write(ops: readonly Write[]): Promise<readonly StoreWriteResult[]>;
|
|
162
|
+
view<N extends keyof Views & string>(name: N, ...options: Views[N]["required"] extends true ? [ViewOptions<N>] : [ViewOptions<N>?]): Promise<StoreSelectResult<Views[N]["row"]>>;
|
|
163
|
+
};
|
|
164
|
+
/** `ctx.store`: scope follows the caller. `sweepExpired` is present only for the system caller (a schedule Trigger). */
|
|
165
|
+
export type CallerStore = Omit<Store, "as" | "sweepExpired"> & { readonly sweepExpired?: Store["sweepExpired"] };
|
|
166
|
+
|
|
167
|
+
/** A handler receives this plan's typed `ctx.store`. */
|
|
168
|
+
export type Handler<I, O, Env = unknown> = (input: I, ctx: Omit<HandlerContext<Env>, "store"> & { readonly store: CallerStore }) => O | Promise<O>;
|
|
169
|
+
/** Exactly the plan's handler refs: a missing or an extra one is a type error. */
|
|
170
|
+
export type MantleHandlers<Env = unknown> = {
|
|
171
|
+
readonly "cancelOrder": Handler<Mantle.ProcInput_cancel_u002d_order, Mantle.ProcOutput_cancel_u002d_order, Env>;
|
|
172
|
+
readonly "recordOrders": Handler<Mantle.ProcInput_record_u002d_orders, Mantle.ProcOutput_record_u002d_orders, Env>;
|
|
173
|
+
readonly "weeklyDigest": Handler<Mantle.ProcInput_weekly_u002d_digest, Mantle.ProcOutput_weekly_u002d_digest, Env>;
|
|
174
|
+
};
|