@aotter/mantle 0.2.0-alpha.6 → 0.2.0-alpha.7

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.
Files changed (942) hide show
  1. package/README.md +152 -45
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +285 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +21 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +154 -0
  8. package/dist/auth/hardening.d.ts +24 -0
  9. package/dist/auth/hardening.js +40 -0
  10. package/dist/auth/identity.d.ts +121 -0
  11. package/dist/auth/identity.js +203 -0
  12. package/dist/auth/oauth.d.ts +31 -0
  13. package/dist/auth/oauth.js +124 -0
  14. package/dist/auth/resource-seeds.js +10 -0
  15. package/dist/auth/routes.d.ts +32 -0
  16. package/dist/auth/{createAuthRoutes.js → routes.js} +130 -35
  17. package/dist/build/compiler.d.ts +790 -0
  18. package/dist/build/compiler.js +6971 -0
  19. package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +24 -42
  20. package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
  21. package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +35 -6
  22. package/dist/build/spec/domain/model/UserFields.d.ts +20 -0
  23. package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +2 -1
  24. package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
  25. package/dist/bun/assets.d.ts +2 -0
  26. package/dist/bun/assets.js +24 -0
  27. package/dist/domain/adminOrder.js +24 -0
  28. package/dist/domain/columns.js +55 -0
  29. package/dist/domain/describe/chunk-ZIQVLA7X.js +363 -0
  30. package/dist/domain/describe/index.d.ts +58 -0
  31. package/dist/domain/describe/index.js +115 -0
  32. package/dist/domain/describe/target-hash.d.ts +8 -0
  33. package/dist/domain/describe/target-hash.js +12 -0
  34. package/dist/domain/describe/targets.d.ts +40 -0
  35. package/dist/domain/entry.js +33 -0
  36. package/dist/domain/generated-tools.js +17 -0
  37. package/dist/domain/generation.d.ts +16 -0
  38. package/dist/domain/generation.js +1 -0
  39. package/dist/domain/input.js +17 -0
  40. package/dist/domain/model.js +1 -0
  41. package/dist/domain/paging.js +204 -0
  42. package/dist/domain/recipes.js +19 -0
  43. package/dist/domain/userReferences.js +5 -0
  44. package/dist/domain/wireScalars.js +47 -0
  45. package/dist/infrastructure/adminEntries.js +153 -0
  46. package/dist/infrastructure/adminPaging.js +72 -0
  47. package/dist/infrastructure/artifacts.js +71 -0
  48. package/dist/infrastructure/authSchema.js +83 -0
  49. package/dist/infrastructure/bundle.js +84 -0
  50. package/dist/infrastructure/cli.js +101 -0
  51. package/dist/infrastructure/generate.d.ts +14 -0
  52. package/dist/infrastructure/generate.js +174 -0
  53. package/dist/infrastructure/generateAuth.d.ts +8 -0
  54. package/dist/infrastructure/generateAuth.js +17 -0
  55. package/dist/infrastructure/inputs.js +36 -0
  56. package/dist/infrastructure/wrangler.js +71 -0
  57. package/dist/kernel/authorization.d.ts +4 -0
  58. package/dist/kernel/authorization.js +16 -0
  59. package/dist/kernel/binds.d.ts +51 -0
  60. package/dist/kernel/binds.js +45 -0
  61. package/dist/kernel/caller-identity.d.ts +24 -0
  62. package/dist/kernel/caller-identity.js +22 -0
  63. package/dist/kernel/contract-error.d.ts +12 -0
  64. package/dist/kernel/contract-error.js +14 -0
  65. package/dist/kernel/contracts.d.ts +139 -0
  66. package/dist/kernel/contracts.js +92 -0
  67. package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
  68. package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +1 -6
  69. package/dist/kernel/dialect/common.d.ts +39 -0
  70. package/dist/kernel/dialect/common.js +6 -0
  71. package/dist/kernel/dialect/postgres.d.ts +16 -0
  72. package/dist/kernel/dialect/postgres.js +18 -0
  73. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  74. package/dist/kernel/dialect/sqlite.js +34 -0
  75. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  76. package/dist/kernel/driver/bun-sqlite.js +77 -0
  77. package/dist/kernel/driver/d1.d.ts +24 -0
  78. package/dist/kernel/driver/d1.js +22 -0
  79. package/dist/kernel/driver/postgres.d.ts +25 -0
  80. package/dist/kernel/driver/postgres.js +95 -0
  81. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  82. package/dist/kernel/driver/transaction-context.js +29 -0
  83. package/dist/kernel/email.d.ts +28 -0
  84. package/dist/{auth/emailTemplates.js → kernel/email.js} +13 -2
  85. package/dist/kernel/host-access.d.ts +10 -0
  86. package/dist/kernel/host-access.js +65 -0
  87. package/dist/kernel/host-caller.d.ts +38 -0
  88. package/dist/kernel/host-caller.js +55 -0
  89. package/dist/kernel/json-body.d.ts +4 -0
  90. package/dist/kernel/json-body.js +44 -0
  91. package/dist/kernel/mcp-apps.d.ts +49 -0
  92. package/dist/kernel/mcp-apps.js +40 -0
  93. package/dist/kernel/mcp-call.d.ts +5 -0
  94. package/dist/kernel/mcp-call.js +25 -0
  95. package/dist/kernel/mcp-handler.js +288 -0
  96. package/dist/kernel/mcp.d.ts +101 -0
  97. package/dist/kernel/mcp.js +25 -0
  98. package/dist/kernel/media.d.ts +27 -0
  99. package/dist/kernel/media.js +216 -0
  100. package/dist/kernel/paging.d.ts +55 -0
  101. package/dist/kernel/paging.js +95 -0
  102. package/dist/kernel/publishing.d.ts +4 -0
  103. package/dist/kernel/publishing.js +16 -0
  104. package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
  105. package/dist/kernel/r2-media.js +78 -0
  106. package/dist/kernel/rest-dispatch.js +38 -0
  107. package/dist/kernel/rest-router.js +63 -0
  108. package/dist/kernel/rest.d.ts +58 -0
  109. package/dist/kernel/rest.js +41 -0
  110. package/dist/kernel/scalars.d.ts +6 -0
  111. package/dist/kernel/scalars.js +43 -0
  112. package/dist/kernel/search.js +5 -0
  113. package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
  114. package/dist/kernel/site-types.js +1 -0
  115. package/dist/kernel/site.d.ts +41 -0
  116. package/dist/kernel/site.js +32 -0
  117. package/dist/kernel/store.d.ts +165 -0
  118. package/dist/kernel/store.js +257 -0
  119. package/dist/kernel/surface.d.ts +10 -0
  120. package/dist/kernel/surface.js +19 -0
  121. package/dist/kernel/sweep.d.ts +17 -0
  122. package/dist/kernel/sweep.js +27 -0
  123. package/dist/kernel/translations.d.ts +1 -0
  124. package/dist/kernel/translations.js +13 -0
  125. package/dist/kernel/user-caller.d.ts +31 -0
  126. package/dist/kernel/user-caller.js +67 -0
  127. package/dist/kernel/user-field-name.js +3 -0
  128. package/dist/kernel/user-fields.d.ts +34 -0
  129. package/dist/kernel/user-fields.js +71 -0
  130. package/dist/kernel/validation.d.ts +15 -0
  131. package/dist/kernel/validation.js +54 -0
  132. package/dist/kernel/web-gateway.js +68 -0
  133. package/dist/kernel/web-head.js +15 -0
  134. package/dist/kernel/web-response.js +8 -0
  135. package/dist/kernel/web.d.ts +75 -0
  136. package/dist/kernel/web.js +155 -0
  137. package/dist/kernel/where.js +27 -0
  138. package/dist/testing/index.d.ts +1 -37
  139. package/dist/testing/index.js +1 -43
  140. package/dist/usecase/adminBindings.js +142 -0
  141. package/dist/usecase/adminDescriptors.js +153 -0
  142. package/dist/usecase/generate.js +164 -0
  143. package/dist/usecase/handlers.js +21 -0
  144. package/dist/usecase/mcp-media.js +17 -0
  145. package/dist/usecase/mcp.js +96 -0
  146. package/dist/usecase/paging.js +72 -0
  147. package/dist/usecase/publishing.js +63 -0
  148. package/dist/usecase/refusals.js +27 -0
  149. package/dist/usecase/rest.js +54 -0
  150. package/dist/usecase/search.js +7 -0
  151. package/dist/usecase/site.js +40 -0
  152. package/dist/usecase/stores.js +62 -0
  153. package/dist/usecase/translations.js +78 -0
  154. package/dist/usecase/ttl.js +20 -0
  155. package/dist/usecase/validation.js +132 -0
  156. package/dist/usecase/web.js +22 -0
  157. package/docs/examples/README.md +31 -16
  158. package/docs/examples/app-shell/README.md +48 -0
  159. package/docs/examples/app-shell/package.json +34 -0
  160. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  161. package/docs/examples/app-shell/smoke-kit.mjs +100 -0
  162. package/docs/examples/app-shell/src/admin.ts +10 -0
  163. package/docs/examples/app-shell/src/auth.ts +55 -0
  164. package/docs/examples/app-shell/src/handlers.ts +5 -0
  165. package/docs/examples/app-shell/src/index.ts +4 -0
  166. package/docs/examples/app-shell/src/routes.ts +13 -0
  167. package/docs/examples/app-shell/src/schedule.ts +8 -0
  168. package/docs/examples/app-shell/src/service.ts +70 -0
  169. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  170. package/docs/examples/app-shell/src/signup.ts +8 -0
  171. package/docs/examples/{reference-service → app-shell}/tsconfig.json +2 -1
  172. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  173. package/docs/examples/app-shell/wrangler.jsonc +61 -0
  174. package/docs/examples/club-events/README.md +60 -0
  175. package/docs/examples/club-events/manifests/club-events.yaml +225 -0
  176. package/docs/examples/club-events/smoke.mjs +121 -0
  177. package/docs/examples/club-events/src/handlers.ts +25 -0
  178. package/docs/examples/club-events/src/signup.ts +9 -0
  179. package/docs/examples/generated-web/README.md +74 -0
  180. package/docs/examples/generated-web/posts.yaml +38 -0
  181. package/docs/examples/generated-web/seed.sql +6 -0
  182. package/docs/examples/generated-web/src/worker.ts +43 -0
  183. package/docs/examples/generated-web/tsconfig.json +8 -0
  184. package/docs/examples/generated-web/wrangler.jsonc +7 -0
  185. package/docs/examples/purchasing/.dev.vars.example +6 -0
  186. package/docs/examples/purchasing/README.md +90 -0
  187. package/docs/examples/purchasing/manifests/purchasing.yaml +341 -0
  188. package/docs/examples/purchasing/seed.sql +4 -0
  189. package/docs/examples/purchasing/smoke.mjs +171 -0
  190. package/docs/examples/purchasing/src/admin.ts +12 -0
  191. package/docs/examples/purchasing/src/handlers.ts +33 -0
  192. package/docs/examples/purchasing/src/notify.ts +29 -0
  193. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  194. package/docs/examples/purchasing/src/routes.ts +53 -0
  195. package/docs/examples/purchasing/src/schedule.ts +31 -0
  196. package/docs/examples/purchasing/src/signup.ts +5 -0
  197. package/docs/examples/purchasing/src/supplier.ts +32 -0
  198. package/docs/examples/purchasing/wrangler.jsonc +68 -0
  199. package/docs/examples/recipes/README.md +58 -0
  200. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  201. package/docs/examples/recipes/smoke.mjs +102 -0
  202. package/docs/examples/recipes/src/media.ts +13 -0
  203. package/docs/examples/recipes/src/pages.ts +99 -0
  204. package/docs/examples/recipes/src/routes.ts +71 -0
  205. package/docs/examples/recipes/src/site-config.ts +12 -0
  206. package/docs/examples/recipes/wrangler.jsonc +73 -0
  207. package/docs/handbook/cloudflare/authentication.md +142 -212
  208. package/docs/handbook/cloudflare/chatgpt-sites.md +4 -113
  209. package/docs/handbook/cloudflare/deploy-and-operate.md +20 -106
  210. package/docs/handbook/cloudflare/media-r2.md +62 -133
  211. package/docs/handbook/cloudflare/service-entry.md +180 -116
  212. package/docs/handbook/concepts/authorization.md +10 -123
  213. package/docs/handbook/concepts/four-atoms.md +9 -92
  214. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
  215. package/docs/handbook/concepts/mcp-and-agents.md +10 -141
  216. package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
  217. package/docs/handbook/concepts/runtime-and-adapters.md +15 -224
  218. package/docs/handbook/concepts/views.md +10 -109
  219. package/docs/handbook/examples/hub.md +2 -18
  220. package/docs/handbook/guides/adapter-guide.md +11 -0
  221. package/docs/handbook/guides/admin-extensions.md +12 -183
  222. package/docs/handbook/guides/admin-ui.md +5 -164
  223. package/docs/handbook/guides/agent-setup.md +5 -18
  224. package/docs/handbook/guides/email.md +86 -0
  225. package/docs/handbook/guides/mcp-apps.md +44 -0
  226. package/docs/handbook/guides/native-admin.md +298 -0
  227. package/docs/handbook/guides/native-execution.md +132 -0
  228. package/docs/handbook/guides/oauth.md +105 -0
  229. package/docs/handbook/guides/postgres-adapters.md +56 -0
  230. package/docs/handbook/guides/public-pages.md +53 -0
  231. package/docs/handbook/guides/size-and-startup.md +9 -0
  232. package/docs/handbook/guides/typed-queries.md +39 -102
  233. package/docs/handbook/navigation.json +164 -31
  234. package/docs/handbook/reference/admin-descriptors.md +88 -0
  235. package/docs/handbook/reference/authorization.md +44 -52
  236. package/docs/handbook/reference/describe.md +56 -0
  237. package/docs/handbook/reference/diagnostics.md +15 -79
  238. package/docs/handbook/reference/features.md +45 -53
  239. package/docs/handbook/reference/manifest.md +6 -69
  240. package/docs/handbook/reference/procedure.md +9 -118
  241. package/docs/handbook/reference/schema.md +75 -185
  242. package/docs/handbook/reference/site-config.md +5 -65
  243. package/docs/handbook/reference/surface.md +279 -97
  244. package/docs/handbook/reference/trigger.md +24 -93
  245. package/docs/handbook/reference/view.md +32 -160
  246. package/docs/handbook/releases/index.md +48 -13
  247. package/docs/handbook/start/overview.md +9 -56
  248. package/docs/handbook/start/project-and-cli.md +40 -149
  249. package/docs/handbook/start/quickstart-worker.md +38 -116
  250. package/docs/skills/develop/SKILL.md +34 -123
  251. package/docs/skills/develop/mcp-app.md +37 -77
  252. package/docs/skills/integrate/SKILL.md +42 -84
  253. package/docs/skills/media-gc/SKILL.md +14 -3
  254. package/docs/skills/provision/SKILL.md +25 -91
  255. package/docs/skills/update/SKILL.md +19 -43
  256. package/docs/source/scripts/postgres-adapter.ts +101 -0
  257. package/docs/upgrade-0.1-to-0.2.md +25 -9
  258. package/package.json +96 -112
  259. package/skills/.keep +0 -0
  260. package/skills/README.md +72 -0
  261. package/skills/mantle/SKILL.md +135 -0
  262. package/skills/mantle/references/local-testing.md +11 -0
  263. package/skills/mantle/references/web.md +41 -0
  264. package/skills/mantle/references/website.md +47 -0
  265. package/dist/admin/consent.d.ts +0 -17
  266. package/dist/admin/consent.d.ts.map +0 -1
  267. package/dist/admin/consent.js +0 -17
  268. package/dist/admin/consent.js.map +0 -1
  269. package/dist/admin/createAdminSurface.d.ts +0 -25
  270. package/dist/admin/createAdminSurface.d.ts.map +0 -1
  271. package/dist/admin/createAdminSurface.js +0 -635
  272. package/dist/admin/createAdminSurface.js.map +0 -1
  273. package/dist/admin/design.d.ts +0 -7
  274. package/dist/admin/design.d.ts.map +0 -1
  275. package/dist/admin/design.js +0 -18
  276. package/dist/admin/design.js.map +0 -1
  277. package/dist/admin/developerConsole.d.ts +0 -267
  278. package/dist/admin/developerConsole.d.ts.map +0 -1
  279. package/dist/admin/developerConsole.js +0 -136
  280. package/dist/admin/developerConsole.js.map +0 -1
  281. package/dist/admin/extensions.d.ts +0 -290
  282. package/dist/admin/extensions.d.ts.map +0 -1
  283. package/dist/admin/extensions.js +0 -532
  284. package/dist/admin/extensions.js.map +0 -1
  285. package/dist/admin/identity.d.ts +0 -62
  286. package/dist/admin/identity.d.ts.map +0 -1
  287. package/dist/admin/identity.js +0 -7
  288. package/dist/admin/identity.js.map +0 -1
  289. package/dist/admin/index.d.ts +0 -7
  290. package/dist/admin/index.d.ts.map +0 -1
  291. package/dist/admin/index.js +0 -7
  292. package/dist/admin/index.js.map +0 -1
  293. package/dist/admin/procedureFlow.d.ts +0 -38
  294. package/dist/admin/procedureFlow.d.ts.map +0 -1
  295. package/dist/admin/procedureFlow.js +0 -188
  296. package/dist/admin/procedureFlow.js.map +0 -1
  297. package/dist/auth/ConsoleEmailSender.d.ts +0 -15
  298. package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
  299. package/dist/auth/ConsoleEmailSender.js +0 -19
  300. package/dist/auth/ConsoleEmailSender.js.map +0 -1
  301. package/dist/auth/appleClientSecret.d.ts +0 -75
  302. package/dist/auth/appleClientSecret.d.ts.map +0 -1
  303. package/dist/auth/appleClientSecret.js +0 -116
  304. package/dist/auth/appleClientSecret.js.map +0 -1
  305. package/dist/auth/buildAuth.d.ts +0 -4568
  306. package/dist/auth/buildAuth.d.ts.map +0 -1
  307. package/dist/auth/buildAuth.js +0 -312
  308. package/dist/auth/buildAuth.js.map +0 -1
  309. package/dist/auth/callerResolver.d.ts +0 -52
  310. package/dist/auth/callerResolver.d.ts.map +0 -1
  311. package/dist/auth/callerResolver.js +0 -52
  312. package/dist/auth/callerResolver.js.map +0 -1
  313. package/dist/auth/createAuthRoutes.d.ts +0 -22
  314. package/dist/auth/createAuthRoutes.d.ts.map +0 -1
  315. package/dist/auth/createAuthRoutes.js.map +0 -1
  316. package/dist/auth/createMantleAuth.d.ts +0 -3
  317. package/dist/auth/createMantleAuth.d.ts.map +0 -1
  318. package/dist/auth/createMantleAuth.js +0 -504
  319. package/dist/auth/createMantleAuth.js.map +0 -1
  320. package/dist/auth/db.d.ts +0 -18
  321. package/dist/auth/db.d.ts.map +0 -1
  322. package/dist/auth/db.js +0 -27
  323. package/dist/auth/db.js.map +0 -1
  324. package/dist/auth/emailTemplates.d.ts +0 -7
  325. package/dist/auth/emailTemplates.d.ts.map +0 -1
  326. package/dist/auth/emailTemplates.js.map +0 -1
  327. package/dist/auth/index.d.ts +0 -9
  328. package/dist/auth/index.d.ts.map +0 -1
  329. package/dist/auth/index.js +0 -7
  330. package/dist/auth/index.js.map +0 -1
  331. package/dist/auth/methods.d.ts +0 -717
  332. package/dist/auth/methods.d.ts.map +0 -1
  333. package/dist/auth/methods.js +0 -321
  334. package/dist/auth/methods.js.map +0 -1
  335. package/dist/auth/oauthTokens.d.ts +0 -24
  336. package/dist/auth/oauthTokens.d.ts.map +0 -1
  337. package/dist/auth/oauthTokens.js +0 -146
  338. package/dist/auth/oauthTokens.js.map +0 -1
  339. package/dist/auth/setupIncomplete.d.ts +0 -16
  340. package/dist/auth/setupIncomplete.d.ts.map +0 -1
  341. package/dist/auth/setupIncomplete.js +0 -50
  342. package/dist/auth/setupIncomplete.js.map +0 -1
  343. package/dist/auth/types.d.ts +0 -440
  344. package/dist/auth/types.d.ts.map +0 -1
  345. package/dist/auth/types.js +0 -10
  346. package/dist/auth/types.js.map +0 -1
  347. package/dist/bun/index.d.ts +0 -21
  348. package/dist/bun/index.d.ts.map +0 -1
  349. package/dist/bun/index.js +0 -46
  350. package/dist/bun/index.js.map +0 -1
  351. package/dist/cli/emitModule.d.ts +0 -7
  352. package/dist/cli/emitModule.d.ts.map +0 -1
  353. package/dist/cli/emitModule.js +0 -127
  354. package/dist/cli/emitModule.js.map +0 -1
  355. package/dist/cli/generate.d.ts +0 -8
  356. package/dist/cli/generate.d.ts.map +0 -1
  357. package/dist/cli/generate.js +0 -391
  358. package/dist/cli/generate.js.map +0 -1
  359. package/dist/cli/main.d.ts +0 -3
  360. package/dist/cli/main.d.ts.map +0 -1
  361. package/dist/cli/main.js +0 -21
  362. package/dist/cli/main.js.map +0 -1
  363. package/dist/cli/preset.d.ts +0 -18
  364. package/dist/cli/preset.d.ts.map +0 -1
  365. package/dist/cli/preset.js +0 -405
  366. package/dist/cli/preset.js.map +0 -1
  367. package/dist/cloudflare/index.d.ts +0 -25
  368. package/dist/cloudflare/index.d.ts.map +0 -1
  369. package/dist/cloudflare/index.js +0 -16
  370. package/dist/cloudflare/index.js.map +0 -1
  371. package/dist/cloudflare/r2Media.d.ts.map +0 -1
  372. package/dist/cloudflare/r2Media.js +0 -69
  373. package/dist/cloudflare/r2Media.js.map +0 -1
  374. package/dist/core/caller.d.ts +0 -35
  375. package/dist/core/caller.d.ts.map +0 -1
  376. package/dist/core/caller.js +0 -3
  377. package/dist/core/caller.js.map +0 -1
  378. package/dist/core/createMantle.d.ts +0 -22
  379. package/dist/core/createMantle.d.ts.map +0 -1
  380. package/dist/core/createMantle.js +0 -117
  381. package/dist/core/createMantle.js.map +0 -1
  382. package/dist/core/dialect.d.ts +0 -53
  383. package/dist/core/dialect.d.ts.map +0 -1
  384. package/dist/core/dialect.js +0 -7
  385. package/dist/core/dialect.js.map +0 -1
  386. package/dist/core/driver.d.ts +0 -24
  387. package/dist/core/driver.d.ts.map +0 -1
  388. package/dist/core/driver.js +0 -2
  389. package/dist/core/driver.js.map +0 -1
  390. package/dist/core/email.d.ts +0 -17
  391. package/dist/core/email.d.ts.map +0 -1
  392. package/dist/core/email.js +0 -2
  393. package/dist/core/email.js.map +0 -1
  394. package/dist/core/index.d.ts +0 -16
  395. package/dist/core/index.d.ts.map +0 -1
  396. package/dist/core/index.js +0 -16
  397. package/dist/core/index.js.map +0 -1
  398. package/dist/core/invocation.d.ts +0 -66
  399. package/dist/core/invocation.d.ts.map +0 -1
  400. package/dist/core/invocation.js +0 -3
  401. package/dist/core/invocation.js.map +0 -1
  402. package/dist/core/observation.d.ts +0 -3
  403. package/dist/core/observation.d.ts.map +0 -1
  404. package/dist/core/observation.js +0 -10
  405. package/dist/core/observation.js.map +0 -1
  406. package/dist/core/runtime/auth.d.ts +0 -9
  407. package/dist/core/runtime/auth.d.ts.map +0 -1
  408. package/dist/core/runtime/auth.js +0 -39
  409. package/dist/core/runtime/auth.js.map +0 -1
  410. package/dist/core/runtime/createRuntime.d.ts +0 -23
  411. package/dist/core/runtime/createRuntime.d.ts.map +0 -1
  412. package/dist/core/runtime/createRuntime.js +0 -214
  413. package/dist/core/runtime/createRuntime.js.map +0 -1
  414. package/dist/core/runtime/verifyPlan.d.ts +0 -34
  415. package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
  416. package/dist/core/runtime/verifyPlan.js +0 -301
  417. package/dist/core/runtime/verifyPlan.js.map +0 -1
  418. package/dist/core/service.d.ts +0 -45
  419. package/dist/core/service.d.ts.map +0 -1
  420. package/dist/core/service.js +0 -2
  421. package/dist/core/service.js.map +0 -1
  422. package/dist/core/sessionUser.d.ts +0 -14
  423. package/dist/core/sessionUser.d.ts.map +0 -1
  424. package/dist/core/sessionUser.js +0 -4
  425. package/dist/core/sessionUser.js.map +0 -1
  426. package/dist/core/site.d.ts.map +0 -1
  427. package/dist/core/site.js +0 -2
  428. package/dist/core/site.js.map +0 -1
  429. package/dist/core/siteConfig.d.ts +0 -5
  430. package/dist/core/siteConfig.d.ts.map +0 -1
  431. package/dist/core/siteConfig.js +0 -24
  432. package/dist/core/siteConfig.js.map +0 -1
  433. package/dist/core/sql/allowlist.d.ts +0 -67
  434. package/dist/core/sql/allowlist.d.ts.map +0 -1
  435. package/dist/core/sql/allowlist.js +0 -737
  436. package/dist/core/sql/allowlist.js.map +0 -1
  437. package/dist/core/sql/ast.d.ts +0 -24
  438. package/dist/core/sql/ast.d.ts.map +0 -1
  439. package/dist/core/sql/ast.js +0 -32
  440. package/dist/core/sql/ast.js.map +0 -1
  441. package/dist/core/sql/compile.d.ts +0 -50
  442. package/dist/core/sql/compile.d.ts.map +0 -1
  443. package/dist/core/sql/compile.js +0 -48
  444. package/dist/core/sql/compile.js.map +0 -1
  445. package/dist/core/sql/policy.d.ts +0 -123
  446. package/dist/core/sql/policy.d.ts.map +0 -1
  447. package/dist/core/sql/policy.js +0 -398
  448. package/dist/core/sql/policy.js.map +0 -1
  449. package/dist/core/sql/positions.d.ts +0 -30
  450. package/dist/core/sql/positions.d.ts.map +0 -1
  451. package/dist/core/sql/positions.js +0 -22
  452. package/dist/core/sql/positions.js.map +0 -1
  453. package/dist/core/sql/run.d.ts +0 -68
  454. package/dist/core/sql/run.d.ts.map +0 -1
  455. package/dist/core/sql/run.js +0 -384
  456. package/dist/core/sql/run.js.map +0 -1
  457. package/dist/core/store/createStore.d.ts +0 -49
  458. package/dist/core/store/createStore.d.ts.map +0 -1
  459. package/dist/core/store/createStore.js +0 -227
  460. package/dist/core/store/createStore.js.map +0 -1
  461. package/dist/core/store/cursor.d.ts +0 -4
  462. package/dist/core/store/cursor.d.ts.map +0 -1
  463. package/dist/core/store/cursor.js +0 -22
  464. package/dist/core/store/cursor.js.map +0 -1
  465. package/dist/core/store/json.d.ts +0 -80
  466. package/dist/core/store/json.d.ts.map +0 -1
  467. package/dist/core/store/json.js +0 -342
  468. package/dist/core/store/json.js.map +0 -1
  469. package/dist/core/store.d.ts +0 -160
  470. package/dist/core/store.d.ts.map +0 -1
  471. package/dist/core/store.js +0 -2
  472. package/dist/core/store.js.map +0 -1
  473. package/dist/core/wire.d.ts +0 -20
  474. package/dist/core/wire.d.ts.map +0 -1
  475. package/dist/core/wire.js +0 -84
  476. package/dist/core/wire.js.map +0 -1
  477. package/dist/core/withCaller.d.ts +0 -24
  478. package/dist/core/withCaller.d.ts.map +0 -1
  479. package/dist/core/withCaller.js +0 -35
  480. package/dist/core/withCaller.js.map +0 -1
  481. package/dist/d1/adapter.d.ts +0 -12
  482. package/dist/d1/adapter.d.ts.map +0 -1
  483. package/dist/d1/adapter.js +0 -23
  484. package/dist/d1/adapter.js.map +0 -1
  485. package/dist/d1/codec.d.ts +0 -14
  486. package/dist/d1/codec.d.ts.map +0 -1
  487. package/dist/d1/codec.js +0 -136
  488. package/dist/d1/codec.js.map +0 -1
  489. package/dist/d1/compile/index.d.ts +0 -9
  490. package/dist/d1/compile/index.d.ts.map +0 -1
  491. package/dist/d1/compile/index.js +0 -9
  492. package/dist/d1/compile/index.js.map +0 -1
  493. package/dist/d1/dialect.d.ts +0 -4
  494. package/dist/d1/dialect.d.ts.map +0 -1
  495. package/dist/d1/dialect.js +0 -13
  496. package/dist/d1/dialect.js.map +0 -1
  497. package/dist/d1/executor.d.ts +0 -15
  498. package/dist/d1/executor.d.ts.map +0 -1
  499. package/dist/d1/executor.js +0 -96
  500. package/dist/d1/executor.js.map +0 -1
  501. package/dist/d1/index.d.ts +0 -6
  502. package/dist/d1/index.d.ts.map +0 -1
  503. package/dist/d1/index.js +0 -6
  504. package/dist/d1/index.js.map +0 -1
  505. package/dist/d1/lower.d.ts +0 -8
  506. package/dist/d1/lower.d.ts.map +0 -1
  507. package/dist/d1/lower.js +0 -167
  508. package/dist/d1/lower.js.map +0 -1
  509. package/dist/d1/media.d.ts +0 -5
  510. package/dist/d1/media.d.ts.map +0 -1
  511. package/dist/d1/media.js +0 -157
  512. package/dist/d1/media.js.map +0 -1
  513. package/dist/d1/migrations.d.ts +0 -12
  514. package/dist/d1/migrations.d.ts.map +0 -1
  515. package/dist/d1/migrations.js +0 -111
  516. package/dist/d1/migrations.js.map +0 -1
  517. package/dist/d1/print.d.ts +0 -28
  518. package/dist/d1/print.d.ts.map +0 -1
  519. package/dist/d1/print.js +0 -54
  520. package/dist/d1/print.js.map +0 -1
  521. package/dist/d1/site.d.ts +0 -17
  522. package/dist/d1/site.d.ts.map +0 -1
  523. package/dist/d1/site.js +0 -63
  524. package/dist/d1/site.js.map +0 -1
  525. package/dist/d1/storage.d.ts +0 -34
  526. package/dist/d1/storage.d.ts.map +0 -1
  527. package/dist/d1/storage.js +0 -288
  528. package/dist/d1/storage.js.map +0 -1
  529. package/dist/d1/tz.d.ts +0 -21
  530. package/dist/d1/tz.d.ts.map +0 -1
  531. package/dist/d1/tz.js +0 -54
  532. package/dist/d1/tz.js.map +0 -1
  533. package/dist/d1/validator.d.ts +0 -10
  534. package/dist/d1/validator.d.ts.map +0 -1
  535. package/dist/d1/validator.js +0 -33
  536. package/dist/d1/validator.js.map +0 -1
  537. package/dist/mcp/apps.d.ts +0 -43
  538. package/dist/mcp/apps.d.ts.map +0 -1
  539. package/dist/mcp/apps.js +0 -57
  540. package/dist/mcp/apps.js.map +0 -1
  541. package/dist/mcp/catalog.d.ts +0 -55
  542. package/dist/mcp/catalog.d.ts.map +0 -1
  543. package/dist/mcp/catalog.js +0 -81
  544. package/dist/mcp/catalog.js.map +0 -1
  545. package/dist/mcp/createMcpSurface.d.ts +0 -60
  546. package/dist/mcp/createMcpSurface.d.ts.map +0 -1
  547. package/dist/mcp/createMcpSurface.js +0 -182
  548. package/dist/mcp/createMcpSurface.js.map +0 -1
  549. package/dist/mcp/index.d.ts +0 -4
  550. package/dist/mcp/index.d.ts.map +0 -1
  551. package/dist/mcp/index.js +0 -4
  552. package/dist/mcp/index.js.map +0 -1
  553. package/dist/mcp/media.d.ts +0 -9
  554. package/dist/mcp/media.d.ts.map +0 -1
  555. package/dist/mcp/media.js +0 -33
  556. package/dist/mcp/media.js.map +0 -1
  557. package/dist/postgres/adapter.d.ts +0 -23
  558. package/dist/postgres/adapter.d.ts.map +0 -1
  559. package/dist/postgres/adapter.js +0 -50
  560. package/dist/postgres/adapter.js.map +0 -1
  561. package/dist/postgres/codec.d.ts +0 -13
  562. package/dist/postgres/codec.d.ts.map +0 -1
  563. package/dist/postgres/codec.js +0 -110
  564. package/dist/postgres/codec.js.map +0 -1
  565. package/dist/postgres/compile/index.d.ts +0 -9
  566. package/dist/postgres/compile/index.d.ts.map +0 -1
  567. package/dist/postgres/compile/index.js +0 -9
  568. package/dist/postgres/compile/index.js.map +0 -1
  569. package/dist/postgres/driver.d.ts +0 -109
  570. package/dist/postgres/driver.d.ts.map +0 -1
  571. package/dist/postgres/driver.js +0 -186
  572. package/dist/postgres/driver.js.map +0 -1
  573. package/dist/postgres/executor.d.ts +0 -28
  574. package/dist/postgres/executor.d.ts.map +0 -1
  575. package/dist/postgres/executor.js +0 -96
  576. package/dist/postgres/executor.js.map +0 -1
  577. package/dist/postgres/index.d.ts +0 -8
  578. package/dist/postgres/index.d.ts.map +0 -1
  579. package/dist/postgres/index.js +0 -8
  580. package/dist/postgres/index.js.map +0 -1
  581. package/dist/postgres/lower.d.ts +0 -6
  582. package/dist/postgres/lower.d.ts.map +0 -1
  583. package/dist/postgres/lower.js +0 -152
  584. package/dist/postgres/lower.js.map +0 -1
  585. package/dist/postgres/print.d.ts +0 -11
  586. package/dist/postgres/print.d.ts.map +0 -1
  587. package/dist/postgres/print.js +0 -108
  588. package/dist/postgres/print.js.map +0 -1
  589. package/dist/postgres/session.d.ts +0 -9
  590. package/dist/postgres/session.d.ts.map +0 -1
  591. package/dist/postgres/session.js +0 -111
  592. package/dist/postgres/session.js.map +0 -1
  593. package/dist/postgres/storage.d.ts +0 -32
  594. package/dist/postgres/storage.d.ts.map +0 -1
  595. package/dist/postgres/storage.js +0 -283
  596. package/dist/postgres/storage.js.map +0 -1
  597. package/dist/postgres/validator.d.ts +0 -13
  598. package/dist/postgres/validator.d.ts.map +0 -1
  599. package/dist/postgres/validator.js +0 -53
  600. package/dist/postgres/validator.js.map +0 -1
  601. package/dist/spec/domain/index.d.ts +0 -3
  602. package/dist/spec/domain/index.d.ts.map +0 -1
  603. package/dist/spec/domain/index.js +0 -3
  604. package/dist/spec/domain/index.js.map +0 -1
  605. package/dist/spec/domain/model/ContentState.d.ts +0 -8
  606. package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
  607. package/dist/spec/domain/model/ContentState.js +0 -7
  608. package/dist/spec/domain/model/ContentState.js.map +0 -1
  609. package/dist/spec/domain/model/Entry.d.ts +0 -29
  610. package/dist/spec/domain/model/Entry.d.ts.map +0 -1
  611. package/dist/spec/domain/model/Entry.js +0 -16
  612. package/dist/spec/domain/model/Entry.js.map +0 -1
  613. package/dist/spec/domain/model/Locale.d.ts +0 -30
  614. package/dist/spec/domain/model/Locale.d.ts.map +0 -1
  615. package/dist/spec/domain/model/Locale.js +0 -33
  616. package/dist/spec/domain/model/Locale.js.map +0 -1
  617. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
  618. package/dist/spec/domain/model/ManifestGrammar.js +0 -153
  619. package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
  620. package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
  621. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
  622. package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
  623. package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
  624. package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
  625. package/dist/spec/domain/model/RuntimePlan.js +0 -4
  626. package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
  627. package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
  628. package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
  629. package/dist/spec/domain/model/SiteConfig.js +0 -13
  630. package/dist/spec/domain/model/SiteConfig.js.map +0 -1
  631. package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
  632. package/dist/spec/domain/model/SqlIr.js +0 -95
  633. package/dist/spec/domain/model/SqlIr.js.map +0 -1
  634. package/dist/spec/domain/model/index.d.ts +0 -14
  635. package/dist/spec/domain/model/index.d.ts.map +0 -1
  636. package/dist/spec/domain/model/index.js +0 -14
  637. package/dist/spec/domain/model/index.js.map +0 -1
  638. package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
  639. package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
  640. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
  641. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
  642. package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
  643. package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
  644. package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
  645. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
  646. package/dist/spec/domain/service/EntryDataValidator.js +0 -88
  647. package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
  648. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
  649. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
  650. package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
  651. package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
  652. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
  653. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
  654. package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
  655. package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
  656. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
  657. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
  658. package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
  659. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
  660. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
  661. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
  662. package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
  663. package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
  664. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
  665. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
  666. package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
  667. package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
  668. package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
  669. package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
  670. package/dist/spec/domain/service/ManifestLinker.js +0 -92
  671. package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
  672. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
  673. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
  674. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
  675. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
  676. package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
  677. package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
  678. package/dist/spec/domain/service/ManifestParser.js +0 -203
  679. package/dist/spec/domain/service/ManifestParser.js.map +0 -1
  680. package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
  681. package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
  682. package/dist/spec/domain/service/ManifestPartition.js +0 -19
  683. package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
  684. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
  685. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
  686. package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
  687. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
  688. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
  689. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
  690. package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
  691. package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
  692. package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
  693. package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
  694. package/dist/spec/domain/service/McpToolNaming.js +0 -50
  695. package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
  696. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
  697. package/dist/spec/domain/service/PlanFingerprint.js +0 -14
  698. package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
  699. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
  700. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
  701. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
  702. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
  703. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -44
  704. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
  705. package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -333
  706. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
  707. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
  708. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
  709. package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
  710. package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
  711. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
  712. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
  713. package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
  714. package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
  715. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
  716. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
  717. package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
  718. package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
  719. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
  720. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
  721. package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
  722. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
  723. package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
  724. package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
  725. package/dist/spec/domain/service/SqlClassify.js +0 -42
  726. package/dist/spec/domain/service/SqlClassify.js.map +0 -1
  727. package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
  728. package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
  729. package/dist/spec/domain/service/SqlRefusal.js +0 -20
  730. package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
  731. package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
  732. package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
  733. package/dist/spec/domain/service/SqlTypes.js +0 -110
  734. package/dist/spec/domain/service/SqlTypes.js.map +0 -1
  735. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
  736. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
  737. package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
  738. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
  739. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
  740. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
  741. package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
  742. package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
  743. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
  744. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
  745. package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
  746. package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
  747. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
  748. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
  749. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
  750. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
  751. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
  752. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
  753. package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -58
  754. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
  755. package/dist/spec/domain/service/index.d.ts +0 -24
  756. package/dist/spec/domain/service/index.d.ts.map +0 -1
  757. package/dist/spec/domain/service/index.js +0 -24
  758. package/dist/spec/domain/service/index.js.map +0 -1
  759. package/dist/spec/index.d.ts +0 -10
  760. package/dist/spec/index.d.ts.map +0 -1
  761. package/dist/spec/index.js +0 -12
  762. package/dist/spec/index.js.map +0 -1
  763. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
  764. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
  765. package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
  766. package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
  767. package/dist/spec/infrastructure/index.d.ts +0 -2
  768. package/dist/spec/infrastructure/index.d.ts.map +0 -1
  769. package/dist/spec/infrastructure/index.js +0 -2
  770. package/dist/spec/infrastructure/index.js.map +0 -1
  771. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
  772. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
  773. package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
  774. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
  775. package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
  776. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
  777. package/dist/spec/infrastructure/sql/compilePlan.js +0 -287
  778. package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
  779. package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
  780. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
  781. package/dist/spec/infrastructure/sql/compileSql.js +0 -92
  782. package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
  783. package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
  784. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
  785. package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
  786. package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
  787. package/dist/spec/infrastructure/sql/index.d.ts +0 -4
  788. package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
  789. package/dist/spec/infrastructure/sql/index.js +0 -4
  790. package/dist/spec/infrastructure/sql/index.js.map +0 -1
  791. package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
  792. package/dist/spec/kernel/diagnostic.js +0 -301
  793. package/dist/spec/kernel/diagnostic.js.map +0 -1
  794. package/dist/spec/kernel/index.d.ts +0 -8
  795. package/dist/spec/kernel/index.d.ts.map +0 -1
  796. package/dist/spec/kernel/index.js +0 -8
  797. package/dist/spec/kernel/index.js.map +0 -1
  798. package/dist/spec/usecase/EmitTypes.d.ts +0 -22
  799. package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
  800. package/dist/spec/usecase/EmitTypes.js +0 -182
  801. package/dist/spec/usecase/EmitTypes.js.map +0 -1
  802. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
  803. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
  804. package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
  805. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
  806. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
  807. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
  808. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
  809. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
  810. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
  811. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
  812. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
  813. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
  814. package/dist/spec/usecase/dto/index.d.ts +0 -3
  815. package/dist/spec/usecase/dto/index.d.ts.map +0 -1
  816. package/dist/spec/usecase/dto/index.js +0 -3
  817. package/dist/spec/usecase/dto/index.js.map +0 -1
  818. package/dist/spec/usecase/index.d.ts +0 -10
  819. package/dist/spec/usecase/index.d.ts.map +0 -1
  820. package/dist/spec/usecase/index.js +0 -10
  821. package/dist/spec/usecase/index.js.map +0 -1
  822. package/dist/testing/cases/before-hook.d.ts +0 -4
  823. package/dist/testing/cases/before-hook.d.ts.map +0 -1
  824. package/dist/testing/cases/before-hook.js +0 -71
  825. package/dist/testing/cases/before-hook.js.map +0 -1
  826. package/dist/testing/cases/corpus.d.ts +0 -14
  827. package/dist/testing/cases/corpus.d.ts.map +0 -1
  828. package/dist/testing/cases/corpus.js +0 -93
  829. package/dist/testing/cases/corpus.js.map +0 -1
  830. package/dist/testing/cases/policy.d.ts +0 -87
  831. package/dist/testing/cases/policy.d.ts.map +0 -1
  832. package/dist/testing/cases/policy.js +0 -143
  833. package/dist/testing/cases/policy.js.map +0 -1
  834. package/dist/testing/cases/printer.d.ts +0 -4
  835. package/dist/testing/cases/printer.d.ts.map +0 -1
  836. package/dist/testing/cases/printer.js +0 -34
  837. package/dist/testing/cases/printer.js.map +0 -1
  838. package/dist/testing/cases/report-view.d.ts +0 -5
  839. package/dist/testing/cases/report-view.d.ts.map +0 -1
  840. package/dist/testing/cases/report-view.js +0 -51
  841. package/dist/testing/cases/report-view.js.map +0 -1
  842. package/dist/testing/cases/requisition.d.ts +0 -4
  843. package/dist/testing/cases/requisition.d.ts.map +0 -1
  844. package/dist/testing/cases/requisition.js +0 -38
  845. package/dist/testing/cases/requisition.js.map +0 -1
  846. package/dist/testing/cases/search-places.d.ts +0 -4
  847. package/dist/testing/cases/search-places.d.ts.map +0 -1
  848. package/dist/testing/cases/search-places.js +0 -60
  849. package/dist/testing/cases/search-places.js.map +0 -1
  850. package/dist/testing/cases/stock.d.ts +0 -4
  851. package/dist/testing/cases/stock.d.ts.map +0 -1
  852. package/dist/testing/cases/stock.js +0 -35
  853. package/dist/testing/cases/stock.js.map +0 -1
  854. package/dist/testing/cases/store.d.ts +0 -4
  855. package/dist/testing/cases/store.d.ts.map +0 -1
  856. package/dist/testing/cases/store.js +0 -100
  857. package/dist/testing/cases/store.js.map +0 -1
  858. package/dist/testing/harness.d.ts +0 -94
  859. package/dist/testing/harness.d.ts.map +0 -1
  860. package/dist/testing/harness.js +0 -168
  861. package/dist/testing/harness.js.map +0 -1
  862. package/dist/testing/index.d.ts.map +0 -1
  863. package/dist/testing/index.js.map +0 -1
  864. package/dist/testing/report.d.ts +0 -15
  865. package/dist/testing/report.d.ts.map +0 -1
  866. package/dist/testing/report.js +0 -22
  867. package/dist/testing/report.js.map +0 -1
  868. package/dist/web/createRestSurface.d.ts +0 -7
  869. package/dist/web/createRestSurface.d.ts.map +0 -1
  870. package/dist/web/createRestSurface.js +0 -41
  871. package/dist/web/createRestSurface.js.map +0 -1
  872. package/dist/web/index.d.ts +0 -2
  873. package/dist/web/index.d.ts.map +0 -1
  874. package/dist/web/index.js +0 -2
  875. package/dist/web/index.js.map +0 -1
  876. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  877. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  878. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  879. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  880. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  881. package/docs/adr/0010-locale-and-translates.md +0 -453
  882. package/docs/adr/0011-adapter-port-spec.md +0 -281
  883. package/docs/adr/0012-views-as-public-rest.md +0 -161
  884. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  885. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -939
  886. package/docs/adr/0016-site-semantic-layer.md +0 -70
  887. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  888. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  889. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
  890. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  891. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  892. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  893. package/docs/adr/0023-port-failure-contract.md +0 -69
  894. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  895. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  896. package/docs/adr/0026-progressive-generate.md +0 -36
  897. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  898. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  899. package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
  900. package/docs/adr/0030-store.md +0 -40
  901. package/docs/adr/0031-host-cloud-core-contract.md +0 -102
  902. package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -384
  903. package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
  904. package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
  905. package/docs/adr/0035-sql-dialects.md +0 -154
  906. package/docs/adr/0036-host-and-dialect.md +0 -65
  907. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -125
  908. package/docs/adr/0038-bun-native-host.md +0 -63
  909. package/docs/adr/0039-postgresql-is-native.md +0 -130
  910. package/docs/adr/README.md +0 -98
  911. package/docs/adr/adr-lite-1376-admin-extensions.md +0 -330
  912. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  913. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  914. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  915. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  916. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  917. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  918. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  919. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
  920. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  921. package/docs/examples/commerce-inventory.md +0 -498
  922. package/docs/examples/commerce.md +0 -254
  923. package/docs/examples/guarded-api.md +0 -238
  924. package/docs/examples/intake-hooks.md +0 -237
  925. package/docs/examples/intake.md +0 -127
  926. package/docs/examples/legal-documents.md +0 -218
  927. package/docs/examples/procurement.md +0 -226
  928. package/docs/examples/publication.md +0 -211
  929. package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
  930. package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
  931. package/docs/examples/reference-service/README.md +0 -33
  932. package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
  933. package/docs/examples/reference-service/manifests/orders.yaml +0 -120
  934. package/docs/examples/reference-service/mantle.config.json +0 -1
  935. package/docs/examples/reference-service/package.json +0 -27
  936. package/docs/examples/reference-service/smoke.mjs +0 -160
  937. package/docs/examples/reference-service/src/handlers.ts +0 -36
  938. package/docs/examples/reference-service/src/index.ts +0 -33
  939. package/docs/examples/reference-service/src/service.ts +0 -78
  940. package/docs/examples/reference-service/wrangler.jsonc +0 -26
  941. package/docs/examples/reservation.md +0 -142
  942. /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
@@ -1,146 +1,68 @@
1
1
  ---
2
- description: Create a Mantle 0.2.0 service on Cloudflare Workers from an empty directory, run it locally, then add sign-in, Admin and MCP.
2
+ description: Generate a small native D1 service and mount an application-owned Worker.
3
3
  ---
4
- # Quickstart: a service on Cloudflare Workers
4
+ # Quickstart: a service on Workers
5
5
 
6
- From an empty directory to a running service with a public View and a write.
7
- You need Node 22 or later and a package manager (pnpm is used below).
6
+ Create an application outside the SDK checkout. Install an exact released `@aotter/mantle` version, TypeScript, Wrangler and Cloudflare Worker types. Read that installed version's handbook; this page describes the native 0.2.0 contract.
8
7
 
9
- ## 1. Create the project
10
-
11
- ```sh
12
- mkdir notes && cd notes
13
- pnpm init
14
- npm pkg set type=module
15
- npm view @aotter/mantle dist-tags
16
- ```
17
-
18
- Pick a `0.2.x` version from the output. While 0.2.0 is in prerelease it is
19
- on the `alpha` tag, and `latest` still names 0.1.x. Install it with an exact
20
- version:
21
-
22
- ```sh
23
- pnpm add --save-exact @aotter/mantle@<0.2.x version>
24
- pnpm add -D wrangler @cloudflare/workers-types @types/node typescript
25
- ```
26
-
27
- ## 2. Write a manifest
28
-
29
- `manifests/notes.yaml`:
8
+ Save `manifests/tickets.yaml`:
30
9
 
31
10
  ```yaml
32
11
  apiVersion: cms.mantle.aotter.net/v2
33
12
  kind: Schema
34
- metadata: { name: notes }
13
+ metadata: { name: tickets }
35
14
  spec:
36
- title: Notes
15
+ title: Tickets
37
16
  lifecycle: operational
17
+ indexes: [[ticketState]]
38
18
  schema:
39
19
  type: object
40
- required: [text]
20
+ additionalProperties: false
21
+ required: [subject, ticketState]
41
22
  properties:
42
- text: { type: string, minLength: 1, maxLength: 500 }
23
+ subject: { type: string }
24
+ ticketState: { type: string, enum: [open, closed] }
43
25
  ---
44
26
  apiVersion: cms.mantle.aotter.net/v2
45
27
  kind: View
46
- metadata: { name: latest-notes }
28
+ metadata: { name: tickets-by-state }
47
29
  spec:
48
30
  surface: public
49
- sql: SELECT id, text, created_at FROM notes ORDER BY created_at DESC LIMIT 20
50
- ---
51
- apiVersion: cms.mantle.aotter.net/v2
52
- kind: Procedure
53
- metadata: { name: add-note }
54
- spec:
55
31
  input:
56
32
  type: object
57
- required: [text]
33
+ additionalProperties: false
34
+ required: [ticketState]
58
35
  properties:
59
- text: { type: string, minLength: 1, maxLength: 500 }
60
- output: { type: object }
61
- handler:
62
- sql: INSERT INTO notes (text) VALUES (input.text) RETURNING id
63
- ---
64
- apiVersion: cms.mantle.aotter.net/v2
65
- kind: Trigger
66
- metadata: { name: add-note-http }
67
- spec:
68
- source: { kind: http, method: POST, path: /api/notes }
69
- target: { procedure: add-note }
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
70
41
  ```
71
42
 
72
- ## 3. Generate
73
-
74
- Start with the smallest selection: no identity (every caller is anonymous)
75
- and only the REST surface.
76
-
77
43
  ```sh
78
- pnpm exec mantle generate --identity none --features web
44
+ pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml
45
+ pnpm exec mantle generate cloudflare-d1 generated manifests/tickets.yaml --check
79
46
  ```
80
47
 
81
- It writes `.mantle/generated/plan.json` and `mantle.ts`, `mantle.config.json`,
82
- and once, the preset: `src/service.ts`, `src/index.ts`, `src/handlers.ts`,
83
- `wrangler.jsonc`, `tsconfig.json` and `.gitignore`. Commit all of them,
84
- `.mantle/generated` included.
85
-
86
- ## 4. Run it
87
-
88
- ```sh
89
- pnpm exec wrangler dev --local
48
+ Write `src/worker.ts`:
49
+
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
+ };
90
62
  ```
91
63
 
92
- On the first request the runtime creates the tables on the local D1 database.
93
- Then:
94
-
95
- ```sh
96
- curl -sS -X POST http://127.0.0.1:8787/api/notes -H 'content-type: application/json' -d '{"text":"hello"}'
97
- curl -sS http://127.0.0.1:8787/api/views/latest-notes
98
- ```
99
-
100
- The write answers `{ "results": [[{ "id": "…" }]] }` and the View
101
- `{ "rows": [{ "id": "…", "text": "hello", "created_at": … }] }`.
102
-
103
- ## 5. Add sign-in, Admin and MCP
104
-
105
- The full selection is identity `mantle` (Better Auth sign-in, staff roles,
106
- OAuth for MCP) and the features `mcp`, `admin` and `web`. A rerun cannot
107
- switch identity, and the preset is never rewritten, so start a project that
108
- needs them with the full selection instead:
109
-
110
- ```sh
111
- pnpm exec mantle generate
112
- ```
113
-
114
- With no flags the selection is identity `mantle` and every feature. The first
115
- run names the packages it needs, with versioned install commands from the
116
- installed Core's `peerDependencies`, and writes nothing until they are installed
117
- at compatible versions. Copy those commands rather than installing registry
118
- latest; `@aotter/mantle-ui` must match Core's exact version:
119
-
120
- ```sh
121
- # Run each versioned pnpm add command printed above first.
122
- pnpm exec mantle generate
123
- cp .dev.vars.example .dev.vars # set ADMIN_EMAIL and a random BETTER_AUTH_SECRET
124
- pnpm exec wrangler dev --local
125
- ```
126
-
127
- Request a code for `ADMIN_EMAIL` (`POST /api/auth/email-otp/send-verification-otp`
128
- with `{ "email": …, "type": "sign-in" }`). The code is printed to the wrangler
129
- log, and that email becomes the owner. Codes in the log are for local
130
- development only; [Authentication](../cloudflare/authentication.md) covers
131
- production sign-in.
132
-
133
- Or open `/admin/sign-in` in a browser: the console is served at `/admin` from
134
- `@aotter/mantle-ui/admin`, which the generated `wrangler.jsonc` binds as the
135
- Worker's `ASSETS`. Admin's API answers at `/admin/api/*`, the public MCP
136
- surface at `/mcp`, and the staff MCP surface at `/mcp/staff`. The
137
- [reference service](../../examples/reference-service/README.md) is this
138
- selection with a smoke test that signs in and drives every surface.
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.
139
65
 
140
- ## Next
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.
141
67
 
142
- - [Project layout and CLI](./project-and-cli.md): what each generated file is,
143
- and `mantle generate --check`.
144
- - [Writes: Procedures, Triggers and hooks](../concepts/procedures-and-triggers.md)
145
- and [Reads: Views, REST and MCP](../concepts/views.md).
146
- - [Deploy and operate](../cloudflare/deploy-and-operate.md).
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.
@@ -10,139 +10,50 @@ metadata:
10
10
 
11
11
  # Mantle Develop
12
12
 
13
- The workflow for changing a Mantle 0.2 project. The installed package's docs
14
- govern behavior: `node_modules/@aotter/mantle/docs/`.
13
+ ## Workflow
15
14
 
16
- ## First read
15
+ Read the installed SDK README and version-matched handbook before editing.
17
16
 
18
- 1. `package.json` and the lockfile: the installed `@aotter/mantle` version.
19
- Every `@aotter/mantle*` package is at that same exact version. If
20
- `node_modules/` is missing, install with the lockfile first.
21
- 2. `mantle.config.json`: `identity` (`mantle`, `custom`, `none`),
22
- `features`, `host` (`cloudflare`, `bun`, `none`) and `dialect` (`sqlite`,
23
- `postgres`); absent host and dialect mean Cloudflare over D1. A
24
- `version: 1` config or `cms.mantle.aotter.net/v1` manifests mean 0.1.x:
25
- switch to `docs/skills/update/SKILL.md`.
26
- 3. `manifests/*.yaml`, `src/service.ts`, `src/handlers.ts`, `src/index.ts`
27
- (and `src/identity.ts` for `custom`), `wrangler.jsonc` (not on Bun).
28
- 4. Installed docs: `docs/handbook/reference/features.md` to map the request to
29
- manifest features, then the field references it links to.
30
- `docs/examples/` holds whole services in the v2 grammar.
17
+ Follow the installed [native generation and service workflow](../../handbook/cloudflare/service-entry.md)
18
+ with its [native contract](../../handbook/guides/native-execution.md) and [supported declarations](../../handbook/reference/features.md). Commit
19
+ all generated output, run the same generation command with `--check`, and keep
20
+ bundle `dist/` untracked. The app owns its verified Caller, handlers and native
21
+ resources; Better Auth’s admin plugin `adminRoles` defines the admin layer (default `["admin"]`); `ctx.admin` accepts open role names.
31
22
 
32
- ## The model
23
+ Use the native Store/query/surface entries and app-owned fetch from the service composition guide.
24
+ Keep optional modules out of unused entry imports and auth dynamically loaded.
25
+ Run actual public/member/admin HTTP, MCP and UI scenarios; verify stored state,
26
+ visibility, OCC and restart persistence, not just a 200 response.
33
27
 
34
- Four atoms, nothing else: **Schema** (rows), **View** (one SQL `SELECT`),
35
- **Procedure** (SQL write statements, or a `ref` handler), **Trigger** (HTTP,
36
- MCP, lifecycle, schedule). Do not invent kinds such as `Form` or `Workflow`.
28
+ For native Admin, read the [current guide](../../handbook/guides/native-admin.md).
29
+ Select `--admin` / `admin: true`; mount `entries(bindings.schemas, bindings.adapter)`
30
+ from the optional Admin package. Keep one Core SDK, the Admin product and shared
31
+ UI kit at matching versions. Generate → typecheck → implement listed handlers →
32
+ typecheck. Ref handlers retain caller-bound `ctx.store`; generic Admin reads
33
+ use shared generated View templates and writes use native Procedure fragments.
34
+ Check actual member/Admin OTP, private scope/TTL/translation visibility, paging,
35
+ statistics, safe/exact OCC and no automatic retry after unknown 503 outcomes.
37
36
 
38
- Choose in this order, stopping at the first that works:
39
37
 
40
- 1. A Schema feature: `checks`, `uniqueIndexes`, `scope`, `ttl`,
41
- `searchableFields`, `lifecycle`.
42
- 2. SQL: a View for reads; a Procedure's `sql` for writes. Several statements in
43
- one `sql` apply together or not at all.
44
- 3. `requires` for who may call; a guard for a live check before one action.
45
- 4. A `ref` handler, only for what SQL cannot do: calling another service,
46
- reading before writing, setting `status`, branching on a read.
38
+ Place admin MCP Procedures in Admin deliberately: `spec.uiSchema.collectionAction:
39
+ <schema-name>` adds a collection-header action; `spec.target: { schema, id,
40
+ version? }` selects row actions and binds the row id / reviewed OCC version to
41
+ the named inputs. Other admin operations appear under Operations in the sidebar.
42
+ Keep state conditions in the SQL WHERE: simple AND equality/IN literals become
43
+ row-menu hints, while the Procedure remains the authority. Required-ref child
44
+ collections fold under their parent's sidebar group; use Schema
45
+ `uiSchema.nav.standalone: true` for a top-level entry.
47
46
 
48
- ## SQL rules that trip agents
47
+ ## Database changes
49
48
 
50
- - SQL over declared Schemas only, in the project's own dialect: PostgreSQL's
51
- syntax on PostgreSQL, a SQLite subset on D1. Each dialect is its own target:
52
- a manifest need not compile for the other, and a SQLite spelling such as
53
- `json_each` or `->> '$.a'` is refused on PostgreSQL with the PostgreSQL one
54
- (rewrite table: `docs/handbook/concepts/runtime-and-adapters.md`). References: `input.<name>`,
55
- `auth.uid()`, `auth.role()`, `now()`; search is `mantle.search(t, q)`.
56
- - Native columns are snake_case in SQL (`created_at`, `author_id`) and
57
- camelCase in `ctx.store` JSON and in `indexes`.
58
- - A write never names the scope field, `id` (on update), `version`, `status`,
59
- `created_at`, `updated_at` or `author_id`. Set an owner with `auth.uid()` and
60
- a time with `now()`, never from input.
61
- - Optimistic lock: `WHERE id = input.id AND version = input.expectedVersion`.
62
- Writing no row is `CONFLICT`. Keep omitted optional fields with
63
- `COALESCE(input.x, x)`.
64
- - `LIMIT` needs `ORDER BY`. No `OFFSET`, `RIGHT JOIN` or `CURRENT_TIMESTAMP`
65
- on any dialect. On SQLite (D1) also no `WITH`, `UNION`, `ILIKE` or jsonb
66
- operators, and `CAST(x AS int)` only on an integer literal: use `round(x)`.
67
- PostgreSQL accepts these (`docs/handbook/reference/view.md`). On PostgreSQL
68
- unnest with `jsonb_array_elements_text(t.col) WITH ORDINALITY AS j(value, n)`,
69
- not `json_each`; unstated `NULLS` follow PostgreSQL (last ascending).
70
- - Unquoted aliases fold to lower case: `AS "orderCount"` keeps the case.
71
- - The runtime injects scope and TTL into every Schema reference, and
72
- published-only into public Views. Never repeat them.
73
- - `scope` hides rows from staff too. When staff must see every row, store
74
- `auth.uid()` in a field and filter on it instead.
75
- - That filter protects the View, not generic Admin Schema reads. Root
76
- `schema.readOnly: true` blocks generic writes only. If a contributor must
77
- not read other users' rows, restrict the application-owned Admin surface
78
- inside its existing `withCaller` boundary; see
79
- `docs/handbook/guides/admin-ui.md` (Roles). Keep business transitions in SQL.
49
+ The runtime never creates, alters or checks tables. Boot and requests run no DDL, introspection or schema checks.
80
50
 
81
- ## Handlers
51
+ For the first install, apply generated `schema.sql`, including selected auth/site DDL, to an empty database. Apply selected seed SQL explicitly.
82
52
 
83
- - `src/handlers.ts` exports `handlers: MantleHandlers` (`MantleHandlers<Env>`
84
- types `ctx.env`); the generated type
85
- lists exactly the plan's refs. Read and write only through `ctx.store`.
86
- - After hooks: loop over `ctx.cause.rows`; never read only `rows[0]`.
87
- - Before hooks and guards are read-only and reject by throwing
88
- `DiagnosticError` (from `@aotter/mantle`); any other throw is a 500.
89
- - `ctx.caller.kind === "user"` means signed in; a schedule runs as `system`.
90
- Never test `!== "anonymous"`.
91
- - `ctx.invoke(name, input)` calls another Procedure with the same caller.
53
+ For every later schema change, the application's coding agent diffs the regenerated `schema.sql`, writes a migration with the host's native tool (`wrangler d1 migrations` or the app's PostgreSQL migration tool), rehearses it on a copy, and applies it before deploying the new code. Cloud executes migrations at deploy time.
92
54
 
93
- ## The service
55
+ Destructive changes and type changes need explicit data migration. Mantle drops nothing. Initial `schema.sql` is not an upgrade script.
94
56
 
95
- `src/service.ts`, `src/index.ts` and `wrangler.jsonc` belong to the
96
- application after the first `mantle generate`; it never rewrites them. Add
97
- routes, bindings and env there (`docs/handbook/cloudflare/service-entry.md`).
98
- Reach data from service code through `runtime.store.as(caller)` or
99
- `runtime.invokeProcedure`; `runtime.store` alone is unscoped. A signed webhook
100
- is a route in the service's `fetch` that verifies the raw body, then invokes
101
- a Procedure as `systemCaller(...)`.
57
+ ## Data paths
102
58
 
103
- ## MCP
104
-
105
- With feature `mcp`, the preset mounts `/mcp` (public tools) and, with an
106
- identity, `/mcp/staff` (staff tools for a staff role; with identity `mantle`,
107
- the same OAuth token as `/mcp`). `/mcp/staff` serves
108
- Mantle's MCP App: a host that renders MCP Apps shows each staff View's rows and
109
- the operations on one row. A member-facing App on `/mcp` is the application's
110
- to build when the product asks for one: follow [the recipe](mcp-app.md).
111
-
112
- ## Loop
113
-
114
- ```bash
115
- pnpm exec mantle generate
116
- pnpm exec mantle generate --check
117
- pnpm exec tsc --noEmit
118
- pnpm exec wrangler dev --local # on Bun: bun src/index.ts
119
- ```
120
-
121
- Then exercise what changed over HTTP: the REST View or Trigger, `/mcp`
122
- `tools/list` and a call, and with identity `mantle` a console email-OTP
123
- sign-in and the Admin route (`docs/handbook/cloudflare/authentication.md`).
124
- Check the stored rows, not only a 200. Before deploying a Schema change on
125
- SQLite, run `mantle generate --check --database <file>` to see the storage SQL.
126
- For a workflow, verify valid and invalid state transitions, ownership on every
127
- mounted surface (including generic Admin reads and writes), concurrent writes
128
- with one expected version, and persisted data and sessions after a restart.
129
- Exercise the actual UI when the product includes one; serving HTML alone does
130
- not verify its forms or operations.
131
-
132
- ## Rules
133
-
134
- - Never edit `.mantle/generated/`. Commit it.
135
- - Never write a Schema's table with `env.DB`, KV or SQL from outside Store;
136
- never touch `_mantle_*` tables. The application's own tables are its own.
137
- - A blocked storage change (`STORAGE_CHANGE_BLOCKED`) is the author's to make
138
- by hand, then rerun; Mantle never drops a column or index.
139
- - Do not commit secrets (`.dev.vars`, provider keys).
140
- - Every 0.1.x term is gone: builtin handlers, `from`/`filter`, `params`,
141
- `$ctx`, `x-mantle-bind`, `mantle validate`, `mantle skills`,
142
- `createMantleWorker`.
143
-
144
- ## When you are done
145
-
146
- Report the manifests and code you changed, the `generate --check` and
147
- typecheck results, the HTTP calls you made and what they returned, and any
148
- access you made stricter or could not express.
59
+ Writes use Store `insert` / `update` / `delete`, `batch`, `transaction`, or declared Procedures. Never use raw SQL writes: they bypass scope, TTL, publishing and system-column rules. For reads beyond an id lookup or simple AND filter (joins, aggregates, OR, reuse), declare an internal View so the SQL is reviewable and typed. Store `findById`, `find` and `first` remain suitable for handler lookups and embedding in an existing app. Ref handlers receive `ctx.store` bound to the same Caller and transaction.
@@ -1,79 +1,39 @@
1
1
  # Recipe: an MCP App for members
2
2
 
3
- The preset serves Mantle's App on `/mcp/staff` only. A member-facing App, on
4
- `/mcp`, is the application's: the SDK attaches none, because what a member
5
- should see in a chat (one order, a booking form, a status card) is a product
6
- decision. Build it case by case from these pieces.
7
-
8
- ## Pieces
9
-
10
- | Piece | From | What it gives |
11
- |---|---|---|
12
- | `apps: { resources: [...] }` | `createMcpSurface` (`@aotter/mantle/mcp`) | a `ui://` resource beside the tools; `renders` names the tools whose results it shows, `appOnly` the View tools only the App may call |
13
- | `appCatalog(plan, "public")`, `withCatalog(html, catalog)` | `@aotter/mantle/mcp` | each public View tool's columns as the fields they read, and the row operations, embedded in your HTML as `#mantle-catalog` |
14
- | `planApp(plan, { surface: "public", html: mantleAppHtml })` | `@aotter/mantle/mcp`, `@aotter/mantle-ui/mcp-app` | the staff App as is, for every public View: the quickest start when a list is what you want |
15
- | `App` | `@modelcontextprotocol/ext-apps` | the host bridge: `ontoolresult`, `ontoolinput`, `callServerTool`, the host's locale and theme |
16
- | `readCatalog`, `toolOf`, `outputOf`, `rowsOf`, `invokeTool`, `actionsFor` | `@aotter/mantle-ui` | the catalog, a result's tool, its output and rows, and a tool call as the controller reads it, so the App never parses the wire itself |
17
- | `renderDataValue`, `propertyLabel`, `optionLabel`, `OperationPanel` | `@aotter/mantle-ui` | a value as Admin shows it (money, dates, option titles, in the host's locale), and Admin's review-and-submit panel |
18
- | `createInteractionController` | `@aotter/mantle-ui/controller` | one operation on one row: review, submit once, a refusal or `CONFLICT` kept, never retried |
19
- | `SchemaFields` and the primitives | `@aotter/mantle-ui/kit`, styled by `@aotter/mantle-ui/kit.css` | Admin's form controls |
20
-
21
- The App's own build installs what it imports: `@modelcontextprotocol/ext-apps`
22
- at the exact version in the installed Core's `peerDependencies`, React and the kit's peers
23
- (`@aotter/mantle-ui`'s README lists them). `docs/handbook/concepts/mcp-and-agents.md`
24
- (MCP Apps) describes the catalog and the staff App these share.
25
-
26
- ## Steps
27
-
28
- 1. Decide what the App shows and which tool's result opens it. It renders a
29
- tool the surface already serves: a public View, or a Procedure with an
30
- `mcp` Trigger on `public`. Add that Trigger or View first; an App never
31
- reaches data a tool does not.
32
- 2. Build one self-contained HTML file, for example `app/dist/member.html`:
33
- Vite with `vite-plugin-singlefile` (and React, if you use the components).
34
- A host loads the App in a sandbox that fetches nothing else unless the
35
- resource's `csp` allows it. The build runs before `wrangler dev` and
36
- deploy: add it to the project's scripts.
37
- 3. Serve it. Wrangler imports `.html` as text; declare it for TypeScript in
38
- `src/env.d.ts` (`declare module "*.html" { const html: string; export default html; }`),
39
- then in `src/service.ts` (identity `mantle`, whose preset defines
40
- `resourceMetadata`; with `custom`, pass the surface to your own `guard`):
41
-
42
- ```ts
43
- import memberHtml from "../app/dist/member.html";
44
- import { appCatalog, withCatalog } from "@aotter/mantle/mcp";
45
-
46
- const html = withCatalog(memberHtml, appCatalog(runtime.plan, "public"));
47
- const mcp = guard(createMcpSurface(runtime, { basePath: "/mcp", surface: "public", resourceMetadata,
48
- apps: { resources: [{ uri: "ui://shop/my-orders", name: "my-orders", html, renders: ["my_orders"] }] } }), { resourceMetadata });
49
- ```
50
-
51
- 4. In the App, `readCatalog()` once; in `ontoolresult`, `toolOf(result)` names
52
- the tool and `outputOf(result)` (or `rowsOf` for a View) is its data. A
53
- success is `structuredContent` when the output is an object and the JSON
54
- text otherwise; a failure of a tool with an output schema is the text
55
- alone, which `outputOf` reads either way. Call tools through
56
- `invokeTool(app.callServerTool…)`: a refusal is `{ ok: false, diagnostics }`
57
- (`AUTH_DENIED`, `CONFLICT`, ...), and a thrown call (a 401 or 403 from a
58
- missing scope or sign-in, a lost connection) is an unknown outcome to
59
- re-read, never to retry blindly.
60
-
61
- ## Rules
62
-
63
- - The HTML is a static asset: no caller data, no secrets, the same for every
64
- member. Caller data arrives only in tool results.
65
- - Every read and write is a tool call under the member's own token; `requires`
66
- and `scope` apply exactly as they do to the model's calls.
67
- - `appOnly` hides a read from the model; only a View can be app-only, never a
68
- write.
69
- - A public View over a `publishing` Schema shows published rows only; over a
70
- `scope`d Schema it shows the caller's own rows, without a `WHERE` of yours.
71
-
72
- ## Verify
73
-
74
- Add the App's build to the develop loop, then: `tools/list` from a client that
75
- declares the MCP Apps extension shows the rendered tool with
76
- `_meta.ui.resourceUri`; `resources/read` of that URI returns your HTML with
77
- `#mantle-catalog`; a call to the tool returns its result with
78
- `_meta["net.aotter.mantle/tool"]`. Then open it in a host that renders MCP
79
- Apps, signed in as a member.
3
+ ## Native applications
4
+
5
+ Read the installed MCP App contract. The SDK's generic hook attaches only the resources the app selects;
6
+ only selected modules enter the service.
7
+
8
+ ```ts
9
+ import type { McpApps } from '@aotter/mantle/mcp';
10
+ import { mcp } from '../generated/mcp.js';
11
+ const memberApp: McpApps = { resources: [{
12
+ uri: 'ui://shop/my-orders',
13
+ name: 'my-orders-app',
14
+ renders: ['my_orders'], // the tool for the declared public View my-orders
15
+ html: async () => (await import('./member-app.js')).memberHtml,
16
+ }] };
17
+ const tools = mcp({ db, caller, handlers, apps: { public: memberApp } });
18
+ ```
19
+
20
+ Each endpoint accepts one contributor or an array. The separate
21
+ `@aotter/mantle-admin` package contributes its admin App through this same
22
+ `apps.admin` hook; it owns `ui://mantle-admin/…`. App resources use their own
23
+ `ui://<app>/…` namespace. Duplicate resource URI/name, conflicting `renders`,
24
+ or `renders`/`appOnly` naming an unavailable endpoint tool (or a Procedure for
25
+ `appOnly`) fail when `mcp(...)` is built; with a request-bound tool table, the
26
+ tool names are checked on the first matching request. Only clients that
27
+ declare no MCP Apps support see no UI resources; a request that advertises no
28
+ capabilities at all is treated as supported.
29
+
30
+ Use `renders` for a declared tool; `appOnly` optionally hides it from non-UI
31
+ clients. Import HTML lazily; it carries no secrets or caller data. Tool results
32
+ use the caller's SQL policy, and an App cannot authorize a hidden admin tool.
33
+ Generic interaction components and controllers remain in `@aotter/mantle-ui`;
34
+ Admin-specific controllers/catalogues belong to `@aotter/mantle-admin`.
35
+
36
+ Verify tools/list metadata, resources/read, actual tool calls and a host-rendered
37
+ member App. Test anonymous/member isolation and resource conflicts. Never retry
38
+ unknown writes blindly; retain OCC and re-read state after an uncertain outcome.
39
+ Commit generated output and run generation with `--check` before deployment.
@@ -10,87 +10,45 @@ metadata:
10
10
 
11
11
  # Integrate Mantle into an existing application
12
12
 
13
- Mantle is added to a running service; it does not replace it. The service
14
- keeps its entry, users, auth, tables, routes and frontend. Mantle adds its own
15
- `_mantle_*` tables, the Schemas it declares, and the surfaces the service
16
- chooses to mount. Read the installed package's
17
- `docs/handbook/start/overview.md` and
18
- `docs/handbook/concepts/authorization.md` first.
19
-
20
- ## Inspect and decide
21
-
22
- Map the application before installing anything: its entry and router, frontend,
23
- users and sign-in, database and data volume, deployment, background jobs and
24
- tests. Ask which behavior the owner wants Mantle to own. Then choose:
25
-
26
- 1. **Embed.** Keep the application's entry. Compose Mantle into its existing
27
- `fetch` (`createMantle(service, { plan, storage })`, the surfaces you want,
28
- behind a `CallerResolver` over the application's own sessions). Best when
29
- the application already runs on Workers with D1.
30
- 2. **Move one capability at a time.** Give one bounded set of data (a form, a
31
- catalog) a Schema, then its Views and Procedures; the rest stays. At every
32
- step, each table has exactly one writer.
33
- 3. **Rebuild and migrate.** Generate a new Mantle service in a separate
34
- directory, port the frontend and business rules, and import the data. Best
35
- when adapting the old structure costs more than rebuilding.
36
-
37
- Explain the choice and its tradeoffs to the owner before changing code.
38
-
39
- ## Identity
40
-
41
- The application keeps its users. Pick `identity`:
42
-
43
- - `custom`: write `src/identity.ts` as a `CallerResolver` over the existing
44
- sessions or tokens. `subject` is the application's stable user id,
45
- namespaced when there are several issuers, never an email. Map existing
46
- admin roles to `owner` / `editor` / `contributor`, or leave `role` null.
47
- - `mantle`: only when the application has no sign-in and wants Better Auth's.
48
- - `none`: a public service with no signed-in callers.
49
-
50
- Switching identity later is refused; choose deliberately.
51
-
52
- ## Embedding into an existing entry
53
-
54
- `mantle generate` writes the preset only where `src/service.ts` does not
55
- exist; `--host none` writes no preset at all, only the plan and its types.
56
- For an application with its own entry, generate in a scratch
57
- directory with the same manifests and config, then copy the composition you
58
- need from the generated `src/service.ts` into the application's own entry:
59
-
60
- - the `createMantle(service, { plan, storage: (env) => d1Storage(env.DB), schedules: true })` call;
61
- - `withCaller(resolver, createRestSurface(runtime, { basePath: "/api" }))`
62
- and any other surface, mounted on paths the application does not use;
63
- - the `scheduled` mapping from `src/index.ts`, if the plan has schedules.
64
-
65
- Put that composition in the application's `src/service.ts` before the first
66
- `mantle generate` inside the application: while `src/service.ts` is missing,
67
- generate writes every missing preset file (`src/service.ts`, `src/index.ts`,
68
- `src/handlers.ts`, `src/identity.ts` for `custom`, `tsconfig.json`,
69
- `.gitignore`, `.dev.vars.example` for `mantle`, and `wrangler.jsonc` unless a
70
- `wrangler.*` exists; on Bun `.env.example` and no `wrangler.jsonc`) beside the
71
- application's own.
72
- Commit `.mantle/generated/` and run `mantle generate --check` in CI.
73
-
74
- ## Moving data into a Schema
75
-
76
- - Mantle never reads or writes a table it did not create. A table with a
77
- Schema's name that Mantle does not own stops boot
78
- (`STORAGE_TABLE_NOT_OWNED`); give the Schema a new name.
79
- - Import through `runtime.store` in trusted code. A scoped row goes through
80
- `runtime.store.as(<its owner's caller>)`, so the owner field is right.
81
- `status`, timestamps and `author_id` cannot be imported: publish with a
82
- second update that sets `status`.
83
- - Rehearse on a copy, compare row counts, and keep the old table until the
84
- owner confirms. Never touch live data before the cutover is agreed.
85
-
86
- ## Verify
87
-
88
- Run the application's own build and tests, then `mantle generate --check`,
89
- the typecheck, and real requests against the routes Mantle now serves, as the
90
- right callers (owner, member, anonymous). `--check` proves the generated files;
91
- it does not prove the integration.
92
-
93
- ## When you are done
94
-
95
- Report which capabilities Mantle now owns, the identity mapping, what moved and
96
- how it was verified, and what remains for cutover or deployment.
13
+ ## Workflow
14
+
15
+ Read the installed SDK README and version-matched handbook before editing.
16
+
17
+ Follow the installed [native generation and service workflow](../../handbook/cloudflare/service-entry.md)
18
+ with its [native contract](../../handbook/guides/native-execution.md) and [supported declarations](../../handbook/reference/features.md). Commit
19
+ all generated output, run the same generation command with `--check`, and keep
20
+ bundle `dist/` untracked. The app owns its verified Caller, handlers and native
21
+ resources; Better Auth’s admin plugin `adminRoles` defines the admin layer (default `["admin"]`); `ctx.admin` accepts open role names.
22
+
23
+ Keep the application router, database/pool, identity and frontend. Replace
24
+ Core consumers explicitly and compose only selected generated entries. Resolve
25
+ one Caller per request with the shared cookie-session origin check. Rehearse
26
+ data-preserving schema/auth/role migrations on a copy and retain rollback artifacts.
27
+ Initial schema.sql is for an empty database, not an in-place upgrade. Requests run
28
+ no DDL or storage checks; the only request-time write outside app operations is
29
+ the configured OAuth resource row (see [OAuth](../../handbook/guides/oauth.md)).
30
+ Verify cutover with actual app tests.
31
+
32
+ Preserve the app router, verified identity and native resources. For selected
33
+ Admin use the [native guide](../../handbook/guides/native-admin.md): three matching
34
+ packages, generated checks and `entries(bindings.schemas, bindings.adapter)`.
35
+ Do not import old `/spec`, `/core` or runtime surface APIs. Review data/role
36
+ migrations explicitly; full cross-target int64 parity and automated transfer
37
+ are not this release's upgrade contract.
38
+
39
+ ## Partial adoption in TypeScript/Node
40
+
41
+ Keep the app's router, pool/handle, identity and frontend. Declare only the Schemas and operations being adopted; import selected `views/<encoded-name>.ts` or `procedures/<encoded-name>.ts`, then call `(appHandle, verifiedCaller, validatedInput)`. Bun.SQL and postgres.js fit directly; [node-postgres can adapt](../../handbook/guides/postgres-adapters.md). No Admin/auth/surface module is required for direct queries.
42
+
43
+ Existing tables need explicit migration into the declared storage shape, including system columns and constraints. Initial schema.sql must not be applied over an occupied database. Rehearse on a copy and test scope, TTL, publication, OCC and persisted state with the app's own identity.
44
+
45
+ Writes use Store or declared Procedures; never raw SQL writes to adopted collections. Use internal Views for joins, aggregates, OR and reusable reads. Store findById/find/first remain useful for simple AND lookups in existing handlers.
46
+
47
+ Direct declared Schema-column outputs in Views and SQL Procedure `RETURNING`
48
+ keep their authored field names; explicit aliases keep SQL casing rules. Store
49
+ rows and nested SQL relations use storage names. Boundary validators support a
50
+ permissive `format: email` check (one `@`, non-empty parts, no whitespace). For
51
+ LEFT JOIN paging, join on the joined Schema's id or single-field unique key and
52
+ keep the base indexed, non-null order/id tuple. Generation always emits `Handlers`
53
+ (empty without ref Procedures); pass `handlers` at `adminBindings()`, generated REST/MCP options and
54
+ `webmcpRoutes(catalogue, tools, handlers)`, as the app shell does.