@aotter/mantle 0.2.0-alpha.1 → 0.2.0-alpha.11

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 (936) hide show
  1. package/README.md +180 -45
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +261 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +18 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +128 -0
  8. package/dist/auth/{createAuthRoutes.js → consent.js} +26 -54
  9. package/dist/auth/hardening.d.ts +24 -0
  10. package/dist/auth/hardening.js +33 -0
  11. package/dist/auth/identity.d.ts +121 -0
  12. package/dist/auth/identity.js +192 -0
  13. package/dist/auth/oauth.d.ts +63 -0
  14. package/dist/auth/oauth.js +185 -0
  15. package/dist/auth/resource-seeds.js +8 -0
  16. package/dist/auth/route-http.js +33 -0
  17. package/dist/auth/routes.d.ts +32 -0
  18. package/dist/auth/routes.js +80 -0
  19. package/dist/build/compiler.d.ts +122 -0
  20. package/dist/build/compiler.js +3 -0
  21. package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +30 -43
  22. package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
  23. package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +39 -6
  24. package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
  25. package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +4 -1
  26. package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
  27. package/dist/bun/assets.d.ts +2 -0
  28. package/dist/bun/assets.js +22 -0
  29. package/dist/domain/adminOrder.js +22 -0
  30. package/dist/domain/columns.js +42 -0
  31. package/dist/domain/describe/chunk-SGMRVDGE.js +1 -0
  32. package/dist/domain/describe/index.d.ts +58 -0
  33. package/dist/domain/describe/index.js +1 -0
  34. package/dist/domain/describe/target-hash.d.ts +8 -0
  35. package/dist/domain/describe/target-hash.js +1 -0
  36. package/dist/domain/describe/targets.d.ts +40 -0
  37. package/dist/domain/entry.js +19 -0
  38. package/dist/domain/generated-tools.js +18 -0
  39. package/dist/domain/generation.d.ts +16 -0
  40. package/dist/domain/generation.js +1 -0
  41. package/dist/domain/input.js +15 -0
  42. package/dist/domain/model.js +1 -0
  43. package/dist/domain/paging.js +213 -0
  44. package/dist/domain/recipes.js +22 -0
  45. package/dist/domain/userReferences.js +4 -0
  46. package/dist/domain/wireScalars.js +41 -0
  47. package/dist/infrastructure/adminEntries.js +156 -0
  48. package/dist/infrastructure/adminPaging.js +70 -0
  49. package/dist/infrastructure/artifacts.js +67 -0
  50. package/dist/infrastructure/authSchema.js +74 -0
  51. package/dist/infrastructure/bundle.js +159 -0
  52. package/dist/infrastructure/cli.js +111 -0
  53. package/dist/infrastructure/generate.d.ts +12 -0
  54. package/dist/infrastructure/generate.js +175 -0
  55. package/dist/infrastructure/generateAuth.d.ts +8 -0
  56. package/dist/infrastructure/generateAuth.js +66 -0
  57. package/dist/infrastructure/help.js +55 -0
  58. package/dist/infrastructure/init.js +50 -0
  59. package/dist/infrastructure/inputs.js +32 -0
  60. package/dist/infrastructure/mounts.js +22 -0
  61. package/dist/infrastructure/wrangler.js +103 -0
  62. package/dist/kernel/authorization.d.ts +4 -0
  63. package/dist/kernel/authorization.js +15 -0
  64. package/dist/kernel/binds.d.ts +60 -0
  65. package/dist/kernel/binds.js +39 -0
  66. package/dist/kernel/caller-identity.d.ts +21 -0
  67. package/dist/kernel/caller-identity.js +7 -0
  68. package/dist/kernel/caller-mode.d.ts +4 -0
  69. package/dist/kernel/caller-mode.js +14 -0
  70. package/dist/kernel/contract-error.d.ts +12 -0
  71. package/dist/kernel/contract-error.js +14 -0
  72. package/dist/kernel/contracts.d.ts +135 -0
  73. package/dist/kernel/contracts.js +56 -0
  74. package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
  75. package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +0 -9
  76. package/dist/kernel/dialect/common.d.ts +38 -0
  77. package/dist/kernel/dialect/common.js +3 -0
  78. package/dist/kernel/dialect/postgres.d.ts +16 -0
  79. package/dist/kernel/dialect/postgres.js +16 -0
  80. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  81. package/dist/kernel/dialect/sqlite.js +29 -0
  82. package/dist/kernel/drain.d.ts +5 -0
  83. package/dist/kernel/drain.js +29 -0
  84. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  85. package/dist/kernel/driver/bun-sqlite.js +73 -0
  86. package/dist/kernel/driver/d1.d.ts +24 -0
  87. package/dist/kernel/driver/d1.js +21 -0
  88. package/dist/kernel/driver/postgres.d.ts +25 -0
  89. package/dist/kernel/driver/postgres.js +84 -0
  90. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  91. package/dist/kernel/driver/transaction-context.js +28 -0
  92. package/dist/kernel/email.d.ts +28 -0
  93. package/dist/{auth/emailTemplates.js → kernel/email.js} +9 -2
  94. package/dist/kernel/host-access.d.ts +10 -0
  95. package/dist/kernel/host-access.js +64 -0
  96. package/dist/kernel/host-caller.d.ts +39 -0
  97. package/dist/kernel/host-caller.js +53 -0
  98. package/dist/kernel/json-body.d.ts +4 -0
  99. package/dist/kernel/json-body.js +42 -0
  100. package/dist/kernel/mcp-apps.d.ts +69 -0
  101. package/dist/kernel/mcp-apps.js +35 -0
  102. package/dist/kernel/mcp-call.d.ts +5 -0
  103. package/dist/kernel/mcp-call.js +24 -0
  104. package/dist/kernel/mcp-handler.js +347 -0
  105. package/dist/kernel/mcp.d.ts +110 -0
  106. package/dist/kernel/mcp.js +45 -0
  107. package/dist/kernel/media.d.ts +27 -0
  108. package/dist/kernel/media.js +198 -0
  109. package/dist/kernel/paging.d.ts +55 -0
  110. package/dist/kernel/paging.js +87 -0
  111. package/dist/kernel/publishing.d.ts +4 -0
  112. package/dist/kernel/publishing.js +15 -0
  113. package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
  114. package/dist/kernel/r2-media.js +71 -0
  115. package/dist/kernel/rest-dispatch.js +37 -0
  116. package/dist/kernel/rest-router.js +63 -0
  117. package/dist/kernel/rest.d.ts +58 -0
  118. package/dist/kernel/rest.js +38 -0
  119. package/dist/kernel/scalars.d.ts +6 -0
  120. package/dist/kernel/scalars.js +36 -0
  121. package/dist/kernel/search.js +4 -0
  122. package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
  123. package/dist/kernel/site-types.js +1 -0
  124. package/dist/kernel/site.d.ts +39 -0
  125. package/dist/kernel/site.js +30 -0
  126. package/dist/kernel/store.d.ts +175 -0
  127. package/dist/kernel/store.js +244 -0
  128. package/dist/kernel/surface-failure.d.ts +10 -0
  129. package/dist/kernel/surface-failure.js +29 -0
  130. package/dist/kernel/surface.d.ts +10 -0
  131. package/dist/kernel/surface.js +16 -0
  132. package/dist/kernel/sweep.d.ts +17 -0
  133. package/dist/kernel/sweep.js +26 -0
  134. package/dist/kernel/translations.d.ts +1 -0
  135. package/dist/kernel/translations.js +12 -0
  136. package/dist/kernel/user-caller.d.ts +31 -0
  137. package/dist/kernel/user-caller.js +61 -0
  138. package/dist/kernel/user-field-name.js +3 -0
  139. package/dist/kernel/user-fields.d.ts +35 -0
  140. package/dist/kernel/user-fields.js +71 -0
  141. package/dist/kernel/validation.d.ts +15 -0
  142. package/dist/kernel/validation.js +46 -0
  143. package/dist/kernel/web-gateway.js +66 -0
  144. package/dist/kernel/web-head.js +14 -0
  145. package/dist/kernel/web-index.js +39 -0
  146. package/dist/kernel/web-response.js +7 -0
  147. package/dist/kernel/web-serve.js +97 -0
  148. package/dist/kernel/web.d.ts +77 -0
  149. package/dist/kernel/web.js +43 -0
  150. package/dist/kernel/where.js +21 -0
  151. package/dist/testing/index.d.ts +1 -37
  152. package/dist/testing/index.js +1 -43
  153. package/dist/usecase/adminBindings.js +150 -0
  154. package/dist/usecase/adminClient.js +66 -0
  155. package/dist/usecase/adminDescriptors.js +100 -0
  156. package/dist/usecase/generate.js +160 -0
  157. package/dist/usecase/handlers.js +18 -0
  158. package/dist/usecase/mcp-media.js +16 -0
  159. package/dist/usecase/mcp.js +96 -0
  160. package/dist/usecase/paging.js +69 -0
  161. package/dist/usecase/publishing.js +59 -0
  162. package/dist/usecase/refusals.js +27 -0
  163. package/dist/usecase/rest.js +53 -0
  164. package/dist/usecase/search.js +7 -0
  165. package/dist/usecase/site.js +38 -0
  166. package/dist/usecase/stores.js +52 -0
  167. package/dist/usecase/tool-version.js +6 -0
  168. package/dist/usecase/translations.js +76 -0
  169. package/dist/usecase/ttl.js +20 -0
  170. package/dist/usecase/validation.js +221 -0
  171. package/dist/usecase/web.js +23 -0
  172. package/docs/examples/README.md +39 -16
  173. package/docs/examples/app-shell/README.md +121 -0
  174. package/docs/examples/app-shell/accept.mjs +91 -0
  175. package/docs/examples/app-shell/gitignore +7 -0
  176. package/docs/examples/app-shell/package.json +43 -0
  177. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  178. package/docs/examples/app-shell/smoke-kit.mjs +168 -0
  179. package/docs/examples/app-shell/src/auth.ts +58 -0
  180. package/docs/examples/app-shell/src/handlers.ts +5 -0
  181. package/docs/examples/app-shell/src/index.ts +4 -0
  182. package/docs/examples/app-shell/src/routes.ts +16 -0
  183. package/docs/examples/app-shell/src/schedule.ts +8 -0
  184. package/docs/examples/app-shell/src/service.ts +71 -0
  185. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  186. package/docs/examples/app-shell/src/signup.ts +8 -0
  187. package/docs/examples/{reference-service → app-shell}/tsconfig.json +6 -2
  188. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  189. package/docs/examples/app-shell/wrangler.jsonc +62 -0
  190. package/docs/examples/club-events/README.md +65 -0
  191. package/docs/examples/club-events/manifests/club-events.yaml +247 -0
  192. package/docs/examples/club-events/smoke.mjs +127 -0
  193. package/docs/examples/club-events/src/handlers.ts +25 -0
  194. package/docs/examples/club-events/src/signup.ts +9 -0
  195. package/docs/examples/generated-web/README.md +78 -0
  196. package/docs/examples/generated-web/posts.yaml +38 -0
  197. package/docs/examples/generated-web/seed.sql +6 -0
  198. package/docs/examples/generated-web/src/worker.ts +43 -0
  199. package/docs/examples/generated-web/tsconfig.json +8 -0
  200. package/docs/examples/generated-web/wrangler.jsonc +8 -0
  201. package/docs/examples/purchasing/.dev.vars.example +6 -0
  202. package/docs/examples/purchasing/README.md +99 -0
  203. package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
  204. package/docs/examples/purchasing/seed.sql +4 -0
  205. package/docs/examples/purchasing/smoke.mjs +191 -0
  206. package/docs/examples/purchasing/src/admin.tsx +13 -0
  207. package/docs/examples/purchasing/src/handlers.ts +33 -0
  208. package/docs/examples/purchasing/src/notify.ts +29 -0
  209. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  210. package/docs/examples/purchasing/src/routes.ts +53 -0
  211. package/docs/examples/purchasing/src/schedule.ts +31 -0
  212. package/docs/examples/purchasing/src/signup.ts +5 -0
  213. package/docs/examples/purchasing/src/supplier.ts +32 -0
  214. package/docs/examples/purchasing/wrangler.jsonc +69 -0
  215. package/docs/examples/recipes/README.md +60 -0
  216. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  217. package/docs/examples/recipes/smoke.mjs +102 -0
  218. package/docs/examples/recipes/src/media.ts +13 -0
  219. package/docs/examples/recipes/src/pages.ts +99 -0
  220. package/docs/examples/recipes/src/routes.ts +71 -0
  221. package/docs/examples/recipes/src/site-config.ts +12 -0
  222. package/docs/examples/recipes/wrangler.jsonc +74 -0
  223. package/docs/handbook/cloudflare/authentication.md +186 -108
  224. package/docs/handbook/cloudflare/chatgpt-sites.md +5 -112
  225. package/docs/handbook/cloudflare/deploy-and-operate.md +59 -87
  226. package/docs/handbook/cloudflare/media-r2.md +61 -82
  227. package/docs/handbook/cloudflare/service-entry.md +223 -119
  228. package/docs/handbook/concepts/authorization.md +10 -117
  229. package/docs/handbook/concepts/four-atoms.md +9 -92
  230. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
  231. package/docs/handbook/concepts/mcp-and-agents.md +24 -116
  232. package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
  233. package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
  234. package/docs/handbook/concepts/views.md +10 -109
  235. package/docs/handbook/examples/hub.md +2 -18
  236. package/docs/handbook/guides/adapter-guide.md +11 -0
  237. package/docs/handbook/guides/admin-ui.md +113 -136
  238. package/docs/handbook/guides/agent-setup.md +32 -27
  239. package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
  240. package/docs/handbook/guides/email.md +86 -0
  241. package/docs/handbook/guides/local-testing.md +40 -0
  242. package/docs/handbook/guides/mcp-apps.md +560 -0
  243. package/docs/handbook/guides/native-admin.md +566 -0
  244. package/docs/handbook/guides/native-execution.md +133 -0
  245. package/docs/handbook/guides/oauth.md +219 -0
  246. package/docs/handbook/guides/postgres-adapters.md +56 -0
  247. package/docs/handbook/guides/public-pages.md +93 -0
  248. package/docs/handbook/guides/size-and-startup.md +9 -0
  249. package/docs/handbook/guides/sql-patterns.md +266 -0
  250. package/docs/handbook/guides/typed-queries.md +210 -100
  251. package/docs/handbook/navigation.json +176 -30
  252. package/docs/handbook/reference/admin-descriptors.md +56 -0
  253. package/docs/handbook/reference/authorization.md +44 -52
  254. package/docs/handbook/reference/describe.md +56 -0
  255. package/docs/handbook/reference/diagnostics.md +19 -77
  256. package/docs/handbook/reference/features.md +45 -53
  257. package/docs/handbook/reference/manifest.md +6 -69
  258. package/docs/handbook/reference/procedure.md +11 -115
  259. package/docs/handbook/reference/schema.md +81 -172
  260. package/docs/handbook/reference/site-config.md +5 -65
  261. package/docs/handbook/reference/sql.md +64 -0
  262. package/docs/handbook/reference/surface.md +396 -93
  263. package/docs/handbook/reference/trigger.md +62 -89
  264. package/docs/handbook/reference/view.md +40 -158
  265. package/docs/handbook/releases/index.md +198 -12
  266. package/docs/handbook/start/agents.md +45 -0
  267. package/docs/handbook/start/overview.md +9 -56
  268. package/docs/handbook/start/project-and-cli.md +51 -131
  269. package/docs/handbook/start/quickstart-worker.md +38 -115
  270. package/docs/skills/develop/SKILL.md +77 -121
  271. package/docs/skills/integrate/SKILL.md +37 -84
  272. package/docs/skills/media-gc/SKILL.md +21 -8
  273. package/docs/skills/provision/SKILL.md +31 -87
  274. package/docs/skills/update/SKILL.md +20 -34
  275. package/docs/source/scripts/postgres-adapter.ts +101 -0
  276. package/docs/upgrade-0.1-to-0.2.md +26 -10
  277. package/package.json +120 -112
  278. package/skills/README.md +67 -0
  279. package/skills/mantle/SKILL.md +76 -0
  280. package/dist/admin/consent.d.ts +0 -17
  281. package/dist/admin/consent.d.ts.map +0 -1
  282. package/dist/admin/consent.js +0 -17
  283. package/dist/admin/consent.js.map +0 -1
  284. package/dist/admin/createAdminSurface.d.ts +0 -22
  285. package/dist/admin/createAdminSurface.d.ts.map +0 -1
  286. package/dist/admin/createAdminSurface.js +0 -589
  287. package/dist/admin/createAdminSurface.js.map +0 -1
  288. package/dist/admin/developerConsole.d.ts +0 -264
  289. package/dist/admin/developerConsole.d.ts.map +0 -1
  290. package/dist/admin/developerConsole.js +0 -136
  291. package/dist/admin/developerConsole.js.map +0 -1
  292. package/dist/admin/identity.d.ts +0 -62
  293. package/dist/admin/identity.d.ts.map +0 -1
  294. package/dist/admin/identity.js +0 -7
  295. package/dist/admin/identity.js.map +0 -1
  296. package/dist/admin/index.d.ts +0 -4
  297. package/dist/admin/index.d.ts.map +0 -1
  298. package/dist/admin/index.js +0 -4
  299. package/dist/admin/index.js.map +0 -1
  300. package/dist/admin/procedureFlow.d.ts +0 -25
  301. package/dist/admin/procedureFlow.d.ts.map +0 -1
  302. package/dist/admin/procedureFlow.js +0 -154
  303. package/dist/admin/procedureFlow.js.map +0 -1
  304. package/dist/auth/ConsoleEmailSender.d.ts +0 -15
  305. package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
  306. package/dist/auth/ConsoleEmailSender.js +0 -19
  307. package/dist/auth/ConsoleEmailSender.js.map +0 -1
  308. package/dist/auth/appleClientSecret.d.ts +0 -75
  309. package/dist/auth/appleClientSecret.d.ts.map +0 -1
  310. package/dist/auth/appleClientSecret.js +0 -116
  311. package/dist/auth/appleClientSecret.js.map +0 -1
  312. package/dist/auth/buildAuth.d.ts +0 -4565
  313. package/dist/auth/buildAuth.d.ts.map +0 -1
  314. package/dist/auth/buildAuth.js +0 -307
  315. package/dist/auth/buildAuth.js.map +0 -1
  316. package/dist/auth/callerResolver.d.ts +0 -48
  317. package/dist/auth/callerResolver.d.ts.map +0 -1
  318. package/dist/auth/callerResolver.js +0 -49
  319. package/dist/auth/callerResolver.js.map +0 -1
  320. package/dist/auth/createAuthRoutes.d.ts +0 -22
  321. package/dist/auth/createAuthRoutes.d.ts.map +0 -1
  322. package/dist/auth/createAuthRoutes.js.map +0 -1
  323. package/dist/auth/createMantleAuth.d.ts +0 -3
  324. package/dist/auth/createMantleAuth.d.ts.map +0 -1
  325. package/dist/auth/createMantleAuth.js +0 -483
  326. package/dist/auth/createMantleAuth.js.map +0 -1
  327. package/dist/auth/db.d.ts +0 -17
  328. package/dist/auth/db.d.ts.map +0 -1
  329. package/dist/auth/db.js +0 -24
  330. package/dist/auth/db.js.map +0 -1
  331. package/dist/auth/emailTemplates.d.ts +0 -7
  332. package/dist/auth/emailTemplates.d.ts.map +0 -1
  333. package/dist/auth/emailTemplates.js.map +0 -1
  334. package/dist/auth/index.d.ts +0 -9
  335. package/dist/auth/index.d.ts.map +0 -1
  336. package/dist/auth/index.js +0 -7
  337. package/dist/auth/index.js.map +0 -1
  338. package/dist/auth/methods.d.ts +0 -717
  339. package/dist/auth/methods.d.ts.map +0 -1
  340. package/dist/auth/methods.js +0 -321
  341. package/dist/auth/methods.js.map +0 -1
  342. package/dist/auth/oauthTokens.d.ts +0 -24
  343. package/dist/auth/oauthTokens.d.ts.map +0 -1
  344. package/dist/auth/oauthTokens.js +0 -146
  345. package/dist/auth/oauthTokens.js.map +0 -1
  346. package/dist/auth/setupIncomplete.d.ts +0 -16
  347. package/dist/auth/setupIncomplete.d.ts.map +0 -1
  348. package/dist/auth/setupIncomplete.js +0 -50
  349. package/dist/auth/setupIncomplete.js.map +0 -1
  350. package/dist/auth/types.d.ts +0 -440
  351. package/dist/auth/types.d.ts.map +0 -1
  352. package/dist/auth/types.js +0 -10
  353. package/dist/auth/types.js.map +0 -1
  354. package/dist/bun/index.d.ts +0 -65
  355. package/dist/bun/index.d.ts.map +0 -1
  356. package/dist/bun/index.js +0 -130
  357. package/dist/bun/index.js.map +0 -1
  358. package/dist/cli/emitModule.d.ts +0 -7
  359. package/dist/cli/emitModule.d.ts.map +0 -1
  360. package/dist/cli/emitModule.js +0 -127
  361. package/dist/cli/emitModule.js.map +0 -1
  362. package/dist/cli/generate.d.ts +0 -8
  363. package/dist/cli/generate.d.ts.map +0 -1
  364. package/dist/cli/generate.js +0 -355
  365. package/dist/cli/generate.js.map +0 -1
  366. package/dist/cli/main.d.ts +0 -3
  367. package/dist/cli/main.d.ts.map +0 -1
  368. package/dist/cli/main.js +0 -21
  369. package/dist/cli/main.js.map +0 -1
  370. package/dist/cli/preset.d.ts +0 -18
  371. package/dist/cli/preset.d.ts.map +0 -1
  372. package/dist/cli/preset.js +0 -352
  373. package/dist/cli/preset.js.map +0 -1
  374. package/dist/cloudflare/index.d.ts +0 -21
  375. package/dist/cloudflare/index.d.ts.map +0 -1
  376. package/dist/cloudflare/index.js +0 -14
  377. package/dist/cloudflare/index.js.map +0 -1
  378. package/dist/cloudflare/r2Media.d.ts.map +0 -1
  379. package/dist/cloudflare/r2Media.js +0 -69
  380. package/dist/cloudflare/r2Media.js.map +0 -1
  381. package/dist/core/caller.d.ts +0 -35
  382. package/dist/core/caller.d.ts.map +0 -1
  383. package/dist/core/caller.js +0 -3
  384. package/dist/core/caller.js.map +0 -1
  385. package/dist/core/createMantle.d.ts +0 -22
  386. package/dist/core/createMantle.d.ts.map +0 -1
  387. package/dist/core/createMantle.js +0 -117
  388. package/dist/core/createMantle.js.map +0 -1
  389. package/dist/core/dialect.d.ts +0 -41
  390. package/dist/core/dialect.d.ts.map +0 -1
  391. package/dist/core/dialect.js +0 -7
  392. package/dist/core/dialect.js.map +0 -1
  393. package/dist/core/driver.d.ts +0 -17
  394. package/dist/core/driver.d.ts.map +0 -1
  395. package/dist/core/driver.js +0 -2
  396. package/dist/core/driver.js.map +0 -1
  397. package/dist/core/email.d.ts +0 -17
  398. package/dist/core/email.d.ts.map +0 -1
  399. package/dist/core/email.js +0 -2
  400. package/dist/core/email.js.map +0 -1
  401. package/dist/core/index.d.ts +0 -16
  402. package/dist/core/index.d.ts.map +0 -1
  403. package/dist/core/index.js +0 -16
  404. package/dist/core/index.js.map +0 -1
  405. package/dist/core/invocation.d.ts +0 -66
  406. package/dist/core/invocation.d.ts.map +0 -1
  407. package/dist/core/invocation.js +0 -3
  408. package/dist/core/invocation.js.map +0 -1
  409. package/dist/core/runtime/auth.d.ts +0 -9
  410. package/dist/core/runtime/auth.d.ts.map +0 -1
  411. package/dist/core/runtime/auth.js +0 -39
  412. package/dist/core/runtime/auth.js.map +0 -1
  413. package/dist/core/runtime/createRuntime.d.ts +0 -23
  414. package/dist/core/runtime/createRuntime.d.ts.map +0 -1
  415. package/dist/core/runtime/createRuntime.js +0 -214
  416. package/dist/core/runtime/createRuntime.js.map +0 -1
  417. package/dist/core/runtime/verifyPlan.d.ts +0 -34
  418. package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
  419. package/dist/core/runtime/verifyPlan.js +0 -301
  420. package/dist/core/runtime/verifyPlan.js.map +0 -1
  421. package/dist/core/service.d.ts +0 -45
  422. package/dist/core/service.d.ts.map +0 -1
  423. package/dist/core/service.js +0 -2
  424. package/dist/core/service.js.map +0 -1
  425. package/dist/core/site.d.ts.map +0 -1
  426. package/dist/core/site.js +0 -2
  427. package/dist/core/site.js.map +0 -1
  428. package/dist/core/siteConfig.d.ts +0 -5
  429. package/dist/core/siteConfig.d.ts.map +0 -1
  430. package/dist/core/siteConfig.js +0 -24
  431. package/dist/core/siteConfig.js.map +0 -1
  432. package/dist/core/sql/allowlist.d.ts +0 -65
  433. package/dist/core/sql/allowlist.d.ts.map +0 -1
  434. package/dist/core/sql/allowlist.js +0 -705
  435. package/dist/core/sql/allowlist.js.map +0 -1
  436. package/dist/core/sql/ast.d.ts +0 -24
  437. package/dist/core/sql/ast.d.ts.map +0 -1
  438. package/dist/core/sql/ast.js +0 -32
  439. package/dist/core/sql/ast.js.map +0 -1
  440. package/dist/core/sql/compile.d.ts +0 -50
  441. package/dist/core/sql/compile.d.ts.map +0 -1
  442. package/dist/core/sql/compile.js +0 -48
  443. package/dist/core/sql/compile.js.map +0 -1
  444. package/dist/core/sql/policy.d.ts +0 -121
  445. package/dist/core/sql/policy.d.ts.map +0 -1
  446. package/dist/core/sql/policy.js +0 -379
  447. package/dist/core/sql/policy.js.map +0 -1
  448. package/dist/core/sql/positions.d.ts +0 -30
  449. package/dist/core/sql/positions.d.ts.map +0 -1
  450. package/dist/core/sql/positions.js +0 -22
  451. package/dist/core/sql/positions.js.map +0 -1
  452. package/dist/core/sql/run.d.ts +0 -76
  453. package/dist/core/sql/run.d.ts.map +0 -1
  454. package/dist/core/sql/run.js +0 -267
  455. package/dist/core/sql/run.js.map +0 -1
  456. package/dist/core/store/createStore.d.ts +0 -49
  457. package/dist/core/store/createStore.d.ts.map +0 -1
  458. package/dist/core/store/createStore.js +0 -227
  459. package/dist/core/store/createStore.js.map +0 -1
  460. package/dist/core/store/cursor.d.ts +0 -4
  461. package/dist/core/store/cursor.d.ts.map +0 -1
  462. package/dist/core/store/cursor.js +0 -22
  463. package/dist/core/store/cursor.js.map +0 -1
  464. package/dist/core/store/json.d.ts +0 -80
  465. package/dist/core/store/json.d.ts.map +0 -1
  466. package/dist/core/store/json.js +0 -342
  467. package/dist/core/store/json.js.map +0 -1
  468. package/dist/core/store.d.ts +0 -160
  469. package/dist/core/store.d.ts.map +0 -1
  470. package/dist/core/store.js +0 -2
  471. package/dist/core/store.js.map +0 -1
  472. package/dist/core/wire.d.ts +0 -20
  473. package/dist/core/wire.d.ts.map +0 -1
  474. package/dist/core/wire.js +0 -84
  475. package/dist/core/wire.js.map +0 -1
  476. package/dist/core/withCaller.d.ts +0 -16
  477. package/dist/core/withCaller.d.ts.map +0 -1
  478. package/dist/core/withCaller.js +0 -29
  479. package/dist/core/withCaller.js.map +0 -1
  480. package/dist/d1/adapter.d.ts +0 -12
  481. package/dist/d1/adapter.d.ts.map +0 -1
  482. package/dist/d1/adapter.js +0 -23
  483. package/dist/d1/adapter.js.map +0 -1
  484. package/dist/d1/codec.d.ts +0 -14
  485. package/dist/d1/codec.d.ts.map +0 -1
  486. package/dist/d1/codec.js +0 -136
  487. package/dist/d1/codec.js.map +0 -1
  488. package/dist/d1/compile/index.d.ts +0 -9
  489. package/dist/d1/compile/index.d.ts.map +0 -1
  490. package/dist/d1/compile/index.js +0 -9
  491. package/dist/d1/compile/index.js.map +0 -1
  492. package/dist/d1/dialect.d.ts +0 -4
  493. package/dist/d1/dialect.d.ts.map +0 -1
  494. package/dist/d1/dialect.js +0 -13
  495. package/dist/d1/dialect.js.map +0 -1
  496. package/dist/d1/executor.d.ts +0 -13
  497. package/dist/d1/executor.d.ts.map +0 -1
  498. package/dist/d1/executor.js +0 -91
  499. package/dist/d1/executor.js.map +0 -1
  500. package/dist/d1/index.d.ts +0 -6
  501. package/dist/d1/index.d.ts.map +0 -1
  502. package/dist/d1/index.js +0 -6
  503. package/dist/d1/index.js.map +0 -1
  504. package/dist/d1/lower.d.ts +0 -8
  505. package/dist/d1/lower.d.ts.map +0 -1
  506. package/dist/d1/lower.js +0 -167
  507. package/dist/d1/lower.js.map +0 -1
  508. package/dist/d1/media.d.ts +0 -5
  509. package/dist/d1/media.d.ts.map +0 -1
  510. package/dist/d1/media.js +0 -157
  511. package/dist/d1/media.js.map +0 -1
  512. package/dist/d1/migrations.d.ts +0 -12
  513. package/dist/d1/migrations.d.ts.map +0 -1
  514. package/dist/d1/migrations.js +0 -111
  515. package/dist/d1/migrations.js.map +0 -1
  516. package/dist/d1/print.d.ts +0 -28
  517. package/dist/d1/print.d.ts.map +0 -1
  518. package/dist/d1/print.js +0 -54
  519. package/dist/d1/print.js.map +0 -1
  520. package/dist/d1/site.d.ts +0 -17
  521. package/dist/d1/site.d.ts.map +0 -1
  522. package/dist/d1/site.js +0 -63
  523. package/dist/d1/site.js.map +0 -1
  524. package/dist/d1/storage.d.ts +0 -34
  525. package/dist/d1/storage.d.ts.map +0 -1
  526. package/dist/d1/storage.js +0 -288
  527. package/dist/d1/storage.js.map +0 -1
  528. package/dist/d1/tz.d.ts +0 -21
  529. package/dist/d1/tz.d.ts.map +0 -1
  530. package/dist/d1/tz.js +0 -54
  531. package/dist/d1/tz.js.map +0 -1
  532. package/dist/d1/validator.d.ts +0 -10
  533. package/dist/d1/validator.d.ts.map +0 -1
  534. package/dist/d1/validator.js +0 -33
  535. package/dist/d1/validator.js.map +0 -1
  536. package/dist/mcp/apps.d.ts +0 -43
  537. package/dist/mcp/apps.d.ts.map +0 -1
  538. package/dist/mcp/apps.js +0 -57
  539. package/dist/mcp/apps.js.map +0 -1
  540. package/dist/mcp/catalog.d.ts +0 -55
  541. package/dist/mcp/catalog.d.ts.map +0 -1
  542. package/dist/mcp/catalog.js +0 -81
  543. package/dist/mcp/catalog.js.map +0 -1
  544. package/dist/mcp/createMcpSurface.d.ts +0 -34
  545. package/dist/mcp/createMcpSurface.d.ts.map +0 -1
  546. package/dist/mcp/createMcpSurface.js +0 -150
  547. package/dist/mcp/createMcpSurface.js.map +0 -1
  548. package/dist/mcp/index.d.ts +0 -4
  549. package/dist/mcp/index.d.ts.map +0 -1
  550. package/dist/mcp/index.js +0 -4
  551. package/dist/mcp/index.js.map +0 -1
  552. package/dist/postgres/adapter.d.ts +0 -20
  553. package/dist/postgres/adapter.d.ts.map +0 -1
  554. package/dist/postgres/adapter.js +0 -44
  555. package/dist/postgres/adapter.js.map +0 -1
  556. package/dist/postgres/codec.d.ts +0 -13
  557. package/dist/postgres/codec.d.ts.map +0 -1
  558. package/dist/postgres/codec.js +0 -110
  559. package/dist/postgres/codec.js.map +0 -1
  560. package/dist/postgres/compile/index.d.ts +0 -9
  561. package/dist/postgres/compile/index.d.ts.map +0 -1
  562. package/dist/postgres/compile/index.js +0 -9
  563. package/dist/postgres/compile/index.js.map +0 -1
  564. package/dist/postgres/driver.d.ts +0 -92
  565. package/dist/postgres/driver.d.ts.map +0 -1
  566. package/dist/postgres/driver.js +0 -110
  567. package/dist/postgres/driver.js.map +0 -1
  568. package/dist/postgres/executor.d.ts +0 -20
  569. package/dist/postgres/executor.d.ts.map +0 -1
  570. package/dist/postgres/executor.js +0 -69
  571. package/dist/postgres/executor.js.map +0 -1
  572. package/dist/postgres/index.d.ts +0 -7
  573. package/dist/postgres/index.d.ts.map +0 -1
  574. package/dist/postgres/index.js +0 -7
  575. package/dist/postgres/index.js.map +0 -1
  576. package/dist/postgres/lower.d.ts +0 -6
  577. package/dist/postgres/lower.d.ts.map +0 -1
  578. package/dist/postgres/lower.js +0 -157
  579. package/dist/postgres/lower.js.map +0 -1
  580. package/dist/postgres/print.d.ts +0 -11
  581. package/dist/postgres/print.d.ts.map +0 -1
  582. package/dist/postgres/print.js +0 -121
  583. package/dist/postgres/print.js.map +0 -1
  584. package/dist/postgres/storage.d.ts +0 -19
  585. package/dist/postgres/storage.d.ts.map +0 -1
  586. package/dist/postgres/storage.js +0 -201
  587. package/dist/postgres/storage.js.map +0 -1
  588. package/dist/postgres/textRows.d.ts +0 -10
  589. package/dist/postgres/textRows.d.ts.map +0 -1
  590. package/dist/postgres/textRows.js +0 -44
  591. package/dist/postgres/textRows.js.map +0 -1
  592. package/dist/postgres/validator.d.ts +0 -12
  593. package/dist/postgres/validator.d.ts.map +0 -1
  594. package/dist/postgres/validator.js +0 -46
  595. package/dist/postgres/validator.js.map +0 -1
  596. package/dist/spec/domain/index.d.ts +0 -3
  597. package/dist/spec/domain/index.d.ts.map +0 -1
  598. package/dist/spec/domain/index.js +0 -3
  599. package/dist/spec/domain/index.js.map +0 -1
  600. package/dist/spec/domain/model/ContentState.d.ts +0 -8
  601. package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
  602. package/dist/spec/domain/model/ContentState.js +0 -7
  603. package/dist/spec/domain/model/ContentState.js.map +0 -1
  604. package/dist/spec/domain/model/Entry.d.ts +0 -29
  605. package/dist/spec/domain/model/Entry.d.ts.map +0 -1
  606. package/dist/spec/domain/model/Entry.js +0 -16
  607. package/dist/spec/domain/model/Entry.js.map +0 -1
  608. package/dist/spec/domain/model/Locale.d.ts +0 -30
  609. package/dist/spec/domain/model/Locale.d.ts.map +0 -1
  610. package/dist/spec/domain/model/Locale.js +0 -33
  611. package/dist/spec/domain/model/Locale.js.map +0 -1
  612. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
  613. package/dist/spec/domain/model/ManifestGrammar.js +0 -149
  614. package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
  615. package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
  616. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
  617. package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
  618. package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
  619. package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
  620. package/dist/spec/domain/model/RuntimePlan.js +0 -4
  621. package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
  622. package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
  623. package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
  624. package/dist/spec/domain/model/SiteConfig.js +0 -13
  625. package/dist/spec/domain/model/SiteConfig.js.map +0 -1
  626. package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
  627. package/dist/spec/domain/model/SqlIr.js +0 -95
  628. package/dist/spec/domain/model/SqlIr.js.map +0 -1
  629. package/dist/spec/domain/model/index.d.ts +0 -14
  630. package/dist/spec/domain/model/index.d.ts.map +0 -1
  631. package/dist/spec/domain/model/index.js +0 -14
  632. package/dist/spec/domain/model/index.js.map +0 -1
  633. package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
  634. package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
  635. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
  636. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
  637. package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
  638. package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
  639. package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
  640. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
  641. package/dist/spec/domain/service/EntryDataValidator.js +0 -88
  642. package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
  643. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
  644. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
  645. package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
  646. package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
  647. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
  648. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
  649. package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
  650. package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
  651. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
  652. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
  653. package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
  654. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
  655. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
  656. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
  657. package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
  658. package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
  659. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
  660. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
  661. package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
  662. package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
  663. package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
  664. package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
  665. package/dist/spec/domain/service/ManifestLinker.js +0 -92
  666. package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
  667. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
  668. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
  669. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
  670. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
  671. package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
  672. package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
  673. package/dist/spec/domain/service/ManifestParser.js +0 -203
  674. package/dist/spec/domain/service/ManifestParser.js.map +0 -1
  675. package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
  676. package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
  677. package/dist/spec/domain/service/ManifestPartition.js +0 -19
  678. package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
  679. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
  680. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
  681. package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
  682. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
  683. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
  684. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
  685. package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
  686. package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
  687. package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
  688. package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
  689. package/dist/spec/domain/service/McpToolNaming.js +0 -50
  690. package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
  691. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
  692. package/dist/spec/domain/service/PlanFingerprint.js +0 -14
  693. package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
  694. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
  695. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
  696. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
  697. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
  698. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -42
  699. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
  700. package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
  701. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
  702. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
  703. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
  704. package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
  705. package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
  706. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
  707. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
  708. package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
  709. package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
  710. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
  711. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
  712. package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
  713. package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
  714. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
  715. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
  716. package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
  717. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
  718. package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
  719. package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
  720. package/dist/spec/domain/service/SqlClassify.js +0 -42
  721. package/dist/spec/domain/service/SqlClassify.js.map +0 -1
  722. package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
  723. package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
  724. package/dist/spec/domain/service/SqlRefusal.js +0 -20
  725. package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
  726. package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
  727. package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
  728. package/dist/spec/domain/service/SqlTypes.js +0 -110
  729. package/dist/spec/domain/service/SqlTypes.js.map +0 -1
  730. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
  731. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
  732. package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
  733. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
  734. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
  735. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
  736. package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
  737. package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
  738. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
  739. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
  740. package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
  741. package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
  742. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
  743. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
  744. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
  745. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
  746. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
  747. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
  748. package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -53
  749. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
  750. package/dist/spec/domain/service/index.d.ts +0 -24
  751. package/dist/spec/domain/service/index.d.ts.map +0 -1
  752. package/dist/spec/domain/service/index.js +0 -24
  753. package/dist/spec/domain/service/index.js.map +0 -1
  754. package/dist/spec/index.d.ts +0 -10
  755. package/dist/spec/index.d.ts.map +0 -1
  756. package/dist/spec/index.js +0 -12
  757. package/dist/spec/index.js.map +0 -1
  758. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
  759. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
  760. package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
  761. package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
  762. package/dist/spec/infrastructure/index.d.ts +0 -2
  763. package/dist/spec/infrastructure/index.d.ts.map +0 -1
  764. package/dist/spec/infrastructure/index.js +0 -2
  765. package/dist/spec/infrastructure/index.js.map +0 -1
  766. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
  767. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
  768. package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
  769. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
  770. package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
  771. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
  772. package/dist/spec/infrastructure/sql/compilePlan.js +0 -282
  773. package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
  774. package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
  775. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
  776. package/dist/spec/infrastructure/sql/compileSql.js +0 -92
  777. package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
  778. package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
  779. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
  780. package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
  781. package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
  782. package/dist/spec/infrastructure/sql/index.d.ts +0 -4
  783. package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
  784. package/dist/spec/infrastructure/sql/index.js +0 -4
  785. package/dist/spec/infrastructure/sql/index.js.map +0 -1
  786. package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
  787. package/dist/spec/kernel/diagnostic.js +0 -296
  788. package/dist/spec/kernel/diagnostic.js.map +0 -1
  789. package/dist/spec/kernel/index.d.ts +0 -8
  790. package/dist/spec/kernel/index.d.ts.map +0 -1
  791. package/dist/spec/kernel/index.js +0 -8
  792. package/dist/spec/kernel/index.js.map +0 -1
  793. package/dist/spec/usecase/EmitTypes.d.ts +0 -22
  794. package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
  795. package/dist/spec/usecase/EmitTypes.js +0 -182
  796. package/dist/spec/usecase/EmitTypes.js.map +0 -1
  797. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
  798. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
  799. package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
  800. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
  801. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
  802. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
  803. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
  804. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
  805. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
  806. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
  807. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
  808. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
  809. package/dist/spec/usecase/dto/index.d.ts +0 -3
  810. package/dist/spec/usecase/dto/index.d.ts.map +0 -1
  811. package/dist/spec/usecase/dto/index.js +0 -3
  812. package/dist/spec/usecase/dto/index.js.map +0 -1
  813. package/dist/spec/usecase/index.d.ts +0 -10
  814. package/dist/spec/usecase/index.d.ts.map +0 -1
  815. package/dist/spec/usecase/index.js +0 -10
  816. package/dist/spec/usecase/index.js.map +0 -1
  817. package/dist/testing/cases/before-hook.d.ts +0 -4
  818. package/dist/testing/cases/before-hook.d.ts.map +0 -1
  819. package/dist/testing/cases/before-hook.js +0 -71
  820. package/dist/testing/cases/before-hook.js.map +0 -1
  821. package/dist/testing/cases/corpus.d.ts +0 -12
  822. package/dist/testing/cases/corpus.d.ts.map +0 -1
  823. package/dist/testing/cases/corpus.js +0 -91
  824. package/dist/testing/cases/corpus.js.map +0 -1
  825. package/dist/testing/cases/policy.d.ts +0 -74
  826. package/dist/testing/cases/policy.d.ts.map +0 -1
  827. package/dist/testing/cases/policy.js +0 -142
  828. package/dist/testing/cases/policy.js.map +0 -1
  829. package/dist/testing/cases/printer.d.ts +0 -4
  830. package/dist/testing/cases/printer.d.ts.map +0 -1
  831. package/dist/testing/cases/printer.js +0 -32
  832. package/dist/testing/cases/printer.js.map +0 -1
  833. package/dist/testing/cases/report-view.d.ts +0 -5
  834. package/dist/testing/cases/report-view.d.ts.map +0 -1
  835. package/dist/testing/cases/report-view.js +0 -33
  836. package/dist/testing/cases/report-view.js.map +0 -1
  837. package/dist/testing/cases/requisition.d.ts +0 -4
  838. package/dist/testing/cases/requisition.d.ts.map +0 -1
  839. package/dist/testing/cases/requisition.js +0 -38
  840. package/dist/testing/cases/requisition.js.map +0 -1
  841. package/dist/testing/cases/search-places.d.ts +0 -4
  842. package/dist/testing/cases/search-places.d.ts.map +0 -1
  843. package/dist/testing/cases/search-places.js +0 -60
  844. package/dist/testing/cases/search-places.js.map +0 -1
  845. package/dist/testing/cases/stock.d.ts +0 -4
  846. package/dist/testing/cases/stock.d.ts.map +0 -1
  847. package/dist/testing/cases/stock.js +0 -35
  848. package/dist/testing/cases/stock.js.map +0 -1
  849. package/dist/testing/cases/store.d.ts +0 -4
  850. package/dist/testing/cases/store.d.ts.map +0 -1
  851. package/dist/testing/cases/store.js +0 -100
  852. package/dist/testing/cases/store.js.map +0 -1
  853. package/dist/testing/harness.d.ts +0 -94
  854. package/dist/testing/harness.d.ts.map +0 -1
  855. package/dist/testing/harness.js +0 -168
  856. package/dist/testing/harness.js.map +0 -1
  857. package/dist/testing/index.d.ts.map +0 -1
  858. package/dist/testing/index.js.map +0 -1
  859. package/dist/testing/report.d.ts +0 -15
  860. package/dist/testing/report.d.ts.map +0 -1
  861. package/dist/testing/report.js +0 -22
  862. package/dist/testing/report.js.map +0 -1
  863. package/dist/web/createRestSurface.d.ts +0 -7
  864. package/dist/web/createRestSurface.d.ts.map +0 -1
  865. package/dist/web/createRestSurface.js +0 -39
  866. package/dist/web/createRestSurface.js.map +0 -1
  867. package/dist/web/index.d.ts +0 -2
  868. package/dist/web/index.d.ts.map +0 -1
  869. package/dist/web/index.js +0 -2
  870. package/dist/web/index.js.map +0 -1
  871. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  872. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  873. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  874. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  875. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  876. package/docs/adr/0010-locale-and-translates.md +0 -453
  877. package/docs/adr/0011-adapter-port-spec.md +0 -281
  878. package/docs/adr/0012-views-as-public-rest.md +0 -161
  879. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  880. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -919
  881. package/docs/adr/0016-site-semantic-layer.md +0 -70
  882. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  883. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  884. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
  885. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  886. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  887. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  888. package/docs/adr/0023-port-failure-contract.md +0 -69
  889. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  890. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  891. package/docs/adr/0026-progressive-generate.md +0 -36
  892. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  893. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  894. package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
  895. package/docs/adr/0030-store.md +0 -40
  896. package/docs/adr/0031-host-cloud-core-contract.md +0 -25
  897. package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -361
  898. package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
  899. package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
  900. package/docs/adr/0035-sql-dialects.md +0 -154
  901. package/docs/adr/0036-host-and-dialect.md +0 -65
  902. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -124
  903. package/docs/adr/0038-bun-native-host.md +0 -63
  904. package/docs/adr/README.md +0 -96
  905. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  906. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  907. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  908. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  909. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  910. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  911. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  912. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
  913. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  914. package/docs/examples/commerce-inventory.md +0 -481
  915. package/docs/examples/commerce.md +0 -254
  916. package/docs/examples/guarded-api.md +0 -238
  917. package/docs/examples/intake-hooks.md +0 -237
  918. package/docs/examples/intake.md +0 -127
  919. package/docs/examples/legal-documents.md +0 -218
  920. package/docs/examples/procurement.md +0 -215
  921. package/docs/examples/publication.md +0 -211
  922. package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
  923. package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
  924. package/docs/examples/reference-service/README.md +0 -33
  925. package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
  926. package/docs/examples/reference-service/manifests/orders.yaml +0 -120
  927. package/docs/examples/reference-service/mantle.config.json +0 -1
  928. package/docs/examples/reference-service/package.json +0 -27
  929. package/docs/examples/reference-service/smoke.mjs +0 -156
  930. package/docs/examples/reference-service/src/handlers.ts +0 -36
  931. package/docs/examples/reference-service/src/index.ts +0 -33
  932. package/docs/examples/reference-service/src/service.ts +0 -78
  933. package/docs/examples/reference-service/wrangler.jsonc +0 -26
  934. package/docs/examples/reservation.md +0 -142
  935. package/docs/skills/develop/mcp-app.md +0 -79
  936. /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
@@ -0,0 +1,560 @@
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
+ import { mcpAppCatalogues } from './generated/admin-descriptors.js';
11
+
12
+ declare const db: (env: Env) => D1Database; // as in service composition
13
+ declare const caller: Parameters<typeof mcp>[0]['caller'];
14
+ declare function loadAppHtml(): string;
15
+
16
+ const app: McpApps = { resources: [{
17
+ uri: 'ui://my-app/records/build-1', name: 'my-app-records',
18
+ html: () => loadAppHtml(), renders: ['records'],
19
+ }] };
20
+ const handler = mcp({ db, caller, apps: {
21
+ public: app,
22
+ admin: adminMcpApps({ catalogue: mcpAppCatalogues.admin }), // or an array with your own contributors
23
+ } });
24
+ ```
25
+
26
+ Use your own `ui://<app>/…` prefix. `ui://mantle-admin/…` is reserved for Admin.
27
+ HTML is reusable static content; caller-specific data comes from tool results.
28
+ Build the front end with the official `@modelcontextprotocol/ext-apps` client.
29
+ `renders` links tools to `_meta.ui.resourceUri`; `appOnly` adds
30
+ `visibility: ["app"]`. Both name tools actually exposed on that endpoint.
31
+ Resources may supply CSP, permissions, `prefersBorder` and `domain`; each is
32
+ passed through as the resource's `_meta.ui`. `domain` is the dedicated sandbox
33
+ origin for hosts that serve each App from its own origin; use the form that
34
+ host documents.
35
+
36
+ ## Package and application ownership
37
+
38
+ Core (`@aotter/mantle`) owns tools, resources, endpoint links and server authorization,
39
+ validation, scope and OCC. It has no React, DOM or Admin dependency. The optional
40
+ `@aotter/mantle-ui` owns reusable presentation and interaction controllers: pass it
41
+ data and invocation callbacks; it knows no MCP connection, cookie, role or Admin API.
42
+ `@aotter/mantle-admin` owns the Admin product, its existing hooks/surface transport
43
+ and the thin adapter to the pinned official ext-apps client. The official client
44
+ owns protocol negotiation, messages and connection lifecycle; the separate browser
45
+ source/origin guard is not a protocol implementation.
46
+
47
+ Applications own domain components and build entries. A frontend MCP App uses its
48
+ own React entry, official ext-apps and optionally mantle-ui, registered through
49
+ Core's generic resources. It needs no Admin package or Admin session. See the
50
+ [standalone frontend example](../../examples/frontend-mcp-app/README.md) for a
51
+ small owner-scoped example. `public` names the frontend endpoint, not anonymous
52
+ access: use the application's verified Caller and generated authorization rules.
53
+ UI visibility and `appOnly` metadata grant no execution authority.
54
+
55
+ The default Admin App uses the default composition. Custom Admin Apps use the same
56
+ `defineAdmin` entry, slots and hooks, with `pages[].mcp` for explicit page opt-in;
57
+ an application may also supply its own resource. There is no extra Mantle bridge
58
+ package, provider, slot registry or query cache to install for these paths.
59
+
60
+ When combining a custom renderer with Admin, partition ownership explicitly:
61
+
62
+ ```ts
63
+ // Both views already belong to this endpoint. Custom resources use their own prefix.
64
+ const adminApps = [
65
+ adminMcpApps({ catalogue: mcpAppCatalogues.admin, renders: ['pending_requests'] }),
66
+ { resources: [{ uri: 'ui://my-app/details/build-2', name: 'my-details',
67
+ html: () => loadAppHtml(), renders: ['request_details'] }] },
68
+ ];
69
+ ```
70
+
71
+ Register the array on `apps.admin`. Leaving Admin's default ownership of all Views
72
+ while another resource claims one is an error, independent of registration order.
73
+
74
+ An HTML loader receives `{ tools, env, request }`: `tools` is the same tool names this caller's
75
+ `tools/list` returns on the endpoint (with `authorize` configured, only those
76
+ it allows), so the HTML it renders names no tool the caller cannot see; `env` is
77
+ the environment the handler was called with (a Worker's bindings, such as
78
+ `ASSETS`) and `request` the `resources/read` request, for its origin. Loaders
79
+ that take less, or nothing, keep working. `adminMcpApps` uses it: the catalogue
80
+ it embeds holds only the Views and row actions in `tools`. A host that caches
81
+ the resource across callers may hold an older catalogue; a View it does not
82
+ describe still shows its rows, with no action to open.
83
+
84
+ `adminMcpApps({ catalogue })` takes `mcpAppCatalogues.admin`, which `mantle generate --admin` writes to
85
+ `generated/admin-descriptors.ts` (pass it as is). It needs no `html`: its default loader reads the file
86
+ `mantle bundle` built, `/admin/mcp-app.html`, through `env.ASSETS.fetch` on a
87
+ Worker, and from `dist/client/admin/mcp-app.html` on Bun (`file` names another
88
+ path). The Worker's assets binding must be named `ASSETS` (otherwise pass `html`);
89
+ the loader follows the one same-origin redirect the default `html_handling` answers a
90
+ `.html` path with. Pass `html` (a string or a loader) to serve the App from elsewhere. The
91
+ file carries the `csp` your `defineAdmin({ mcp: { csp } })` declared; a loader may return
92
+ `{ html, csp }` instead of a string, and the handler sends that `csp` as `_meta.ui.csp` on
93
+ `resources/read`; it replaces the resource's own `csp` rather than merging with it. A loader
94
+ that throws answers the host with a redacted error and logs the message on the server.
95
+
96
+ Resource URIs are immutable cache identities. By default Admin contributes an async
97
+ resource source: after the request passes the origin/identity/Admin gates, Admin
98
+ reads its built asset and hashes the HTML, full static catalogue and material
99
+ resource metadata into `ui://mantle-admin/admin/<digest>`. A new UI build or catalogue
100
+ gets a new URI, used consistently by tools and resource reads. Workers cache only
101
+ the raw immutable asset/identity per contributor and ASSETS binding; caller-filtered
102
+ catalogues are embedded per read. Bun rereads the file so rebuilding in the same
103
+ process changes the identity. Run `mantle bundle` and deploy its assets with the server;
104
+ missing assets can fail discovery when Admin resolves the build identity.
105
+
106
+ An explicit `uri` keeps application-owned identity. A custom `html` function must
107
+ supply a build-specific `uri`: Core cannot infer its build or safely memoize its
108
+ request-dependent output. A raw `html` string may use the automatic identity.
109
+
110
+ ### Keep old conversations working after an upgrade
111
+
112
+ A new URI does not invalidate a host's saved tool definitions or old conversation
113
+ cards. Keep previously deployed pages with `adminMcpApps({ catalogue, previous })`.
114
+ `previous` is an array of `AdminMcpSnapshot` from `@aotter/mantle-admin/mcp`:
115
+ `{ uri, html, csp?, domain?, title? }`. Each `html` includes the original `mantle-catalog`
116
+ script (the page returned by `resources/read`, not the raw bundle). The SDK serves
117
+ its original HTML and metadata at its original URI, filters its catalogue against
118
+ the current caller's tools on every read, and gives only the current build renderer
119
+ ownership. A removed/denied tool gains no authority through an old page.
120
+
121
+ Store these snapshots in the application's source or durable artifact storage;
122
+ an isolate cache or untracked `dist/` is insufficient for a clean CI deployment.
123
+ Keep an explicit retention window. Old pages outside that window and incompatible
124
+ tool renames/input/output changes need an application migration. Never answer an
125
+ old digest with the latest HTML. Host metadata refresh is a development/recovery
126
+ operation, not a normal compatible-upgrade requirement.
127
+
128
+ For the default built loader, share the exact declaration in
129
+ `src/mcp-app-definition.ts` (no `html` or `previous`):
130
+
131
+ ```ts
132
+ import { mcpAppCatalogues } from '../generated/admin-descriptors.ts';
133
+ export const appDefinition = { catalogue: mcpAppCatalogues.admin };
134
+ ```
135
+
136
+ Keep a committed `mcp-app-previous.json` at the project root (initially `[]`). Load
137
+ it only inside the service's MCP branch, before constructing the handler, so other
138
+ routes do not parse archived full-page HTML at startup:
139
+
140
+ ```ts
141
+ const { default: previous } = await import('../mcp-app-previous.json', { with: { type: 'json' } });
142
+ serveMcpHandler ??= serveMcp(tools, { ...options, apps: {
143
+ admin: adminMcpApps({ ...appDefinition, previous }),
144
+ } });
145
+ ```
146
+
147
+ Keep custom `renders`, catalogue extensions, `domain` and `title` in the shared
148
+ definition too. Node 22.18+ can read these generated `.ts` modules; a TypeScript
149
+ app using `.ts` import paths enables `allowImportingTsExtensions` with `noEmit`.
150
+ Keep snapshots outside the directory containing `admin.tsx`: Tailwind scans that
151
+ directory, and compiled HTML/JavaScript inside a snapshot can be mistaken for
152
+ utility class names and change subsequent CSS builds.
153
+
154
+ After a successful deployment, archive the **exact asset just deployed** with
155
+ this application-owned `scripts/archive-mcp-app.mjs`, then commit the snapshot
156
+ for the next build. Run it in the deployment script, not as a manual cache fix:
157
+
158
+ ```js
159
+ import { readFileSync, writeFileSync } from 'node:fs';
160
+ import { adminMcpApps } from '@aotter/mantle-admin/mcp';
161
+ import { appDefinition } from '../src/mcp-app-definition.ts';
162
+
163
+ const path = 'mcp-app-previous.json';
164
+ const previous = JSON.parse(readFileSync(path, 'utf8'));
165
+ const context = { env: {}, request: new Request('https://archive.invalid/mcp') };
166
+ const source = adminMcpApps({ ...appDefinition,
167
+ html: readFileSync('dist/client/admin/mcp-app.html', 'utf8') });
168
+ const { resources: [resource] } = typeof source === 'function' ? await source(context) : source;
169
+ const tools = new Set([...Object.keys(appDefinition.catalogue.views),
170
+ ...Object.keys(appDefinition.catalogue.actions)]);
171
+ const loaded = typeof resource.html === 'string' ? resource.html
172
+ : await resource.html({ ...context, tools });
173
+ const page = typeof loaded === 'string' ? { html: loaded } : loaded;
174
+ const snapshot = { uri: resource.uri, title: resource.title, ...page,
175
+ ...(resource.domain === undefined ? {} : { domain: resource.domain }) };
176
+ // This application's policy: retain the last two deployed pages for future builds.
177
+ writeFileSync(path, JSON.stringify([...previous.filter(p => p.uri !== snapshot.uri), snapshot].slice(-2)) + '\n');
178
+ ```
179
+
180
+ This archives static UI/catalogue metadata, never rows, cookies or OAuth tokens.
181
+ Custom loaders must archive their actual immutable resource, including CSP/domain,
182
+ instead of using this default-asset recipe. Compare the archived URI with deployed
183
+ `tools/list`/`resources/read`; a mismatching declaration or stale local build is
184
+ not deployment evidence.
185
+
186
+ Core accepts static contributors or async `(context: { env, request }) => McpApps`
187
+ sources, including mixed arrays. Static declarations are checked at construction;
188
+ async sources resolve after the endpoint's origin and caller gates, then their
189
+ links are checked without reusing another request's resource links. Request-bound
190
+ tool tables check on the first matching request and recheck changed tool names. Duplicate
191
+ resource URIs or names, conflicting tool ownership, and absent or foreign-endpoint
192
+ tools throw `ContractError` with code `MCP_APP_CONFLICT`. HTML loaders never run during import or handler construction. Treat descriptors as
193
+ immutable after construction. Static HTML loaders run only on `resources/read`;
194
+ async sources may read immutable build assets to declare their identity. Failures
195
+ return a redacted internal error. Core never reads a build file or computes a UI digest.
196
+
197
+ Generated media-enabled handlers keep the same cache while resolving their tool
198
+ table against each request's environment. Database handles, storage and Caller
199
+ are never retained in that cache. The low-level SDK also accepts an async
200
+ `(request, env) => tools` resolver; its names must match the endpoint's App
201
+ catalogue. If its tool names change, those links are checked again, and a call
202
+ always uses the current request's tool table.
203
+
204
+ Clients advertise `io.modelcontextprotocol/ui` and MIME type
205
+ `text/html;profile=mcp-app` in initialization capabilities or, for stateless
206
+ requests, in `params._meta["io.modelcontextprotocol/clientCapabilities"]`.
207
+ 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,
208
+ authorization, caller, origin and database behavior.
209
+
210
+ ## The Admin App in a host
211
+
212
+ > **Verification status:** automated AppBridge coverage exists, but the compatibility claims in this section have not yet been verified manually in real ChatGPT or Claude hosts.
213
+
214
+ The Admin App speaks MCP Apps `2026-01-26` to the host and asks only for what
215
+ the host advertises in `hostCapabilities`:
216
+
217
+ - Without `serverTools` it is read-only: rows show, no row action opens and no
218
+ list refresh is attempted.
219
+ - `format: "uri"` values with an `http(s)` URL open through `ui/open-link`
220
+ when the host offers `openLinks`, and are plain text otherwise. The sandbox
221
+ blocks navigation, so the App never uses `window.open` or `target="_blank"`.
222
+ - After a row action succeeds, `ui/update-model-context` tells the model the
223
+ tool, the row id and the outcome, for its next turn. The App never sends
224
+ `ui/message`, which would speak for the user.
225
+ - It declares `availableDisplayModes: ["inline", "fullscreen"]` and offers a
226
+ full-screen toggle (`ui/request-display-mode`) when the host lists
227
+ `fullscreen` in its context.
228
+ - `appInfo.version` is the `@aotter/mantle-admin` version.
229
+
230
+ The pinned official client validates host context. Invalid protocol data is not
231
+ reinterpreted by a second Mantle wire parser; connection failures are visible.
232
+ Mantle applies only presentation fields and style variables it supports. `locale` and
233
+ `timeZone` format dates (an unknown zone falls back to the browser's);
234
+ `safeAreaInsets` become root padding; `containerDimensions` bound the root: a
235
+ fixed or maximum height scrolls, and the reported size stays within it.
236
+ `theme: "dark"` sets both `data-theme` and the `.dark` class. Only the spec's
237
+ style variables are applied; [Theme](#theme) says how they meet your own.
238
+
239
+ A View result carries its rows twice, as the JSON text block and as
240
+ `structuredContent`. Hosts truncate long tool results (about 150k characters
241
+ is reported for some), and a truncated text block is no longer JSON. So an MCP
242
+ View page is cut by size: `limit` still accepts 1 to 500, but a page holds only
243
+ as many of those rows as fit 60,000 characters of JSON. It stops before the first
244
+ row that overflows, and the next cursor resumes at that row, so no row is skipped
245
+ or repeated. A single row over the budget is returned alone, with its cursor, and a
246
+ View without an order (one page, no cursor) is returned whole; any page still over the
247
+ budget carries a notice that hosts may truncate it. The default is 50 rows. REST and native paging keep their 500-row limit.
248
+
249
+ Checks against real hosts need an account and a public HTTPS endpoint, so
250
+ they are manual: add the endpoint as a custom connector in each host, call a
251
+ View tool with an App, and check light and dark themes, a narrow window,
252
+ full screen, a row action, and a link. Check too that the host advertises
253
+ `hostCapabilities.serverTools`; without it the App is read-only. The automated interoperability test
254
+ uses the official `AppBridge`; your app runs its generated version ([Run the compatibility test](#run-the-compatibility-test)).
255
+
256
+ ## Customising Admin for MCP hosts
257
+
258
+ `mantle bundle` builds the Admin MCP App from the same entry as the browser Admin
259
+ (`src/admin.tsx`, or the built-in one) into one self-contained file,
260
+ `<assets>/admin/mcp-app.html`, which `adminMcpApps` serves as
261
+ `ui://mantle-admin/admin/<digest>` by default. Shared View cells and opted-in pages reach the host, with application plugins,
262
+ Tailwind classes and CSS. Browser-only record/input overrides do not mount there.
263
+
264
+ ### Which slots render where
265
+
266
+ | Slot | Browser | MCP host |
267
+ | --- | --- | --- |
268
+ | `Shell`, `Sidebar`, `Header`, `Brand`, `Home`, `CollectionList`, `list.actions:<schema>` | yes | never: the App has no shell, sidebar or router |
269
+ | `cell:view:<view>.<column>` | yes | yes: each column of the rows the host's View tool returned |
270
+ | `cell:<schema>.<field>`, `input:<schema>.<field>`, `record.aside:<schema>`, `record.actions:<schema>`, `RecordView` | yes | never: browser-only record/collection slots; their `surface` is `"browser"` (`mantle bundle` reminds you) |
271
+ | `pages[]`, `nav`, `home`, nav badges | yes | only a page that declares `mcp` (below) |
272
+
273
+ A component for a `both` slot gets `surface` (`"browser"` or `"mcp-app"`). The
274
+ record/collection slots keep `surface: "browser"` for an explicit, truthful contract.
275
+ Other browser-only slots have no `surface` prop.
276
+
277
+ Migration (#1710): remove unreachable `surface === "mcp-app"` branches from
278
+ record/input/collection overrides. Their surface is now typed as the browser
279
+ literal. Move shared interactions to a View cell or opted-in page; changing
280
+ this type does not add a record editor, entry tool, or automatic CRUD to MCP.
281
+
282
+ ### Record input versus Procedure action input
283
+
284
+ `input:requests.title` wraps the browser record editor's `value`, `onChange`,
285
+ `readOnly` and JSON Schema property. It does not customize an MCP action dialog.
286
+ The native App builds that dialog from the Procedure's declared input schema,
287
+ binds the row identity and observed version, validates input, and runs the
288
+ existing authorized Procedure tool. There is no View `actions` field.
289
+ Declare `Procedure.spec.target: { schema: requests, id: id, version: expectedVersion }`
290
+ and expose it with a Trigger whose `source: { kind: mcp, surface: admin }` and
291
+ `target: { procedure: approve }`. Return the target row's unchanged `id` and
292
+ `version` in the View, preserving their column provenance (do not replace them
293
+ with a computed label, joined row identity or synthetic version). Admin derives
294
+ row bindings from that target and the View's proven columns. See
295
+ [Procedure targets and row placement](native-admin.md#collection-navigation-and-operation-placement)
296
+ and the shipped [purchasing manifest](../../examples/purchasing/manifests/purchasing.yaml)
297
+ for complete Procedure/Trigger syntax. Changing the UI grants no execution rights.
298
+
299
+ For custom MCP interaction, use an opted-in page with `useView` and
300
+ `useOperation` instead of trying to render a record editor. The shared-page example below demonstrates page opt-in;
301
+ [Native Admin](native-admin.md) describes generated typed hooks. An operation
302
+ component follows the same public contract:
303
+
304
+ ```tsx
305
+ // In a typed opted-in page; replace approve/input with your generated names.
306
+ function Approve({ id }: { id: string }) {
307
+ const { run, pending } = useOperation("approve");
308
+ const [message, setMessage] = useState("");
309
+ return <><button disabled={!run || pending} onClick={() => {
310
+ void run?.({ id }).then(() => setMessage("Done"), () => setMessage("Not available"));
311
+ }}>Approve</button><p role="status">{message}</p></>;
312
+ }
313
+ ```
314
+
315
+ Import `useState` from React and `useOperation` from your generated
316
+ `admin-client` (its types are tied to your manifests). Include observed-version
317
+ input when the Procedure declares OCC; never replace it with an unguarded write.
318
+ Without serverTools capability, `run` is absent and this button stays disabled.
319
+ A missing or denied tool is reported as unavailable when invoked; an enabled
320
+ button does not establish permission. To ship a record-oriented MCP UI today, explicitly
321
+ declare its read View and write Procedure; `useEntry` is unavailable in MCP.
322
+
323
+ ### Rules for a component that renders in a host
324
+
325
+ 1. **Data only through the hooks.** `useView` and `useOperation` call the View's
326
+ or Procedure's admin MCP tool through the host, as the signed-in caller.
327
+ `useEntries`, `useEntry`, `useCollectionTotal`, `useMe` and `useBadges` have no
328
+ tool and read `unavailable`: declare the data a component needs as an admin
329
+ View. Without the host's `serverTools`, `useOperation().run` is `undefined`.
330
+ No `fetch` to `/admin/api`, no `document.cookie`: the build refuses both.
331
+ 2. **Links through the host.** `<AdminLink>` and `useOpenLink()` open an http(s)
332
+ URL through `ui/open-link`; the sandbox blocks `window.open` and
333
+ `target="_blank"`. An `/admin/...` path has no origin in a host, so
334
+ `<AdminLink>` shows it as text.
335
+ 3. **No assumed width.** The host sets the frame; a narrow one and a full screen
336
+ must both work.
337
+ 4. **Remote assets only from origins you declare.** Something from another origin
338
+ loads only if `defineAdmin({ mcp: { csp } })` names it in the list its use needs:
339
+ `resourceDomains` for an image, font, stylesheet or script,
340
+ `connectDomains` for `fetch`, `WebSocket`, `EventSource` and `import()`,
341
+ `frameDomains` for an iframe (`baseUriDomains` is for `<base>`). Each entry is an
342
+ origin, `https://host[:port]` or `https://*.host`; the build refuses `*`, a bare
343
+ scheme or a path. You declare it once: the build writes it into
344
+ `mcp-app.html` and `adminMcpApps` sends it as `_meta.ui.csp` on `resources/read`
345
+ (not on `resources/list`, which names no HTML). Prefer assets bundled into your entry: they are inlined.
346
+ 5. **Branch on the surface if you must, but both branches render.**
347
+ `useAdminSurface()` and the `surface` prop say where you are; a component that
348
+ shows nothing in a host is a hole in the host's view.
349
+
350
+ ### Theme
351
+
352
+ The App's colours come from three layers, later over earlier:
353
+
354
+ 1. Admin's default tokens (`@aotter/mantle-ui/tokens.css`: the shadcn variables
355
+ `--background`, `--primary`, `--chart-1` and the rest).
356
+ 2. Your own CSS, which your entry imports: your `--primary` or `.dark {}`
357
+ overrides apply in the App as they do in the browser Admin.
358
+ 3. The host's style variables, for neutral colours, radii, text sizes and the
359
+ font only, laid over the tokens. The table lists, for each host variable the
360
+ App reads, the Tailwind theme variable it feeds.
361
+
362
+ | Host variable | App theme variable |
363
+ | --- | --- |
364
+ | `--color-background-primary` | `--color-background`, `--color-card`, `--color-popover` |
365
+ | `--color-text-primary` | `--color-foreground`, `--color-card-foreground`, `--color-popover-foreground`, `--color-secondary-foreground`, `--color-accent-foreground` |
366
+ | `--color-background-secondary` | `--color-muted`, `--color-secondary`, `--color-accent` |
367
+ | `--color-text-secondary` | `--color-muted-foreground` |
368
+ | `--color-border-primary` | `--color-border`, `--color-input` |
369
+ | `--color-ring-primary` | `--color-ring` |
370
+ | `--color-text-danger` | `--color-destructive` |
371
+ | `--border-radius-sm` | `--radius-sm` |
372
+ | `--border-radius-md` | `--radius-md` |
373
+ | `--border-radius-lg` | `--radius-lg` |
374
+ | `--font-text-xs-size` | `--text-xs` |
375
+ | `--font-text-xs-line-height` | `--text-xs--line-height` |
376
+ | `--font-text-sm-size` | `--text-sm` |
377
+ | `--font-text-sm-line-height` | `--text-sm--line-height` |
378
+ | `--font-text-md-size` | `--text-base` |
379
+ | `--font-text-md-line-height` | `--text-base--line-height` |
380
+ | `--font-sans` | `--font-app` (the App's font) |
381
+
382
+ `--font-mono` and `--font-weight-*` apply as the host gives them. The primary
383
+ colours (`--color-primary`, `--color-primary-foreground`) and the chart colours
384
+ (`--color-chart-1` to `-5`) are your brand's and are never the host's.
385
+ `--sidebar-*` and `--app-*` do not apply in a host. The host's theme marks the
386
+ root with both `data-theme` and the `.dark` class, so your `.dark {}` block and
387
+ `dark:` classes follow it; a host that sends no theme gets the system's colour scheme (`prefers-color-scheme`), as the same `.dark` class, and a theme the host sends wins over it.
388
+ The variables a host does not send fall back to the tokens.
389
+
390
+ ### A page for an MCP App view: `pages[].mcp`
391
+
392
+ A custom page may also be an App view. Name a View that has an admin MCP tool:
393
+
394
+ ```tsx
395
+ export default defineAdmin(admin, {
396
+ pages: [{
397
+ path: "queue", title: "Queue", element: <QueuePage />,
398
+ header: { description: "Items awaiting review", actions: <QueueActions /> },
399
+ mcp: { renders: "pending-requests" },
400
+ }],
401
+ });
402
+ ```
403
+
404
+ The explicit `header` object shares the native title, localized description and
405
+ React actions with browser Admin. Its actions must use the same host-safe hooks
406
+ and capability fallbacks as the page. `header: false` delegates the heading to
407
+ the element; omit `header` to preserve element-only MCP presentation (and the
408
+ browser's native title). Do not render a second h1 inside `element` when using
409
+ the native heading.
410
+
411
+ When the host's tool is that View's tool, the App shows `<QueuePage />` instead
412
+ of the default rows table, in the host's frame and theme. The page reads its own data
413
+ through the hooks (`useView("pending-requests", input)` calls the View's tool through
414
+ the host), so use only `both` hooks and components, and render something sensible
415
+ when a hook reads `unavailable`.
416
+ The generated `admin-client.ts` records, for each View, `true` when it is an admin MCP tool and `null` when not; `tsc`
417
+ refuses a `renders` that is misspelt, names a collection, or names a View with no
418
+ admin MCP tool. When several pages name one View, the first is shown.
419
+
420
+ ### What `mantle bundle` checks
421
+
422
+ `buildAdmin`, which `mantle bundle` runs, builds the App and then refuses it,
423
+ naming the module (and the slot, when it can tell) and pointing here, if the
424
+ file:
425
+
426
+ - contains `/admin/api`, which is the browser's route and has no session in a host;
427
+ - reads `document.cookie`;
428
+ - uses a remote origin (`http(s):` or `//`; `ws(s):` for sockets) that
429
+ `defineAdmin({ mcp: { csp } })` does not declare in the list that use needs.
430
+
431
+ The check is best effort: it reads the built text, so it catches only what it can
432
+ see as a string. It catches `src` and `poster` attributes and props, `<iframe src>`
433
+ (against `frameDomains`), every URL of a `srcset` and of a CSS `image-set()`, `url()`
434
+ and `@import`, a `<link href>`, `setAttribute("src" | "href", "https://…")`, and a
435
+ remote string literal given to `fetch()`, `new WebSocket()`, `new EventSource()` or
436
+ `import()` (against `connectDomains`). It does not treat `href` on a link
437
+ (`<a>`, `<AdminLink>`) as a load: that is navigation, which opens through the host.
438
+ A URL put together at run time is not seen; the generated compatibility test, which
439
+ loads the App under the spec's default CSP and fails on any network request, is
440
+ the backstop at run time. `document.cookie` in Mantle's own library code (the kit's
441
+ sidebar remembers its state in one) does not fail the build; in yours it does.
442
+
443
+ `window.open` and `target="_blank"` in your own code only warn. The whole selected
444
+ MCP entry graph is checked, not only the slots a host renders. By default it is
445
+ the Admin entry, so browser-only code (a `Shell`, a `Home`, a page) imported there
446
+ must avoid direct `/admin/api` fetches and cookies too. Shared components read
447
+ through the hooks, which use the browser route in the browser and host tools in
448
+ a host. For integrations that need browser APIs, select a separate entry below.
449
+ The build prints the App's size.
450
+
451
+ ### Isolate browser-only integrations
452
+
453
+ `pages[].mcp` opts a page into rendering; it does not remove other imports from
454
+ the build. To isolate browser-only integrations, add `admin.mcp.tsx` beside the
455
+ Worker entry and `admin.tsx`. `mantle bundle` discovers this optional file and
456
+ uses it for `mcp-app.html`; the browser SPA and preview keep `admin.tsx`. With the
457
+ build API, pass `buildAdmin({ entry: "src/admin.tsx", mcpEntry: "src/admin.mcp.tsx", outDir: "dist/client/admin" })`.
458
+ Without the optional file/option, the shared-entry behavior is unchanged.
459
+
460
+ Keep a single host-safe config and components module, composed through the same
461
+ `defineAdmin` contract in both roots. For example, with an admin View `queue`:
462
+
463
+ ```tsx
464
+ // src/admin-shared.tsx
465
+ import type { AdminConfig } from "@aotter/mantle-admin/app";
466
+ import type { AppAdminTypes } from "../generated/admin-client.js";
467
+ import { QueuePage } from "./queue-page.js"; // native hooks, host-safe components
468
+ import "./shared.css";
469
+ export const shared = {
470
+ pages: [{ path: "queue", title: "Queue", element: <QueuePage />, mcp: { renders: "queue" } }],
471
+ } satisfies AdminConfig<AppAdminTypes>;
472
+ ```
473
+
474
+ ```tsx
475
+ // src/admin.tsx: only the browser root imports this integration
476
+ import { defineAdmin } from "@aotter/mantle-admin/app";
477
+ import { admin } from "../generated/admin-client.js";
478
+ import { shared } from "./admin-shared.js";
479
+ import { BrowserReport } from "./browser-report.js";
480
+ export default defineAdmin(admin, {
481
+ ...shared,
482
+ pages: [...shared.pages, { path: "browser-report", title: "Browser report", element: <BrowserReport /> }],
483
+ });
484
+ ```
485
+
486
+ ```tsx
487
+ // src/admin.mcp.tsx: no import of admin.tsx or browser-report.js
488
+ import { defineAdmin } from "@aotter/mantle-admin/app";
489
+ import { admin } from "../generated/admin-client.js";
490
+ import { shared } from "./admin-shared.js";
491
+ export default defineAdmin(admin, shared);
492
+ ```
493
+
494
+ Only code excluded from the MCP graph may use browser-only integrations. The
495
+ selected MCP entry is still read in Node to obtain its definition: do not access
496
+ `window` or `document` at module initialization there. An explicit entry that
497
+ fails to load fails the build; it does not fall back to the browser entry.
498
+ The MCP guard, declared CSP, catalogue, resource ownership and built-HTML cache
499
+ identity apply to the selected graph exactly as before. Entry selection changes
500
+ no server permissions and adds no provider or transport.
501
+
502
+ ### Run the compatibility test
503
+
504
+ For an interactive test in another official host, load the HTML returned by an
505
+ authenticated MCP `resources/read`, discovered through `resources/list` or the
506
+ tool's UI resource link. Do not serve the raw built `mcp-app.html` directly: the
507
+ server embeds the caller-filtered catalogue when reading the resource, and
508
+ without that catalogue native row actions are absent. The generated test below
509
+ supplies its own synthetic catalogue and checks rendering, not a real host's
510
+ authorization flow or a completed action dialog.
511
+
512
+ The build check reads text; this test runs the App. `mantle generate --admin` writes
513
+ `generated/admin-mcp-app.check.mjs`. After `npm run build`, run
514
+ `node --test generated/admin-mcp-app.check.mjs` (the examples name it `npm test`;
515
+ `MANTLE_MCP_APP_HTML` points it at another built file). It loads the built
516
+ `mcp-app.html` in a host page built on the official `AppBridge`. The App is in a
517
+ sandboxed iframe from its own origin, under the spec's default CSP, so it cannot
518
+ reach the host page. For each View whose `cell:view:` slot you override and each
519
+ `pages[].mcp` page it sends sample rows made from the catalogue's column schemas
520
+ (three full rows and one with every nullable column null), in a light and a dark
521
+ host. When the file records nothing customised it runs the first View of the
522
+ catalogue; when the file has no record at all, every View. It fails on:
523
+
524
+ - a network request that leaves the frame (the failure names the URL; origins you
525
+ declared in `mcp.csp`, for the kind of use they were declared for, are answered
526
+ empty, since the test has no network);
527
+ - a console error, including a CSP refusal, or an uncaught exception;
528
+ - an App that does not show the result (it still waits, or is empty), that does not
529
+ take the host's dark theme, or that never reports a size.
530
+
531
+ After the result it waits until the App has made no request and logged nothing for
532
+ 400 ms, at most 5 s. The test checks the slots a host renders today: `cell:view:` and
533
+ pages. `input:`, `record.aside:`, `record.actions:`, `cell:<schema>.<field>` and
534
+ `RecordView` are browser-only, so the generated compatibility check does not
535
+ claim to test them. A Procedure action form does not mount these slots.
536
+
537
+ It needs `playwright-core` (`npm install -D playwright-core`) and Chrome or Chromium:
538
+ run `npx playwright-core install chromium`, or set `MANTLE_TEST_CHROMIUM` to a Chrome or
539
+ Chromium executable. With no browser the test fails, saying so; it never skips. Import
540
+ `checkMcpApp` from `@aotter/mantle-admin/testing` to call it yourself. For a real host
541
+ (Claude's custom connector, ChatGPT), follow the manual checks under
542
+ [The Admin App in a host](#the-admin-app-in-a-host).
543
+
544
+ ### Hosts without MCP Apps
545
+
546
+ A host that does not advertise the MCP Apps extension gets no `ui://` resource
547
+ and no `_meta.ui` on the tools. Its tool results are the same complete JSON
548
+ (`content` text and `structuredContent`); the App only shows them. Nothing an
549
+ application customises changes what a tool returns.
550
+
551
+ ### Upgrading from the prebuilt App
552
+
553
+ Earlier versions shipped the App prebuilt as `@aotter/mantle-admin/mcp-app`
554
+ (`mantleAppHtml`), which ignored your Admin entry. That export is gone. Remove
555
+ the import and the `html:` option from `adminMcpApps({ catalogue })`, run
556
+ `mantle generate` again (the generated `admin-client.ts` now records which Views are admin
557
+ MCP tools) and `mantle bundle`; the App is in `<assets>/admin/mcp-app.html`, and
558
+ your entry's CSS, components and pages are now in it. The Worker's assets
559
+ binding must serve `/admin/mcp-app.html` (it does for the Admin build's output
560
+ directory); on Bun, `dist/client/admin/mcp-app.html` must exist at run time.