@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.10
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 +166 -298
- package/dist/auth/adapter.d.ts +32 -0
- package/dist/auth/adapter.js +288 -0
- package/dist/auth/admin.d.ts +3 -0
- package/dist/auth/admin.js +21 -0
- package/dist/auth/caller.d.ts +86 -0
- package/dist/auth/caller.js +155 -0
- package/dist/auth/hardening.d.ts +24 -0
- package/dist/auth/hardening.js +40 -0
- package/dist/auth/identity.d.ts +121 -0
- package/dist/auth/identity.js +203 -0
- package/dist/auth/oauth.d.ts +63 -0
- package/dist/auth/oauth.js +217 -0
- package/dist/auth/resource-seeds.js +10 -0
- package/dist/auth/routes.d.ts +32 -0
- package/dist/auth/routes.js +226 -0
- package/dist/build/compiler.d.ts +721 -0
- package/dist/build/compiler.js +7029 -0
- package/dist/build/spec/domain/model/ManifestGrammar.d.ts +439 -0
- package/dist/build/spec/domain/model/RuntimePlan.d.ts +168 -0
- package/dist/build/spec/domain/model/SqlIr.d.ts +129 -0
- package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
- package/dist/build/spec/domain/service/PlanFingerprint.d.ts +7 -0
- package/dist/build/spec/kernel/diagnostic.d.ts +108 -0
- package/dist/bun/assets.d.ts +2 -0
- package/dist/bun/assets.js +24 -0
- package/dist/domain/adminOrder.js +24 -0
- package/dist/domain/columns.js +57 -0
- package/dist/domain/describe/chunk-ZVXBGP7Y.js +424 -0
- package/dist/domain/describe/index.d.ts +58 -0
- package/dist/domain/describe/index.js +115 -0
- package/dist/domain/describe/target-hash.d.ts +8 -0
- package/dist/domain/describe/target-hash.js +12 -0
- package/dist/domain/describe/targets.d.ts +40 -0
- package/dist/domain/entry.js +33 -0
- package/dist/domain/generated-tools.js +19 -0
- package/dist/domain/generation.d.ts +16 -0
- package/dist/domain/generation.js +1 -0
- package/dist/domain/input.js +17 -0
- package/dist/domain/model.js +1 -0
- package/dist/domain/paging.js +230 -0
- package/dist/domain/recipes.js +24 -0
- package/dist/domain/userReferences.js +5 -0
- package/dist/domain/wireScalars.js +47 -0
- package/dist/infrastructure/adminEntries.js +153 -0
- package/dist/infrastructure/adminPaging.js +72 -0
- package/dist/infrastructure/artifacts.js +71 -0
- package/dist/infrastructure/authSchema.js +83 -0
- package/dist/infrastructure/bundle.js +188 -0
- package/dist/infrastructure/cli.js +118 -0
- package/dist/infrastructure/generate.d.ts +12 -0
- package/dist/infrastructure/generate.js +189 -0
- package/dist/infrastructure/generateAuth.d.ts +8 -0
- package/dist/infrastructure/generateAuth.js +74 -0
- package/dist/infrastructure/help.js +60 -0
- package/dist/infrastructure/init.js +54 -0
- package/dist/infrastructure/inputs.js +41 -0
- package/dist/infrastructure/mounts.js +25 -0
- package/dist/infrastructure/wrangler.js +109 -0
- package/dist/kernel/authorization.d.ts +4 -0
- package/dist/kernel/authorization.js +16 -0
- package/dist/kernel/binds.d.ts +60 -0
- package/dist/kernel/binds.js +49 -0
- package/dist/kernel/caller-identity.d.ts +24 -0
- package/dist/kernel/caller-identity.js +22 -0
- package/dist/kernel/contract-error.d.ts +12 -0
- package/dist/kernel/contract-error.js +14 -0
- package/dist/kernel/contracts.d.ts +143 -0
- package/dist/kernel/contracts.js +97 -0
- package/dist/kernel/cron.d.ts +1 -0
- package/dist/kernel/cron.js +58 -0
- package/dist/kernel/dialect/common.d.ts +38 -0
- package/dist/kernel/dialect/common.js +6 -0
- package/dist/kernel/dialect/postgres.d.ts +16 -0
- package/dist/kernel/dialect/postgres.js +18 -0
- package/dist/kernel/dialect/sqlite.d.ts +20 -0
- package/dist/kernel/dialect/sqlite.js +34 -0
- package/dist/kernel/drain.d.ts +5 -0
- package/dist/kernel/drain.js +35 -0
- package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
- package/dist/kernel/driver/bun-sqlite.js +77 -0
- package/dist/kernel/driver/d1.d.ts +24 -0
- package/dist/kernel/driver/d1.js +22 -0
- package/dist/kernel/driver/postgres.d.ts +25 -0
- package/dist/kernel/driver/postgres.js +99 -0
- package/dist/kernel/driver/transaction-context.d.ts +10 -0
- package/dist/kernel/driver/transaction-context.js +29 -0
- package/dist/kernel/email.d.ts +28 -0
- package/dist/kernel/email.js +38 -0
- package/dist/kernel/host-access.d.ts +10 -0
- package/dist/kernel/host-access.js +65 -0
- package/dist/kernel/host-caller.d.ts +39 -0
- package/dist/kernel/host-caller.js +56 -0
- package/dist/kernel/json-body.d.ts +4 -0
- package/dist/kernel/json-body.js +44 -0
- package/dist/kernel/mcp-apps.d.ts +69 -0
- package/dist/kernel/mcp-apps.js +40 -0
- package/dist/kernel/mcp-call.d.ts +5 -0
- package/dist/kernel/mcp-call.js +25 -0
- package/dist/kernel/mcp-handler.js +371 -0
- package/dist/kernel/mcp.d.ts +110 -0
- package/dist/kernel/mcp.js +50 -0
- package/dist/kernel/media.d.ts +27 -0
- package/dist/kernel/media.js +216 -0
- package/dist/kernel/paging.d.ts +55 -0
- package/dist/kernel/paging.js +95 -0
- package/dist/kernel/publishing.d.ts +4 -0
- package/dist/kernel/publishing.js +16 -0
- package/dist/kernel/r2-media.d.ts +42 -0
- package/dist/kernel/r2-media.js +78 -0
- package/dist/kernel/rest-dispatch.js +38 -0
- package/dist/kernel/rest-router.js +64 -0
- package/dist/kernel/rest.d.ts +58 -0
- package/dist/kernel/rest.js +41 -0
- package/dist/kernel/scalars.d.ts +6 -0
- package/dist/kernel/scalars.js +44 -0
- package/dist/kernel/search.js +5 -0
- package/dist/kernel/site-types.d.ts +146 -0
- package/dist/kernel/site-types.js +1 -0
- package/dist/kernel/site.d.ts +39 -0
- package/dist/kernel/site.js +32 -0
- package/dist/kernel/store.d.ts +175 -0
- package/dist/kernel/store.js +269 -0
- package/dist/kernel/surface.d.ts +10 -0
- package/dist/kernel/surface.js +19 -0
- package/dist/kernel/sweep.d.ts +17 -0
- package/dist/kernel/sweep.js +27 -0
- package/dist/kernel/translations.d.ts +1 -0
- package/dist/kernel/translations.js +13 -0
- package/dist/kernel/user-caller.d.ts +31 -0
- package/dist/kernel/user-caller.js +67 -0
- package/dist/kernel/user-field-name.js +3 -0
- package/dist/kernel/user-fields.d.ts +35 -0
- package/dist/kernel/user-fields.js +81 -0
- package/dist/kernel/validation.d.ts +15 -0
- package/dist/kernel/validation.js +54 -0
- package/dist/kernel/web-gateway.js +68 -0
- package/dist/kernel/web-head.js +15 -0
- package/dist/kernel/web-index.js +40 -0
- package/dist/kernel/web-response.js +8 -0
- package/dist/kernel/web.d.ts +77 -0
- package/dist/kernel/web.js +124 -0
- package/dist/kernel/where.js +27 -0
- package/dist/testing/index.d.ts +1 -0
- package/dist/testing/index.js +1 -0
- package/dist/usecase/adminBindings.js +143 -0
- package/dist/usecase/adminClient.js +87 -0
- package/dist/usecase/adminDescriptors.js +107 -0
- package/dist/usecase/generate.js +166 -0
- package/dist/usecase/handlers.js +21 -0
- package/dist/usecase/mcp-media.js +17 -0
- package/dist/usecase/mcp.js +100 -0
- package/dist/usecase/paging.js +71 -0
- package/dist/usecase/publishing.js +63 -0
- package/dist/usecase/refusals.js +27 -0
- package/dist/usecase/rest.js +54 -0
- package/dist/usecase/search.js +7 -0
- package/dist/usecase/site.js +39 -0
- package/dist/usecase/stores.js +64 -0
- package/dist/usecase/tool-version.js +9 -0
- package/dist/usecase/translations.js +78 -0
- package/dist/usecase/ttl.js +20 -0
- package/dist/usecase/validation.js +241 -0
- package/dist/usecase/web.js +23 -0
- package/docs/examples/README.md +39 -18
- package/docs/examples/app-shell/.dev.vars.example +4 -0
- package/docs/examples/app-shell/README.md +121 -0
- package/docs/examples/app-shell/accept.mjs +91 -0
- package/docs/examples/app-shell/gitignore +7 -0
- package/docs/examples/app-shell/package.json +43 -0
- package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
- package/docs/examples/app-shell/smoke-kit.mjs +168 -0
- package/docs/examples/app-shell/src/auth.ts +58 -0
- package/docs/examples/app-shell/src/handlers.ts +5 -0
- package/docs/examples/app-shell/src/index.ts +4 -0
- package/docs/examples/app-shell/src/routes.ts +14 -0
- package/docs/examples/app-shell/src/schedule.ts +8 -0
- package/docs/examples/app-shell/src/service.ts +70 -0
- package/docs/examples/app-shell/src/sign-in.ts +41 -0
- package/docs/examples/app-shell/src/signup.ts +8 -0
- package/docs/examples/app-shell/tsconfig.json +26 -0
- package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
- package/docs/examples/app-shell/wrangler.jsonc +62 -0
- package/docs/examples/club-events/README.md +65 -0
- package/docs/examples/club-events/manifests/club-events.yaml +247 -0
- package/docs/examples/club-events/smoke.mjs +127 -0
- package/docs/examples/club-events/src/handlers.ts +25 -0
- package/docs/examples/club-events/src/signup.ts +9 -0
- package/docs/examples/generated-web/README.md +78 -0
- package/docs/examples/generated-web/posts.yaml +38 -0
- package/docs/examples/generated-web/seed.sql +6 -0
- package/docs/examples/generated-web/src/worker.ts +43 -0
- package/docs/examples/generated-web/tsconfig.json +8 -0
- package/docs/examples/generated-web/wrangler.jsonc +8 -0
- package/docs/examples/purchasing/.dev.vars.example +6 -0
- package/docs/examples/purchasing/README.md +99 -0
- package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
- package/docs/examples/purchasing/seed.sql +4 -0
- package/docs/examples/purchasing/smoke.mjs +191 -0
- package/docs/examples/purchasing/src/admin.tsx +13 -0
- package/docs/examples/purchasing/src/handlers.ts +33 -0
- package/docs/examples/purchasing/src/notify.ts +29 -0
- package/docs/examples/purchasing/src/requests-page.ts +57 -0
- package/docs/examples/purchasing/src/routes.ts +53 -0
- package/docs/examples/purchasing/src/schedule.ts +31 -0
- package/docs/examples/purchasing/src/signup.ts +5 -0
- package/docs/examples/purchasing/src/supplier.ts +32 -0
- package/docs/examples/purchasing/wrangler.jsonc +69 -0
- package/docs/examples/recipes/README.md +60 -0
- package/docs/examples/recipes/manifests/recipes.yaml +75 -0
- package/docs/examples/recipes/smoke.mjs +102 -0
- package/docs/examples/recipes/src/media.ts +13 -0
- package/docs/examples/recipes/src/pages.ts +99 -0
- package/docs/examples/recipes/src/routes.ts +71 -0
- package/docs/examples/recipes/src/site-config.ts +12 -0
- package/docs/examples/recipes/wrangler.jsonc +74 -0
- package/docs/handbook/cloudflare/authentication.md +180 -322
- package/docs/handbook/cloudflare/chatgpt-sites.md +5 -23
- package/docs/handbook/cloudflare/deploy-and-operate.md +55 -77
- package/docs/handbook/cloudflare/media-r2.md +61 -205
- package/docs/handbook/cloudflare/service-entry.md +239 -0
- package/docs/handbook/concepts/authorization.md +10 -107
- package/docs/handbook/concepts/four-atoms.md +9 -168
- package/docs/handbook/concepts/lifecycle-and-locales.md +9 -132
- package/docs/handbook/concepts/mcp-and-agents.md +24 -121
- package/docs/handbook/concepts/procedures-and-triggers.md +5 -217
- package/docs/handbook/concepts/runtime-and-adapters.md +15 -169
- package/docs/handbook/concepts/views.md +10 -185
- package/docs/handbook/examples/hub.md +3 -8
- package/docs/handbook/guides/adapter-guide.md +11 -0
- package/docs/handbook/guides/admin-ui.md +115 -133
- package/docs/handbook/guides/agent-setup.md +64 -74
- package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
- package/docs/handbook/guides/email.md +86 -0
- package/docs/handbook/guides/local-testing.md +40 -0
- package/docs/handbook/guides/mcp-apps.md +560 -0
- package/docs/handbook/guides/native-admin.md +566 -0
- package/docs/handbook/guides/native-execution.md +133 -0
- package/docs/handbook/guides/oauth.md +219 -0
- package/docs/handbook/guides/postgres-adapters.md +56 -0
- package/docs/handbook/guides/public-pages.md +87 -0
- package/docs/handbook/guides/size-and-startup.md +9 -0
- package/docs/handbook/guides/sql-patterns.md +266 -0
- package/docs/handbook/guides/typed-queries.md +211 -107
- package/docs/handbook/navigation.json +176 -55
- package/docs/handbook/reference/admin-descriptors.md +53 -0
- package/docs/handbook/reference/authorization.md +39 -266
- package/docs/handbook/reference/describe.md +56 -0
- package/docs/handbook/reference/diagnostics.md +19 -186
- package/docs/handbook/reference/features.md +45 -55
- package/docs/handbook/reference/manifest.md +6 -129
- package/docs/handbook/reference/procedure.md +11 -303
- package/docs/handbook/reference/schema.md +64 -240
- package/docs/handbook/reference/site-config.md +5 -218
- package/docs/handbook/reference/sql.md +64 -0
- package/docs/handbook/reference/surface.md +392 -201
- package/docs/handbook/reference/trigger.md +56 -192
- package/docs/handbook/reference/view.md +24 -243
- package/docs/handbook/releases/index.md +244 -77
- package/docs/handbook/start/agents.md +45 -0
- package/docs/handbook/start/overview.md +9 -48
- package/docs/handbook/start/project-and-cli.md +51 -104
- package/docs/handbook/start/quickstart-worker.md +43 -178
- package/docs/skills/develop/SKILL.md +79 -249
- package/docs/skills/integrate/SKILL.md +39 -50
- package/docs/skills/media-gc/SKILL.md +34 -10
- package/docs/skills/provision/SKILL.md +36 -186
- package/docs/skills/update/SKILL.md +23 -38
- package/docs/source/scripts/postgres-adapter.ts +101 -0
- package/docs/upgrade-0.1-to-0.2.md +227 -0
- package/package.json +120 -131
- package/skills/README.md +48 -108
- package/skills/mantle/SKILL.md +76 -0
- 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/generate.d.ts +0 -20
- package/dist/cli/generate.d.ts.map +0 -1
- package/dist/cli/generate.js +0 -299
- package/dist/cli/generate.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/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -77
- package/dist/cli/main.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/adr/0001-four-atom-manifest-model.md +0 -440
- package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
- package/docs/adr/0007-ai-as-primary-author.md +0 -473
- package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
- package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
- package/docs/adr/0010-locale-and-translates.md +0 -453
- package/docs/adr/0011-adapter-port-spec.md +0 -281
- package/docs/adr/0012-views-as-public-rest.md +0 -161
- package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -900
- package/docs/adr/0016-site-semantic-layer.md +0 -70
- package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
- package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -240
- package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
- package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
- package/docs/adr/0022-caller-observed-version-occ.md +0 -212
- package/docs/adr/0023-port-failure-contract.md +0 -69
- package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
- package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
- package/docs/adr/0026-progressive-generate.md +0 -36
- package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
- package/docs/adr/0028-schema-ttl-expiry.md +0 -33
- package/docs/adr/README.md +0 -81
- package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
- package/docs/adr/adr-lite-808-route-readiness.md +0 -47
- package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
- package/docs/adr/adr-lite-812-native-parity.md +0 -150
- package/docs/adr/adr-lite-823-home-statistics.md +0 -64
- package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
- package/docs/adr/adr-lite-845-frontend-client.md +0 -38
- package/docs/adr/adr-lite-861-admin-webmcp.md +0 -42
- package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
- 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/tsconfig.json +0 -17
- 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/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,124 +1,71 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Generation targets, CLI options and ownership of native application files.
|
|
3
3
|
---
|
|
4
4
|
# Project layout and CLI
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
| File | Owner |
|
|
7
|
+
| --- | --- |
|
|
8
|
+
| `manifests/*.yaml` | App: closed v2 declarations and SQL |
|
|
9
|
+
| `src/worker.ts`, auth, handlers, frontend | App: routing, Caller verification and side effects |
|
|
10
|
+
| `generated/` | Generator: TypeScript, native SQL and selected bindings |
|
|
11
|
+
| `migrations/` | App's agent and native migration tool |
|
|
12
|
+
| `wrangler.jsonc` | App configuration; generator maintains selected split-build keys |
|
|
13
|
+
| `dist/` | Disposable bundle output (`dist/worker`, `dist/client`); do not commit |
|
|
10
14
|
|
|
11
|
-
##
|
|
15
|
+
## Accept user-facing work
|
|
12
16
|
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
17
|
+
Before reporting any user-facing deliverable as done, run the installed
|
|
18
|
+
version's [independent acceptance
|
|
19
|
+
flow](../guides/agent-workflow-acceptance.md) with a fresh agent on the surface
|
|
20
|
+
its user uses. For MCP work, also run that guide's design audit before choosing
|
|
21
|
+
tool names or writing manifests/handlers.
|
|
16
22
|
|
|
17
|
-
|
|
18
|
-
mkdir my-app && cd my-app
|
|
19
|
-
npm init -y
|
|
20
|
-
npm pkg set type=module
|
|
21
|
-
MANTLE_VERSION=$(npm view @aotter/mantle@latest version)
|
|
22
|
-
npm install --save-exact "@aotter/mantle@$MANTLE_VERSION"
|
|
23
|
-
npx mantle generate --host cf
|
|
24
|
-
npm install
|
|
25
|
-
npx mantle generate
|
|
26
|
-
npm run build
|
|
27
|
-
```
|
|
28
|
-
|
|
29
|
-
Confirm `MANTLE_VERSION` is a stable release, without a prerelease suffix.
|
|
30
|
-
Use `--host chatgpt-sites` for a Site; [its guide](../chatgpt-sites/generated-app.md)
|
|
31
|
-
continues with D1 migration, owner identity and local smoke. If you already
|
|
32
|
-
use pnpm, keep that one package manager and run `pnpm install` /
|
|
33
|
-
`pnpm exec mantle`. The first `generate` may exit asking you to install newly
|
|
34
|
-
declared packages; the second completes generation. A README or lockfile from
|
|
35
|
-
bootstrapping still counts as a new app. Once choices are saved, omit flags on
|
|
36
|
-
rerun.
|
|
37
|
-
|
|
38
|
-
For a smaller composition, list wanted modules positively:
|
|
23
|
+
## Commands
|
|
39
24
|
|
|
40
25
|
```sh
|
|
41
|
-
|
|
42
|
-
|
|
26
|
+
mantle help [topic] # these docs, one page at a time; start here
|
|
27
|
+
mantle init [directory] [--dry-run] # write the cloudflare-d1 app shell once; never overwrites
|
|
28
|
+
mantle generate <target> <output-directory> <manifest>... [options]
|
|
29
|
+
mantle bundle <entry> <outdir> [--assets <dir>]
|
|
43
30
|
```
|
|
44
31
|
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
explicit host in automation so a terminal prompt cannot stall. The selection
|
|
49
|
-
lives in `mantle.config.json`; changing it later requires a deliberate migration,
|
|
50
|
-
not an accidental CLI flag.
|
|
32
|
+
`init` writes application code the app then owns. `generate` writes only generated output and Wrangler build keys,
|
|
33
|
+
on every run; after writing, it follows the `--entry` file's imports and warns for each selected REST, MCP or Admin
|
|
34
|
+
module the entry never imports.
|
|
51
35
|
|
|
52
|
-
|
|
36
|
+
| Target | Dialect | Handle |
|
|
37
|
+
| --- | --- | --- |
|
|
38
|
+
| `bun-sqlite` | sqlite | bun:sqlite Database |
|
|
39
|
+
| `bun-postgres` | postgres | Bun.SQL |
|
|
40
|
+
| `cloudflare-d1` | sqlite | D1 binding/session |
|
|
41
|
+
| `cloudflare-postgres` | postgres | postgres.js, usually with Hyperdrive |
|
|
53
42
|
|
|
54
|
-
|
|
55
|
-
|---|---|---|
|
|
56
|
-
| `manifests/*.yaml`, `src/handlers.ts`, `src/home.ts` | You | Preserved. Add domain behavior and edit the blank home here. |
|
|
57
|
-
| `package.json`, `mantle.config.json`, `wrangler.jsonc` | Shared | Required versions and scripts are added; existing user values are preserved or conflicts reported. |
|
|
58
|
-
| `.mantle/generated/*`, `src/storage-fingerprint.json` | CLI | Rebuilt from the saved selection and manifests. |
|
|
59
|
-
| `drizzle/*.sql` on Sites | Review and apply | New migrations append; applied migrations are never rewritten. |
|
|
60
|
-
| `public/_mantle/admin/*` | CLI | Prebuilt Admin assets copied from the selected exact package. |
|
|
61
|
-
| `.openai/hosting.json` on Sites | Sites | Binding metadata is created locally; existing project metadata is preserved. |
|
|
43
|
+
Other handles may adapt to the same [structural driver contracts](../guides/adapter-guide.md). Dialects are exactly postgres and sqlite in 0.2.0.
|
|
62
44
|
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
entry
|
|
45
|
+
| Option | Meaning |
|
|
46
|
+
| --- | --- |
|
|
47
|
+
| `--check` | Compare generated owned files and Wrangler build keys without writing; stale output exits nonzero. No database or credentials are needed. |
|
|
48
|
+
| `--admin` | Emit native Admin bindings and `admin/*` modules; install the separate Admin package. |
|
|
49
|
+
| `--auth <module>` | Read plain `authOptions(env)` (or an exported auth instance's options) and append selected Better Auth DDL. Repeat it once per Better Auth instance. Prefer plain options without initialization side effects. |
|
|
50
|
+
| `--site <module>` | Read `siteDefaults`; emit site/media bindings and deployment SQL. |
|
|
51
|
+
| `--wrangler <path>` | Existing JSONC/JSON/TOML config; default finds one or creates `wrangler.jsonc`. TOML receives manual-edit instructions. |
|
|
52
|
+
| `--entry <path>` | Worker source entry; default `src/worker.ts`. |
|
|
53
|
+
| `--outdir <path>` | Bundle output; default `dist`. The Worker goes to `<outdir>/worker`. Keep separate from source/generated files. |
|
|
54
|
+
| `--assets <path>` | With `--admin`: the static assets directory `mantle bundle` builds Admin into (`<assets>/admin`); default `<outdir>/client`. Written to Wrangler's `assets.directory`, and to the build command when not the default. New assets blocks default to `ASSETS`, Worker-first routing and no HTML rewriting; existing blocks keep their binding/routing. |
|
|
71
55
|
|
|
72
|
-
|
|
73
|
-
(default `.mantle/generated`), `--namespace <name>`, `--host cf|chatgpt-sites`,
|
|
74
|
-
`--features <comma-list>` and `--check`. Check mode exits nonzero
|
|
75
|
-
on drift and does not write. Sites also accepts `--review-unique-indexes` for
|
|
76
|
-
an explicit, source-bound unique tuple migration and duplicate preflight;
|
|
77
|
-
[review the D1 procedure](../chatgpt-sites/generated-app.md) before applying
|
|
78
|
-
it. `mantle validate` checks grammar and linked
|
|
79
|
-
capabilities; `--phase deploy` adds deployment checks. `mantle skills` projects
|
|
80
|
-
the installed SDK's project skills into `.agents/skills/` and `.claude/skills/`;
|
|
81
|
-
`mantle skills --check` detects drift. `mantle emit-openapi` describes HTTP
|
|
82
|
-
Triggers and View REST routes; `mantle-harness indexes` and `http` inspect
|
|
83
|
-
queries and running routes. [Command reference](../reference/surface.md).
|
|
56
|
+
## Outputs
|
|
84
57
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
npm run typecheck
|
|
92
|
-
npm run build
|
|
93
|
-
npm run dev
|
|
94
|
-
```
|
|
58
|
+
`generated/.mantle-inputs.json` records the Mantle version, the target, and a hash of every input the run read (manifests and the
|
|
59
|
+
`--auth` and `--site` modules). `mantle bundle`, which Wrangler runs for `wrangler dev` and every
|
|
60
|
+
deploy, refuses to build when an input changed since, so stale generated code cannot run; regenerate and rebuild.
|
|
61
|
+
Commit it with the other generated files.
|
|
62
|
+
The bundle also prints notes, never errors, for SQL in the app's own code against Better Auth's tables (read users
|
|
63
|
+
through `userOf(caller)` or `readIdentity(auth)` instead) and for Better Auth roles beyond `admin` and `user`.
|
|
95
64
|
|
|
96
|
-
|
|
97
|
-
start. Run `npx mantle validate` after adding the first Manifest: the validator
|
|
98
|
-
reports `MANIFEST_ROOT_NOT_FOUND` on an intentionally empty app. A full
|
|
99
|
-
Cloudflare app should serve the blank home and Admin assets.
|
|
100
|
-
For local CF Admin, copy `.dev.vars.example` to `.dev.vars`, replace
|
|
101
|
-
`ADMIN_EMAIL` with the intended owner's address and `BETTER_AUTH_SECRET` with
|
|
102
|
-
a random 32-byte secret, and keep `PUBLIC_ORIGIN` equal to the loopback URL
|
|
103
|
-
wrangler prints. Open `/admin/sign-in` with that email and read the OTP in
|
|
104
|
-
wrangler logs. Check that `/_mantle/admin/assets/*` loads, an anonymous
|
|
105
|
-
`/admin/api/site-settings` request is denied, and the signed-in owner can read
|
|
106
|
-
it. Verify anonymous staff MCP access fails before claiming it works. A full
|
|
107
|
-
Site must also apply its reviewed
|
|
108
|
-
D1 migration before the Worker boots. The public MCP endpoint is discoverable
|
|
109
|
-
without a staff session; the staff endpoint requires the host's verified
|
|
110
|
-
identity and a Mantle role. See [MCP and agents](../concepts/mcp-and-agents.md).
|
|
65
|
+
`generated.ts` exports typed queries and Store. Direct `views/<encoded-name>.ts` and `procedures/<encoded-name>.ts` entries export an operation and its types. Proved pageable Views also have `paged/views/*`; boundary checks live in `validation/*`. `admin-descriptors.ts`, `rest.ts` and `web.ts` are always emitted. Manifest exposure selects `mcp.ts`; `admin-bindings.ts`, `admin-client.ts` (browser-side types and hooks for `admin.tsx`) and `admin/*` require `--admin`. Auth and site are explicit options.
|
|
111
66
|
|
|
112
|
-
|
|
113
|
-
and the lockfile agree. Use that package's CLI and `docs/` tree; the latest
|
|
114
|
-
GitHub handbook may describe a newer release. Keep all selected
|
|
115
|
-
`@aotter/mantle*` packages on one exact version. The prior direct-authoring
|
|
116
|
-
contract remains valid for older installed SDKs; upgrade deliberately using
|
|
117
|
-
[release notes](../releases/index.md).
|
|
67
|
+
Apply `schema.sql` only to an empty database. Later changes require [explicit migrations](../concepts/runtime-and-adapters.md#schema-installation-and-migrations); generation and runtime do not inspect the database. Ref declarations print the `Handlers` keys to implement.
|
|
118
68
|
|
|
119
|
-
|
|
69
|
+
Never edit generated output by hand. Merge manifests/options, regenerate with the same command, then review TypeScript and SQL diffs. Use that exact command with `--check` in CI. Unmarked app files are preserved. Imported option modules must be pure; generation does not make their side effects safe.
|
|
120
70
|
|
|
121
|
-
|
|
122
|
-
- [Project selection and package pins](../../../packages/mantle/src/cli/generate-project.ts)
|
|
123
|
-
- [Cloudflare assembly](../../../packages/mantle/src/cli/generate-cloudflare.ts)
|
|
124
|
-
- [ChatGPT Sites assembly](../../../packages/mantle/src/cli/generate-sites.ts)
|
|
71
|
+
On Workers, generation configures `mantle bundle` as Wrangler's build command. It emits minified split ESM into `<outdir>/worker` with a startup guard for eager Better Auth imports and for Admin's browser code (`@aotter/mantle-admin/app` and `/hooks`, which `generated/admin-client.ts` imports; they belong to `admin.tsx`). When the Worker imports `@aotter/mantle-admin/server`, it also builds Admin with Vite into `<assets>/admin` (`--assets`, default `<outdir>/client`), from `admin.tsx` beside the Worker entry or Admin's built-in entry; `src/admin.ts` is not an entry. The assets directory must not overlap the Worker directory, and neither the outdir nor the assets directory may be the working directory or contain the Worker entry. The built-in entry is not rebuilt while the installed `@aotter/mantle-admin` keeps its path and version and its direct dependencies and its `react`/`react-dom` peers keep theirs; an `admin.tsx` entry builds every time. The build needs no install scripts (`npm ci --ignore-scripts` works). A `package-lock.json` made on one OS can lack the native build binaries (rolldown, `@tailwindcss/oxide`, lightningcss) that npm installs per platform from `optionalDependencies`, so a lockfile made on macOS can fail the build on a Linux host; create the lockfile on the build platform or use pnpm. `wrangler dev` and `wrangler deploy` run that build command, so they need `node_modules`. The built output (`<outdir>/worker`, `<assets>`) never reads it, so a pipeline that deletes `node_modules` must run `wrangler deploy` first. On Bun, the app owns `Bun.serve`, its Database/SQL pool and scheduler; Bun runs the server as TypeScript, so for a `bun-*` target recorded in `.mantle-inputs.json`, `mantle bundle src/server.ts dist` skips the Worker bundle and builds only Admin, into `dist/client/admin` (read with `bunAdminAssets("dist/client/admin")`, adapted for `adminShell` as in service composition). See [service composition](../cloudflare/service-entry.md).
|
|
@@ -1,203 +1,68 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Generate a small native D1 service and mount an application-owned Worker.
|
|
3
3
|
---
|
|
4
|
-
# Quickstart: a
|
|
4
|
+
# Quickstart: a service on Workers
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
walkthrough: View REST without Admin, Auth or a visitor frontend. For a new
|
|
8
|
-
project, `mantle generate --host cf --features spec,api` assembles that smaller
|
|
9
|
-
composition. Omit `--features` to include Admin, MCP and a blank home. The
|
|
10
|
-
[local Admin tutorial](./quickstart-admin.md) covers an authored Worker entry.
|
|
11
|
-
Pin every selected `@aotter/mantle*` package to one exact version; see
|
|
12
|
-
[Versions](../reference/surface.md#versions).
|
|
6
|
+
Create an application outside the SDK checkout. Install an exact released `@aotter/mantle` version, TypeScript, Wrangler and Cloudflare Worker types; `node_modules/@aotter/mantle/docs/examples/app-shell/package.json` lists the versions this release is tested with. Read that installed version's handbook; this page describes the native 0.2.0 contract.
|
|
13
7
|
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
- Node.js 22 or newer.
|
|
17
|
-
- pnpm 9 or newer. The reference is tested with pnpm; see the npm note at the end of this page.
|
|
18
|
-
- `wrangler` is installed as a project devDependency below. No Cloudflare account, D1 database or secret is needed for the local loop.
|
|
19
|
-
|
|
20
|
-
## 1. `package.json`
|
|
21
|
-
|
|
22
|
-
Step 5 adds the two Mantle packages at one exact version. For a prerelease
|
|
23
|
-
evaluation, select its exact version explicitly rather than mixing channels.
|
|
24
|
-
The entries below are the peers and tools used by this direct-authored reference.
|
|
25
|
-
|
|
26
|
-
```json
|
|
27
|
-
{
|
|
28
|
-
"name": "mantle-minimal-consumer",
|
|
29
|
-
"private": true,
|
|
30
|
-
"type": "module",
|
|
31
|
-
"scripts": {
|
|
32
|
-
"generate": "mantle generate",
|
|
33
|
-
"validate": "mantle validate",
|
|
34
|
-
"typecheck": "tsc --noEmit",
|
|
35
|
-
"dev": "wrangler dev --local --ip 127.0.0.1 --port 8787",
|
|
36
|
-
"check": "mantle generate && mantle generate --check && mantle validate && mantle skills && mantle skills --check && tsc --noEmit"
|
|
37
|
-
},
|
|
38
|
-
"dependencies": {
|
|
39
|
-
"better-auth": "1.7.2",
|
|
40
|
-
"hono": "^4.13.3",
|
|
41
|
-
"zod": "^4.5.4",
|
|
42
|
-
"aws4fetch": "^1.0.20"
|
|
43
|
-
},
|
|
44
|
-
"devDependencies": {
|
|
45
|
-
"@cloudflare/workers-types": "^5.20260907.1",
|
|
46
|
-
"typescript": "^6.0.3",
|
|
47
|
-
"wrangler": "^4.125.0"
|
|
48
|
-
},
|
|
49
|
-
"packageManager": "pnpm@9.15.0"
|
|
50
|
-
}
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
The reference's own `check` script ends with `&& node smoke.mjs`, a test that starts the Worker and asserts the three probes in step 6. This walkthrough runs those probes by hand instead.
|
|
54
|
-
|
|
55
|
-
Add a `tsconfig.json` that includes the generated module:
|
|
56
|
-
|
|
57
|
-
```json
|
|
58
|
-
{
|
|
59
|
-
"compilerOptions": {
|
|
60
|
-
"target": "ES2022",
|
|
61
|
-
"module": "ESNext",
|
|
62
|
-
"moduleResolution": "bundler",
|
|
63
|
-
"strict": true,
|
|
64
|
-
"noEmit": true,
|
|
65
|
-
"skipLibCheck": true,
|
|
66
|
-
"types": ["@cloudflare/workers-types"]
|
|
67
|
-
},
|
|
68
|
-
"include": ["src/**/*.ts", ".mantle/generated/**/*.ts"]
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
## 2. `manifests/site.yaml`
|
|
73
|
-
|
|
74
|
-
One publishing Schema and one public View. `mantle generate` never invents a Schema; this notes model is example business data.
|
|
8
|
+
Save `manifests/tickets.yaml`:
|
|
75
9
|
|
|
76
10
|
```yaml
|
|
77
|
-
apiVersion: cms.mantle.aotter.net/
|
|
11
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
78
12
|
kind: Schema
|
|
79
|
-
metadata:
|
|
80
|
-
name: notes
|
|
13
|
+
metadata: { name: tickets }
|
|
81
14
|
spec:
|
|
82
|
-
title:
|
|
15
|
+
title: Tickets
|
|
16
|
+
lifecycle: operational
|
|
17
|
+
indexes: [[ticketState]]
|
|
83
18
|
schema:
|
|
84
19
|
type: object
|
|
85
|
-
|
|
20
|
+
additionalProperties: false
|
|
21
|
+
required: [subject, ticketState]
|
|
86
22
|
properties:
|
|
87
|
-
|
|
88
|
-
|
|
23
|
+
subject: { type: string }
|
|
24
|
+
ticketState: { type: string, enum: [open, closed] }
|
|
89
25
|
---
|
|
90
|
-
apiVersion: cms.mantle.aotter.net/
|
|
26
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
91
27
|
kind: View
|
|
92
|
-
metadata:
|
|
93
|
-
name: published-notes
|
|
28
|
+
metadata: { name: tickets-by-state }
|
|
94
29
|
spec:
|
|
95
30
|
surface: public
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
The conventional Worker entry hands the sealed plan to the Cloudflare adapter.
|
|
107
|
-
|
|
108
|
-
```ts
|
|
109
|
-
import { createMantleWorker } from "@aotter/mantle/cloudflare";
|
|
110
|
-
import { plan } from "../.mantle/generated/mantle.js";
|
|
111
|
-
|
|
112
|
-
export default createMantleWorker({ plan });
|
|
113
|
-
```
|
|
114
|
-
|
|
115
|
-
`createMantleWorker` owns the D1 and assets bindings, Auth, Admin, View REST, HTTP Triggers, OAuth, MCP and cache policy. Application handlers and extra routes go through its `extend` option; see [the conventional Worker](../cloudflare/conventional-worker.md).
|
|
116
|
-
|
|
117
|
-
## 4. `wrangler.jsonc`
|
|
118
|
-
|
|
119
|
-
```jsonc
|
|
120
|
-
{
|
|
121
|
-
"$schema": "node_modules/wrangler/config-schema.json",
|
|
122
|
-
"name": "mantle-reference",
|
|
123
|
-
"main": "src/index.ts",
|
|
124
|
-
"compatibility_date": "2026-09-08",
|
|
125
|
-
"compatibility_flags": ["nodejs_compat", "global_fetch_strictly_public"],
|
|
126
|
-
"observability": { "enabled": true },
|
|
127
|
-
"vars": { "MANTLE_AUTH_MODE": "self-managed" },
|
|
128
|
-
"d1_databases": [
|
|
129
|
-
{ "binding": "DB", "database_name": "mantle-reference-local" }
|
|
130
|
-
]
|
|
131
|
-
}
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
Both compatibility flags are required by the adapter. `MANTLE_AUTH_MODE` must be explicit; `self-managed` without GitHub credentials is a deliberate partial configuration for this local reference, so Auth-owned routes fail closed while public routes work. Local `wrangler dev` creates the D1 database on demand; configure a real `database_id` and the full auth matrix before any remote deploy ([Authentication](../cloudflare/authentication.md)).
|
|
135
|
-
|
|
136
|
-
## 5. Install, generate, validate, run
|
|
137
|
-
|
|
138
|
-
```sh
|
|
139
|
-
# Resolve once; for a requested prerelease, set its exact version instead.
|
|
140
|
-
MANTLE_VERSION=$(pnpm view @aotter/mantle@latest version)
|
|
141
|
-
pnpm add --save-exact "@aotter/mantle@$MANTLE_VERSION" "@aotter/mantle-cloudflare@$MANTLE_VERSION"
|
|
142
|
-
pnpm exec mantle generate
|
|
143
|
-
pnpm exec mantle validate
|
|
144
|
-
pnpm exec wrangler dev --local --ip 127.0.0.1 --port 8787
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
`mantle validate` prints `OK no issues (root: manifests, phase: preview)`. Wrangler prints `Ready on http://127.0.0.1:8787`. Use that origin in the next step. The Admin OTP path uses the same pin; `PUBLIC_ORIGIN` must match wrangler's printed origin there.
|
|
148
|
-
|
|
149
|
-
## 6. Probe the Worker
|
|
150
|
-
|
|
151
|
-
```sh
|
|
152
|
-
curl -s http://127.0.0.1:8787/api/views/published-notes
|
|
153
|
-
```
|
|
154
|
-
|
|
155
|
-
```json
|
|
156
|
-
{ "ok": true, "data": { "rows": [], "page": 1, "show": 20, "hasMore": false } }
|
|
31
|
+
input:
|
|
32
|
+
type: object
|
|
33
|
+
additionalProperties: false
|
|
34
|
+
required: [ticketState]
|
|
35
|
+
properties:
|
|
36
|
+
ticketState: { type: string, enum: [open, closed] }
|
|
37
|
+
sql: |
|
|
38
|
+
SELECT id, subject, ticketState AS "ticketState" FROM tickets
|
|
39
|
+
WHERE ticketState = input.ticketState
|
|
40
|
+
ORDER BY id ASC
|
|
157
41
|
```
|
|
158
42
|
|
|
159
|
-
The View is served with no data because the local D1 is fresh. `show` follows the View's `limit` when the request carries no `?show=`; `?page=` and `?show=` are the reserved pagination params ([Reads: Views, REST and MCP](../concepts/views.md)).
|
|
160
|
-
|
|
161
43
|
```sh
|
|
162
|
-
|
|
44
|
+
pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml
|
|
45
|
+
pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml --check
|
|
163
46
|
```
|
|
164
47
|
|
|
165
|
-
|
|
48
|
+
Write `src/worker.ts`:
|
|
166
49
|
|
|
167
|
-
```
|
|
168
|
-
|
|
50
|
+
```ts
|
|
51
|
+
import { rest } from '../generated/rest.js';
|
|
52
|
+
interface Env { DB: D1Database }
|
|
53
|
+
const api = rest<Env>({
|
|
54
|
+
db: env => env.DB,
|
|
55
|
+
caller: () => ({ kind: 'anonymous' }),
|
|
56
|
+
});
|
|
57
|
+
export default {
|
|
58
|
+
async fetch(request: Request, env: Env): Promise<Response> {
|
|
59
|
+
return await api(request, env) ?? new Response('Not found', { status: 404 });
|
|
60
|
+
},
|
|
61
|
+
};
|
|
169
62
|
```
|
|
170
63
|
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
## What `mantle generate` wrote
|
|
174
|
-
|
|
175
|
-
- `.mantle/generated/mantle.ts` — one module with the sealed `plan`, generated types (`MantleHandlers<Env>`), `createMantle` and `bindMantle`. The Worker entry above imports only `plan`.
|
|
176
|
-
- `public/_mantle/admin/` — the Admin SPA, synced only when `@aotter/mantle-admin-ui` is installed. This project did not install it, so nothing is written there and `/admin` has no assets.
|
|
177
|
-
|
|
178
|
-
This walkthrough uses the existing direct-authored Worker entry; in that legacy
|
|
179
|
-
compile mode, `generate` expects the supplied manifests and does not add a
|
|
180
|
-
home route. New applications can instead use `mantle generate --host cf`
|
|
181
|
-
with `--features spec,api` for a smaller assembled Worker. The CLI never
|
|
182
|
-
invents a Schema. `mantle generate --check` reports stale output without
|
|
183
|
-
writing. The reference keeps `.mantle/`, `.agents/` and `.claude/` out of git
|
|
184
|
-
and regenerates them in `check`; see [Project layout and CLI](./project-and-cli.md).
|
|
185
|
-
|
|
186
|
-
## Next steps
|
|
64
|
+
Set the database binding `DB`, Worker name and compatibility date in `wrangler.jsonc`. Generation adds the split build configuration. Apply `generated/schema.sql` explicitly to an empty local database, for example `pnpm exec wrangler d1 execute <database> --local --file generated/schema.sql`. The first request creates nothing.
|
|
187
65
|
|
|
188
|
-
|
|
189
|
-
- [Project layout and the CLI loop](./project-and-cli.md) — the files you own, every CLI flag, the daily check loop.
|
|
190
|
-
- [The four atoms](../concepts/four-atoms.md) — add a Procedure and a Trigger to accept writes.
|
|
191
|
-
- [Authentication](../cloudflare/authentication.md) — complete Auth so Admin and `/mcp/staff` open.
|
|
192
|
-
- [Public web, SEO and cache](../cloudflare/public-web.md) — give the service a rendered public surface.
|
|
66
|
+
Typecheck, then run `pnpm exec wrangler dev --local`. Query `/api/views/tickets-by-state?ticketState=open`; the response is `{ rows, nextCursor? }`. The empty database returns no rows. Use Store or a declared Procedure for writes.
|
|
193
67
|
|
|
194
|
-
|
|
195
|
-
- [`docs/examples/host-minimal-worker/README.md`](../../../docs/examples/host-minimal-worker/README.md)
|
|
196
|
-
- [`docs/examples/host-minimal-worker/package.json`](../../../docs/examples/host-minimal-worker/package.json)
|
|
197
|
-
- [`docs/examples/host-minimal-worker/tsconfig.json`](../../../docs/examples/host-minimal-worker/tsconfig.json)
|
|
198
|
-
- [`docs/examples/host-minimal-worker/manifests/site.yaml`](../../../docs/examples/host-minimal-worker/manifests/site.yaml)
|
|
199
|
-
- [`docs/examples/host-minimal-worker/src/index.ts`](../../../docs/examples/host-minimal-worker/src/index.ts)
|
|
200
|
-
- [`docs/examples/host-minimal-worker/wrangler.jsonc`](../../../docs/examples/host-minimal-worker/wrangler.jsonc)
|
|
201
|
-
- [`docs/examples/host-minimal-worker/smoke.mjs`](../../../docs/examples/host-minimal-worker/smoke.mjs)
|
|
202
|
-
- [`docs/direct-authoring.md`](../../../docs/direct-authoring.md)
|
|
203
|
-
- [`packages/mantle-runtime/src/domain/service/Pagination.ts`](../../../packages/mantle-runtime/src/domain/service/Pagination.ts)
|
|
68
|
+
Commit generated files and Wrangler edits; keep bundle `dist/` untracked. Follow [service composition](../cloudflare/service-entry.md) to add auth, Admin or MCP and [deploy and operate](../cloudflare/deploy-and-operate.md) before changing schema or deploying.
|