@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
|
@@ -1,250 +1,132 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: develop
|
|
3
|
-
description: Work on
|
|
3
|
+
description: Work on an existing Mantle 0.2 project — manifests, SQL Views and Procedures, ref handlers, the service entry, surfaces, identity and MCP — using the installed package's contract.
|
|
4
4
|
metadata:
|
|
5
5
|
source: "@aotter/mantle"
|
|
6
6
|
sourcePath: docs/skills/develop/SKILL.md
|
|
7
|
-
applies_to: mantle
|
|
8
|
-
projection:
|
|
7
|
+
applies_to: mantle 0.2
|
|
8
|
+
projection: package
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Mantle Develop
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
`
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
##
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
`
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
`
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
`Procedure.spec.input` before any form UI. Keep public mutation inputs
|
|
101
|
-
`additionalProperties: false`; otherwise JSON Schema's default may strip an
|
|
102
|
-
undeclared field while returning success.
|
|
103
|
-
- Use `lifecycle: operational` for submissions, inquiries, orders, and other
|
|
104
|
-
Procedure-created operational records that staff inspect or correct. Reserve
|
|
105
|
-
`publishing` for content a person stages and publishes.
|
|
106
|
-
- Lifecycle `before_update` / `after_update` hooks also fire for unpublish,
|
|
107
|
-
archive, and every other status transition whose target is not `published`;
|
|
108
|
-
do not use them for edit-only work.
|
|
109
|
-
- When a form's fixed option values change, update the stored Schema and public
|
|
110
|
-
Procedure input `enum` together. Keep translated labels in the frontend content source;
|
|
111
|
-
Admin and Staff MCP derive their typed controls from the manifest values.
|
|
112
|
-
- If the application has a `page` Schema with sections, update its declared
|
|
113
|
-
section properties when adding display fields; an undeclared property has no
|
|
114
|
-
runtime-backed Admin or Staff MCP path.
|
|
115
|
-
- Update notification handlers when they need the new field. Test the stored
|
|
116
|
-
entry, not only the HTTP `{ "ok": true }` response.
|
|
117
|
-
|
|
118
|
-
## Locales
|
|
119
|
-
|
|
120
|
-
- `data.locale` is reserved for `localized: true` Schemas. A non-localized
|
|
121
|
-
Schema must use a domain field such as `replyLocale`.
|
|
122
|
-
- Use a standalone localized Schema only for independent locale rows. For
|
|
123
|
-
versions of one entity, use a non-localized parent plus a localized child
|
|
124
|
-
with `translates: { parent, on }`. The child must own at least one field
|
|
125
|
-
besides `locale` and the join field.
|
|
126
|
-
- Parallel locale blocks must keep field names, option values, step IDs, and
|
|
127
|
-
result keys identical; translate display strings only.
|
|
128
|
-
- `siteDefaults.origin`, `siteDefaults.locales`, and `siteDefaults.icons` are
|
|
129
|
-
code-owned and boot-synced. The icon list is shared by browser favicons,
|
|
130
|
-
Admin chrome, and MCP `serverInfo.icons`; keep its static files under
|
|
131
|
-
`public/`. Brand, title, and description seed once, then change through site
|
|
132
|
-
settings.
|
|
133
|
-
- When changing an existing collection from `[slug]` to `[slug, locale]`,
|
|
134
|
-
boot with a Mantle version that reconciles obsolete unique indexes and test
|
|
135
|
-
the same slug in two locales. Do not patch D1 manually.
|
|
136
|
-
|
|
137
|
-
## Adapter Boundary
|
|
138
|
-
|
|
139
|
-
The runtime is adapter-neutral. A `MantleStorageAdapter` prepares the compiled
|
|
140
|
-
plan into semantic storage ports; `createMantleRuntime` binds that prepared
|
|
141
|
-
storage and selected capabilities. Database drivers and asset serving belong
|
|
142
|
-
to the host/optional composition. Follow the installed adapter guide.
|
|
143
|
-
|
|
144
|
-
Do not assume Cloudflare unless the project imports `@aotter/mantle/cloudflare`
|
|
145
|
-
or its adapter config is visible. A future Netlify adapter should satisfy the
|
|
146
|
-
same Core workflow through its own ports and provider setup.
|
|
147
|
-
|
|
148
|
-
Site code is a consumer of this abstraction. Use Manifests, runtime use cases,
|
|
149
|
-
`runtime.entries`, and optional `runtime.siteConfig`; do not query Mantle-owned `entries` or
|
|
150
|
-
`site_config`, reach through deprecated `runtime.db`, copy generated-column
|
|
151
|
-
names, or construct SDK KV keys. Cloudflare bindings belong only at the
|
|
152
|
-
composition root. If a normal feature cannot be expressed through a
|
|
153
|
-
purpose-shaped surface, treat that as a Core abstraction gap instead of
|
|
154
|
-
teaching the project Mantle internals.
|
|
155
|
-
|
|
156
|
-
## Auth Composition
|
|
157
|
-
|
|
158
|
-
Admin is opt-in. A project without `@aotter/mantle-admin-ui` is complete.
|
|
159
|
-
When Admin is installed, `createMantleWorker({ auth })` with `email-otp`
|
|
160
|
-
and `ConsoleEmailSender` is the local human path (OTP in wrangler logs).
|
|
161
|
-
That override owns Auth construction; Core still owns `/admin` and
|
|
162
|
-
`/api/auth/*`. Admin also requires wrangler `assets.directory=./public`
|
|
163
|
-
and an `ASSETS` binding. A white screen at `/admin` with HTML 200 and
|
|
164
|
-
`/_mantle/admin/assets/*` 404 is a missing assets binding, not a missing
|
|
165
|
-
frontend build.
|
|
166
|
-
|
|
167
|
-
Conventional Cloudflare projects that do not replace Auth declare
|
|
168
|
-
`MANTLE_AUTH_MODE=hosted` or `self-managed`; Core owns that standard
|
|
169
|
-
composition and rejects partial or mixed bindings. Preserve the explicit
|
|
170
|
-
mode recorded in Worker config, keep provider secrets out of source, and
|
|
171
|
-
do not infer a mode from whichever credentials happen to be present.
|
|
172
|
-
|
|
173
|
-
## Performance Loop
|
|
174
|
-
|
|
175
|
-
After changing a Schema index, View filter/order, public API, or rendered page,
|
|
176
|
-
run the project's index check when present. Otherwise run the installed
|
|
177
|
-
harness directly:
|
|
178
|
-
|
|
179
|
-
```bash
|
|
180
|
-
pnpm exec mantle-harness indexes --require-public --format text
|
|
181
|
-
```
|
|
182
|
-
|
|
183
|
-
The check uses crowded real SQLite and the shipped compiler. It complements
|
|
184
|
-
`pnpm validate`; it does not replace correctness validation. Declare the
|
|
185
|
-
smallest ordered index justified by the measured path and respect SQLite's
|
|
186
|
-
leftmost-prefix rule; which columns an index may name and how a public View's
|
|
187
|
-
status predicate shapes it is in the handbook (`reference/schema.md#indexes`).
|
|
188
|
-
Do not change user-visible filter or ordering semantics
|
|
189
|
-
just to make the gate pass. Do not add every permutation or cache every read.
|
|
190
|
-
|
|
191
|
-
For relevant Cloudflare serving changes, start the project and sample the
|
|
192
|
-
actual routes:
|
|
193
|
-
|
|
194
|
-
```bash
|
|
195
|
-
pnpm exec mantle-harness http \
|
|
196
|
-
--base-url http://127.0.0.1:8787 \
|
|
197
|
-
--route page=/en/example \
|
|
198
|
-
--rounds 20 --warmup 2 --format text
|
|
199
|
-
```
|
|
200
|
-
|
|
201
|
-
Prefer query plan, query count, `rows_read` scaling, and cache MISS/HIT
|
|
202
|
-
evidence. Do not create CI gates from absolute local milliseconds.
|
|
13
|
+
The workflow for changing a Mantle 0.2 project. The installed package's docs
|
|
14
|
+
govern behavior: `node_modules/@aotter/mantle/docs/`.
|
|
15
|
+
|
|
16
|
+
## First read
|
|
17
|
+
|
|
18
|
+
1. `package.json` and the lockfile: the installed `@aotter/mantle` version.
|
|
19
|
+
Every `@aotter/mantle*` package is at that same exact version. If
|
|
20
|
+
`node_modules/` is missing, install with the lockfile first.
|
|
21
|
+
2. `mantle.config.json`: `identity` (`mantle`, `custom`, `none`),
|
|
22
|
+
`features`, `host` (`cloudflare`, `bun`, `none`) and `dialect` (`sqlite`,
|
|
23
|
+
`postgres`); absent host and dialect mean Cloudflare over D1. A
|
|
24
|
+
`version: 1` config or `cms.mantle.aotter.net/v1` manifests mean 0.1.x:
|
|
25
|
+
switch to `docs/skills/update/SKILL.md`.
|
|
26
|
+
3. `manifests/*.yaml`, `src/service.ts`, `src/handlers.ts`, `src/index.ts`
|
|
27
|
+
(and `src/identity.ts` for `custom`), `wrangler.jsonc` (not on Bun).
|
|
28
|
+
4. Installed docs: `docs/handbook/reference/features.md` to map the request to
|
|
29
|
+
manifest features, then the field references it links to.
|
|
30
|
+
`docs/examples/` holds whole services in the v2 grammar.
|
|
31
|
+
|
|
32
|
+
## The model
|
|
33
|
+
|
|
34
|
+
Four atoms, nothing else: **Schema** (rows), **View** (one SQL `SELECT`),
|
|
35
|
+
**Procedure** (SQL write statements, or a `ref` handler), **Trigger** (HTTP,
|
|
36
|
+
MCP, lifecycle, schedule). Do not invent kinds such as `Form` or `Workflow`.
|
|
37
|
+
|
|
38
|
+
Choose in this order, stopping at the first that works:
|
|
39
|
+
|
|
40
|
+
1. A Schema feature: `checks`, `uniqueIndexes`, `scope`, `ttl`,
|
|
41
|
+
`searchableFields`, `lifecycle`.
|
|
42
|
+
2. SQL: a View for reads; a Procedure's `sql` for writes. Several statements in
|
|
43
|
+
one `sql` apply together or not at all.
|
|
44
|
+
3. `requires` for who may call; a guard for a live check before one action.
|
|
45
|
+
4. A `ref` handler, only for what SQL cannot do: calling another service,
|
|
46
|
+
reading before writing, setting `status`, branching on a read.
|
|
47
|
+
|
|
48
|
+
## SQL rules that trip agents
|
|
49
|
+
|
|
50
|
+
- PostgreSQL syntax over declared Schemas only. References: `input.<name>`,
|
|
51
|
+
`auth.uid()`, `auth.role()`, `now()`; search is `mantle.search(t, q)`.
|
|
52
|
+
- Native columns are snake_case in SQL (`created_at`, `author_id`) and
|
|
53
|
+
camelCase in `ctx.store` JSON and in `indexes`.
|
|
54
|
+
- A write never names the scope field, `id` (on update), `version`, `status`,
|
|
55
|
+
`created_at`, `updated_at` or `author_id`. Set an owner with `auth.uid()` and
|
|
56
|
+
a time with `now()`, never from input.
|
|
57
|
+
- Optimistic lock: `WHERE id = input.id AND version = input.expectedVersion`.
|
|
58
|
+
Writing no row is `CONFLICT`. Keep omitted optional fields with
|
|
59
|
+
`COALESCE(input.x, x)`.
|
|
60
|
+
- `LIMIT` needs `ORDER BY`. No `OFFSET`, `RIGHT JOIN` or `CURRENT_TIMESTAMP`
|
|
61
|
+
on any dialect. On SQLite (D1) also no `WITH`, `UNION`, `ILIKE` or jsonb
|
|
62
|
+
operators, and `CAST(x AS int)` only on an integer literal: use `round(x)`.
|
|
63
|
+
PostgreSQL accepts these (`docs/handbook/reference/view.md`).
|
|
64
|
+
- Unquoted aliases fold to lower case: `AS "orderCount"` keeps the case.
|
|
65
|
+
- The runtime injects scope and TTL into every Schema reference, and
|
|
66
|
+
published-only into public Views. Never repeat them.
|
|
67
|
+
- `scope` hides rows from staff too. When staff must see every row, store
|
|
68
|
+
`auth.uid()` in a field and filter on it instead.
|
|
69
|
+
|
|
70
|
+
## Handlers
|
|
71
|
+
|
|
72
|
+
- `src/handlers.ts` exports `handlers: MantleHandlers` (`MantleHandlers<Env>`
|
|
73
|
+
types `ctx.env`); the generated type
|
|
74
|
+
lists exactly the plan's refs. Read and write only through `ctx.store`.
|
|
75
|
+
- After hooks: loop over `ctx.cause.rows`; never read only `rows[0]`.
|
|
76
|
+
- Before hooks and guards are read-only and reject by throwing
|
|
77
|
+
`DiagnosticError` (from `@aotter/mantle`); any other throw is a 500.
|
|
78
|
+
- `ctx.caller.kind === "user"` means signed in; a schedule runs as `system`.
|
|
79
|
+
Never test `!== "anonymous"`.
|
|
80
|
+
- `ctx.invoke(name, input)` calls another Procedure with the same caller.
|
|
81
|
+
|
|
82
|
+
## The service
|
|
83
|
+
|
|
84
|
+
`src/service.ts`, `src/index.ts` and `wrangler.jsonc` belong to the
|
|
85
|
+
application after the first `mantle generate`; it never rewrites them. Add
|
|
86
|
+
routes, bindings and env there (`docs/handbook/cloudflare/service-entry.md`).
|
|
87
|
+
Reach data from service code through `runtime.store.as(caller)` or
|
|
88
|
+
`runtime.invokeProcedure`; `runtime.store` alone is unscoped. A signed webhook
|
|
89
|
+
is a route in the service's `fetch` that verifies the raw body, then invokes
|
|
90
|
+
a Procedure as `systemCaller(...)`.
|
|
91
|
+
|
|
92
|
+
## MCP
|
|
93
|
+
|
|
94
|
+
With feature `mcp`, the preset mounts `/mcp` (public tools) and, with an
|
|
95
|
+
identity, `/mcp/staff` (staff tools for a staff role; with identity `mantle`,
|
|
96
|
+
the same OAuth token as `/mcp`). `/mcp/staff` serves
|
|
97
|
+
Mantle's MCP App: a host that renders MCP Apps shows each staff View's rows and
|
|
98
|
+
the operations on one row. A member-facing App on `/mcp` is the application's
|
|
99
|
+
to build when the product asks for one: follow [the recipe](mcp-app.md).
|
|
203
100
|
|
|
204
101
|
## Loop
|
|
205
102
|
|
|
206
103
|
```bash
|
|
207
|
-
pnpm
|
|
208
|
-
pnpm
|
|
209
|
-
pnpm
|
|
210
|
-
pnpm
|
|
211
|
-
pnpm check
|
|
212
|
-
```
|
|
213
|
-
|
|
214
|
-
Use `pnpm dev` for local preview when the project provides it.
|
|
215
|
-
|
|
216
|
-
## Connect a Local MCP Client
|
|
217
|
-
|
|
218
|
-
Start the project with `pnpm dev`, then use the exact local origin it prints.
|
|
219
|
-
The conventional Cloudflare adapter exposes:
|
|
220
|
-
|
|
221
|
-
- `http://localhost:8787/mcp` for public tools;
|
|
222
|
-
- `http://localhost:8787/mcp/staff` for authenticated authoring tools.
|
|
223
|
-
|
|
224
|
-
Prefer the client's native remote HTTP + OAuth support. Use a standard
|
|
225
|
-
HTTP-to-stdio bridge such as `npx -y mcp-remote <url>` only when the client
|
|
226
|
-
accepts stdio MCP servers but cannot connect to remote HTTP directly. Mantle
|
|
227
|
-
does not own a separate local proxy or an auth-bypass mode.
|
|
228
|
-
|
|
229
|
-
Before changing client config, confirm the Worker is reachable:
|
|
230
|
-
|
|
231
|
-
```bash
|
|
232
|
-
curl -i http://localhost:8787/mcp
|
|
104
|
+
pnpm exec mantle generate
|
|
105
|
+
pnpm exec mantle generate --check
|
|
106
|
+
pnpm exec tsc --noEmit
|
|
107
|
+
pnpm exec wrangler dev --local # on Bun: bun src/index.ts
|
|
233
108
|
```
|
|
234
109
|
|
|
235
|
-
|
|
236
|
-
`
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
cache.
|
|
110
|
+
Then exercise what changed over HTTP: the REST View or Trigger, `/mcp`
|
|
111
|
+
`tools/list` and a call, and with identity `mantle` a console email-OTP
|
|
112
|
+
sign-in and the Admin route (`docs/handbook/cloudflare/authentication.md`).
|
|
113
|
+
Check the stored rows, not only a 200. Before deploying a Schema change on
|
|
114
|
+
SQLite, run `mantle generate --check --database <file>` to see the storage SQL.
|
|
241
115
|
|
|
242
116
|
## Rules
|
|
243
117
|
|
|
244
|
-
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
-
|
|
248
|
-
|
|
249
|
-
- Do not commit provider
|
|
250
|
-
-
|
|
118
|
+
- Never edit `.mantle/generated/`. Commit it.
|
|
119
|
+
- Never write a Schema's table with `env.DB`, KV or SQL from outside Store;
|
|
120
|
+
never touch `_mantle_*` tables. The application's own tables are its own.
|
|
121
|
+
- A blocked storage change (`STORAGE_CHANGE_BLOCKED`) is the author's to make
|
|
122
|
+
by hand, then rerun; Mantle never drops a column or index.
|
|
123
|
+
- Do not commit secrets (`.dev.vars`, provider keys).
|
|
124
|
+
- Every 0.1.x term is gone: builtin handlers, `from`/`filter`, `params`,
|
|
125
|
+
`$ctx`, `x-mantle-bind`, `mantle validate`, `mantle skills`,
|
|
126
|
+
`createMantleWorker`.
|
|
127
|
+
|
|
128
|
+
## When you are done
|
|
129
|
+
|
|
130
|
+
Report the manifests and code you changed, the `generate --check` and
|
|
131
|
+
typecheck results, the HTTP calls you made and what they returned, and any
|
|
132
|
+
access you made stricter or could not express.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Recipe: an MCP App for members
|
|
2
|
+
|
|
3
|
+
The preset serves Mantle's App on `/mcp/staff` only. A member-facing App, on
|
|
4
|
+
`/mcp`, is the application's: the SDK attaches none, because what a member
|
|
5
|
+
should see in a chat (one order, a booking form, a status card) is a product
|
|
6
|
+
decision. Build it case by case from these pieces.
|
|
7
|
+
|
|
8
|
+
## Pieces
|
|
9
|
+
|
|
10
|
+
| Piece | From | What it gives |
|
|
11
|
+
|---|---|---|
|
|
12
|
+
| `apps: { resources: [...] }` | `createMcpSurface` (`@aotter/mantle/mcp`) | a `ui://` resource beside the tools; `renders` names the tools whose results it shows, `appOnly` the View tools only the App may call |
|
|
13
|
+
| `appCatalog(plan, "public")`, `withCatalog(html, catalog)` | `@aotter/mantle/mcp` | each public View tool's columns as the fields they read, and the row operations, embedded in your HTML as `#mantle-catalog` |
|
|
14
|
+
| `planApp(plan, { surface: "public", html: mantleAppHtml })` | `@aotter/mantle/mcp`, `@aotter/mantle-ui/mcp-app` | the staff App as is, for every public View: the quickest start when a list is what you want |
|
|
15
|
+
| `App` | `@modelcontextprotocol/ext-apps` | the host bridge: `ontoolresult`, `ontoolinput`, `callServerTool`, the host's locale and theme |
|
|
16
|
+
| `readCatalog`, `toolOf`, `outputOf`, `rowsOf`, `invokeTool`, `actionsFor` | `@aotter/mantle-ui` | the catalog, a result's tool, its output and rows, and a tool call as the controller reads it, so the App never parses the wire itself |
|
|
17
|
+
| `renderDataValue`, `propertyLabel`, `optionLabel`, `OperationPanel` | `@aotter/mantle-ui` | a value as Admin shows it (money, dates, option titles, in the host's locale), and Admin's review-and-submit panel |
|
|
18
|
+
| `createInteractionController` | `@aotter/mantle-ui/controller` | one operation on one row: review, submit once, a refusal or `CONFLICT` kept, never retried |
|
|
19
|
+
| `SchemaFields` and the primitives | `@aotter/mantle-ui/kit`, styled by `@aotter/mantle-ui/kit.css` | Admin's form controls |
|
|
20
|
+
|
|
21
|
+
The App's own build installs what it imports: `@modelcontextprotocol/ext-apps`
|
|
22
|
+
at the exact version `@aotter/mantle` depends on, React and the kit's peers
|
|
23
|
+
(`@aotter/mantle-ui`'s README lists them). `docs/handbook/concepts/mcp-and-agents.md`
|
|
24
|
+
(MCP Apps) describes the catalog and the staff App these share.
|
|
25
|
+
|
|
26
|
+
## Steps
|
|
27
|
+
|
|
28
|
+
1. Decide what the App shows and which tool's result opens it. It renders a
|
|
29
|
+
tool the surface already serves: a public View, or a Procedure with an
|
|
30
|
+
`mcp` Trigger on `public`. Add that Trigger or View first; an App never
|
|
31
|
+
reaches data a tool does not.
|
|
32
|
+
2. Build one self-contained HTML file, for example `app/dist/member.html`:
|
|
33
|
+
Vite with `vite-plugin-singlefile` (and React, if you use the components).
|
|
34
|
+
A host loads the App in a sandbox that fetches nothing else unless the
|
|
35
|
+
resource's `csp` allows it. The build runs before `wrangler dev` and
|
|
36
|
+
deploy: add it to the project's scripts.
|
|
37
|
+
3. Serve it. Wrangler imports `.html` as text; declare it for TypeScript in
|
|
38
|
+
`src/env.d.ts` (`declare module "*.html" { const html: string; export default html; }`),
|
|
39
|
+
then in `src/service.ts` (identity `mantle`, whose preset defines
|
|
40
|
+
`resourceMetadata`; with `custom`, pass the surface to your own `guard`):
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
import memberHtml from "../app/dist/member.html";
|
|
44
|
+
import { appCatalog, withCatalog } from "@aotter/mantle/mcp";
|
|
45
|
+
|
|
46
|
+
const html = withCatalog(memberHtml, appCatalog(runtime.plan, "public"));
|
|
47
|
+
const mcp = guard(createMcpSurface(runtime, { basePath: "/mcp", surface: "public", resourceMetadata,
|
|
48
|
+
apps: { resources: [{ uri: "ui://shop/my-orders", name: "my-orders", html, renders: ["my_orders"] }] } }), { resourceMetadata });
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
4. In the App, `readCatalog()` once; in `ontoolresult`, `toolOf(result)` names
|
|
52
|
+
the tool and `outputOf(result)` (or `rowsOf` for a View) is its data. A
|
|
53
|
+
success is `structuredContent` when the output is an object and the JSON
|
|
54
|
+
text otherwise; a failure of a tool with an output schema is the text
|
|
55
|
+
alone, which `outputOf` reads either way. Call tools through
|
|
56
|
+
`invokeTool(app.callServerTool…)`: a refusal is `{ ok: false, diagnostics }`
|
|
57
|
+
(`AUTH_DENIED`, `CONFLICT`, ...), and a thrown call (a 401 or 403 from a
|
|
58
|
+
missing scope or sign-in, a lost connection) is an unknown outcome to
|
|
59
|
+
re-read, never to retry blindly.
|
|
60
|
+
|
|
61
|
+
## Rules
|
|
62
|
+
|
|
63
|
+
- The HTML is a static asset: no caller data, no secrets, the same for every
|
|
64
|
+
member. Caller data arrives only in tool results.
|
|
65
|
+
- Every read and write is a tool call under the member's own token; `requires`
|
|
66
|
+
and `scope` apply exactly as they do to the model's calls.
|
|
67
|
+
- `appOnly` hides a read from the model; only a View can be app-only, never a
|
|
68
|
+
write.
|
|
69
|
+
- A public View over a `publishing` Schema shows published rows only; over a
|
|
70
|
+
`scope`d Schema it shows the caller's own rows, without a `WHERE` of yours.
|
|
71
|
+
|
|
72
|
+
## Verify
|
|
73
|
+
|
|
74
|
+
Add the App's build to the develop loop, then: `tools/list` from a client that
|
|
75
|
+
declares the MCP Apps extension shows the rendered tool with
|
|
76
|
+
`_meta.ui.resourceUri`; `resources/read` of that URI returns your HTML with
|
|
77
|
+
`#mantle-catalog`; a call to the tool returns its result with
|
|
78
|
+
`_meta["net.aotter.mantle/tool"]`. Then open it in a host that renders MCP
|
|
79
|
+
Apps, signed in as a member.
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: integrate
|
|
3
|
+
description: Add Mantle 0.2 to an existing application, or rebuild one on Mantle and migrate its data. Use when the application already has its own code, routes, users, storage or deployment.
|
|
4
|
+
metadata:
|
|
5
|
+
source: "@aotter/mantle"
|
|
6
|
+
sourcePath: docs/skills/integrate/SKILL.md
|
|
7
|
+
applies_to: mantle 0.2
|
|
8
|
+
projection: package
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# Integrate Mantle into an existing application
|
|
12
|
+
|
|
13
|
+
Mantle is added to a running service; it does not replace it. The service
|
|
14
|
+
keeps its entry, users, auth, tables, routes and frontend. Mantle adds its own
|
|
15
|
+
`_mantle_*` tables, the Schemas it declares, and the surfaces the service
|
|
16
|
+
chooses to mount. Read the installed package's
|
|
17
|
+
`docs/handbook/start/overview.md` and
|
|
18
|
+
`docs/handbook/concepts/authorization.md` first.
|
|
19
|
+
|
|
20
|
+
## Inspect and decide
|
|
21
|
+
|
|
22
|
+
Map the application before installing anything: its entry and router, frontend,
|
|
23
|
+
users and sign-in, database and data volume, deployment, background jobs and
|
|
24
|
+
tests. Ask which behavior the owner wants Mantle to own. Then choose:
|
|
25
|
+
|
|
26
|
+
1. **Embed.** Keep the application's entry. Compose Mantle into its existing
|
|
27
|
+
`fetch` (`createMantle(service, { plan, storage })`, the surfaces you want,
|
|
28
|
+
behind a `CallerResolver` over the application's own sessions). Best when
|
|
29
|
+
the application already runs on Workers with D1.
|
|
30
|
+
2. **Move one capability at a time.** Give one bounded set of data (a form, a
|
|
31
|
+
catalog) a Schema, then its Views and Procedures; the rest stays. At every
|
|
32
|
+
step, each table has exactly one writer.
|
|
33
|
+
3. **Rebuild and migrate.** Generate a new Mantle service in a separate
|
|
34
|
+
directory, port the frontend and business rules, and import the data. Best
|
|
35
|
+
when adapting the old structure costs more than rebuilding.
|
|
36
|
+
|
|
37
|
+
Explain the choice and its tradeoffs to the owner before changing code.
|
|
38
|
+
|
|
39
|
+
## Identity
|
|
40
|
+
|
|
41
|
+
The application keeps its users. Pick `identity`:
|
|
42
|
+
|
|
43
|
+
- `custom`: write `src/identity.ts` as a `CallerResolver` over the existing
|
|
44
|
+
sessions or tokens. `subject` is the application's stable user id,
|
|
45
|
+
namespaced when there are several issuers, never an email. Map existing
|
|
46
|
+
admin roles to `owner` / `editor` / `contributor`, or leave `role` null.
|
|
47
|
+
- `mantle`: only when the application has no sign-in and wants Better Auth's.
|
|
48
|
+
- `none`: a public service with no signed-in callers.
|
|
49
|
+
|
|
50
|
+
Switching identity later is refused; choose deliberately.
|
|
51
|
+
|
|
52
|
+
## Embedding into an existing entry
|
|
53
|
+
|
|
54
|
+
`mantle generate` writes the preset only where `src/service.ts` does not
|
|
55
|
+
exist; `--host none` writes no preset at all, only the plan and its types.
|
|
56
|
+
For an application with its own entry, generate in a scratch
|
|
57
|
+
directory with the same manifests and config, then copy the composition you
|
|
58
|
+
need from the generated `src/service.ts` into the application's own entry:
|
|
59
|
+
|
|
60
|
+
- the `createMantle(service, { plan, storage: (env) => d1Storage(env.DB), schedules: true })` call;
|
|
61
|
+
- `withCaller(resolver, createRestSurface(runtime, { basePath: "/api" }))`
|
|
62
|
+
and any other surface, mounted on paths the application does not use;
|
|
63
|
+
- the `scheduled` mapping from `src/index.ts`, if the plan has schedules.
|
|
64
|
+
|
|
65
|
+
Put that composition in the application's `src/service.ts` before the first
|
|
66
|
+
`mantle generate` inside the application: while `src/service.ts` is missing,
|
|
67
|
+
generate writes every missing preset file (`src/service.ts`, `src/index.ts`,
|
|
68
|
+
`src/handlers.ts`, `src/identity.ts` for `custom`, `tsconfig.json`,
|
|
69
|
+
`.gitignore`, `.dev.vars.example` for `mantle`, and `wrangler.jsonc` unless a
|
|
70
|
+
`wrangler.*` exists; on Bun `.env.example` and no `wrangler.jsonc`) beside the
|
|
71
|
+
application's own.
|
|
72
|
+
Commit `.mantle/generated/` and run `mantle generate --check` in CI.
|
|
73
|
+
|
|
74
|
+
## Moving data into a Schema
|
|
75
|
+
|
|
76
|
+
- Mantle never reads or writes a table it did not create. A table with a
|
|
77
|
+
Schema's name that Mantle does not own stops boot
|
|
78
|
+
(`STORAGE_TABLE_NOT_OWNED`); give the Schema a new name.
|
|
79
|
+
- Import through `runtime.store` in trusted code. A scoped row goes through
|
|
80
|
+
`runtime.store.as(<its owner's caller>)`, so the owner field is right.
|
|
81
|
+
`status`, timestamps and `author_id` cannot be imported: publish with a
|
|
82
|
+
second update that sets `status`.
|
|
83
|
+
- Rehearse on a copy, compare row counts, and keep the old table until the
|
|
84
|
+
owner confirms. Never touch live data before the cutover is agreed.
|
|
85
|
+
|
|
86
|
+
## Verify
|
|
87
|
+
|
|
88
|
+
Run the application's own build and tests, then `mantle generate --check`,
|
|
89
|
+
the typecheck, and real requests against the routes Mantle now serves, as the
|
|
90
|
+
right callers (owner, member, anonymous). `--check` proves the generated files;
|
|
91
|
+
it does not prove the integration.
|
|
92
|
+
|
|
93
|
+
## When you are done
|
|
94
|
+
|
|
95
|
+
Report which capabilities Mantle now owns, the identity mapping, what moved and
|
|
96
|
+
how it was verified, and what remains for cutover or deployment.
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: media-gc
|
|
3
|
-
description: Audit and safely remove stale, uncommitted
|
|
3
|
+
description: Audit and safely remove stale, uncommitted media uploads from a Mantle 0.2 Cloudflare R2 bucket. Use when an operator asks to inspect or clean objects left under uploads/ by an upload that was created but never committed.
|
|
4
4
|
metadata:
|
|
5
5
|
source: "@aotter/mantle"
|
|
6
6
|
sourcePath: docs/skills/media-gc/SKILL.md
|
|
7
|
-
applies_to: mantle
|
|
7
|
+
applies_to: mantle 0.2
|
|
8
8
|
projection: package
|
|
9
9
|
projectionReason: Destructive remote object deletion and Cloudflare-specific; opt-in only.
|
|
10
10
|
---
|
|
@@ -16,26 +16,37 @@ objects approved by the user.
|
|
|
16
16
|
|
|
17
17
|
## Preflight
|
|
18
18
|
|
|
19
|
-
1. Read
|
|
20
|
-
|
|
19
|
+
1. Read `wrangler.jsonc` and `src/service.ts`. Resolve the R2 bucket that
|
|
20
|
+
`r2MediaStorage` uses and the media purpose names in the site defaults
|
|
21
|
+
passed to `d1Storage(db, { site })`.
|
|
21
22
|
2. Confirm the exact Cloudflare account and bucket. If either is ambiguous,
|
|
22
23
|
ask; never choose by name similarity.
|
|
23
24
|
3. Use the Cloudflare OpenAPI search before execution to resolve the current
|
|
24
25
|
R2 List Objects and Delete Objects endpoints. If the connected account lacks
|
|
25
26
|
access, stop. Do not create, request, or store credentials.
|
|
26
|
-
4. Stop when the
|
|
27
|
+
4. Stop when the service passes no `r2MediaStorage` or declares no purpose.
|
|
28
|
+
|
|
29
|
+
## How 0.2 lays out media
|
|
30
|
+
|
|
31
|
+
`POST /admin/api/media/uploads` issues presigned PUT URLs that expire after 15
|
|
32
|
+
minutes, for keys under `uploads/<purpose>/<group>/<role>.<ext>`. Commit
|
|
33
|
+
copies each checked object to `<purpose>/<group>/<role>.<ext>` (with
|
|
34
|
+
`committedAt` metadata) and deletes the upload key; a rejected group's upload
|
|
35
|
+
keys are deleted. So an object still under `uploads/` long after its URL
|
|
36
|
+
expired belongs to an upload that was never committed, and nothing can commit
|
|
37
|
+
it any more. Objects outside `uploads/` are committed media: never candidates.
|
|
27
38
|
|
|
28
39
|
## Audit
|
|
29
40
|
|
|
30
41
|
For each declared purpose, list up to 1,000 objects per page under the exact
|
|
31
|
-
|
|
42
|
+
`uploads/<purpose>/` prefix. Use the API cursor until `is_truncated` is false.
|
|
32
43
|
|
|
33
44
|
An object is a deletion candidate only when all conditions hold:
|
|
34
45
|
|
|
35
46
|
- `last_modified` is more than 24 hours old;
|
|
36
47
|
- `custom_metadata.committedAt` is absent or empty;
|
|
37
|
-
- the key matches the exact
|
|
38
|
-
|
|
48
|
+
- the key matches the exact upload layout
|
|
49
|
+
`uploads/<purpose>/<group>/(primary|alternate|fallback).(png|jpg|webp|avif|gif|bin)`,
|
|
39
50
|
where `<purpose>` is declared by this project and `<group>` contains only
|
|
40
51
|
letters, digits, `_`, or `-`.
|
|
41
52
|
|
|
@@ -65,8 +76,8 @@ filenames, public URLs, signed URLs, or secrets.
|
|
|
65
76
|
|
|
66
77
|
- Don't create a Worker, Cron Trigger, lifecycle rule, D1 table, or local script.
|
|
67
78
|
- Don't use prefix deletion or empty-bucket operations.
|
|
68
|
-
- Don't delete
|
|
69
|
-
|
|
79
|
+
- Don't delete objects outside `uploads/<declared purpose>/`, and never
|
|
80
|
+
committed media.
|
|
70
81
|
- Don't treat missing pagination pages, metadata, or permissions as an empty
|
|
71
82
|
result.
|
|
72
83
|
|