@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.2
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 +592 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +266 -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 +38 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +188 -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 +129 -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 +508 -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 +318 -262
- 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 +353 -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/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0027-scheduled-procedure-triggers.md +1 -1
- package/docs/adr/0028-schema-ttl-expiry.md +3 -3
- 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 +23 -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 +119 -311
- 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 -163
- 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 -33
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -178
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +91 -279
- package/docs/handbook/reference/schema.md +154 -239
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +72 -181
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -77
- package/docs/handbook/start/overview.md +59 -51
- package/docs/handbook/start/project-and-cli.md +132 -105
- package/docs/handbook/start/quickstart-worker.md +102 -160
- package/docs/skills/develop/SKILL.md +114 -240
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +83 -47
- 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 -106
- 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/generate-cloudflare.d.ts +0 -7
- package/dist/cli/generate-cloudflare.d.ts.map +0 -1
- package/dist/cli/generate-cloudflare.js +0 -123
- package/dist/cli/generate-cloudflare.js.map +0 -1
- package/dist/cli/generate-project.d.ts +0 -25
- package/dist/cli/generate-project.d.ts.map +0 -1
- package/dist/cli/generate-project.js +0 -282
- package/dist/cli/generate-project.js.map +0 -1
- package/dist/cli/generate-sites.d.ts +0 -8
- package/dist/cli/generate-sites.d.ts.map +0 -1
- package/dist/cli/generate-sites.js +0 -273
- package/dist/cli/generate-sites.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 -64
- 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/0004_mantle.sql +0 -10
- package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
- 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 -43
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
- 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/generated-app.md +0 -84
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -133
- package/docs/handbook/cloudflare/bindings.md +0 -291
- package/docs/handbook/cloudflare/conventional-worker.md +0 -166
- 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 -52
- 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 -127
- package/skills/develop/SKILL.md +0 -258
- package/skills/install/SKILL.md +0 -112
- package/skills/integrate/SKILL.md +0 -60
- 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
- package/templates/chatgpt-sites/auth.ts +0 -66
- package/templates/chatgpt-sites/build.mjs +0 -14
- package/templates/chatgpt-sites/env.ts +0 -1
- package/templates/chatgpt-sites/mcp.ts +0 -48
- package/templates/chatgpt-sites/public-mcp.ts +0 -29
- package/templates/chatgpt-sites/smoke-local.mjs +0 -20
|
@@ -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
|
|
|
@@ -1,194 +1,100 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: provision
|
|
3
|
-
description: Ship a Mantle project
|
|
3
|
+
description: Ship a Mantle 0.2 project to production — Cloudflare Workers with D1, production sign-in and secrets, or ChatGPT Sites through its guide — and verify the deployed service.
|
|
4
4
|
metadata:
|
|
5
5
|
source: "@aotter/mantle"
|
|
6
6
|
sourcePath: docs/skills/provision/SKILL.md
|
|
7
|
-
applies_to: mantle
|
|
7
|
+
applies_to: mantle 0.2
|
|
8
8
|
projection: package
|
|
9
|
-
projectionReason:
|
|
9
|
+
projectionReason: Creates remote resources and handles production secrets; opt-in only.
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
# Provision a Mantle
|
|
13
|
-
|
|
14
|
-
Local cold start deliberately stops before this skill. Provision only after the
|
|
15
|
-
user asks to create remote resources or ship production. This flow is for
|
|
16
|
-
consumer-owned Cloudflare Workers. New direct-authored apps do not need Landing
|
|
17
|
-
artifacts (`.mantle/launch-state.json`, `.mantle/handoff.md`, or a hosted-auth
|
|
18
|
-
allocation). Treat any Landing handoff as **legacy/optional**. For a ChatGPT
|
|
19
|
-
Site, use the installed `docs/handbook/chatgpt-sites/index.md` integration guide and
|
|
20
|
-
the "Publish with Sites" steps in `docs/examples/host-chatgpt-sites/README.md`:
|
|
21
|
-
request D1 and R2 on the Site, set `PUBLIC_ORIGIN` and `OWNER_EMAIL` in Sites
|
|
22
|
-
settings, review the migration, then save and deploy a Sites version. Do not
|
|
23
|
-
run `wrangler deploy` or require R2 S3 credentials merely because Sites exposes
|
|
24
|
-
an R2 binding.
|
|
25
|
-
|
|
26
|
-
## Source of Truth
|
|
27
|
-
|
|
28
|
-
1. Read the actual provider config (`wrangler.jsonc` or `wrangler.toml`),
|
|
29
|
-
application entry and git remotes. Read legacy `.mantle/launch-state.json`
|
|
30
|
-
and `.mantle/handoff.md` only when present; they are optional leftovers from
|
|
31
|
-
Landing and must not be created as prerequisites for a new app.
|
|
32
|
-
2. Read installed `@aotter/mantle*` versions from `package.json`.
|
|
33
|
-
3. Use matching embedded docs under `node_modules/@aotter/mantle/docs/`.
|
|
34
|
-
4. Never infer provider authority from launch state. Confirm the active GitHub
|
|
35
|
-
and Cloudflare accounts before changing them.
|
|
36
|
-
|
|
37
|
-
Run the local gate first:
|
|
12
|
+
# Provision a Mantle project
|
|
38
13
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
pnpm typecheck
|
|
43
|
-
git status --short
|
|
44
|
-
```
|
|
45
|
-
|
|
46
|
-
## Resume From Observed State
|
|
47
|
-
|
|
48
|
-
Do not branch on how the project was created. Verify these facts and skip
|
|
49
|
-
completed work:
|
|
50
|
-
|
|
51
|
-
1. `git remote get-url origin` confirms the GitHub repo.
|
|
52
|
-
2. An HTTPS `PUBLIC_ORIGIN` that responds confirms the Cloudflare deploy.
|
|
53
|
-
3. `/admin/sign-in` returning `503 setup_incomplete` means auth is not bound.
|
|
54
|
-
Use the recorded auth intent only to choose hosted or self-hosted setup;
|
|
55
|
-
live behavior is authoritative.
|
|
56
|
-
|
|
57
|
-
If there is no remote, confirm the target account, create a private repo,
|
|
58
|
-
commit, and push `main`. If there is no live Worker, confirm the Cloudflare
|
|
59
|
-
account, prefer an available connector, or use `pnpm exec wrangler login` with
|
|
60
|
-
the user's agreement, then run `pnpm deploy`.
|
|
61
|
-
|
|
62
|
-
Capture the live URL in `PUBLIC_ORIGIN` and `Public site:` in `AGENTS.md`, then
|
|
63
|
-
commit and push non-secret changes. Reuse any repo or Worker already created.
|
|
64
|
-
Do not recreate Landing artifacts for a new direct-authored app. Workers Builds
|
|
65
|
-
is optional after a direct deploy.
|
|
66
|
-
|
|
67
|
-
When the owner later adopts a custom domain, update `PUBLIC_ORIGIN` and the
|
|
68
|
-
provider's OAuth callback together, then redeploy. Do not patch `site_config`
|
|
69
|
-
directly; boot syncs its canonical origin from `PUBLIC_ORIGIN`.
|
|
70
|
-
|
|
71
|
-
## Choose Auth
|
|
72
|
-
|
|
73
|
-
- **Self-hosted email OTP:** use the application's production transactional-email sender. Replace `ConsoleEmailSender`; never deploy it.
|
|
74
|
-
- **Self-hosted GitHub OAuth — free fallback:** use when the application has no email provider. Configure the owner's per-site GitHub OAuth App and Worker secrets using the steps below.
|
|
75
|
-
- **Mantle hosted auth — paid, legacy/optional:** use only when a **legacy
|
|
76
|
-
Landing handoff** already records a hosted allocation and client
|
|
77
|
-
configuration. New direct-authored apps do not get this from Core. Mantle
|
|
78
|
-
Platform operates the identity provider; do not ask the user for a per-site
|
|
79
|
-
GitHub OAuth App.
|
|
80
|
-
|
|
81
|
-
Configure only the selected mode. Core deliberately rejects partial or mixed
|
|
82
|
-
hosted/self-managed bindings with `503 setup_incomplete`.
|
|
83
|
-
|
|
84
|
-
Do not claim that hosted auth can attach to an arbitrary local repo unless a
|
|
85
|
-
legacy Landing handoff already supplies that configuration.
|
|
86
|
-
|
|
87
|
-
For the exact boundary, read
|
|
88
|
-
`node_modules/@aotter/mantle/docs/auth-hosting-model.md`.
|
|
14
|
+
Provision only after the user asks to create remote resources or ship. Read the
|
|
15
|
+
installed `docs/handbook/cloudflare/deploy-and-operate.md` and
|
|
16
|
+
`docs/handbook/cloudflare/authentication.md` first.
|
|
89
17
|
|
|
90
|
-
##
|
|
18
|
+
## Choose the target
|
|
91
19
|
|
|
92
|
-
|
|
93
|
-
`ConsoleEmailSender` with its production `EmailSender`, and retain
|
|
94
|
-
`bootstrapOwner: { match: "email", value: <owner email> }`. Store sender
|
|
95
|
-
credentials and `BETTER_AUTH_SECRET` as Worker secrets, put `PUBLIC_ORIGIN` in
|
|
96
|
-
non-secret vars, deploy, then verify that the owner receives an OTP at
|
|
97
|
-
`/admin/sign-in`. If there is no production email provider, use GitHub OAuth
|
|
98
|
-
below instead of deploying console delivery.
|
|
20
|
+
Ask which target, unless the project already shows one.
|
|
99
21
|
|
|
100
|
-
|
|
22
|
+
| Target | Config | Follow |
|
|
23
|
+
|---|---|---|
|
|
24
|
+
| Cloudflare Workers | `wrangler.jsonc` | the rest of this skill |
|
|
25
|
+
| ChatGPT Sites | the Site's hosting config | installed `docs/handbook/cloudflare/chatgpt-sites.md`; publish through Sites, never `wrangler deploy` |
|
|
26
|
+
| Mantle Cloud | — | not available for 0.2 services yet; the plugin's `mantle` skill says when it is |
|
|
27
|
+
| Bun (host `bun`) | `.env` | self-hosted; installed `docs/handbook/start/project-and-cli.md` (Bun), not this skill |
|
|
101
28
|
|
|
102
|
-
|
|
29
|
+
Self-hosting is always an option; never present a hosted target as required.
|
|
103
30
|
|
|
104
|
-
|
|
105
|
-
- Authorization callback URL: `<worker-url>/api/auth/callback/github`
|
|
106
|
-
- Device Flow: unchecked
|
|
107
|
-
|
|
108
|
-
2. Put non-secret values in `wrangler.toml`:
|
|
109
|
-
|
|
110
|
-
- `MANTLE_AUTH_MODE = "self-managed"`
|
|
111
|
-
- `PUBLIC_ORIGIN`
|
|
112
|
-
- `GITHUB_CLIENT_ID`
|
|
113
|
-
- `ADMIN_GITHUB_LOGIN`
|
|
114
|
-
- correct Worker `name`
|
|
115
|
-
|
|
116
|
-
Remove `MANTLE_HOSTED_AUTH_ISSUER` and `MANTLE_HOSTED_AUTH_CLIENT_ID` if they
|
|
117
|
-
were present for a hosted allocation.
|
|
118
|
-
|
|
119
|
-
3. Keep the Client Secret out of chat. Prefer a Cloudflare connector for
|
|
120
|
-
secrets; otherwise use hidden shell input:
|
|
31
|
+
## Local gate
|
|
121
32
|
|
|
122
33
|
```bash
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
34
|
+
pnpm install --frozen-lockfile
|
|
35
|
+
pnpm exec mantle generate --check
|
|
36
|
+
pnpm exec tsc --noEmit
|
|
37
|
+
git status --short
|
|
127
38
|
```
|
|
128
39
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
40
|
+
Confirm the active Cloudflare account with the user before creating anything.
|
|
41
|
+
|
|
42
|
+
## Cloudflare
|
|
43
|
+
|
|
44
|
+
1. **Database.** `pnpm exec wrangler d1 create <name>` and put the
|
|
45
|
+
`database_id` into `wrangler.jsonc`'s `d1_databases[0]`, keeping the
|
|
46
|
+
binding `DB`. With dialect `postgres`, instead run
|
|
47
|
+
`pnpm exec wrangler hyperdrive create <name> --caching-disabled --connection-string=...`
|
|
48
|
+
(the connection string by hidden input) and replace the placeholder id in
|
|
49
|
+
`hyperdrive[0]`, keeping the binding `HYPERDRIVE`. An existing 0.1.x
|
|
50
|
+
database is never reused: 0.2 starts on a new one.
|
|
51
|
+
2. **Origin.** Set `PUBLIC_ORIGIN` in `vars` to the deployed HTTPS origin.
|
|
52
|
+
Update it together with any OAuth callback when a custom domain is added.
|
|
53
|
+
3. **Sign-in (identity `mantle`).** Choose one production method and edit
|
|
54
|
+
`src/service.ts`; never deploy `ConsoleEmailSender`:
|
|
55
|
+
- **Email OTP or magic link** with the application's own `EmailSender`
|
|
56
|
+
over its email provider, `bootstrapOwner: { match: "email", value }`.
|
|
57
|
+
- **GitHub**: `{ kind: "social", provider: "github", options: { clientId, clientSecret } }`
|
|
58
|
+
and `bootstrapOwner: { match: "github-login", value }`. The user creates a
|
|
59
|
+
GitHub OAuth App with callback `<PUBLIC_ORIGIN>/api/auth/callback/github`.
|
|
60
|
+
Remove the preset's loopback-only check once the method is real.
|
|
61
|
+
4. **Secrets.** Never in chat, files or logs. Use a connector, or hidden
|
|
62
|
+
input:
|
|
133
63
|
|
|
134
64
|
```bash
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
git push
|
|
138
|
-
pnpm deploy
|
|
65
|
+
openssl rand -hex 32 | pnpm exec wrangler secret put BETTER_AUTH_SECRET
|
|
66
|
+
read -rsp "GitHub client secret: " S && printf '%s' "$S" | pnpm exec wrangler secret put GITHUB_CLIENT_SECRET; unset S
|
|
139
67
|
```
|
|
140
68
|
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
- `MANTLE_AUTH_MODE = "hosted"`;
|
|
150
|
-
- `MANTLE_HOSTED_AUTH_ISSUER` is the HTTPS root issuer;
|
|
151
|
-
- `MANTLE_HOSTED_AUTH_CLIENT_ID` is the same-origin `/clients/<id>` URL;
|
|
152
|
-
- `PUBLIC_ORIGIN` and `ADMIN_GITHUB_LOGIN` are set;
|
|
153
|
-
- `BETTER_AUTH_SECRET` exists as a Worker secret;
|
|
154
|
-
- `GITHUB_CLIENT_ID` and `GITHUB_CLIENT_SECRET` are absent.
|
|
69
|
+
Set `BETTER_AUTH_SECRET` once; rotating it signs everyone out.
|
|
70
|
+
5. **Optional bindings.** R2 for media only when asked
|
|
71
|
+
(`docs/handbook/cloudflare/media-r2.md`).
|
|
72
|
+
6. **Deploy.** `pnpm exec wrangler deploy`. The first request creates the
|
|
73
|
+
tables. Later Schema changes on D1: run
|
|
74
|
+
`mantle generate --check --database <local SQLite file>` (local D1 under
|
|
75
|
+
`.wrangler/state/v3/d1/`, which must have run the plan now deployed) before
|
|
76
|
+
each deploy and resolve any blocked change by hand.
|
|
155
77
|
|
|
156
|
-
|
|
157
|
-
`wrangler.toml`.
|
|
78
|
+
Commit and push only non-secret changes.
|
|
158
79
|
|
|
159
|
-
Verify
|
|
160
|
-
authenticates, then skip the self-hosted flow.
|
|
80
|
+
## Verify the deployed service
|
|
161
81
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
- `/
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
-
|
|
169
|
-
|
|
170
|
-
Media uploads are optional. Configure R2 only when the owner asks for
|
|
171
|
-
staff-managed files; then read
|
|
172
|
-
`node_modules/@aotter/mantle/docs/handbook/cloudflare/media-r2.md`.
|
|
82
|
+
- A public View and an HTTP Trigger answer.
|
|
83
|
+
- Sign-in works with the production method; the owner gets
|
|
84
|
+
`GET /admin/api/me` → `owner`, a second account gets 403.
|
|
85
|
+
- `/mcp` answers `tools/list`, and an anonymous call to a protected tool is
|
|
86
|
+
401 with a `WWW-Authenticate` challenge. When every public tool `requires` a
|
|
87
|
+
caller, anonymous `initialize` and `tools/list` are already that 401.
|
|
88
|
+
- Every enabled schedule appears in the Worker's cron triggers.
|
|
173
89
|
|
|
174
90
|
## Handoff
|
|
175
91
|
|
|
176
|
-
Return
|
|
177
|
-
|
|
178
|
-
- public URL;
|
|
179
|
-
- admin sign-in URL;
|
|
180
|
-
- Staff MCP URL;
|
|
181
|
-
- operator setup URL:
|
|
182
|
-
`https://mantle.tools/connect?site=<url-encoded-worker-url>`;
|
|
183
|
-
- remote resources created or reused;
|
|
184
|
-
- auth mode and any intentionally deferred setup.
|
|
92
|
+
Return the public origin, the sign-in method and who the owner is, the MCP
|
|
93
|
+
URL (`<origin>/mcp`), the resources created or reused, and anything deferred.
|
|
185
94
|
|
|
186
95
|
## Don't
|
|
187
96
|
|
|
188
97
|
- Don't create remote resources before the user asks to ship.
|
|
189
|
-
- Don't
|
|
190
|
-
- Don't
|
|
191
|
-
- Don't
|
|
192
|
-
- Don't invent a second provision orchestrator.
|
|
193
|
-
- Don't use `/admin/auth/github/callback`; the callback is
|
|
194
|
-
`/api/auth/callback/github`.
|
|
98
|
+
- Don't commit secrets or put them in `wrangler.jsonc` `vars`.
|
|
99
|
+
- Don't point a 0.2 service at a 0.1.x database.
|
|
100
|
+
- Don't patch `site_config` or `_mantle_*` tables; boot owns them.
|
|
@@ -1,51 +1,50 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: update
|
|
3
|
-
description:
|
|
3
|
+
description: Upgrade a Mantle project's @aotter/mantle packages to a new exact version, including the move from 0.1.x to 0.2, without overwriting application-owned code.
|
|
4
4
|
metadata:
|
|
5
5
|
source: "@aotter/mantle"
|
|
6
6
|
sourcePath: docs/skills/update/SKILL.md
|
|
7
|
-
applies_to: mantle
|
|
8
|
-
projection:
|
|
7
|
+
applies_to: mantle 0.2
|
|
8
|
+
projection: package
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Mantle Update
|
|
12
12
|
|
|
13
|
-
Upgrade
|
|
14
|
-
The old Starter bundle comparison command `mantle update` is removed. This
|
|
15
|
-
skill remains the version-matched upgrade workflow, not a replacement CLI.
|
|
13
|
+
Upgrade deliberately; never overwrite application-owned code.
|
|
16
14
|
|
|
17
|
-
1. Inspect git status
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
5. Use the upgraded package to regenerate machine-owned bindings and project
|
|
34
|
-
its skills, then run the application's validation, types and tests:
|
|
15
|
+
1. Inspect `git status`, `package.json`, the lockfile and the installed
|
|
16
|
+
`@aotter/mantle` version. Keep unrelated local changes. Work on a branch.
|
|
17
|
+
2. Choose an explicit target version (`npm view @aotter/mantle dist-tags`).
|
|
18
|
+
Read its release notes on GitHub and, after installing, its own
|
|
19
|
+
`node_modules/@aotter/mantle/docs/`. The old version's docs are not the new
|
|
20
|
+
contract.
|
|
21
|
+
3. **From 0.1.x to 0.2:** stop here and follow
|
|
22
|
+
`node_modules/@aotter/mantle/docs/upgrade-0.1-to-0.2.md` after installing
|
|
23
|
+
the target. There is no codemod and no in-place database upgrade: the
|
|
24
|
+
project moves by hand, to a new database.
|
|
25
|
+
4. Set `@aotter/mantle`, and `@aotter/mantle-ui` where present, to the same
|
|
26
|
+
exact version (`@aotter/mantle-admin-ui` is gone: the console is
|
|
27
|
+
`@aotter/mantle-ui/admin`), and update the lockfile with the
|
|
28
|
+
package manager. Review the dependency diff and any peer changes
|
|
29
|
+
`mantle generate` names.
|
|
30
|
+
5. Regenerate and check:
|
|
35
31
|
|
|
36
32
|
```sh
|
|
37
33
|
pnpm exec mantle generate
|
|
38
34
|
pnpm exec mantle generate --check
|
|
39
|
-
pnpm exec
|
|
40
|
-
pnpm exec mantle skills --check
|
|
41
|
-
pnpm exec mantle validate
|
|
35
|
+
pnpm exec tsc --noEmit
|
|
42
36
|
```
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
38
|
+
6. The preset (`src/service.ts`, `src/index.ts`, `src/handlers.ts`,
|
|
39
|
+
`wrangler.jsonc`) is never
|
|
40
|
+
rewritten. Generate into a scratch directory with the same manifests and
|
|
41
|
+
`mantle.config.json`, diff it against the project's files, and apply the
|
|
42
|
+
changes that matter by hand.
|
|
43
|
+
7. Run the service locally and test its real routes and sign-in. Before
|
|
44
|
+
deploying a SQLite project, run
|
|
45
|
+
`mantle generate --check --database <local SQLite file>` to see what boot
|
|
46
|
+
will change.
|
|
46
47
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
never enter git or logs. Report exact old/new versions, checks, and remaining
|
|
51
|
-
migration work. A dependency update does not authorize a production deploy.
|
|
48
|
+
Report the old and new versions, the checks and their results, what changed
|
|
49
|
+
in the service files, and what remains. A dependency update does not
|
|
50
|
+
authorize a deploy. Never commit secrets.
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
# Upgrading from 0.1.x to 0.2.0 (for AI agents)
|
|
2
|
+
|
|
3
|
+
No codemod, and no in-place upgrade of a 0.1.x database. A coding agent moves
|
|
4
|
+
one project by hand with this guide. When it and ADR-0032 to ADR-0035
|
|
5
|
+
(`docs/adr/`), ADR-0036 (host and dialect) or ADR-0038 (Bun) disagree, the
|
|
6
|
+
ADR wins.
|
|
7
|
+
|
|
8
|
+
## Rules
|
|
9
|
+
|
|
10
|
+
- Work on a branch. Keep the 0.1.x project running until the 0.2.0 one passes
|
|
11
|
+
its checks.
|
|
12
|
+
- Move meaning, not text. If a manifest does something no row below covers,
|
|
13
|
+
stop and ask. Vercel projects have no 0.2.0 preset: stop and ask. A Bun
|
|
14
|
+
project moves to `host: bun` (section 2).
|
|
15
|
+
- Never loosen access. Every 0.1.x `requires`, guard, `scope` and
|
|
16
|
+
`x-mantle-bind` must come out at least as strict. `x-mantle-bind` is
|
|
17
|
+
refused in 0.2.0 and stamps nothing, so each one becomes `scope` or an
|
|
18
|
+
explicit value in the write (section 3).
|
|
19
|
+
- Give the 0.2.0 service a new database; never boot it against the 0.1.x
|
|
20
|
+
one. Move data by export and import (section 5).
|
|
21
|
+
- `mantle generate --check` is the gate. Never hand-edit `.mantle/generated/`.
|
|
22
|
+
|
|
23
|
+
## 1. Packages
|
|
24
|
+
|
|
25
|
+
| 0.1.x | 0.2.0 |
|
|
26
|
+
|---|---|
|
|
27
|
+
| `@aotter/mantle` and `@aotter/mantle-spec`, `-runtime`, `-cloudflare`, `-auth`, `-admin`, `-web`, `-bun`, `-vercel`, `-indexeddb` | `@aotter/mantle` (subpaths `/spec`, `/d1`, `/postgres`, `/cloudflare`, `/bun`, `/auth`, `/admin`, `/mcp`, `/web`, `/testing`) |
|
|
28
|
+
| `@aotter/mantle-admin-ui` | `@aotter/mantle-ui` at the same version as `@aotter/mantle`: the preset serves the console at `/admin` from its `dist/admin` files; nothing to import. Its `/kit` re-export is gone: import `@aotter/mantle-ui/kit` |
|
|
29
|
+
|
|
30
|
+
Remove every old package and install `@aotter/mantle` at the exact target
|
|
31
|
+
version. `mantle generate` names any other package it needs, with the install
|
|
32
|
+
command; it never installs anything.
|
|
33
|
+
|
|
34
|
+
## 2. `mantle.config.json`
|
|
35
|
+
|
|
36
|
+
0.1.4 had none; 0.1.5-alpha.1 wrote a `version: 1` one. Write version 2:
|
|
37
|
+
|
|
38
|
+
```json
|
|
39
|
+
{ "version": 2, "identity": "mantle", "features": ["mcp", "admin", "web"] }
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
- `version: 1` is refused.
|
|
43
|
+
- `host` is `cloudflare` (the default, left out), `bun` or `none`; `none`
|
|
44
|
+
writes the plan and types only, for a platform with no preset. `host: bun`
|
|
45
|
+
refuses an enabled schedule Trigger: Bun has no cron dispatcher in the
|
|
46
|
+
preset.
|
|
47
|
+
- `identity`: `mantle` if the project used Mantle auth (Better Auth sign-in,
|
|
48
|
+
Admin users, OAuth for MCP), `custom` if it resolved callers itself, `none`
|
|
49
|
+
if it had no signed-in callers. `admin` needs an identity.
|
|
50
|
+
- `features` is a subset of `mcp`, `admin`, `web`, in that order. The 0.1.x
|
|
51
|
+
features `spec`, `runtime` and `api` are dropped: REST is always mounted.
|
|
52
|
+
- `dialect` is `sqlite` (alias `d1`, the default, left out) or `postgres`
|
|
53
|
+
(PostgreSQL through Hyperdrive on `cloudflare`; Bun.SQL on `bun`, where it
|
|
54
|
+
is the default). A 0.1.x project was SQLite: keep `sqlite` (with
|
|
55
|
+
`--host bun`, pass `--dialect sqlite`) unless the data also moves to
|
|
56
|
+
PostgreSQL.
|
|
57
|
+
- `host` and `dialect` are chosen on the first `mantle generate` (`--host`,
|
|
58
|
+
`--dialect`); a rerun that asks for another is refused.
|
|
59
|
+
|
|
60
|
+
## 3. Manifests
|
|
61
|
+
|
|
62
|
+
Set `apiVersion: cms.mantle.aotter.net/v2` on every document; a v1 document
|
|
63
|
+
is refused.
|
|
64
|
+
|
|
65
|
+
**Native columns are snake_case in SQL**: `id`, `status`, `version`,
|
|
66
|
+
`created_at`, `updated_at`, `author_id`. (`ctx.store` JSON keeps the
|
|
67
|
+
camelCase names.)
|
|
68
|
+
|
|
69
|
+
### Schema
|
|
70
|
+
|
|
71
|
+
| 0.1.x | 0.2.0 |
|
|
72
|
+
|---|---|
|
|
73
|
+
| `scope: { owner: $ctx.user.id }` | `scope: { owner: auth.uid() }`. The field is a required string, the leftmost column of an index (`indexes: [[owner]]`), and the first column of every `uniqueIndexes` entry. Store fills it; a write never sets it |
|
|
74
|
+
| `x-mantle-bind: ctx.user` on a field only its owner may see | remove the bind; add `scope` as above |
|
|
75
|
+
| any other `x-mantle-bind: ctx.user` | remove the bind; every write that sets the field sets it to `auth.uid()`, never to an input |
|
|
76
|
+
| `x-mantle-bind: ctx.staff` | remove the bind; set it to `auth.uid()` in writes whose Procedure `requires` `ctx.staff` |
|
|
77
|
+
| `x-mantle-bind: now` | remove the bind; set it to `now()` in every write that sets it |
|
|
78
|
+
| `searchableFields` | unchanged, now trigram full-text search; date and date-time fields are refused |
|
|
79
|
+
|
|
80
|
+
`checks` (boolean SQL over the row's own columns) is new and optional.
|
|
81
|
+
|
|
82
|
+
A JSON Schema `pattern` (in a Schema, a View input or a Procedure input/output)
|
|
83
|
+
is now refused with `INVALID_PATTERN` when it could backtrack without bound on
|
|
84
|
+
a caller's string:
|
|
85
|
+
|
|
86
|
+
- a repeated group whose body repeats or alternates, such as the 0.1.x slug
|
|
87
|
+
`^[a-z0-9]+(-[a-z0-9]+)*$` or `(a|b)+`, and any backreference;
|
|
88
|
+
- a pattern whose backtracking, branches × maxLength^e, could exceed
|
|
89
|
+
10,000,000 — e is its variable quantifiers (`*`, `+`, `?`, `{m,}`,
|
|
90
|
+
`{m,n}`) plus 1 unless it starts with `^`, branches the product of its
|
|
91
|
+
alternations' alternatives — or one with e > 0 whose string has no
|
|
92
|
+
`maxLength`: `^[a-z0-9-]+$` (e = 1) allows any maxLength up to
|
|
93
|
+
10,000,000, an email `^[^@]+@[^@]+$` (e = 2) up to 3162, the unanchored
|
|
94
|
+
`[^@]+@` (e = 2) also 3162, `^a*a*a*…$` almost none.
|
|
95
|
+
|
|
96
|
+
Rewrite a slug as `{ type: string, maxLength: 120, pattern: "^[a-z0-9-]+$" }`,
|
|
97
|
+
which also accepts leading, trailing and doubled hyphens. On a Schema field
|
|
98
|
+
that must not have them, add a `checks` entry:
|
|
99
|
+
`"slug NOT LIKE '-%' AND slug NOT LIKE '%-' AND slug NOT LIKE '%--%'"`.
|
|
100
|
+
|
|
101
|
+
### View
|
|
102
|
+
|
|
103
|
+
A View is one SQL `SELECT` in `spec.sql`, with `input` for its parameters.
|
|
104
|
+
The SQL is PostgreSQL syntax: it names declared Schemas (never
|
|
105
|
+
schema-qualified), `input.<name>`, `auth.uid()`, `auth.role()`, `now()` and
|
|
106
|
+
`mantle.*` functions. The runtime adds scope, TTL and published-only to every
|
|
107
|
+
Schema reference; do not repeat them.
|
|
108
|
+
|
|
109
|
+
| 0.1.x | 0.2.0 |
|
|
110
|
+
|---|---|
|
|
111
|
+
| `from: posts`, `fields: [id, title]` | `SELECT id, title FROM posts` |
|
|
112
|
+
| `filter: { eq: { field: status, value: published } }`, with `and` / `or` | `WHERE status = 'published'`, with `AND` / `OR` |
|
|
113
|
+
| `value: { "$ctx.user": id }` | `auth.uid()`, or `scope` on the Schema |
|
|
114
|
+
| `params` and `{ "$param": q }` | `input: { type: object, properties: { q: … } }` and `input.q` |
|
|
115
|
+
| `orderBy: [{ field: createdAt, direction: desc }]` | `ORDER BY created_at DESC` |
|
|
116
|
+
| `limit: 20` | `LIMIT 20` (a `LIMIT` needs an `ORDER BY`) |
|
|
117
|
+
| `select:` (`columns`, `where`, `$input.x`, `$ctx.user.id`, `$now`) | the same query as SQL: `input.x`, `auth.uid()`, `now()` |
|
|
118
|
+
| `sql:` (SQLite, `:name` parameters) | the same `sql:`, `:name` → `input.name`, rewritten to PostgreSQL syntax where it differs |
|
|
119
|
+
| free-text search over `searchableFields` | `WHERE mantle.search(p, input.q) ORDER BY mantle.search_rank(p)`; an unqualified `search` is refused |
|
|
120
|
+
| `page` / `show` on the wire | `limit` / `cursor`, `nextCursor` in the response |
|
|
121
|
+
|
|
122
|
+
### Procedure
|
|
123
|
+
|
|
124
|
+
0.1.x builtin ops are `create`, `update`, `upsert`, `delete` and `archive`.
|
|
125
|
+
|
|
126
|
+
| 0.1.x | 0.2.0 |
|
|
127
|
+
|---|---|
|
|
128
|
+
| builtin `create` | `handler: { sql: "INSERT INTO s (a, b) VALUES (input.a, input.b) RETURNING id" }` (on a `publishing` Schema the row starts as a draft, as before) |
|
|
129
|
+
| builtin `update` (always version-checked, merges over the stored row) | `UPDATE s SET a = COALESCE(input.a, a), … WHERE id = input.id AND version = input.expectedVersion`. Keep both: without the version the lock is lost; without `COALESCE` an omitted optional field is cleared |
|
|
130
|
+
| builtin `upsert` with `match` | `INSERT … ON CONFLICT (<match columns>) DO UPDATE SET x = EXCLUDED.x`; the conflict columns are a unique index; on a scoped Schema the scope field may be named or left out, Store adds it |
|
|
131
|
+
| builtin `delete` | `DELETE FROM s WHERE id = input.id AND version = input.expectedVersion` |
|
|
132
|
+
| builtin `archive` | a `ref` handler: `ctx.store.write([{ update: "s", set: { status: "archived" }, where: { id }, lock: expectedVersion }])` (SQL cannot set `status`) |
|
|
133
|
+
| `handler: { kind: ref, ref: fn }` | `handler: { ref: fn }`; the function's signature changes (section 4) |
|
|
134
|
+
| `target: { schema, id, version }` | optional: inferred from `WHERE id = input.… AND version = input.…` |
|
|
135
|
+
|
|
136
|
+
A write never sets the scope field, `version`, `status`, `author_id` or the
|
|
137
|
+
timestamps. On a scoped Schema an `INSERT` names no `id`. Several statements
|
|
138
|
+
in one `sql` apply together or not at all. `requires.auth` and
|
|
139
|
+
`requires.guard` are unchanged.
|
|
140
|
+
|
|
141
|
+
### Trigger
|
|
142
|
+
|
|
143
|
+
- `schedule` cron is POSIX: weekday 0 = Sunday. 0.1.x used Cloudflare's
|
|
144
|
+
numbering (1 = Sunday), so subtract 1 from every weekday number, in ranges
|
|
145
|
+
and lists too (`1` → `0`, `2-6` → `1-5`, `7` → `6`); `*` and `*/n` stay.
|
|
146
|
+
On host `cloudflare`, a cron that sets both a day of month and a weekday
|
|
147
|
+
is refused.
|
|
148
|
+
- `lifecycle` `errorPolicy` is removed: a before hook fails closed (a 0.1.x
|
|
149
|
+
`continue` now blocks the write), an after hook is best effort.
|
|
150
|
+
- `http`, `mcp` and other `lifecycle` fields keep their shape.
|
|
151
|
+
|
|
152
|
+
## 4. Handler code
|
|
153
|
+
|
|
154
|
+
A `ref` handler is `(input, ctx) => output` in the service's `handlers` map.
|
|
155
|
+
The generated types list exactly the plan's refs.
|
|
156
|
+
|
|
157
|
+
| 0.1.x | 0.2.0 |
|
|
158
|
+
|---|---|
|
|
159
|
+
| `ctx.user` present | `ctx.caller.kind === "user"`. Never test `!== "anonymous"`: a schedule runs as `system` |
|
|
160
|
+
| `ctx.user.id` | `ctx.caller.subject` (after that check) |
|
|
161
|
+
| `ctx.staff` | `ctx.caller.kind === "user" && ctx.caller.role !== null` |
|
|
162
|
+
| `ctx.event`, `ctx.schedule` | `ctx.cause` (`kind`: `http`, `mcp`, `internal`, `schedule`, `lifecycle`); `ctx.cause.cron` is POSIX, so shift any cron string the code compares |
|
|
163
|
+
| `ctx.event.entry` | **a loop** over `ctx.cause.rows` (one statement can touch many rows; never `rows[0]`). Rows are flat: `entry.data.x` → `row.x` |
|
|
164
|
+
| `ctx.store.view(name, { params, page, show, search, filters })` | `ctx.store.view(name, { input, limit, cursor, search, filters })`; `search` and `filters` match only the View's `uiSchema.list.searchFields` and `filterFields` |
|
|
165
|
+
| `runtime.entries`, `runtime.executeView`, `ctx.writeAtomically` | `ctx.store.select`, `ctx.store.view`, `ctx.store.write([...ops])` (all or nothing), `ctx.store.id()` |
|
|
166
|
+
| `runtime.store.as(ctx)` | `runtime.store.as(caller)` |
|
|
167
|
+
| calling another Procedure through a `getRuntime` closure | `await ctx.invoke("procedure-name", input)` (keeps the caller, re-checks its auth) |
|
|
168
|
+
|
|
169
|
+
`ctx.store` is scoped to the caller. `runtime.store` is not scoped; use it
|
|
170
|
+
only in trusted host code.
|
|
171
|
+
|
|
172
|
+
## 5. The Worker and the data
|
|
173
|
+
|
|
174
|
+
1. Move the old `src/`, `wrangler.jsonc` (or `.toml`) and `tsconfig.json`
|
|
175
|
+
aside. `mantle generate` writes the preset (`src/*.ts`, `tsconfig.json`,
|
|
176
|
+
and `wrangler.jsonc` on `cloudflare` or `.env.example` on `bun`) only
|
|
177
|
+
where no such file exists, and only while `src/service.ts` is missing.
|
|
178
|
+
2. Run `mantle generate`, then move custom routes, bindings and env from the
|
|
179
|
+
old Worker into the new files by hand.
|
|
180
|
+
3. With `identity: mantle`, sign-in uses a console email sender locally;
|
|
181
|
+
replace it with a real `EmailSender` before deploying.
|
|
182
|
+
4. Staff MCP stays at `/mcp/staff`, behind an OAuth token with the `mcp`
|
|
183
|
+
scope and a staff role; MCP clients keep their URL.
|
|
184
|
+
5. Import data into the new database through `runtime.store`. A scoped row
|
|
185
|
+
goes through `runtime.store.as(<its owner's caller>)`, so the scope field is
|
|
186
|
+
the owner. `status`, `created_at` and `author_id` cannot be imported:
|
|
187
|
+
publish with a second update that sets `status`, and accept new
|
|
188
|
+
timestamps and author.
|
|
189
|
+
|
|
190
|
+
## 6. CLI
|
|
191
|
+
|
|
192
|
+
| 0.1.x | 0.2.0 |
|
|
193
|
+
|---|---|
|
|
194
|
+
| `mantle validate`, `mantle emit-openapi` | `mantle generate --check` (fails if anything is stale; `--database <file>` also prints the storage SQL) |
|
|
195
|
+
| `mantle generate --host …` (0.1.5-alpha.1) | `mantle generate --host cloudflare\|bun\|none` on the first run only |
|
|
196
|
+
| `mantle generate --output`, `--namespace` | removed: output is always `.mantle/generated/` |
|
|
197
|
+
| `mantle skills`, the `mantle-harness` bin | removed |
|
|
198
|
+
|
|
199
|
+
## 7. Verify
|
|
200
|
+
|
|
201
|
+
1. `mantle generate` and `mantle generate --check` exit 0.
|
|
202
|
+
2. The project typechecks against the generated `mantle.ts`.
|
|
203
|
+
3. Each 0.1.x View and Procedure returns the same rows for the same caller,
|
|
204
|
+
including a caller who must see nothing (scope) and an anonymous request.
|
|
205
|
+
4. A write cannot set an owner, author or timestamp field from its input.
|
|
206
|
+
5. Every schedule fires on the intended weekday.
|
|
207
|
+
6. `wrangler dev` (or `bun src/index.ts`) starts, sign-in works if
|
|
208
|
+
`identity` is `mantle`, and Admin, MCP and REST answer on their paths.
|
|
209
|
+
|
|
210
|
+
Report what changed per manifest, every place where access got stricter, and
|
|
211
|
+
anything you could not map.
|