@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,170 +1,11 @@
1
- ---
2
- description: What Admin serves in 0.2.0, how manifests and uiSchema become Admin's collections, reports and operations, and how to verify a change.
3
- ---
4
1
  # Customize Admin from manifests
5
2
 
6
- `createAdminSurface` serves Admin's API at `/admin/api/*` behind a staff gate.
7
- Every route reads and writes through `runtime.store.as(caller)` and
8
- `invokeProcedure`, so Admin sees exactly what the signed-in staff member may
9
- see. What Admin shows is derived from the compiled plan: labels, forms, list
10
- columns, reports and operations are manifest edits.
3
+ Select `--admin` and mount [native Admin](native-admin.md) from `@aotter/mantle-admin`. The app serves its assets and owns authentication. UI and SDK are separate packages.
11
4
 
12
- With feature `admin`, the generated preset also serves the console, the
13
- prebuilt SPA in `@aotter/mantle-ui/admin`, at `/admin`: `wrangler.jsonc` binds
14
- `node_modules/@aotter/mantle-ui/dist/admin` as the Worker's `ASSETS`
15
- (`run_worker_first`), and `src/service.ts` passes `createAdminSurface` an
16
- `assets` function that reads from it. `mantle generate` warns when `admin` is
17
- selected and `wrangler.jsonc` binds no `ASSETS`. The Bun preset reads the
18
- same files with `bunAdminAssets` from `@aotter/mantle/bun`. Sign in at
19
- `/admin/sign-in`.
5
+ Schema `uiSchema` selects fields, widgets, list columns, enum tabs and child navigation. The compiler derives sortable fields from indexed required/non-null fields; it emits selected system/statistics indexes in initial DDL. Apply those indexes through an explicit migration on existing databases.
20
6
 
21
- ## Manifest to Admin
7
+ Admin Views provide custom read lists; their SELECT outputs, column lineage and `uiSchema.list` define display/search/filter metadata. Procedures and MCP admin Triggers define operations with declared authorization, input checks and optional row targets. A hidden button never authorizes an operation.
22
8
 
23
- | You want | Author this | Effect and limits |
24
- |---|---|---|
25
- | Rename a collection or explain a field | Schema `title` / `description`, property `title` / `description` (a string or a locale map) | Labels and help. Stored names do not change |
26
- | Required fields and option lists | JSON Schema `required`, `enum`, `type` | Data contracts, checked on every write, not styling |
27
- | Option labels | a string property's `oneOf: [{ const: open, title: { en: Open, zh-TW: 處理中 } }, …]` instead of `enum` | Selects, filter tabs and list cells show the `title` |
28
- | A multiline string | Schema or Procedure `uiSchema.fields.<name>.widget: textarea` | `textarea` is the only built-in explicit widget |
29
- | Your own control, list cell or record panel | `uiSchema.fields.<name>.widget: <extension>/<contribution>`, `uiSchema.list.cells`, `uiSchema.panels` | Contributions of the project's Admin extensions; see [Extend Admin](admin-extensions.md) |
30
- | Markdown or HTML | property `x-mcp-hint: markdown` or `html` | A rich editor |
31
- | A timestamp, a date or money | `format: date-time`, `format: date`; `x-mcp-hint: money-minor` on an integer | Date controls; money in minor units, with a sibling `currency` when present |
32
- | Columns of an operational list | Schema `uiSchema.list.primaryField`, `.columns` | `primaryField` is a scalar data field; `columns` may name native columns (`createdAt`, `updatedAt`) |
33
- | Business-state tabs | Schema `uiSchema.list.filterField` | Operational Schemas only; a string enum that leads an index |
34
- | Search | Schema `searchableFields` | Full-text search over those string fields, plus `id` |
35
- | Related records | a required property with `x-mantle-ref` | Children fold under their parent |
36
- | A folded child in navigation too | Schema `uiSchema.nav.standalone: true`, optional `parentField` | Its own list with a parent filter |
37
- | A read-only report with CSV | a View with `surface: staff`, `title`, `uiSchema.list` | `columns`, `searchFields` and `filterFields` name the View's outputs; the search box and filters become `LIKE` and `=` on them. `GET /admin/api/views/<name>/export` returns every matching row |
38
- | An operation | a Procedure bound by a Trigger with `source: { kind: mcp, surface: staff }` | Listed at `/admin/api/operations` for staff its `requires` admits, and run with `POST /admin/api/operations/<name>` |
39
- | A row operation | that Procedure's `target` (declared or inferred from `WHERE id = … AND version = …`) | Bound to the row's `id`, and its version when the target names one |
40
- | A list-level operation | Procedure `uiSchema.collectionAction: <schema>` | Shown on that collection |
41
- | No generic edits | Schema root `schema.readOnly: true` | Admin's entry routes refuse writes (`CONFLICT`); declared Procedures still run |
9
+ Generic publishing edits apply to drafts; publishing transitions retain their atomic guards and OCC. Read-only collections refuse generic edits while declared Procedures can still run. Ref operations receive the caller/transaction-bound Store.
42
10
 
43
- Schema list presentation (`primaryField`, `columns`, `filterField`) is for
44
- `lifecycle: operational`. Publishing Schemas keep the draft, publish and
45
- archive workflow (`POST /admin/api/entries/{id}/publish` and `/unpublish`).
46
-
47
- ## Example: an operational inbox
48
-
49
- ```yaml
50
- apiVersion: cms.mantle.aotter.net/v2
51
- kind: Schema
52
- metadata: { name: support-tickets }
53
- spec:
54
- title: { en: Support tickets, zh-TW: 客服工單 }
55
- lifecycle: operational
56
- indexes: [[ticketState]]
57
- searchableFields: [subject, details]
58
- uiSchema:
59
- fields:
60
- details: { widget: textarea }
61
- list:
62
- primaryField: subject
63
- columns: [ticketState, createdAt]
64
- filterField: ticketState
65
- schema:
66
- type: object
67
- additionalProperties: false
68
- required: [subject, ticketState]
69
- properties:
70
- subject: { type: string, title: Subject }
71
- details: { type: string, description: Include the steps to reproduce. }
72
- ticketState: { type: string, enum: [open, waiting, closed] }
73
- ---
74
- apiVersion: cms.mantle.aotter.net/v2
75
- kind: View
76
- metadata: { name: support-report }
77
- spec:
78
- title: Support report
79
- surface: staff
80
- requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
81
- uiSchema:
82
- list:
83
- columns: [subject, ticketState, created_at]
84
- searchFields: [subject]
85
- filterFields: [ticketState]
86
- sql: SELECT id, subject, ticketState, created_at FROM "support-tickets" ORDER BY created_at DESC
87
- ```
88
-
89
- Schema `uiSchema.list` and View `uiSchema.list` are different contracts; do
90
- not copy keys between them. The report's search box matches `subject`
91
- (`LIKE`), its filter is `ticketState` (`=`), and a declared `input` would add
92
- a form above them; all of them keep cursor paging.
93
-
94
- ## Developer console
95
-
96
- The Developer console's Procedure overview projects the sealed SQL AST into
97
- a static execution diagram: authorization, validated input, guard, applicable
98
- lifecycle hooks, ordered atomic statements, commit or rollback, and output
99
- validation. Statement cards show read/write dependencies, row versus set
100
- semantics, RETURNING and ordered CASE assignments. CASE chooses a field value;
101
- WHERE filters rows. A set operation can affect zero rows and still continue.
102
- Output validation and after-hook failures do not roll back an existing commit.
103
- Unsupported expression shapes remain explicitly opaque beside authored SQL;
104
- code handlers' effects and actual run history are not inferred.
105
-
106
- The inline business flow uses Schema/property titles and titled enum options
107
- from the developer snapshot; generic verbs and operators are UI translations.
108
- It expands direct `UPDATE SET field = CASE … END` assignments only. CASE
109
- inside arithmetic, casts, functions, SELECT or INSERT remains in the SQL
110
- detail tree, rather than pretending its intermediate result is the assigned
111
- value. SQL identifiers match manifest names case-insensitively. The existing
112
- `money-minor` display convention uses hundredths and a single-valued sibling
113
- `currency` enum; if numeric conversion or currency formatting would round a
114
- threshold, the flow shows its exact SQL literal marked as a raw SQL value.
115
- These display hints do not establish or validate business units.
116
-
117
- ## Roles
118
-
119
- Admin's gate admits any staff role. Inside it, each route names the least role
120
- it needs: `contributor` reads and edits drafts, `editor` publishes, deletes
121
- and manages media, `owner` manages staff, site settings and the developer
122
- console. Operations and staff Views are further limited by their own
123
- `requires`.
124
-
125
- Those atom predicates do not restrict generic Schema entry routes. A root
126
- Schema `readOnly: true` blocks generic writes, not reads. In a service where
127
- only owner/editor reviewers may read an unscoped table, restrict the Admin
128
- surface in the application-owned `src/service.ts`:
129
-
130
- ```ts
131
- // Replace the preset's Admin composition, keeping its existing options.
132
- const adminSurface = createAdminSurface(runtime, { /* existing Admin options */ });
133
- const admin = withCaller(resolver, async (request, caller) => {
134
- if (new URL(request.url).pathname.startsWith("/admin/api/") &&
135
- caller.kind === "user" && caller.role === "contributor") {
136
- return Response.json({ error: {
137
- code: "AUTH_DENIED", message: "Admin access requires an owner or editor role.",
138
- } }, { status: 403 });
139
- }
140
- return adminSurface(request, caller);
141
- });
142
- ```
143
-
144
- The preset already imports `withCaller` from `@aotter/mantle`. Reuse its
145
- resolver so credential validation and the session origin guard run once;
146
- Admin retains its own gates for members and anonymous callers. Contributors
147
- can use an application-owned page over an owner-filtered public View. Keep
148
- sign-in, OAuth consent and UI assets reachable; restricting the whole `/admin`
149
- prefix would also block member MCP consent at `/admin/oauth/consent`. This is
150
- host surface composition, not a Procedure `ref` handler or a new Manifest
151
- permission key. Exercise generic entry reads, reports and operations with
152
- each role, including after revoking a role in an existing session.
153
-
154
- ## Verify a change
155
-
156
- 1. Run `mantle generate`, then `mantle generate --check`.
157
- 2. Restart `wrangler dev` (or the Bun process) so the runtime loads the new plan.
158
- 3. Open `/admin` with a staff session and check the affected list, form,
159
- report or operation. `GET /admin/api/bootstrap` carries the collections,
160
- Views, operations and site the console renders.
161
-
162
- `uiSchema` keys are closed. Schema takes `fields`, `list` and `nav`;
163
- Procedure takes `collectionAction` and `fields`; a staff View takes `list`. No
164
- layout, CSS, component or permission keys exist; build those in your own UI
165
- over Admin's API or your own surfaces.
166
-
167
- ## Source
168
-
169
- - [Schema](../reference/schema.md#uischema), [View](../reference/view.md) and [Procedure](../reference/procedure.md) references
170
- - [HTTP, MCP, CLI and packages](../reference/surface.md): every Admin route
11
+ Use [extensions](admin-extensions.md) for app-owned pages, actions, panels or field renderers. Keep exact conflict/uncertain-outcome handling in the shared UI controller.
@@ -10,8 +10,8 @@ carries.
10
10
 
11
11
  ## 1. Install the `mantle` skill
12
12
 
13
- The Mantle plugin carries one skill, `mantle`, its helper script, and the
14
- Mantle Cloud MCP connection (`https://cloud.mantle.tools/mcp`).
13
+ The Mantle plugin carries one OSS authoring skill, `mantle`, and local
14
+ acceptance references. It does not configure a hosted-service connection.
15
15
 
16
16
  ```bash
17
17
  # Claude Code: two separate prompts
@@ -30,8 +30,7 @@ Without a plugin host, install the skill alone:
30
30
  npx skills add aotter/mantle
31
31
  ```
32
32
 
33
- A skill-only install has no Cloud MCP connection; add one by hand if you need
34
- it. Either way, read the path the installer prints (for project-local Codex,
33
+ Read the path the installer prints (for project-local Codex,
35
34
  `.agents/skills/mantle/SKILL.md`). The skill installs no SDK, creates no
36
35
  project and copies no handbook.
37
36
 
@@ -65,18 +64,6 @@ An agent reads these files from `node_modules` when the task calls for them.
65
64
 
66
65
  ## 3. Verify the application
67
66
 
68
- Installing instructions proves only that they were copied. Prove the service:
67
+ Run the app's exact generation command with `--check`, typecheck, implement every printed handler and typecheck again. Test actual routes and persisted state. With selected Admin, mount `entries(bindings.schemas, bindings.adapter)` and serve assets separately. Verify member/admin OTP, row visibility and OCC. Installing a skill proves none of these flows.
69
68
 
70
- 1. `mantle generate` and `mantle generate --check` exit 0.
71
- 2. The project typechecks against `.mantle/generated/mantle.ts`.
72
- 3. `wrangler dev` (or, on Bun, `bun src/index.ts`) starts, and the routes you depend on answer: a REST View, an
73
- HTTP Trigger, `/mcp` `tools/list`, and with identity `mantle` a sign-in and
74
- `GET /admin/api/me`.
75
-
76
- | Symptom | Cause and next step |
77
- |---|---|
78
- | `docs/...` is missing after installing the skill | The skill carries no docs. Install the SDK and read `node_modules/@aotter/mantle/docs/`. |
79
- | `mantle` is not found | Install `@aotter/mantle` locally and run it through the package manager (`pnpm exec mantle`). |
80
- | `mantle skills` is unknown | It is 0.1.x. Follow the installed 0.2.x docs. |
81
- | A v1 manifest or a `version: 1` config fails | The project is on 0.1.x. Follow `docs/upgrade-0.1-to-0.2.md`. |
82
- | A documented feature is missing | The installed version is older than the docs you read. Read its own docs, or upgrade deliberately. |
69
+ If packaged docs are missing, reinstall the SDK version pinned by the app. If a feature differs from an online page, read the installed docs rather than assuming compatibility.
@@ -0,0 +1,86 @@
1
+ # Transactional email
2
+
3
+ Import the optional email port from `@aotter/mantle/email`. Mantle supplies
4
+ `EmailSender`, `EmailSendArgs`, English `signInCodeEmail`, `signInLinkEmail`
5
+ and `adminInvitationEmail` templates, and `ConsoleEmailSender` for local
6
+ development. Applications select and configure their sender and Better Auth
7
+ plugins.
8
+
9
+ `send({ to, subject, text, html?, locale, category? })` returns `Promise<void>`.
10
+ The templates return `{ subject, text }`, with the same English text as 0.2;
11
+ they do not translate or consume `locale`. Pass the recipient's locale through
12
+ to the sender, which can select localized templates. Existing categories are
13
+ `auth.email-otp.<type>`, `auth.magic-link.sign-in` and `auth.admin-invitation`.
14
+
15
+ ## Application wiring
16
+
17
+ ```ts
18
+ import { emailOTP } from "better-auth/plugins";
19
+ import { hashEmailOtp } from "@aotter/mantle/auth/hardening";
20
+ import { signInCodeEmail, adminInvitationEmail, type EmailSender } from "@aotter/mantle/email";
21
+
22
+ const locale = (request?: Request) =>
23
+ request?.headers.get("accept-language")?.split(",")[0]?.split(";")[0]?.trim() || "en";
24
+
25
+ // Include this plugin in the app's Better Auth options.
26
+ export const emailPlugin = (sender: EmailSender, secret: string) => emailOTP({
27
+ storeOTP: { hash: otp => hashEmailOtp(secret, otp) },
28
+ sendVerificationOTP: ({ email, otp, type }, ctx) => sender.send({
29
+ to: email, ...signInCodeEmail(otp), locale: locale(ctx?.request),
30
+ category: `auth.email-otp.${type}`,
31
+ }),
32
+ });
33
+
34
+ // Use the configured, trusted application origin, never an incoming Host or
35
+ // Origin header. The application grants the OSS "admin" role before sending.
36
+ export const inviteEmail = (sender: EmailSender, origin: string, to: string, language: string) =>
37
+ sender.send({
38
+ to, ...adminInvitationEmail("admin", new URL("/admin/sign-in", origin).href),
39
+ locale: language, category: "auth.admin-invitation",
40
+ });
41
+ ```
42
+
43
+ For magic links, pass Better Auth's generated URL to `signInLinkEmail(url)`;
44
+ configure Better Auth's `baseURL` and `trustedOrigins` to prevent untrusted
45
+ callback destinations. Templates preserve their input as plain text and never
46
+ interpret it as HTML. If a sender supplies `html`, it owns escaping untrusted
47
+ text and attributes and validating link destinations. Pass structured fields
48
+ to the provider; do not interpolate them into raw MIME headers.
49
+
50
+ Use `new ConsoleEmailSender()` only in explicitly selected local development.
51
+ It logs recipients, codes and links and sends nothing; never select it in
52
+ production or log live messages in a production sender. Provider failures
53
+ reject the promise; the application owns error handling and retry policy.
54
+
55
+ **Never let the response wait for the send.** Better Auth calls
56
+ `sendVerificationOTP` for `email-verification` and `forget-password` only when
57
+ the user exists, so a response that waits for the provider reveals whether an
58
+ account exists. Configure Better Auth's `advanced.backgroundTasks.handler` (on
59
+ Workers, `ctx.waitUntil`) so the send runs after the response, as 0.2 did; the
60
+ app-owned auth template wires it.
61
+
62
+ ## Cloudflare Email Service binding
63
+
64
+ Use a verified sender and a Cloudflare Email Service `send_email` binding.
65
+ The binding composes the message natively; no mail SDK or MIME builder is needed.
66
+
67
+ ```jsonc
68
+ { "send_email": [{ "name": "EMAIL" }] }
69
+ ```
70
+
71
+ ```ts
72
+ import type { SendEmail } from "@cloudflare/workers-types";
73
+ import type { EmailSender } from "@aotter/mantle/email";
74
+
75
+ interface Env { EMAIL: SendEmail; EMAIL_FROM: string }
76
+ export const emailSender = (env: Env): EmailSender => ({
77
+ async send({ to, subject, text, html }) {
78
+ await env.EMAIL.send({ from: env.EMAIL_FROM, to, subject, text, html });
79
+ },
80
+ });
81
+ ```
82
+
83
+ The English example ignores `locale` and `category`; a localized provider may
84
+ use both. The binding's verified sender and recipient restrictions still apply.
85
+ This example does not provision a sender, enable an auth method or send mail
86
+ without application wiring.
@@ -0,0 +1,44 @@
1
+ # MCP Apps
2
+
3
+ Generated `mcp()` accepts app-owned UI resources on either endpoint. Each
4
+ endpoint accepts one contributor or an array; Admin uses the same public hook:
5
+
6
+ ```ts
7
+ import type { McpApps } from '@aotter/mantle/mcp';
8
+ import { adminMcpApps } from '@aotter/mantle-admin/mcp';
9
+ import { mcp } from './generated/mcp.js';
10
+
11
+ const app: McpApps = { resources: [{
12
+ uri: 'ui://my-app/records', name: 'my-app-records',
13
+ html: () => loadAppHtml(), renders: ['records'],
14
+ }] };
15
+ const handler = mcp({ db, caller, apps: {
16
+ public: app, admin: [adminMcpApps(adminOptions), adminApp],
17
+ } });
18
+ ```
19
+
20
+ Use your own `ui://<app>/…` prefix. `ui://mantle-admin/…` is reserved for Admin.
21
+ HTML is reusable static content; caller-specific data comes from tool results.
22
+ Build the front end with the official `@modelcontextprotocol/ext-apps` client.
23
+ `renders` links tools to `_meta.ui.resourceUri`; `appOnly` adds
24
+ `visibility: ["app"]`. Both name tools actually exposed on that endpoint.
25
+ Resources may supply CSP, permissions and `prefersBorder`.
26
+
27
+ For static tool tables, construction checks contributors. Request-bound tool tables check on the first matching request and recheck changed tool names. Duplicate
28
+ resource URIs or names, conflicting tool ownership, and absent or foreign-endpoint
29
+ tools throw `ContractError` with code `MCP_APP_CONFLICT`. HTML loaders never run during import or handler construction. Treat descriptors as
30
+ immutable after construction. HTML loads only on `resources/read`; failures
31
+ return a redacted internal error.
32
+
33
+ Generated media-enabled handlers keep the same cache while resolving their tool
34
+ table against each request's environment. Database handles, storage and Caller
35
+ are never retained in that cache. The low-level SDK also accepts an async
36
+ `(request, env) => tools` resolver; its names must match the endpoint's App
37
+ catalogue. If its tool names change, those links are checked again, and a call
38
+ always uses the current request's tool table.
39
+
40
+ Clients advertise `io.modelcontextprotocol/ui` and MIME type
41
+ `text/html;profile=mcp-app` in initialization capabilities or, for stateless
42
+ requests, in `params._meta["io.modelcontextprotocol/clientCapabilities"]`.
43
+ An explicit capability declaration without UI support receives no UI resources, UI tool metadata or App-only tools. A stateless request with no capability declaration is treated as unknown and retains App support. Other tools retain their existing validation,
44
+ authorization, caller, origin and database behavior.
@@ -0,0 +1,298 @@
1
+ # Native Admin
2
+
3
+ Select Admin explicitly; use the exact installed SDK/Admin versions.
4
+
5
+ ## Packages and generation
6
+
7
+ There are three packages, pinned to matching versions:
8
+
9
+ | Package | Owns |
10
+ | --- | --- |
11
+ | `@aotter/mantle` | One native Core SDK: compiler, generator, query kernel and optional auth/surface primitives. |
12
+ | `@aotter/mantle-admin` | Optional Admin server, SPA, extensions, design preview and Admin MCP App. |
13
+ | `@aotter/mantle-ui` | Shared UI kit and generic interaction controller. |
14
+
15
+ The SDK does not import Admin or its assets. Selecting Admin emits application
16
+ code that imports its small public server helpers. The SPA retains all 22
17
+ languages, rich editors and the developer workspace; language, editor and
18
+ workspace chunks load on demand. It is not part of the SDK query bundle.
19
+
20
+ Select Admin explicitly:
21
+
22
+ ```sh
23
+ pnpm exec mantle generate cloudflare-d1 generated manifests/*.yaml --admin
24
+ pnpm exec tsc --noEmit
25
+ ```
26
+
27
+ Targets are `bun-sqlite`, `bun-postgres`, `cloudflare-d1` and
28
+ `cloudflare-postgres`. Programmatic generation accepts `admin: true` with the
29
+ same target/source options. Optional `--auth`, `--site` and `--admin-extensions`
30
+ modules follow their [generation contracts](../cloudflare/service-entry.md).
31
+ Generate, typecheck, implement every printed `Handlers` key, then typecheck
32
+ again. Commit generated TypeScript, SQL and Wrangler edits. Never edit the
33
+ output by hand; regenerate after merging authored inputs. Use the matching
34
+ CLI's `--check` with the same selected options in CI.
35
+
36
+ Apply initial `schema.sql` and selected auth/site DDL only during explicit
37
+ setup of a new database. Existing data needs reviewed migrations. Imports and
38
+ metadata factories do no storage work. Requests run no DDL or storage checks;
39
+ the only request-time write outside app operations is the configured OAuth
40
+ resource row (see [OAuth](oauth.md)).
41
+
42
+ ## Mount the API and console
43
+
44
+ ```ts
45
+ import { admin } from '@aotter/mantle-admin/server';
46
+ import { entries } from '@aotter/mantle-admin/server/entries';
47
+ import { adminBindings } from './generated/admin-bindings.js';
48
+ import { handlers } from './handlers.js';
49
+ import { resolveRequestCaller } from './identity.js'; // application-owned
50
+
51
+ const bindings = adminBindings({ handlers });
52
+ const api = admin(bindings.metadata, bindings.views, bindings.operations, {
53
+ db: (env: Env) => env.DB,
54
+ caller: resolveRequestCaller,
55
+ routes: entries(bindings.schemas, bindings.adapter),
56
+ developerViews: bindings.developerViews,
57
+ });
58
+ // In app-owned fetch: await api(request, env); undefined means fall through.
59
+ ```
60
+
61
+ Ref operations run with the handlers given to `adminBindings({ handlers })`; `admin()` needs no second copy. Without ref Procedures, omit `handlers` and use `adminBindings()`. The app's
62
+ resolver verifies the caller; Admin accepts an admin cookie session classified from
63
+ Better Auth’s admin plugin `adminRoles` (default `["admin"]`), and cookie writes
64
+ retain the shared same-origin check. Comma-separated roles are supported.
65
+ Do not manufacture an admin/system Caller from request input. Views and operations
66
+ also retain their own generated `requires` checks. Share one request-local
67
+ resolver with auth, consent, MCP and REST; preserve its response cookie headers.
68
+
69
+ The API handles `/admin/api/*`. The app separately serves
70
+ `@aotter/mantle-admin/admin/index.html` and its directory at `/admin`, including
71
+ client routes such as `/admin/sign-in`; missing assets stay 404. Do not serve
72
+ that directory bare: `adminShell(request, assets)` from
73
+ `@aotter/mantle-admin/server` returns the shell for every `/admin` page with
74
+ `frame-ancestors 'none'`, `X-Frame-Options: DENY`, `no-store` and `nosniff`, and
75
+ refuses traversal, encoded separators and NUL (`assets` fetches one built file
76
+ by path; a 404 means missing; it returns `undefined` for other requests). Read the
77
+ installed Admin README for asset bindings, CSP/import-map hashes and preview
78
+ framing. `@aotter/mantle-ui` continues to supply the shared kit. See
79
+ [service composition](../cloudflare/service-entry.md) for the complete Fetch/Bun wiring.
80
+
81
+ ## HTTP routes
82
+
83
+ All paths below start with `/admin/api` and require an admin session; mutations
84
+ also require the shared same-origin check. Mount `entries(...)` for collection
85
+ routes. Send JSON with `Content-Type: application/json`.
86
+
87
+ | Method and path | Request / response |
88
+ | --- | --- |
89
+ | `POST /entries` | Body `{ collection, data }`; creates an entry. |
90
+ | `GET /entries/{id}?collection=<schema>` | Reads an entry and its current `entry.version`. |
91
+ | `PATCH /entries/{id}?collection=<schema>` | Body `{ data, expectedVersion }`; sends the observed version, not the next one. Publishing entries must be drafts. |
92
+ | `POST /entries/{id}/publish?collection=<schema>` | Body `{ expectedVersion }`; validates required data before publishing. |
93
+ | `POST /entries/{id}/unpublish?collection=<schema>` | Body `{ expectedVersion }`; returns the entry to draft. |
94
+ | `POST /operations/{name}` | Body is the Procedure's input; runs an Admin operation (a Procedure with `requires: ctx.admin` or a `target`). |
95
+ | `GET /views/{name}` | Generated admin View query parameters plus `limit`/`cursor`; returns `{ rows, nextCursor? }`. |
96
+ | `GET /me` | Returns `{ userId, role, admin, login, image }` for the signed-in caller. |
97
+
98
+ Entry create/read/patch/transitions return
99
+ `{ collection, entry, parentEntryId, parentEntryTitle, related }`; the entry has
100
+ `{ id, collection, locale, status, version, data, created_at, updated_at }`.
101
+ Transitions accept `{}` to use the current version; tests should send the
102
+ observed `expectedVersion` to catch stale writes. Generic writes reject native
103
+ columns inside `data`. See [publishing](../concepts/lifecycle-and-locales.md).
104
+
105
+ ## Generated reads and writes
106
+
107
+ `adminBindings()` returns static metadata, schemas, views, operations and the
108
+ selected native adapter. Metadata-only endpoints add no storage read of their
109
+ own; authentication, optional user enrichment or site loading may still query.
110
+ The shared get/page/statistics functions select quoted tables and columns only
111
+ from generated whitelists. Search/filter/cursor/range values are binds, never
112
+ SQL identifiers. Core compiles scope, TTL, publishing and parent predicates;
113
+ there is no request-time manifest/schema/SQL AST interpreter.
114
+
115
+ Scoped rows remain private even from other admin. Translation reads merge at
116
+ most one visible parent with the matching join key; scoped parents correlate
117
+ scope in every mode, including trusted reads. Child declarations win over parent
118
+ fields, and a parent's public same-named field cannot replace a child's private
119
+ scope. Unrelated scoped Schemas cannot hide an ordinary public field. Scope and
120
+ storage-only fields are absent from entry data and generated CSV export fields.
121
+ Geo remains experimental: existing native outputs are readable, not generically
122
+ editable. Metadata derives child relationships from `allCollections`.
123
+
124
+ Entry queries validate indexed sort fields, directions, filters and limits
125
+ 1–500. `filter_field` and JSON `filter_values` are paired; each batch has at most
126
+ 50 scalar values. Search reuses native SQLite/D1 FTS and PostgreSQL behavior.
127
+ Pages keep native NULL ordering, id ties, microsecond timestamp keys and an
128
+ opaque cursor bound to caller, input, filters and ordering. Malformed/foreign
129
+ cursors and unknown selectors fail before acquiring the route's DB handle;
130
+ the app's authentication may already have used its own database. Admin manifest
131
+ Views retain their complete proved key tuple, not a two-key approximation.
132
+
133
+ Generated full/partial input checks validate creates, edits, operations and
134
+ filters. Plain titled string `oneOf` choices use the same enum checks; general
135
+ or constrained alternatives remain refused. Draft creates can be incomplete;
136
+ publish checks required data. Publishing edits apply only to drafts. Read-only
137
+ collections refuse generic edits while their declared Procedures can still run.
138
+
139
+ Writes use compiler-printed native Procedure frames, bind recipes and only the
140
+ supplied field fragments. They do not update omitted columns or run a schema
141
+ interpreter. PATCH retains its visible-row read and exact OCC check; the mutation
142
+ returns its row. Missing/excluded rows are 404; stale locks or failed state guards
143
+ are 409. Safe versions are numbers; exact native int64 strings can be bound
144
+ without rounding, while unsafe numbers are rejected. The console keeps versions
145
+ outside its supported safe range read-only rather than casting them to numbers.
146
+ Full cross-target int64 output parity remains incomplete; bare driver values
147
+ are unchanged.
148
+
149
+ Publishing/custom Admin operations load existing generated Procedure modules
150
+ when invoked. Ref handlers retain the original typed `{ caller, db, store }`
151
+ context and authorization. Ordinary SDK/REST/MCP emission and the synchronous
152
+ public Store API are unchanged. Selected JSON boundaries preserve declared JSON/boolean conversions and safe
153
+ cross-target integer normalization from SQL text; exact unsafe values are not rounded. Bare
154
+ Views, Store and SQL Procedures keep their driver-native contract. Native
155
+ unique/OCC errors and uncertain transaction outcomes keep their contracts. A 503 outcome may mean a write committed: do not
156
+ retry automatically or turn it into a success by reading afterward. Core
157
+ `statusOf` maps core codes only. App media/site/partial errors use `mediaError`
158
+ from `@aotter/mantle/media`; other custom ContractErrors must carry an explicit
159
+ status, otherwise the boundary returns a redacted 500. Do not leak native
160
+ error messages, tokens or credentials to clients.
161
+
162
+ ## Statistics and extensions
163
+
164
+ `GET /admin/api/collections/{name}/statistics?range=7d` supports primary or
165
+ standalone collections; folded children/translations are not primary routes.
166
+ Ranges are `1h`, `24h`, `7d` (default) and `20d`. It returns
167
+ `{ total, buckets, from, to, bucketMs }` in one native aggregate query. `total`
168
+ counts currently caller-visible retained rows, including rows outside the
169
+ requested window; expired rows are excluded. Buckets use `[from, to)` and the
170
+ same generated scope/TTL/parent policy. The shared native function accepts at
171
+ most 20 days and 480 buckets, with safe microsecond arithmetic. Temporal enum
172
+ subtypes return original metadata keys; equivalent offset spellings count once
173
+ under the first key, and separate microseconds remain distinct.
174
+
175
+ Site/media/identity, extensions, WebMCP, design preview and MCP Apps are selected
176
+ through the public Admin modules, not added to the SDK kernel. Extension
177
+ contribution declarations go to `--admin-extensions`; executable handlers and
178
+ sources stay in app-owned server configuration. Raw extension handlers receive
179
+ the original Request without pre-reading, cloning or rebuilding it. Custom
180
+ `bodyLimit` checks Content-Length before DB access; the app must bound reads of
181
+ unknown-length raw streams. Built-in JSON routes use the shared bounded reader
182
+ (default 1,000,000 bytes) after caller/origin checks and before DB acquisition.
183
+ The API advertises capabilities for actually mounted routes, including statistics.
184
+
185
+ ## Acceptance
186
+
187
+ Use a disposable database for native tests, then exercise actual OTP sign-in,
188
+ the Admin console and member frontend. Check invalid input, another tenant's
189
+ rows, expired rows, publishing transitions, related/translated entries, paging,
190
+ statistics, CSV, operations/ref effects, stale OCC and persisted state after a
191
+ restart. Recheck extensions, previews, all supported UI languages and the
192
+ complete developer workspace. A generated file, typecheck or HTTP 200 alone
193
+ does not verify these flows.
194
+
195
+ Native adapter evidence covers all four targets; local D1 uses real workerd.
196
+ Initial Admin module imports perform no DB work. Startup graphs, uploaded total,
197
+ SDK package bytes and query/write/cold timing are separate checks. Extra selected
198
+ Admin indexes add write/storage maintenance; an indexed SELECT plan does not
199
+ prove unchanged write latency. Report remaining gates honestly; this guide does not promise measured performance.
200
+
201
+ ## Extension declarations
202
+
203
+ Pass full declarations to `--admin-extensions`. Generation emits
204
+ `extensionMetadata` in `admin-descriptors.ts` and compiled settings checks plus
205
+ `extensionBindings` in `admin-extensions.ts`. Bind the same runtime definitions
206
+ (including handlers) with `extensionBindings(adminExtensions)`, and merge the
207
+ returned `extensions` and `routes` into `admin()` options. Declaration drift is
208
+ refused before any handler runs. The older descriptor `extensionBindings` export
209
+ contains manifest UI references only; it is not the runtime binding function.
210
+
211
+ Native Admin does not serve `source` modules or modify shell import maps. Serve
212
+ an extension's `module` at a same-origin absolute path and install its `integrity`
213
+ in the host shell import map. Selecting `source` fails generation with that
214
+ instruction. This differs from historical 0.2's automatic source-module route.
215
+
216
+ Entry lists and editor reads/writes return translation badges and related
217
+ sections in one authorized HTTP response. `/bootstrap?collection=...` can include
218
+ the first requested list page. CSV exports use `/entries/export` and
219
+ `/views/{name}/export`; native browser downloads stream paged server output.
220
+ A failure after headers aborts the stream, so a download can fail after partial
221
+ bytes have arrived. Existing databases need an app-owned migration for the
222
+ Admin-selected `created_at` statistics indexes emitted in initial `schema.sql`.
223
+
224
+ ## Collection list template today
225
+
226
+ The compiler derives display/filter metadata from Schema `uiSchema`, searchable fields from `searchableFields`, and sortable fields from indexes plus required/non-null fields and selected system columns. It emits per-collection quoted fragments, row policies and bind recipes; Admin uses one shared `nativeEntryPage` implementation, not Store `find`, `search` or `count` for these lists.
227
+
228
+ Requests select only generated fields and append only supplied predicates. Absent filters are omitted, rather than expressed as `(? IS NULL OR …)`. Sorts and scalar values are checked before the route acquires its DB handle. In 0.2.0 there is no generated Cartesian set of filter variants or variant cap: runtime SQL shapes depend on selected filters, bounded IN lists, search, cursor and order. Only sortable fields are checked for indexes; there is no per-filter-combination index proof. Inspect EXPLAIN for the actual workload.
229
+
230
+ Store keeps `find({ search })`, `first({ search })` and `count(where?)`. See [Store search and count costs](typed-queries.md#store-reads-and-writes): Admin shares the dialect search, and a View does not make PostgreSQL ILIKE faster.
231
+
232
+ ## Collection navigation and operation placement
233
+
234
+ A Schema with a required `x-mantle-ref` folds under its parent collection: it
235
+ opens from the parent entry's workbench and stays out of the sidebar, while
236
+ `/admin/c/<schema>` still lists it; translation children remain on language
237
+ tabs. Set `Schema.spec.uiSchema.nav.standalone: true` to put a required-ref child
238
+ at the top level instead. With multiple eligible references, set
239
+ `nav.parentField` to the chosen reference field.
240
+
241
+ ### Sidebar
242
+
243
+ By default the sidebar lists publishing Schemas under Content, operational Schemas under Records (`operations`),
244
+ admin Views under Reports and Admin's own pages under More, each in name order. A project arranges it for how its
245
+ staff work, in the same manifest change that adds a Schema or View. Placement is presentation only: permissions,
246
+ REST, MCP and storage are unchanged, entries a caller cannot see stay hidden, and an empty group is not shown.
247
+
248
+ - `Schema.spec.uiSchema.nav` and admin `View.spec.uiSchema.nav` take `group` (a group id), `order` (an integer;
249
+ ascending, entries without one follow in name order) and `hidden: true` (out of the sidebar, still at its URL).
250
+ - Built-in groups need no declaration: `content`, `operations`, `reports`, `more`. Project groups are declared once
251
+ as `navGroups` in the `--admin-extensions` module, with a title (text or `{ locale: text }`) and an `order` among
252
+ the built-in groups' content 10, operations 20 and reports 30 (default 50); More always stays last.
253
+ - Extension pages use the same ids: `pages[].nav: { group, order }` (`more` and `settings` keep their places).
254
+
255
+ ```ts
256
+ // src/admin.ts, passed as --admin-extensions src/admin.ts (the app shell already does)
257
+ import type { AdminExtension, AdminNavGroup } from "@aotter/mantle-admin/server/extensions";
258
+ export const navGroups: AdminNavGroup[] = [{ id: "approvals", title: { en: "Approvals", "zh-TW": "簽核" }, order: 5 }];
259
+ export const adminExtensions: AdminExtension[] = [];
260
+ ```
261
+
262
+ ```yaml
263
+ # a Schema or an admin View
264
+ uiSchema: { nav: { group: approvals, order: 1 } }
265
+ ```
266
+
267
+ `mantle generate` refuses an undeclared group, a duplicate or built-in `navGroups` id and a non-integer `order`.
268
+ The purchasing example puts its approval queue and requests in an Approvals group.
269
+
270
+ Operational collections have no generic create or draft: officers add records through a Procedure placed with `collectionAction` (the list header shows its button and input form), so every write is a declared, validated program. For a user-field scoped Schema, SQL INSERT is system-only, so that Procedure is a ref handler that inserts through `ctx.store` ([procedure.md](../reference/procedure.md)).
271
+
272
+ Admin operations are Procedures exposed by an admin MCP Trigger. Declare
273
+ `Procedure.spec.uiSchema.collectionAction: <schema-name>` to show the operation
274
+ in that collection's list header. Row operations are chosen by the Procedure's
275
+ explicit `target: { schema, id, version? }`: `id` names the input bound to the
276
+ row id, and optional `version` names the input bound to its reviewed OCC version.
277
+ Names such as `approve` never determine placement. An operation without a row
278
+ target or collection action appears on the Operations page, whose sidebar link
279
+ appears whenever such operations exist.
280
+
281
+ Generated row metadata includes simple AND-ed equality/IN literal conditions
282
+ from the target-row UPDATE/DELETE WHERE. The menu hides known mismatches; missing
283
+ preview values and unsupported predicates leave actions available. These are
284
+ presentation hints: the Procedure still enforces its WHERE and authorization.
285
+ Conflicts show a localized refresh message with the technical diagnostic in
286
+ Details. Successful actions show a short summary and changes, with raw output
287
+ in a collapsed Details disclosure. CSV exports retain UTC wire timestamps.
288
+
289
+ Developer Model and Logic pages share an object sidebar on wide containers
290
+ and an object-list drawer on narrow containers.
291
+ Schema Live data previews use collection routes even for folded children.
292
+ Pass `bindings.developerViews` as the Admin `developerViews` option for
293
+ public and admin View previews; ordinary Admin View routes and exports use
294
+ only `bindings.views` (admin Views). View previews use the read-only `/admin/api/developer/views/<view>` route,
295
+ with the signed-in admin caller and the same authorization, scope, TTL and
296
+ publishing policy as REST. Public Views retain public visibility; internal or
297
+ disallowed Views show an unavailable explanation. Previews never use a system
298
+ caller or bypass a View's `requires`.