@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,39 @@
|
|
|
1
|
+
import { coerce, failure, json, match, readJsonObject, viewQuery, wireError } from "../core/wire.js";
|
|
2
|
+
export function createRestSurface(runtime, options) {
|
|
3
|
+
const base = options.basePath.replace(/\/+$/, "");
|
|
4
|
+
const { plan } = runtime;
|
|
5
|
+
const params = (path) => path.split("/").filter((s) => s.startsWith("{")).length;
|
|
6
|
+
// a route with fewer path params is more specific, so `/items/search` is never shadowed by `/items/{id}`
|
|
7
|
+
const routes = Object.entries(plan.triggers)
|
|
8
|
+
.flatMap(([name, t]) => (t.source.kind === "http" ? [{ name, method: t.source.method, path: t.source.path, procedure: t.procedure }] : []))
|
|
9
|
+
.sort((a, b) => params(a.path) - params(b.path));
|
|
10
|
+
return async (request, caller) => {
|
|
11
|
+
try {
|
|
12
|
+
const url = new URL(request.url);
|
|
13
|
+
const path = url.pathname;
|
|
14
|
+
const view = request.method === "GET" ? match(`${base}/views/{name}`, path)?.name : undefined;
|
|
15
|
+
if (view !== undefined) {
|
|
16
|
+
const v = plan.views[view];
|
|
17
|
+
if (!v || v.surface !== "public")
|
|
18
|
+
throw wireError("NOT_FOUND", `no public View '${view}'`, "rest");
|
|
19
|
+
return json(await runtime.store.as(caller).view(view, viewQuery(view, v, url.searchParams, "rest")));
|
|
20
|
+
}
|
|
21
|
+
for (const route of routes) {
|
|
22
|
+
if (route.method !== request.method)
|
|
23
|
+
continue;
|
|
24
|
+
const params = match(route.path, path);
|
|
25
|
+
if (!params)
|
|
26
|
+
continue;
|
|
27
|
+
const props = plan.procedures[route.procedure]?.input.properties ?? {};
|
|
28
|
+
const body = await readJsonObject(request, "rest");
|
|
29
|
+
const input = { ...body, ...Object.fromEntries(Object.entries(params).map(([k, v]) => [k, coerce(v, props[k], k, "rest")])) };
|
|
30
|
+
return json(await runtime.invokeProcedure({ procedure: route.procedure, input, caller, cause: { kind: "http", id: crypto.randomUUID() } }));
|
|
31
|
+
}
|
|
32
|
+
throw wireError("NOT_FOUND", "no such route", "rest");
|
|
33
|
+
}
|
|
34
|
+
catch (e) {
|
|
35
|
+
return failure(e, "rest");
|
|
36
|
+
}
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=createRestSurface.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"createRestSurface.js","sourceRoot":"","sources":["../../src/web/createRestSurface.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAOrG,MAAM,UAAU,iBAAiB,CAAC,OAAsB,EAAE,OAA2B;IACnF,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IACzB,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;IACzF,yGAAyG;IACzG,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC;SACzC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC1I,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;IAEnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE;QAC/B,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC;YAC1B,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,IAAI,eAAe,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;YAC9F,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;gBACvB,MAAM,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC3B,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,KAAK,QAAQ;oBAAE,MAAM,SAAS,CAAC,WAAW,EAAE,mBAAmB,IAAI,GAAG,EAAE,MAAM,CAAC,CAAC;gBACnG,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC;YACvG,CAAC;YAED,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;gBAC3B,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM;oBAAE,SAAS;gBAC9C,MAAM,MAAM,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;gBACvC,IAAI,CAAC,MAAM;oBAAE,SAAS;gBACtB,MAAM,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,UAAU,IAAI,EAAE,CAAC;gBACvE,MAAM,IAAI,GAAG,MAAM,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBACnD,MAAM,KAAK,GAAG,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAA2B,EAAE,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACxJ,OAAO,IAAI,CAAC,MAAM,OAAO,CAAC,eAAe,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,CAAC,UAAU,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;YAC9I,CAAC;YACD,MAAM,SAAS,CAAC,WAAW,EAAE,eAAe,EAAE,MAAM,CAAC,CAAC;QACxD,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,OAAO,OAAO,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/web/index.ts"],"names":[],"mappings":"AAAA,cAAc,wBAAwB,CAAC"}
|
|
@@ -7,7 +7,7 @@ diagnostic emitters and measured harnesses.
|
|
|
7
7
|
|
|
8
8
|
**Deciders**: phsu
|
|
9
9
|
|
|
10
|
-
**Related**: [ADR-0007](0007-ai-as-primary-author.md) (the AI-as-primary-author contract this diagnostic format serves); the zod runtime is described in [`docs/design-atoms.md`](
|
|
10
|
+
**Related**: [ADR-0007](0007-ai-as-primary-author.md) (the AI-as-primary-author contract this diagnostic format serves); the zod runtime is described in [`docs/design-atoms.md`](https://github.com/aotter/mantle/blob/main/docs/design-atoms.md) § "Manifest validation — JSON Schema in, zod at runtime".
|
|
11
11
|
|
|
12
12
|
---
|
|
13
13
|
|
|
@@ -217,7 +217,7 @@ from day 1 — manifest authoring stays JSON Schema, but the
|
|
|
217
217
|
runtime validator a manifest author's request body hits is a
|
|
218
218
|
zod schema, produced by Zod's official `z.fromJSONSchema` importer behind the
|
|
219
219
|
compatibility boundary in
|
|
220
|
-
`@aotter/mantle-spec` (see [`docs/design-atoms.md`](
|
|
220
|
+
`@aotter/mantle-spec` (see [`docs/design-atoms.md`](https://github.com/aotter/mantle/blob/main/docs/design-atoms.md) § "Manifest validation — JSON Schema in, zod at runtime").
|
|
221
221
|
Mantle validates its supported keyword/ref policy before import and emits
|
|
222
222
|
`JSON_SCHEMA_UNSUPPORTED`, `JSON_SCHEMA_REF_INVALID`, or
|
|
223
223
|
`JSON_SCHEMA_LIMIT_EXCEEDED`; Zod owns the accepted keywords' validation
|
|
@@ -63,7 +63,7 @@ execution. Deferred envelopes carry persisted entry data and normalized actor
|
|
|
63
63
|
metadata, never arbitrary original request input. Adapter-specific retry,
|
|
64
64
|
delay, batch, DLQ, and message-size settings remain outside manifest grammar.
|
|
65
65
|
The operational reference is
|
|
66
|
-
[`docs/deferred-lifecycle-queues.md`](
|
|
66
|
+
[`docs/deferred-lifecycle-queues.md`](https://github.com/aotter/mantle/blob/main/docs/deferred-lifecycle-queues.md).
|
|
67
67
|
|
|
68
68
|
Identity, session, OAuth, and role enforcement are adapter-owned per
|
|
69
69
|
ADR-0014. The runtime does not define `SessionRepository`,
|
|
@@ -227,7 +227,7 @@ There's no module-global state holding adapter-specific bindings.
|
|
|
227
227
|
- Removing a port is also possible (if a port is found to overlap or be unnecessary), again by amending this ADR.
|
|
228
228
|
|
|
229
229
|
**Discoverability for adapter authors**:
|
|
230
|
-
- A future adapter author reads this ADR + [`docs/adapter-guide.md`](
|
|
230
|
+
- A future adapter author reads this ADR + [`docs/adapter-guide.md`](https://github.com/aotter/mantle/blob/main/docs/adapter-guide.md), implements the two required ports, then wires boot and HTTP/MCP surfaces. That's the contract. No hidden state, no implicit assumptions about the HTTP framework.
|
|
231
231
|
|
|
232
232
|
**Test ergonomics**:
|
|
233
233
|
- Each port is small and isolated. Tests can mock individual ports without spinning up D1 or an OAuth provider.
|
|
@@ -439,7 +439,7 @@ and `ADMIN_GITHUB_LOGIN`; it does not use Platform Account OIDC, a client
|
|
|
439
439
|
secret, or an owner email handoff. The local provider id remains `github`.
|
|
440
440
|
The wire contract remains in [Platform #35](https://github.com/aotter/mantle-platform/issues/35),
|
|
441
441
|
and the product boundary is documented in
|
|
442
|
-
[`docs/auth-hosting-model.md`](
|
|
442
|
+
[`docs/auth-hosting-model.md`](https://github.com/aotter/mantle/blob/main/docs/auth-hosting-model.md).
|
|
443
443
|
|
|
444
444
|
This does not change ADR-0014's core rule: Mantle does not expose an
|
|
445
445
|
un-curated `betterAuthOptions` or `advanced` passthrough. Missing Better
|
|
@@ -521,7 +521,7 @@ every `tools/call`. MCP does not promise to accept a raw REST API key/PAT.
|
|
|
521
521
|
Dynamic membership, billing, and entitlement state remains consumer-owned.
|
|
522
522
|
`requires.guard.procedure` orchestrates a site handler on every invocation but
|
|
523
523
|
does not introduce a Policy atom or an entitlement service. See
|
|
524
|
-
[
|
|
524
|
+
[Guarded API access](../examples/guarded-api.md) for the public API
|
|
525
525
|
and end-to-end examples.
|
|
526
526
|
|
|
527
527
|
## Amendment — 2026-08-22: Better Auth 1.7 MCP and CIMD convergence
|
|
@@ -898,3 +898,22 @@ Boundaries that stay:
|
|
|
898
898
|
`verifyOAuthAccessToken`, DPoP binding and the MCP challenge are unchanged.
|
|
899
899
|
- No other Better Auth field gains a passthrough by this amendment. The
|
|
900
900
|
2026-05-14 test still applies to the next proposal.
|
|
901
|
+
|
|
902
|
+
## 2026-10-02 amendment — a surface with no anonymous tool challenges at connect
|
|
903
|
+
|
|
904
|
+
The 2026-09-21 amendment kept anonymous `initialize` and `tools/list` open on the public surface and moved the `401` to
|
|
905
|
+
the first `tools/call` that needs identity. MCP clients do not all follow that: several decide whether to run OAuth from
|
|
906
|
+
the connect step alone (an anonymous `initialize` that succeeds means "no sign-in"), so a surface whose every tool needs
|
|
907
|
+
identity never showed them a sign-in. Better Auth's `withMcpAuth` and the MCP SDK's `requireBearerAuth` both challenge
|
|
908
|
+
every unauthenticated request for the same reason.
|
|
909
|
+
|
|
910
|
+
- A surface is **closed** when none of its tools may be called anonymously: every tool's `requires.auth.all` names at least
|
|
911
|
+
one predicate (each of `ctx.user`, `ctx.auth`, `ctx.staff`, `ctx.auth.scope` needs an identity). The staff surface is
|
|
912
|
+
always closed; a public surface with no tools is open, since nothing on it needs a sign-in.
|
|
913
|
+
- On a closed surface every anonymous request (`initialize`, `tools/list`, the SSE `GET`) answers `401` with the RFC 9728
|
|
914
|
+
`WWW-Authenticate` challenge, as the staff surface already did. The challenge names the surface's scope floor
|
|
915
|
+
(`scope="mcp"` by default), so the first authorization already asks for it.
|
|
916
|
+
- A surface with at least one tool anonymous may call keeps the 2026-09-21 behaviour: discovery stays open and the first
|
|
917
|
+
`tools/call` that needs identity answers `401`.
|
|
918
|
+
- Nothing is configured: the rule follows from the plan, so a project that adds a public tool reopens discovery by
|
|
919
|
+
declaring it.
|
|
@@ -74,7 +74,7 @@ semantic fingerprint.
|
|
|
74
74
|
| Optional modules/adapters | Web/Admin composition and request/session/cache/platform translation | Re-parsing, re-linking, or a second authorization/runtime stack |
|
|
75
75
|
|
|
76
76
|
The current-to-target rule ledger and evidence are maintained in
|
|
77
|
-
[`docs/sealed-pipeline-ownership.md`](
|
|
77
|
+
[`docs/sealed-pipeline-ownership.md`](https://github.com/aotter/mantle/blob/main/docs/sealed-pipeline-ownership.md).
|
|
78
78
|
|
|
79
79
|
### Core and optional products
|
|
80
80
|
|
|
@@ -149,6 +149,10 @@ second manifest/runtime path.
|
|
|
149
149
|
|
|
150
150
|
### Naming and code generation
|
|
151
151
|
|
|
152
|
+
This section records the original codegen decision. The current generated API
|
|
153
|
+
uses a sealed `plan` and wire-keyed `Schemas`, `Views`, and `Store` type maps;
|
|
154
|
+
see the [typed queries guide](../handbook/guides/typed-queries.md).
|
|
155
|
+
|
|
152
156
|
The Core execution unit is `MantleRuntime`, not a site. Optional TypeScript
|
|
153
157
|
generation is a pure projection of linked/compiled semantics. It exposes
|
|
154
158
|
`bindMantle(runtime)` plus an eager `createMantle()` convenience that delegates
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR-0021: Author applications directly; retire Starter scaffolding
|
|
2
2
|
|
|
3
|
-
Status: Accepted by owner, 2026-09-08 (#786). Supersedes ADR-0018 for the 0.1.2 line.
|
|
3
|
+
Status: Accepted by owner, 2026-09-08 (#786). Supersedes ADR-0018 for the 0.1.2 line. Its no-initialization clause is superseded by [ADR-0026](0026-progressive-generate.md) for 0.1.5.
|
|
4
4
|
|
|
5
5
|
Core is an embeddable manifest engine. Applications own package manifests,
|
|
6
6
|
Worker entries, provider configuration, business manifests and visitor UI.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR-0022: Caller-observed `expectedVersion` for Admin and builtin upsert
|
|
2
2
|
|
|
3
|
-
**Status:** Accepted
|
|
3
|
+
**Status:** Accepted; the Admin binding rules are superseded by [ADR-0029](0029-mcp-apps-interaction-contracts.md) (Admin binds `expectedVersion` only from a declared interaction and infers no OCC target). The caller-observed version contract itself stands.
|
|
4
4
|
|
|
5
5
|
**Date:** 2026-09-14
|
|
6
6
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR-0024: Materialize each Schema as a native storage table
|
|
2
2
|
|
|
3
|
-
**Status:** Accepted; the clauses allowing authored data to use `id`, `status` or `createdAt` are superseded by [ADR-0025](0025-reserved-native-columns-and-published-only-public-views.md) (2026-09-22)
|
|
3
|
+
**Status:** Accepted; the clauses allowing authored data to use `id`, `status` or `createdAt` are superseded by [ADR-0025](0025-reserved-native-columns-and-published-only-public-views.md) (2026-09-22); the migration-artifact and destructive-change workflow is superseded by [ADR-0033](0033-storage-converges-to-the-plan.md) for 0.2.0
|
|
4
4
|
|
|
5
5
|
**Date:** 2026-09-18
|
|
6
6
|
|
|
@@ -108,7 +108,7 @@ destructive in the pre-beta contract. Cloud rejects them; operators rebuild the
|
|
|
108
108
|
database and move required data manually outside Mantle and Control. Production
|
|
109
109
|
neither generates nor accepts arbitrary migration SQL.
|
|
110
110
|
|
|
111
|
-
Preparation records applied migration ids in the
|
|
111
|
+
Preparation records applied migration ids in the `_mantle_migrations` ledger (#1150).
|
|
112
112
|
The enclosing immutable artifact checksum protects the ordered SQL,
|
|
113
113
|
fingerprints, and target projections. Preparation rejects an unknown source
|
|
114
114
|
fingerprint, changed artifact checksum, skipped revision, or target mismatch.
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# ADR-0026: Progressive application generation
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted by owner for the 0.1.5 line (#1081–#1086). Supersedes the no-initialization clause of ADR-0021; direct authorship and optional package boundaries remain.
|
|
4
|
+
|
|
5
|
+
Mantle is progressive. A new application defaults to Spec, Runtime, API, MCP, Admin, and an editable blank Web home so an agent does not forget the optional Admin composition. `--features` is a positive replacement list over `spec,runtime,api,mcp,admin,web`; dependencies are closed automatically. `spec` alone is host-free. The first generated hosts are `cf` and `chatgpt-sites`. Only host-dependent selections require `--host`; a TTY may prompt, while headless use must pass it explicitly.
|
|
6
|
+
|
|
7
|
+
| Feature | Required features | Direct package additions |
|
|
8
|
+
| --- | --- | --- |
|
|
9
|
+
| `spec` | — | `@aotter/mantle`, `zod` peer |
|
|
10
|
+
| `runtime` | `spec` | Host adapter; current CF adapter also brings Admin/Auth/Web transitively |
|
|
11
|
+
| `api` | `runtime` | Host route composition and `hono` peer |
|
|
12
|
+
| `mcp` | `runtime` | Host MCP route composition |
|
|
13
|
+
| `admin` | `runtime,api,mcp` | `@aotter/mantle-admin`, `@aotter/mantle-admin-ui`; CF owner auth also uses `@aotter/mantle-auth` |
|
|
14
|
+
| `web` | `runtime` | `@aotter/mantle-web` and a user-owned blank home |
|
|
15
|
+
|
|
16
|
+
The host adapter's declared peers (`better-auth`, `hono`, `zod`, `aws4fetch`) are installed for host-dependent selections until its package dependency graph is split. A reduced selection still omits unselected routes and assets; it does not claim smaller transitive installation today.
|
|
17
|
+
|
|
18
|
+
An application with only Git, installed skills, package metadata, a lockfile, README, and installed dependencies is new. Existing manifests or application code remain in direct-authoring compile mode. A saved `mantle.config.json` decides subsequent runs before that heuristic. V1 refuses host changes and feature-list changes after selection; application owners can make an explicit migration rather than have generation delete routes or data. An explicitly named missing manifest path is an error. A new default manifest directory may be absent or empty, yielding a valid empty plan without a fake business Schema.
|
|
19
|
+
|
|
20
|
+
Generation preflights selection, manifest validity, package/script conflicts, file ownership, and symlink escapes before writing. It saves the selection and adds only absent package declarations and scripts; it does not run a package manager. Selected Mantle packages use the running CLI's exact version. Missing selected packages produce an incomplete, nonzero result and an explicit install-and-rerun instruction. `--check` never writes, installs, prompts, or provisions. Generated code and assets remain CLI-owned; the editable frontend, host config, identity, secrets, handlers, and historical migrations are application-owned. A later SDK upgrade does not overwrite them. Clean builds remove only copied output.
|
|
21
|
+
|
|
22
|
+
Cloudflare currently has a facade with transitive Admin/Auth/Web dependencies and mounts OAuth/MCP unconditionally. Host generation must use a lower-level composition for reduced selections or change that facade; omitting dependencies from a manifest does not prove route omission. Cloudflare D1 remains runtime-managed. ChatGPT Sites uses reviewed, append-only managed migrations with applied-state checks (owned by #1086). Neither host generator provisions resources or deploys.
|
|
23
|
+
|
|
24
|
+
This decision restores a convenient default while keeping the sealed Manifest-to-RuntimePlan pipeline and user-owned application source. It does not reintroduce a remote Starter catalog or a `mantle create` command.
|
|
25
|
+
|
|
26
|
+
## 2026-09-25 amendment — existing application integration
|
|
27
|
+
|
|
28
|
+
The original implementation added `--adopt` to convert an existing authored
|
|
29
|
+
application into the generated-project layout. This amendment removes that
|
|
30
|
+
mode. Applications with their own host shape continue direct authoring;
|
|
31
|
+
integrating Mantle is guided by the version-matched `integrate` consumer skill.
|
|
32
|
+
The agent may embed selected capabilities, replace one part at a time, or
|
|
33
|
+
build a fresh Mantle application and migrate frontend and data. The CLI owns
|
|
34
|
+
only deterministic generation and its declared checks; it does not certify
|
|
35
|
+
arbitrary user-owned host wiring. A saved generated project still reruns from
|
|
36
|
+
its own configuration, with file ownership and migration safeguards intact.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# ADR-0027: Scheduled Procedure Triggers
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for 0.1.5 (#1087). Revises the closed Trigger-source grammar from ADR-0001 and the host-only cron guidance of #322.
|
|
4
|
+
|
|
5
|
+
**Date:** 2026-09-25
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
The earlier contract kept cron outside the Manifest graph. That forced an application Worker to invoke a Procedure by name with its own caller context, leaving scheduling invisible to validation and the compiled plan. A portable declaration is needed without pretending that every host can register a cron event.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
`Trigger.spec.source` gains `kind: schedule`, a five-field Cloudflare UTC `cron` (weekday 1=Sunday), and optional `enabled` (default true). It targets one Procedure whose input accepts `{}` and requires no user or staff authorization. The compiled plan carries Trigger identity, expression, target, enabled state, and the required `cloudflare` host. No HTTP route or user identity is granted.
|
|
14
|
+
|
|
15
|
+
Cloudflare's `scheduled` entry finds enabled plan entries with the exact incoming expression and invokes them in Trigger-name order through the existing Procedure pipeline, continuing after individual failures and reporting them together. The system context has null user and staff, no credential, and `ctx.schedule` with stable `${trigger}:${scheduledTime}` identity. The application registers exact expressions with Wrangler. Cloudflare Cron Triggers do not document automatic retries; handlers still use the identity for possible duplicate/manual replay. Other hosts reject enabled schedules rather than silently omit them.
|
|
16
|
+
|
|
17
|
+
## Consequences
|
|
18
|
+
|
|
19
|
+
The grammar and sealed plan version advance. Applications must rerun `mantle generate` after upgrading. A Procedure needing staff authorization cannot run from a schedule. Cron provisioning, retries, retention and exactly-once execution remain host/operator responsibilities; the runtime does not claim them.
|
|
20
|
+
|
|
21
|
+
## Alternatives
|
|
22
|
+
|
|
23
|
+
Keeping host-only calls would preserve the old grammar but fail static validation and omit the feature from introspection. A general background-job framework would add storage and scheduling responsibilities without a second host implementation.
|
|
24
|
+
|
|
25
|
+
## How to apply
|
|
26
|
+
|
|
27
|
+
Declare a schedule Trigger, export `worker.scheduled`, and register its expression in `wrangler.jsonc`. Use `ctx.schedule.id` to deduplicate writes. See [Trigger reference](../handbook/reference/trigger.md#schedule).
|
|
28
|
+
|
|
29
|
+
## Implementation status
|
|
30
|
+
|
|
31
|
+
Implemented in the 0.1.5 scheduled Procedure PR, with parser, linker, compiler, runtime and Cloudflare adapter tests.
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# ADR-0028: Logical Schema TTL before explicit physical cleanup
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted for 0.1.5 (#1088).
|
|
4
|
+
|
|
5
|
+
**Date:** 2026-09-25
|
|
6
|
+
|
|
7
|
+
## Context
|
|
8
|
+
|
|
9
|
+
An application needs a portable expiry rule across D1 and Bun SQLite. A cron-only delete task cannot guarantee that readers stop seeing expired data if it runs late or fails. Applying a new policy to a populated table must not silently bulk-delete rows.
|
|
10
|
+
|
|
11
|
+
## Decision
|
|
12
|
+
|
|
13
|
+
`Schema.spec.ttl` names one top-level date-time field and a nonnegative `expireAfterSeconds`. At `timestamp + duration <= now`, semantic reads exclude the row. Missing, null and unparseable legacy dates never expire. Declarative Views include the same predicate. Native SQL Views that name a TTL Schema's table are rejected (SQL over other tables is unaffected), and shared caching of a TTL View is rejected. The compiled plan and introspection expose the policy. Public Cloudflare pages derived from TTL collections use `no-store` rather than shared caching.
|
|
14
|
+
|
|
15
|
+
SQLite storage implements an optional bounded `ExpirySweeper`. A sweep previews by default; `delete: true` is required for physical removal. It returns counts and a cursor, selects at most 100 expired IDs in stable order, and rechecks expiry in one bounded delete statement. A failed page can be retried with the previous cursor. Ref Procedures can call the semantic capability, including from a scheduled Trigger. No host automatically invokes it.
|
|
16
|
+
|
|
17
|
+
Physical TTL removal does not fire before/after entry lifecycle hooks. Expiry already changed logical visibility; cleanup reclaims storage rather than representing an editorial deletion. Consumers needing business actions at expiry must implement them in idempotent scheduled host code before calling the sweep.
|
|
18
|
+
|
|
19
|
+
## Consequences
|
|
20
|
+
|
|
21
|
+
Adding or shortening TTL changes read visibility immediately but never starts physical deletion. Owners preview counts and choose when to sweep; expired rows can still occupy unique indexes until removal. Other adapters must implement equivalent read filtering and a sweep or fail closed for TTL plans. The runtime does not promise an exact deletion time.
|
|
22
|
+
|
|
23
|
+
## Alternatives
|
|
24
|
+
|
|
25
|
+
Scheduler-driven deletion alone leaves a visibility gap. Implicit migration-time cleanup risks irreversible bulk deletion. Firing ordinary deletion hooks during storage reclamation would cause delayed, retry-sensitive business effects after the row was already logically gone.
|
|
26
|
+
|
|
27
|
+
## How to apply
|
|
28
|
+
|
|
29
|
+
Declare `ttl` on a Schema, use declarative Views, preview with `runtime.store.sweepExpired({ collection, delete: false })`, then explicitly request deletion page by page. See [Schema TTL](../handbook/reference/schema.md#ttl).
|
|
30
|
+
|
|
31
|
+
## Implementation status
|
|
32
|
+
|
|
33
|
+
Implemented in the 0.1.5 TTL PR for the SQLite family, with Bun and local D1 conformance checks.
|
|
@@ -0,0 +1,324 @@
|
|
|
1
|
+
# ADR-0029: Official MCP SDK, interaction contracts and MCP Apps
|
|
2
|
+
|
|
3
|
+
**Status:** Accepted
|
|
4
|
+
|
|
5
|
+
**Date:** 2026-09-25
|
|
6
|
+
|
|
7
|
+
**Related:** epic [#1110](https://github.com/aotter/mantle/issues/1110)
|
|
8
|
+
(supersedes #1109); tracked as [#1114](https://github.com/aotter/mantle/issues/1114).
|
|
9
|
+
Builds on [ADR-0012](0012-views-as-public-rest.md),
|
|
10
|
+
[ADR-0014](0014-auth-better-auth-and-multi-tenant-mcp.md),
|
|
11
|
+
[ADR-0019](0019-sealed-manifest-runtime-pipeline.md),
|
|
12
|
+
[ADR-0020](0020-builtin-handler-contracts-and-matched-upsert.md),
|
|
13
|
+
[ADR-0022](0022-caller-observed-version-occ.md),
|
|
14
|
+
[ADR-lite 845](adr-lite-845-frontend-client.md),
|
|
15
|
+
[ADR-lite 861](adr-lite-861-admin-webmcp.md).
|
|
16
|
+
Amends [ADR-lite 909](adr-lite-909-admin-ui-kit.md) (the kit moves to
|
|
17
|
+
`@aotter/mantle-ui`). External: MCP specification 2025-11-25 and 2026-07-28,
|
|
18
|
+
the MCP Apps extension, and the official TypeScript SDK
|
|
19
|
+
(`@modelcontextprotocol/server` 2.1.0, `client` 2.1.0, `ext-apps` 2.0.0).
|
|
20
|
+
|
|
21
|
+
## Context
|
|
22
|
+
|
|
23
|
+
Mantle projects callable capabilities from the sealed RuntimePlan
|
|
24
|
+
(`CallableCapabilityProjector`) and serves them over a hand-written JSON-RPC
|
|
25
|
+
dispatcher in `mantle-runtime/src/infrastructure/mcp`. The #1109 goal (agents
|
|
26
|
+
discover capabilities, find the right record, and open an interaction UI in
|
|
27
|
+
chat) exposed three gaps.
|
|
28
|
+
|
|
29
|
+
**Protocol.** The hand-written dispatcher accepts only protocol `2025-11-25`,
|
|
30
|
+
has no resource layer, and duplicates negotiation, batching and error framing
|
|
31
|
+
that the official SDK already owns. MCP Apps would add `resources/*`,
|
|
32
|
+
`ui://` resources and `_meta.ui` negotiation on top. The repository already
|
|
33
|
+
tests against the official client (#1023), and the official
|
|
34
|
+
`@modelcontextprotocol/ext-apps` 2.0 server helpers target SDK 2.x.
|
|
35
|
+
|
|
36
|
+
**Semantics in the wrong layer.** Tool semantics live in the transport:
|
|
37
|
+
generic-tool role floors, entry mutability checks, argument parsing, media
|
|
38
|
+
tool descriptions and `expected_version` annotation are in `McpToolCatalog`
|
|
39
|
+
and `McpJsonRpcDispatcher.dispatchToolByName`. They must survive a transport
|
|
40
|
+
swap unchanged.
|
|
41
|
+
|
|
42
|
+
**Interaction contracts.** Verified on `develop` @ `35d2c14`:
|
|
43
|
+
|
|
44
|
+
1. Row binding is inferred, and only in Admin. `discoverRowBindings`
|
|
45
|
+
(`mantle-admin/src/mountMantleAdmin.ts`) picks a same-name property, then a
|
|
46
|
+
lone single-field unique index, then `id`. The procurement example omits
|
|
47
|
+
`x-mantle-ref` because the inference would bind `requestNumber` where
|
|
48
|
+
builtin `update` needs the entry id.
|
|
49
|
+
2. Admin's View page has no row operations; bindings are keyed by collection.
|
|
50
|
+
3. SQL Views declare no output (ADR-lite 845).
|
|
51
|
+
4. `lockedCollection()` in `ManifestGraphValidator` infers the collection an
|
|
52
|
+
OCC write locks. It is a diagnostic heuristic, not an execution contract.
|
|
53
|
+
5. Staff MCP has no single-entry read.
|
|
54
|
+
6. Admin binds the version read when the dialog opens
|
|
55
|
+
(`row-operations.tsx`), not the version of the row the user saw.
|
|
56
|
+
7. Business errors are JSON-RPC `-32000` errors with `error.data`.
|
|
57
|
+
8. Website preview (`?preview=1`) is authorized by a staff session cookie,
|
|
58
|
+
which is a third-party cookie inside a host's sandboxed iframe.
|
|
59
|
+
9. Canonical Admin refuses framing (`frame-ancestors 'none'`).
|
|
60
|
+
10. An MCP App's `tools/call` is proxied by the host with the model's client
|
|
61
|
+
credential. The server cannot tell a UI call from a model call.
|
|
62
|
+
|
|
63
|
+
## Decision
|
|
64
|
+
|
|
65
|
+
### 1. Protocol belongs to the official SDK; semantics belong to Mantle
|
|
66
|
+
|
|
67
|
+
All MCP wire handling uses the official TypeScript SDK: JSON-RPC framing,
|
|
68
|
+
version negotiation, transports, `tools/*`, `resources/*` and MCP Apps
|
|
69
|
+
metadata. Mantle keeps authorization, guards, OCC, audit, validation and the
|
|
70
|
+
diagnostic vocabulary. Official packages are pinned to exact versions and
|
|
71
|
+
never forked. No hand-written JSON-RPC handling remains in the repository.
|
|
72
|
+
|
|
73
|
+
Both protocol eras are served: `2026-07-28` and `2025-*` in stateless mode
|
|
74
|
+
(`createMcpHandler(..., { legacy: "stateless" })`).
|
|
75
|
+
|
|
76
|
+
### 2. Runtime is transport-neutral
|
|
77
|
+
|
|
78
|
+
Runtime stops knowing about MCP. It provides:
|
|
79
|
+
|
|
80
|
+
- `CapabilityCatalog` (domain service): one transport-neutral description per
|
|
81
|
+
callable capability on a surface: Views, Procedures, generic authoring and
|
|
82
|
+
lifecycle operations, and media upload. Each carries name, surface, title,
|
|
83
|
+
description, `inputSchema`, declared `outputSchema`, annotations,
|
|
84
|
+
`requiresIdentity` and the argument that identifies the operation for audit.
|
|
85
|
+
- `InvokeCapabilityUseCase` (use case): the single execution entry and the
|
|
86
|
+
single validation point. It returns
|
|
87
|
+
`{ ok: true, data } | { ok: false, diagnostic }`. Missing or ill-typed
|
|
88
|
+
arguments are `VALIDATION_FAILED` diagnostics.
|
|
89
|
+
|
|
90
|
+
Nothing under `domain/` or `usecase/` imports an MCP concept.
|
|
91
|
+
|
|
92
|
+
### 3. Validate once
|
|
93
|
+
|
|
94
|
+
The SDK receives each `inputSchema` through `fromJsonSchema(schema, validator)`
|
|
95
|
+
with a pass-through validator: the schema is advertised unchanged, and the
|
|
96
|
+
SDK does not validate. Runtime validates once, so MCP, HTTP and Admin report
|
|
97
|
+
the same Mantle diagnostic, and the Ajv instance the default validator would
|
|
98
|
+
pull in is not bundled.
|
|
99
|
+
|
|
100
|
+
`outputSchema` is the safe projection from #1127: an allowlist that only
|
|
101
|
+
loosens the declared schema, so a standard client validator accepts every
|
|
102
|
+
value Runtime accepts. Ineligible outputs advertise none. Views advertise none.
|
|
103
|
+
|
|
104
|
+
### 4. Results and errors (D1)
|
|
105
|
+
|
|
106
|
+
- **Success:** `content` is one JSON text block; `structuredContent` carries
|
|
107
|
+
the value when it is a plain object.
|
|
108
|
+
- **Business failure:** `isError: true` with `{ diagnostics: [Diagnostic] }`
|
|
109
|
+
(the ADR-0008 shape) as a JSON text block, repeated as `structuredContent`
|
|
110
|
+
unless the tool advertises an `outputSchema`. Structured results must
|
|
111
|
+
conform to that schema, and 1.x clients validate them even on `isError`.
|
|
112
|
+
This replaces the JSON-RPC `-32000` business error and is a breaking wire
|
|
113
|
+
change, announced with the cutover.
|
|
114
|
+
- **Protocol failure** (malformed request, unknown method, unsupported
|
|
115
|
+
version) stays a JSON-RPC error owned by the SDK.
|
|
116
|
+
- **Authentication:** an anonymous call to a tool whose capability
|
|
117
|
+
`requiresIdentity` (including any member of a 2025-era batch) is answered
|
|
118
|
+
before the SDK with HTTP 401 and a `WWW-Authenticate` challenge built by the
|
|
119
|
+
SDK helper. The SDK's own
|
|
120
|
+
`scopeChallenge` covers scopes only; identity stays outside it.
|
|
121
|
+
|
|
122
|
+
### 5. Identity stays outside the SDK
|
|
123
|
+
|
|
124
|
+
The SDK never verifies tokens. Adapters verify the caller with `mantle-auth`
|
|
125
|
+
(ADR-0014), build the `HandlerContext`, and pass it as `authInfo.extra`. The
|
|
126
|
+
server factory reads it per request. Authorization extensions such as EMA are
|
|
127
|
+
unaffected.
|
|
128
|
+
|
|
129
|
+
### 6. Packages and dependency direction (D7)
|
|
130
|
+
|
|
131
|
+
Two packages are added; no other package is split.
|
|
132
|
+
|
|
133
|
+
| Package | Responsibility |
|
|
134
|
+
|---|---|
|
|
135
|
+
| `@aotter/mantle-mcp` | Optional. Registers the capability catalog on an official `McpServer` per surface (`createMantleMcpServer`), wraps `createMcpHandler` (`createMantleMcpHandler`), writes audit per call, and registers MCP Apps resources and app tools through `@modelcontextprotocol/ext-apps/server`. No UI dependency. |
|
|
136
|
+
| `@aotter/mantle-ui` | Optional. `/controller`: framework-free interaction controller; must not import React. `/` (root): React interaction components. `/kit` (with `kit.css` and `tokens.css`): the ADR-lite 909 kit moved from `@aotter/mantle-admin-ui/kit`, whose libraries are optional peers so `/controller` installs none. `/mcp-app`: a single-file `ui://` HTML build (`vite-plugin-singlefile`) using the official `App` bridge. |
|
|
137
|
+
|
|
138
|
+
```text
|
|
139
|
+
mantle-spec ◄── mantle-runtime ◄── mantle-mcp ◄── adapters, mantle-admin
|
|
140
|
+
▲ │
|
|
141
|
+
│ └──► @modelcontextprotocol/server, ext-apps/server
|
|
142
|
+
│ (types only)
|
|
143
|
+
mantle-ui/controller ◄── mantle-ui ◄── mantle-ui/mcp-app ──► ext-apps (App)
|
|
144
|
+
▲
|
|
145
|
+
mantle-admin-ui
|
|
146
|
+
```
|
|
147
|
+
|
|
148
|
+
- Arrows point from consumer to dependency. Server packages never depend on
|
|
149
|
+
UI packages; `mantle-mcp` receives MCP App HTML as injected bytes.
|
|
150
|
+
|
|
151
|
+
> **Amendment (0.2.0):** results carry no `_meta` interaction description.
|
|
152
|
+
> `planApp(plan, { surface, html })` (`@aotter/mantle/mcp`) embeds the plan's
|
|
153
|
+
> catalog (each View tool's columns as the fields they read, and, for a View
|
|
154
|
+
> that reads one table and outputs its `id`, the Procedure tools whose
|
|
155
|
+
> `target` is that Schema) as a JSON script in the injected HTML, and renders
|
|
156
|
+
> every View tool of the surface. A rendered result names its tool in
|
|
157
|
+
> `_meta["net.aotter.mantle/tool"]`. The App (`mantleAppHtml` from
|
|
158
|
+
> `@aotter/mantle-ui/mcp-app`) reviews a row as listed; a moved version is the
|
|
159
|
+
> server's `CONFLICT`. The preset serves it on `/mcp/staff`; a member-facing
|
|
160
|
+
> App is the application's own.
|
|
161
|
+
- `@aotter/mantle-admin-ui/kit` re-exports from `@aotter/mantle-ui` for one
|
|
162
|
+
minor release, then is removed.
|
|
163
|
+
- No exported UI module depends on Admin's router, global API client, query
|
|
164
|
+
singletons or cookie session.
|
|
165
|
+
|
|
166
|
+
### 7. Interaction contract
|
|
167
|
+
|
|
168
|
+
| Term | Meaning |
|
|
169
|
+
|---|---|
|
|
170
|
+
| **Capability** | A callable View or Procedure on one surface, with its Trigger identity. |
|
|
171
|
+
| **Target** | The entity an interaction is about: collection plus a stable key, never a display label. |
|
|
172
|
+
| **Reference** | A declared relation from a field to a target collection and key. A reference alone does not mean an operation mutates or locks that entity. |
|
|
173
|
+
| **Operation target** | The entity an operation mutates and whose version it locks. |
|
|
174
|
+
| **Snapshot read** | The authorized read that produces what the human sees, including its version. |
|
|
175
|
+
| **Input binding** | An explicit mapping from snapshot fields to operation input. |
|
|
176
|
+
| **Version binding** | The input field carrying the observed version, taken from the snapshot the human saw. |
|
|
177
|
+
| **Renderer** | Presentation of a snapshot, form, review or outcome. Owns no semantics. |
|
|
178
|
+
|
|
179
|
+
Rules:
|
|
180
|
+
|
|
181
|
+
- An interaction is **entity-bound** only when target, snapshot read, input
|
|
182
|
+
binding and (when required) version binding are all established by the
|
|
183
|
+
contract. Otherwise no automatic binding is offered; the operation stays
|
|
184
|
+
usable as an ordinary form.
|
|
185
|
+
- Nothing is guessed from names.
|
|
186
|
+
- **Derivable today:** builtin `update`/`delete`/`archive` and id-based
|
|
187
|
+
`upsert` target `handler.schema` by input `id`, with `expectedVersion` when
|
|
188
|
+
declared; a non-SQL View's rows target its `from` collection when `fields`
|
|
189
|
+
includes `id`, and supply a version only when `fields` includes `version`.
|
|
190
|
+
- **Declared (D4, grammar-revise #1116):**
|
|
191
|
+
- `x-mantle-ref: { schema, field }` on a Schema or View field names the
|
|
192
|
+
target collection and the key field. `field` must be `id` or a
|
|
193
|
+
single-field unique index of `schema`.
|
|
194
|
+
- `Procedure.spec.target: { schema, id, version? }` names a `ref`
|
|
195
|
+
handler's operation target: `id` and `version` are input property names.
|
|
196
|
+
It is rejected on builtin handlers, whose target is already derivable.
|
|
197
|
+
- Queries, notifications and multi-entity Procedures declare no target.
|
|
198
|
+
- `lockedCollection()` stays a diagnostic heuristic.
|
|
199
|
+
- SQL Views are not bound automatically until a validated output contract
|
|
200
|
+
admits them.
|
|
201
|
+
- **View purpose (D5, #1115):** `View.spec.description` is added and projected
|
|
202
|
+
into the View tool description.
|
|
203
|
+
|
|
204
|
+
### 8. Snapshot and version (D2)
|
|
205
|
+
|
|
206
|
+
- Public and member snapshots are read only through declared, parameterized
|
|
207
|
+
Views.
|
|
208
|
+
- Staff snapshots use a bounded single-entry read offered only for
|
|
209
|
+
collections that are the target of a declared interaction. Other staff
|
|
210
|
+
reads go through Views. This limits which records flow into a model
|
|
211
|
+
provider's context.
|
|
212
|
+
- The version bound to an operation is the version the human saw. A newer
|
|
213
|
+
read is shown as "changed since the list" and requires a deliberate re-read
|
|
214
|
+
and review; it never rebinds silently. Background refresh never replaces
|
|
215
|
+
user edits.
|
|
216
|
+
- Conflicts preserve user input. Uncertain writes (timeout, abort) are not
|
|
217
|
+
retried; the controller reconciles first.
|
|
218
|
+
|
|
219
|
+
### 9. Projection ownership (D8)
|
|
220
|
+
|
|
221
|
+
- Spec resolves D4 declarations during link. The RuntimePlan compiler emits
|
|
222
|
+
interaction descriptors (`plan.interactions`); this advances
|
|
223
|
+
`RUNTIME_PLAN_VERSION`.
|
|
224
|
+
- The capability catalog, Admin operations and the web client all read
|
|
225
|
+
`plan.interactions`. HTTP-only staff Procedures never enter an MCP
|
|
226
|
+
projection.
|
|
227
|
+
- Admin's inference is kept for one minor release. When an operation is bound
|
|
228
|
+
only by inference, Admin logs one deprecation warning pointing to
|
|
229
|
+
`Procedure.spec.target`. The next minor removes the inference.
|
|
230
|
+
- Dynamic availability is advisory. No mutating handler runs to infer
|
|
231
|
+
availability.
|
|
232
|
+
|
|
233
|
+
### 10. MCP Apps
|
|
234
|
+
|
|
235
|
+
Implemented the way the official `add-app-to-server` and `create-mcp-app`
|
|
236
|
+
skills describe:
|
|
237
|
+
|
|
238
|
+
- `mantle-mcp` registers `ui://` resources with `registerAppResource` and
|
|
239
|
+
interaction tools with `registerAppTool` and `_meta.ui.resourceUri`.
|
|
240
|
+
App-only helpers use `_meta.ui.visibility: ["app"]` and are read-only.
|
|
241
|
+
- Negotiation uses `getUiCapability`, per request. A 2026-07-28 request, or a
|
|
242
|
+
2025-era `initialize`, that declares no MCP Apps support gets no `_meta.ui`,
|
|
243
|
+
no resources and no app-only tools; everything else is unchanged.
|
|
244
|
+
- A stateless 2025-era request after `initialize` carries no client
|
|
245
|
+
capabilities. It is treated as possibly supporting MCP Apps: it gets the App
|
|
246
|
+
metadata and the app-only tools, so hosts with MCP Apps can call them on
|
|
247
|
+
every request. Hosts without MCP Apps ignore the metadata but may list the
|
|
248
|
+
app-only tools to the model. This is why app-only tools must be declared
|
|
249
|
+
read-only.
|
|
250
|
+
- Each surface is its own `McpServer`; staff resources never appear on public.
|
|
251
|
+
- Resources hold reusable assets only: no caller data, no bearer. Per-call data
|
|
252
|
+
travels in `structuredContent`. Every app tool keeps its text `content`.
|
|
253
|
+
- Opening an interaction is read-only; a mutation is always a separate
|
|
254
|
+
explicit `tools/call`. Canonical Admin keeps refusing framing.
|
|
255
|
+
- **Preview (D10):** a staff-only, read-only, app-only `preview_entry` tool,
|
|
256
|
+
offered only when a Web renderer is mounted, returns the rendered HTML in
|
|
257
|
+
`structuredContent` under bearer authorization. The app shows it in a
|
|
258
|
+
sandboxed `srcdoc` iframe without `allow-same-origin`. The response is
|
|
259
|
+
`no-store` and the HTML never enters a shared resource.
|
|
260
|
+
- **Hosts (D6):** CI runs the official `basic-host` and
|
|
261
|
+
`@modelcontextprotocol/client`; Claude and ChatGPT are verified manually per
|
|
262
|
+
release of this feature. No identical behavior across hosts is assumed.
|
|
263
|
+
|
|
264
|
+
### 11. Human approval (D3)
|
|
265
|
+
|
|
266
|
+
Deferred. UI confirmation and app-only visibility do not prove a human
|
|
267
|
+
decision (Context 10). The handbook documents the pattern that works today: a
|
|
268
|
+
`readOnly: true` Schema blocks generic writes, and an approval Procedure with
|
|
269
|
+
only an HTTP Trigger and a `ctx.staff` requirement appears in Admin but in no
|
|
270
|
+
MCP catalog. A test asserts an MCP-audience token cannot call an HTTP
|
|
271
|
+
Trigger. Any future Core mechanism is enforced at the server boundary and
|
|
272
|
+
binds target, input and version.
|
|
273
|
+
|
|
274
|
+
### 12. Presentation boundary
|
|
275
|
+
|
|
276
|
+
Renderer registries and `uiSchema` carry presentation only. Target, input
|
|
277
|
+
mapping, authorization, side effects and version semantics are never declared
|
|
278
|
+
there.
|
|
279
|
+
|
|
280
|
+
## Consequences
|
|
281
|
+
|
|
282
|
+
- One validated interaction definition drives Admin, application frontends
|
|
283
|
+
and chat hosts. Admin becomes a consumer of binding rules.
|
|
284
|
+
- Applications that do not use MCP no longer carry any MCP code in Runtime.
|
|
285
|
+
Applications that do add `@aotter/mantle-mcp` and its SDK dependency;
|
|
286
|
+
measured on a minimal Worker, SDK plus zod is about 82 KiB gzip without Ajv.
|
|
287
|
+
- MCP business errors change from JSON-RPC errors to `isError` results
|
|
288
|
+
(`breaking-change`), announced when adapters cut over.
|
|
289
|
+
- Manifests that need entity-bound interactions for `ref` handlers or non-id
|
|
290
|
+
references adopt the D4 declarations. The sealed plan version advances, so
|
|
291
|
+
applications rerun `mantle generate`.
|
|
292
|
+
- Hosts without MCP Apps support see only the additive `structuredContent`
|
|
293
|
+
and `outputSchema`.
|
|
294
|
+
|
|
295
|
+
## Alternatives
|
|
296
|
+
|
|
297
|
+
- **Keep the hand-written dispatcher and add MCP Apps to it.** Duplicates
|
|
298
|
+
the SDK, stays on one protocol version, and diverges from the official
|
|
299
|
+
ext-apps helpers.
|
|
300
|
+
- **Validate in both the SDK and Runtime.** Two error shapes for one mistake,
|
|
301
|
+
and Ajv in every Worker.
|
|
302
|
+
- **Put MCP Apps in Runtime with an injected provider.** Makes Runtime own a
|
|
303
|
+
protocol extension; the SDK already owns resources.
|
|
304
|
+
- **More packages** (separate controller, kit, app packages). Three
|
|
305
|
+
versioning surfaces for one feature; subpaths give the same boundaries.
|
|
306
|
+
- **Each surface derives relations itself.** Status quo; inconsistent.
|
|
307
|
+
- **Bindings in `uiSchema` or an SDK-side registry.** A second, unvalidated
|
|
308
|
+
Manifest; rejected by #1109.
|
|
309
|
+
- **Embed canonical Admin.** Requires weakening framing and cookie policy.
|
|
310
|
+
- **Promote `lockedCollection()` to the execution contract.** A reference does
|
|
311
|
+
not prove mutation or locking.
|
|
312
|
+
|
|
313
|
+
## How to apply
|
|
314
|
+
|
|
315
|
+
Work follows epic #1110 as stacked PRs:
|
|
316
|
+
|
|
317
|
+
1. #1126, #1127 — dispatcher factory; `structuredContent` and `outputSchema`.
|
|
318
|
+
2. #1129 — `CapabilityCatalog` and `InvokeCapabilityUseCase`.
|
|
319
|
+
3. #1130 — `@aotter/mantle-mcp`.
|
|
320
|
+
4. #1131 — adapters, Admin and templates cut over; hand-written dispatcher
|
|
321
|
+
deleted.
|
|
322
|
+
5. #1115, #1116 — grammar-revise; then #1120 interaction descriptors.
|
|
323
|
+
6. #1121 — MCP Apps registration; #1122, #1123, #1124 — `@aotter/mantle-ui`;
|
|
324
|
+
#1125 — preview; #1119 — host matrix.
|