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

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 (870) hide show
  1. package/README.md +39 -306
  2. package/dist/admin/consent.d.ts +17 -0
  3. package/dist/admin/consent.d.ts.map +1 -0
  4. package/dist/admin/consent.js +17 -0
  5. package/dist/admin/consent.js.map +1 -0
  6. package/dist/admin/createAdminSurface.d.ts +22 -0
  7. package/dist/admin/createAdminSurface.d.ts.map +1 -0
  8. package/dist/admin/createAdminSurface.js +589 -0
  9. package/dist/admin/createAdminSurface.js.map +1 -0
  10. package/dist/admin/developerConsole.d.ts +264 -0
  11. package/dist/admin/developerConsole.d.ts.map +1 -0
  12. package/dist/admin/developerConsole.js +136 -0
  13. package/dist/admin/developerConsole.js.map +1 -0
  14. package/dist/admin/identity.d.ts +62 -0
  15. package/dist/admin/identity.d.ts.map +1 -0
  16. package/dist/admin/identity.js +7 -0
  17. package/dist/admin/identity.js.map +1 -0
  18. package/dist/admin/index.d.ts +4 -0
  19. package/dist/admin/index.d.ts.map +1 -0
  20. package/dist/admin/index.js +4 -0
  21. package/dist/admin/index.js.map +1 -0
  22. package/dist/admin/procedureFlow.d.ts +25 -0
  23. package/dist/admin/procedureFlow.d.ts.map +1 -0
  24. package/dist/admin/procedureFlow.js +154 -0
  25. package/dist/admin/procedureFlow.js.map +1 -0
  26. package/dist/auth/ConsoleEmailSender.d.ts +15 -0
  27. package/dist/auth/ConsoleEmailSender.d.ts.map +1 -0
  28. package/dist/auth/ConsoleEmailSender.js +19 -0
  29. package/dist/auth/ConsoleEmailSender.js.map +1 -0
  30. package/dist/auth/appleClientSecret.d.ts +75 -0
  31. package/dist/auth/appleClientSecret.d.ts.map +1 -0
  32. package/dist/auth/appleClientSecret.js +116 -0
  33. package/dist/auth/appleClientSecret.js.map +1 -0
  34. package/dist/auth/buildAuth.d.ts +4565 -0
  35. package/dist/auth/buildAuth.d.ts.map +1 -0
  36. package/dist/auth/buildAuth.js +307 -0
  37. package/dist/auth/buildAuth.js.map +1 -0
  38. package/dist/auth/callerResolver.d.ts +48 -0
  39. package/dist/auth/callerResolver.d.ts.map +1 -0
  40. package/dist/auth/callerResolver.js +49 -0
  41. package/dist/auth/callerResolver.js.map +1 -0
  42. package/dist/auth/createAuthRoutes.d.ts +22 -0
  43. package/dist/auth/createAuthRoutes.d.ts.map +1 -0
  44. package/dist/auth/createAuthRoutes.js +128 -0
  45. package/dist/auth/createAuthRoutes.js.map +1 -0
  46. package/dist/auth/createMantleAuth.d.ts +3 -0
  47. package/dist/auth/createMantleAuth.d.ts.map +1 -0
  48. package/dist/auth/createMantleAuth.js +483 -0
  49. package/dist/auth/createMantleAuth.js.map +1 -0
  50. package/dist/auth/db.d.ts +17 -0
  51. package/dist/auth/db.d.ts.map +1 -0
  52. package/dist/auth/db.js +24 -0
  53. package/dist/auth/db.js.map +1 -0
  54. package/dist/auth/emailTemplates.d.ts +7 -0
  55. package/dist/auth/emailTemplates.d.ts.map +1 -0
  56. package/dist/auth/emailTemplates.js +27 -0
  57. package/dist/auth/emailTemplates.js.map +1 -0
  58. package/dist/auth/index.d.ts +9 -0
  59. package/dist/auth/index.d.ts.map +1 -0
  60. package/dist/auth/index.js +7 -0
  61. package/dist/auth/index.js.map +1 -0
  62. package/dist/auth/methods.d.ts +717 -0
  63. package/dist/auth/methods.d.ts.map +1 -0
  64. package/dist/auth/methods.js +321 -0
  65. package/dist/auth/methods.js.map +1 -0
  66. package/dist/auth/oauthTokens.d.ts +24 -0
  67. package/dist/auth/oauthTokens.d.ts.map +1 -0
  68. package/dist/auth/oauthTokens.js +146 -0
  69. package/dist/auth/oauthTokens.js.map +1 -0
  70. package/dist/auth/setupIncomplete.d.ts +16 -0
  71. package/dist/auth/setupIncomplete.d.ts.map +1 -0
  72. package/dist/auth/setupIncomplete.js +50 -0
  73. package/dist/auth/setupIncomplete.js.map +1 -0
  74. package/dist/auth/types.d.ts +440 -0
  75. package/dist/auth/types.d.ts.map +1 -0
  76. package/dist/auth/types.js +10 -0
  77. package/dist/auth/types.js.map +1 -0
  78. package/dist/bun/index.d.ts +65 -0
  79. package/dist/bun/index.d.ts.map +1 -0
  80. package/dist/bun/index.js +130 -0
  81. package/dist/bun/index.js.map +1 -0
  82. package/dist/cli/emitModule.d.ts +7 -0
  83. package/dist/cli/emitModule.d.ts.map +1 -0
  84. package/dist/cli/emitModule.js +127 -0
  85. package/dist/cli/emitModule.js.map +1 -0
  86. package/dist/cli/generate.d.ts +4 -16
  87. package/dist/cli/generate.d.ts.map +1 -1
  88. package/dist/cli/generate.js +318 -262
  89. package/dist/cli/generate.js.map +1 -1
  90. package/dist/cli/main.d.ts +1 -1
  91. package/dist/cli/main.d.ts.map +1 -1
  92. package/dist/cli/main.js +15 -71
  93. package/dist/cli/main.js.map +1 -1
  94. package/dist/cli/preset.d.ts +18 -0
  95. package/dist/cli/preset.d.ts.map +1 -0
  96. package/dist/cli/preset.js +352 -0
  97. package/dist/cli/preset.js.map +1 -0
  98. package/dist/cloudflare/index.d.ts +21 -0
  99. package/dist/cloudflare/index.d.ts.map +1 -0
  100. package/dist/cloudflare/index.js +14 -0
  101. package/dist/cloudflare/index.js.map +1 -0
  102. package/dist/cloudflare/r2Media.d.ts +43 -0
  103. package/dist/cloudflare/r2Media.d.ts.map +1 -0
  104. package/dist/cloudflare/r2Media.js +69 -0
  105. package/dist/cloudflare/r2Media.js.map +1 -0
  106. package/dist/core/caller.d.ts +35 -0
  107. package/dist/core/caller.d.ts.map +1 -0
  108. package/dist/core/caller.js +3 -0
  109. package/dist/core/caller.js.map +1 -0
  110. package/dist/core/createMantle.d.ts +22 -0
  111. package/dist/core/createMantle.d.ts.map +1 -0
  112. package/dist/core/createMantle.js +117 -0
  113. package/dist/core/createMantle.js.map +1 -0
  114. package/dist/core/dialect.d.ts +41 -0
  115. package/dist/core/dialect.d.ts.map +1 -0
  116. package/dist/core/dialect.js +7 -0
  117. package/dist/core/dialect.js.map +1 -0
  118. package/dist/core/driver.d.ts +17 -0
  119. package/dist/core/driver.d.ts.map +1 -0
  120. package/dist/core/driver.js +2 -0
  121. package/dist/core/driver.js.map +1 -0
  122. package/dist/core/email.d.ts +17 -0
  123. package/dist/core/email.d.ts.map +1 -0
  124. package/dist/core/email.js +2 -0
  125. package/dist/core/email.js.map +1 -0
  126. package/dist/core/index.d.ts +16 -0
  127. package/dist/core/index.d.ts.map +1 -0
  128. package/dist/core/index.js +16 -0
  129. package/dist/core/index.js.map +1 -0
  130. package/dist/core/invocation.d.ts +66 -0
  131. package/dist/core/invocation.d.ts.map +1 -0
  132. package/dist/core/invocation.js +3 -0
  133. package/dist/core/invocation.js.map +1 -0
  134. package/dist/core/runtime/auth.d.ts +9 -0
  135. package/dist/core/runtime/auth.d.ts.map +1 -0
  136. package/dist/core/runtime/auth.js +39 -0
  137. package/dist/core/runtime/auth.js.map +1 -0
  138. package/dist/core/runtime/createRuntime.d.ts +23 -0
  139. package/dist/core/runtime/createRuntime.d.ts.map +1 -0
  140. package/dist/core/runtime/createRuntime.js +214 -0
  141. package/dist/core/runtime/createRuntime.js.map +1 -0
  142. package/dist/core/runtime/verifyPlan.d.ts +34 -0
  143. package/dist/core/runtime/verifyPlan.d.ts.map +1 -0
  144. package/dist/core/runtime/verifyPlan.js +301 -0
  145. package/dist/core/runtime/verifyPlan.js.map +1 -0
  146. package/dist/core/service.d.ts +45 -0
  147. package/dist/core/service.d.ts.map +1 -0
  148. package/dist/core/service.js +2 -0
  149. package/dist/core/service.js.map +1 -0
  150. package/dist/core/site.d.ts +117 -0
  151. package/dist/core/site.d.ts.map +1 -0
  152. package/dist/core/site.js +2 -0
  153. package/dist/core/site.js.map +1 -0
  154. package/dist/core/siteConfig.d.ts +5 -0
  155. package/dist/core/siteConfig.d.ts.map +1 -0
  156. package/dist/core/siteConfig.js +24 -0
  157. package/dist/core/siteConfig.js.map +1 -0
  158. package/dist/core/sql/allowlist.d.ts +65 -0
  159. package/dist/core/sql/allowlist.d.ts.map +1 -0
  160. package/dist/core/sql/allowlist.js +705 -0
  161. package/dist/core/sql/allowlist.js.map +1 -0
  162. package/dist/core/sql/ast.d.ts +24 -0
  163. package/dist/core/sql/ast.d.ts.map +1 -0
  164. package/dist/core/sql/ast.js +32 -0
  165. package/dist/core/sql/ast.js.map +1 -0
  166. package/dist/core/sql/compile.d.ts +50 -0
  167. package/dist/core/sql/compile.d.ts.map +1 -0
  168. package/dist/core/sql/compile.js +48 -0
  169. package/dist/core/sql/compile.js.map +1 -0
  170. package/dist/core/sql/policy.d.ts +121 -0
  171. package/dist/core/sql/policy.d.ts.map +1 -0
  172. package/dist/core/sql/policy.js +379 -0
  173. package/dist/core/sql/policy.js.map +1 -0
  174. package/dist/core/sql/positions.d.ts +30 -0
  175. package/dist/core/sql/positions.d.ts.map +1 -0
  176. package/dist/core/sql/positions.js +22 -0
  177. package/dist/core/sql/positions.js.map +1 -0
  178. package/dist/core/sql/run.d.ts +76 -0
  179. package/dist/core/sql/run.d.ts.map +1 -0
  180. package/dist/core/sql/run.js +267 -0
  181. package/dist/core/sql/run.js.map +1 -0
  182. package/dist/core/store/createStore.d.ts +49 -0
  183. package/dist/core/store/createStore.d.ts.map +1 -0
  184. package/dist/core/store/createStore.js +227 -0
  185. package/dist/core/store/createStore.js.map +1 -0
  186. package/dist/core/store/cursor.d.ts +4 -0
  187. package/dist/core/store/cursor.d.ts.map +1 -0
  188. package/dist/core/store/cursor.js +22 -0
  189. package/dist/core/store/cursor.js.map +1 -0
  190. package/dist/core/store/json.d.ts +80 -0
  191. package/dist/core/store/json.d.ts.map +1 -0
  192. package/dist/core/store/json.js +342 -0
  193. package/dist/core/store/json.js.map +1 -0
  194. package/dist/core/store.d.ts +160 -0
  195. package/dist/core/store.d.ts.map +1 -0
  196. package/dist/core/store.js +2 -0
  197. package/dist/core/store.js.map +1 -0
  198. package/dist/core/wire.d.ts +20 -0
  199. package/dist/core/wire.d.ts.map +1 -0
  200. package/dist/core/wire.js +84 -0
  201. package/dist/core/wire.js.map +1 -0
  202. package/dist/core/withCaller.d.ts +16 -0
  203. package/dist/core/withCaller.d.ts.map +1 -0
  204. package/dist/core/withCaller.js +29 -0
  205. package/dist/core/withCaller.js.map +1 -0
  206. package/dist/d1/adapter.d.ts +12 -0
  207. package/dist/d1/adapter.d.ts.map +1 -0
  208. package/dist/d1/adapter.js +23 -0
  209. package/dist/d1/adapter.js.map +1 -0
  210. package/dist/d1/codec.d.ts +14 -0
  211. package/dist/d1/codec.d.ts.map +1 -0
  212. package/dist/d1/codec.js +136 -0
  213. package/dist/d1/codec.js.map +1 -0
  214. package/dist/d1/compile/index.d.ts +9 -0
  215. package/dist/d1/compile/index.d.ts.map +1 -0
  216. package/dist/d1/compile/index.js +9 -0
  217. package/dist/d1/compile/index.js.map +1 -0
  218. package/dist/d1/dialect.d.ts +4 -0
  219. package/dist/d1/dialect.d.ts.map +1 -0
  220. package/dist/d1/dialect.js +13 -0
  221. package/dist/d1/dialect.js.map +1 -0
  222. package/dist/d1/executor.d.ts +13 -0
  223. package/dist/d1/executor.d.ts.map +1 -0
  224. package/dist/d1/executor.js +91 -0
  225. package/dist/d1/executor.js.map +1 -0
  226. package/dist/d1/index.d.ts +6 -0
  227. package/dist/d1/index.d.ts.map +1 -0
  228. package/dist/d1/index.js +6 -0
  229. package/dist/d1/index.js.map +1 -0
  230. package/dist/d1/lower.d.ts +8 -0
  231. package/dist/d1/lower.d.ts.map +1 -0
  232. package/dist/d1/lower.js +167 -0
  233. package/dist/d1/lower.js.map +1 -0
  234. package/dist/d1/media.d.ts +5 -0
  235. package/dist/d1/media.d.ts.map +1 -0
  236. package/dist/d1/media.js +157 -0
  237. package/dist/d1/media.js.map +1 -0
  238. package/dist/d1/migrations.d.ts +12 -0
  239. package/dist/d1/migrations.d.ts.map +1 -0
  240. package/dist/d1/migrations.js +111 -0
  241. package/dist/d1/migrations.js.map +1 -0
  242. package/dist/d1/print.d.ts +28 -0
  243. package/dist/d1/print.d.ts.map +1 -0
  244. package/dist/d1/print.js +54 -0
  245. package/dist/d1/print.js.map +1 -0
  246. package/dist/d1/site.d.ts +17 -0
  247. package/dist/d1/site.d.ts.map +1 -0
  248. package/dist/d1/site.js +63 -0
  249. package/dist/d1/site.js.map +1 -0
  250. package/dist/d1/storage.d.ts +34 -0
  251. package/dist/d1/storage.d.ts.map +1 -0
  252. package/dist/d1/storage.js +288 -0
  253. package/dist/d1/storage.js.map +1 -0
  254. package/dist/d1/tz.d.ts +21 -0
  255. package/dist/d1/tz.d.ts.map +1 -0
  256. package/dist/d1/tz.js +54 -0
  257. package/dist/d1/tz.js.map +1 -0
  258. package/dist/d1/validator.d.ts +10 -0
  259. package/dist/d1/validator.d.ts.map +1 -0
  260. package/dist/d1/validator.js +33 -0
  261. package/dist/d1/validator.js.map +1 -0
  262. package/dist/mcp/apps.d.ts +43 -0
  263. package/dist/mcp/apps.d.ts.map +1 -0
  264. package/dist/mcp/apps.js +57 -0
  265. package/dist/mcp/apps.js.map +1 -0
  266. package/dist/mcp/catalog.d.ts +55 -0
  267. package/dist/mcp/catalog.d.ts.map +1 -0
  268. package/dist/mcp/catalog.js +81 -0
  269. package/dist/mcp/catalog.js.map +1 -0
  270. package/dist/mcp/createMcpSurface.d.ts +34 -0
  271. package/dist/mcp/createMcpSurface.d.ts.map +1 -0
  272. package/dist/mcp/createMcpSurface.js +150 -0
  273. package/dist/mcp/createMcpSurface.js.map +1 -0
  274. package/dist/mcp/index.d.ts +4 -0
  275. package/dist/mcp/index.d.ts.map +1 -0
  276. package/dist/mcp/index.js +4 -0
  277. package/dist/mcp/index.js.map +1 -0
  278. package/dist/postgres/adapter.d.ts +20 -0
  279. package/dist/postgres/adapter.d.ts.map +1 -0
  280. package/dist/postgres/adapter.js +44 -0
  281. package/dist/postgres/adapter.js.map +1 -0
  282. package/dist/postgres/codec.d.ts +13 -0
  283. package/dist/postgres/codec.d.ts.map +1 -0
  284. package/dist/postgres/codec.js +110 -0
  285. package/dist/postgres/codec.js.map +1 -0
  286. package/dist/postgres/compile/index.d.ts +9 -0
  287. package/dist/postgres/compile/index.d.ts.map +1 -0
  288. package/dist/postgres/compile/index.js +9 -0
  289. package/dist/postgres/compile/index.js.map +1 -0
  290. package/dist/postgres/driver.d.ts +92 -0
  291. package/dist/postgres/driver.d.ts.map +1 -0
  292. package/dist/postgres/driver.js +110 -0
  293. package/dist/postgres/driver.js.map +1 -0
  294. package/dist/postgres/executor.d.ts +20 -0
  295. package/dist/postgres/executor.d.ts.map +1 -0
  296. package/dist/postgres/executor.js +69 -0
  297. package/dist/postgres/executor.js.map +1 -0
  298. package/dist/postgres/index.d.ts +7 -0
  299. package/dist/postgres/index.d.ts.map +1 -0
  300. package/dist/postgres/index.js +7 -0
  301. package/dist/postgres/index.js.map +1 -0
  302. package/dist/postgres/lower.d.ts +6 -0
  303. package/dist/postgres/lower.d.ts.map +1 -0
  304. package/dist/postgres/lower.js +157 -0
  305. package/dist/postgres/lower.js.map +1 -0
  306. package/dist/postgres/print.d.ts +11 -0
  307. package/dist/postgres/print.d.ts.map +1 -0
  308. package/dist/postgres/print.js +121 -0
  309. package/dist/postgres/print.js.map +1 -0
  310. package/dist/postgres/storage.d.ts +19 -0
  311. package/dist/postgres/storage.d.ts.map +1 -0
  312. package/dist/postgres/storage.js +201 -0
  313. package/dist/postgres/storage.js.map +1 -0
  314. package/dist/postgres/textRows.d.ts +10 -0
  315. package/dist/postgres/textRows.d.ts.map +1 -0
  316. package/dist/postgres/textRows.js +44 -0
  317. package/dist/postgres/textRows.js.map +1 -0
  318. package/dist/postgres/validator.d.ts +12 -0
  319. package/dist/postgres/validator.d.ts.map +1 -0
  320. package/dist/postgres/validator.js +46 -0
  321. package/dist/postgres/validator.js.map +1 -0
  322. package/dist/spec/domain/index.d.ts +3 -0
  323. package/dist/spec/domain/index.d.ts.map +1 -0
  324. package/dist/spec/domain/index.js +3 -0
  325. package/dist/spec/domain/index.js.map +1 -0
  326. package/dist/spec/domain/model/ContentState.d.ts +8 -0
  327. package/dist/spec/domain/model/ContentState.d.ts.map +1 -0
  328. package/dist/spec/domain/model/ContentState.js +7 -0
  329. package/dist/spec/domain/model/ContentState.js.map +1 -0
  330. package/dist/spec/domain/model/Entry.d.ts +29 -0
  331. package/dist/spec/domain/model/Entry.d.ts.map +1 -0
  332. package/dist/spec/domain/model/Entry.js +16 -0
  333. package/dist/spec/domain/model/Entry.js.map +1 -0
  334. package/dist/spec/domain/model/Locale.d.ts +30 -0
  335. package/dist/spec/domain/model/Locale.d.ts.map +1 -0
  336. package/dist/spec/domain/model/Locale.js +33 -0
  337. package/dist/spec/domain/model/Locale.js.map +1 -0
  338. package/dist/spec/domain/model/ManifestGrammar.d.ts +452 -0
  339. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -0
  340. package/dist/spec/domain/model/ManifestGrammar.js +149 -0
  341. package/dist/spec/domain/model/ManifestGrammar.js.map +1 -0
  342. package/dist/spec/domain/model/MediaMimeAccept.d.ts +55 -0
  343. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +1 -0
  344. package/dist/spec/domain/model/MediaMimeAccept.js +90 -0
  345. package/dist/spec/domain/model/MediaMimeAccept.js.map +1 -0
  346. package/dist/spec/domain/model/RuntimePlan.d.ts +94 -0
  347. package/dist/spec/domain/model/RuntimePlan.d.ts.map +1 -0
  348. package/dist/spec/domain/model/RuntimePlan.js +4 -0
  349. package/dist/spec/domain/model/RuntimePlan.js.map +1 -0
  350. package/dist/spec/domain/model/SiteConfig.d.ts +173 -0
  351. package/dist/spec/domain/model/SiteConfig.d.ts.map +1 -0
  352. package/dist/spec/domain/model/SiteConfig.js +13 -0
  353. package/dist/spec/domain/model/SiteConfig.js.map +1 -0
  354. package/dist/spec/domain/model/SqlIr.d.ts +96 -0
  355. package/dist/spec/domain/model/SqlIr.d.ts.map +1 -0
  356. package/dist/spec/domain/model/SqlIr.js +95 -0
  357. package/dist/spec/domain/model/SqlIr.js.map +1 -0
  358. package/dist/spec/domain/model/index.d.ts +14 -0
  359. package/dist/spec/domain/model/index.d.ts.map +1 -0
  360. package/dist/spec/domain/model/index.js +14 -0
  361. package/dist/spec/domain/model/index.js.map +1 -0
  362. package/dist/spec/domain/service/CloudflareCron.d.ts +2 -0
  363. package/dist/spec/domain/service/CloudflareCron.d.ts.map +1 -0
  364. package/dist/spec/domain/service/CloudflareCron.js +63 -0
  365. package/dist/spec/domain/service/CloudflareCron.js.map +1 -0
  366. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +34 -0
  367. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +1 -0
  368. package/dist/spec/domain/service/CrossSchemaChecker.js +114 -0
  369. package/dist/spec/domain/service/CrossSchemaChecker.js.map +1 -0
  370. package/dist/spec/domain/service/EntryDataValidator.d.ts +56 -0
  371. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +1 -0
  372. package/dist/spec/domain/service/EntryDataValidator.js +88 -0
  373. package/dist/spec/domain/service/EntryDataValidator.js.map +1 -0
  374. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +29 -0
  375. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +1 -0
  376. package/dist/spec/domain/service/JsonSchemaToZod.js +156 -0
  377. package/dist/spec/domain/service/JsonSchemaToZod.js.map +1 -0
  378. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +75 -0
  379. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +1 -0
  380. package/dist/spec/domain/service/LifecycleStateMachine.js +76 -0
  381. package/dist/spec/domain/service/LifecycleStateMachine.js.map +1 -0
  382. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +29 -0
  383. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +1 -0
  384. package/dist/spec/domain/service/LocaleCanonicalizer.js +96 -0
  385. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +1 -0
  386. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +60 -0
  387. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +1 -0
  388. package/dist/spec/domain/service/ManifestFieldChecks.js +116 -0
  389. package/dist/spec/domain/service/ManifestFieldChecks.js.map +1 -0
  390. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +15 -0
  391. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +1 -0
  392. package/dist/spec/domain/service/ManifestGraphValidator.js +225 -0
  393. package/dist/spec/domain/service/ManifestGraphValidator.js.map +1 -0
  394. package/dist/spec/domain/service/ManifestLinker.d.ts +45 -0
  395. package/dist/spec/domain/service/ManifestLinker.d.ts.map +1 -0
  396. package/dist/spec/domain/service/ManifestLinker.js +92 -0
  397. package/dist/spec/domain/service/ManifestLinker.js.map +1 -0
  398. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +16 -0
  399. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +1 -0
  400. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +76 -0
  401. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +1 -0
  402. package/dist/spec/domain/service/ManifestParser.d.ts +49 -0
  403. package/dist/spec/domain/service/ManifestParser.d.ts.map +1 -0
  404. package/dist/spec/domain/service/ManifestParser.js +203 -0
  405. package/dist/spec/domain/service/ManifestParser.js.map +1 -0
  406. package/dist/spec/domain/service/ManifestPartition.d.ts +9 -0
  407. package/dist/spec/domain/service/ManifestPartition.d.ts.map +1 -0
  408. package/dist/spec/domain/service/ManifestPartition.js +19 -0
  409. package/dist/spec/domain/service/ManifestPartition.js.map +1 -0
  410. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +33 -0
  411. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +1 -0
  412. package/dist/spec/domain/service/ManifestPathDiagnoser.js +43 -0
  413. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +1 -0
  414. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +10 -0
  415. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +1 -0
  416. package/dist/spec/domain/service/ManifestSourceSpans.js +76 -0
  417. package/dist/spec/domain/service/ManifestSourceSpans.js.map +1 -0
  418. package/dist/spec/domain/service/McpToolNaming.d.ts +25 -0
  419. package/dist/spec/domain/service/McpToolNaming.d.ts.map +1 -0
  420. package/dist/spec/domain/service/McpToolNaming.js +50 -0
  421. package/dist/spec/domain/service/McpToolNaming.js.map +1 -0
  422. package/dist/spec/domain/service/PlanFingerprint.d.ts +4 -0
  423. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +1 -0
  424. package/dist/spec/domain/service/PlanFingerprint.js +14 -0
  425. package/dist/spec/domain/service/PlanFingerprint.js.map +1 -0
  426. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +4 -0
  427. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +1 -0
  428. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +211 -0
  429. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +1 -0
  430. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +42 -0
  431. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -0
  432. package/dist/spec/domain/service/SchemaAdminUiChecker.js +289 -0
  433. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -0
  434. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +33 -0
  435. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +1 -0
  436. package/dist/spec/domain/service/SchemaIndexChecker.js +256 -0
  437. package/dist/spec/domain/service/SchemaIndexChecker.js.map +1 -0
  438. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +11 -0
  439. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +1 -0
  440. package/dist/spec/domain/service/SchemaSearchChecker.js +78 -0
  441. package/dist/spec/domain/service/SchemaSearchChecker.js.map +1 -0
  442. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +31 -0
  443. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +1 -0
  444. package/dist/spec/domain/service/SchemaSpecChecks.js +445 -0
  445. package/dist/spec/domain/service/SchemaSpecChecks.js.map +1 -0
  446. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +39 -0
  447. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +1 -0
  448. package/dist/spec/domain/service/SiteDefaultsValidator.js +194 -0
  449. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +1 -0
  450. package/dist/spec/domain/service/SqlClassify.d.ts +19 -0
  451. package/dist/spec/domain/service/SqlClassify.d.ts.map +1 -0
  452. package/dist/spec/domain/service/SqlClassify.js +42 -0
  453. package/dist/spec/domain/service/SqlClassify.js.map +1 -0
  454. package/dist/spec/domain/service/SqlRefusal.d.ts +16 -0
  455. package/dist/spec/domain/service/SqlRefusal.d.ts.map +1 -0
  456. package/dist/spec/domain/service/SqlRefusal.js +20 -0
  457. package/dist/spec/domain/service/SqlRefusal.js.map +1 -0
  458. package/dist/spec/domain/service/SqlTypes.d.ts +40 -0
  459. package/dist/spec/domain/service/SqlTypes.d.ts.map +1 -0
  460. package/dist/spec/domain/service/SqlTypes.js +110 -0
  461. package/dist/spec/domain/service/SqlTypes.js.map +1 -0
  462. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +3 -0
  463. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +1 -0
  464. package/dist/spec/domain/service/StaffRoleHierarchy.js +19 -0
  465. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +1 -0
  466. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +16 -0
  467. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +1 -0
  468. package/dist/spec/domain/service/TriggerGraphChecks.js +337 -0
  469. package/dist/spec/domain/service/TriggerGraphChecks.js.map +1 -0
  470. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +4 -0
  471. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +1 -0
  472. package/dist/spec/domain/service/TriggerSpecChecks.js +89 -0
  473. package/dist/spec/domain/service/TriggerSpecChecks.js.map +1 -0
  474. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +11 -0
  475. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +1 -0
  476. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +26 -0
  477. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +1 -0
  478. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +14 -0
  479. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -0
  480. package/dist/spec/domain/service/ViewAdminUiChecker.js +53 -0
  481. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -0
  482. package/dist/spec/domain/service/index.d.ts +24 -0
  483. package/dist/spec/domain/service/index.d.ts.map +1 -0
  484. package/dist/spec/domain/service/index.js +24 -0
  485. package/dist/spec/domain/service/index.js.map +1 -0
  486. package/dist/spec/index.d.ts +10 -0
  487. package/dist/spec/index.d.ts.map +1 -0
  488. package/dist/spec/index.js +12 -0
  489. package/dist/spec/index.js.map +1 -0
  490. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +16 -0
  491. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +1 -0
  492. package/dist/spec/infrastructure/cli/parseArgsError.js +34 -0
  493. package/dist/spec/infrastructure/cli/parseArgsError.js.map +1 -0
  494. package/dist/spec/infrastructure/index.d.ts +2 -0
  495. package/dist/spec/infrastructure/index.d.ts.map +1 -0
  496. package/dist/spec/infrastructure/index.js +2 -0
  497. package/dist/spec/infrastructure/index.js.map +1 -0
  498. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +18 -0
  499. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +1 -0
  500. package/dist/spec/infrastructure/sql/PgQueryParser.js +17 -0
  501. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +1 -0
  502. package/dist/spec/infrastructure/sql/compilePlan.d.ts +37 -0
  503. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -0
  504. package/dist/spec/infrastructure/sql/compilePlan.js +282 -0
  505. package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -0
  506. package/dist/spec/infrastructure/sql/compileSql.d.ts +35 -0
  507. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +1 -0
  508. package/dist/spec/infrastructure/sql/compileSql.js +92 -0
  509. package/dist/spec/infrastructure/sql/compileSql.js.map +1 -0
  510. package/dist/spec/infrastructure/sql/frontEnd.d.ts +8 -0
  511. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +1 -0
  512. package/dist/spec/infrastructure/sql/frontEnd.js +100 -0
  513. package/dist/spec/infrastructure/sql/frontEnd.js.map +1 -0
  514. package/dist/spec/infrastructure/sql/index.d.ts +4 -0
  515. package/dist/spec/infrastructure/sql/index.d.ts.map +1 -0
  516. package/dist/spec/infrastructure/sql/index.js +4 -0
  517. package/dist/spec/infrastructure/sql/index.js.map +1 -0
  518. package/dist/spec/kernel/diagnostic.d.ts +137 -0
  519. package/dist/spec/kernel/diagnostic.d.ts.map +1 -0
  520. package/dist/spec/kernel/diagnostic.js +296 -0
  521. package/dist/spec/kernel/diagnostic.js.map +1 -0
  522. package/dist/spec/kernel/index.d.ts +8 -0
  523. package/dist/spec/kernel/index.d.ts.map +1 -0
  524. package/dist/spec/kernel/index.js +8 -0
  525. package/dist/spec/kernel/index.js.map +1 -0
  526. package/dist/spec/usecase/EmitTypes.d.ts +22 -0
  527. package/dist/spec/usecase/EmitTypes.d.ts.map +1 -0
  528. package/dist/spec/usecase/EmitTypes.js +182 -0
  529. package/dist/spec/usecase/EmitTypes.js.map +1 -0
  530. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +8 -0
  531. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +1 -0
  532. package/dist/spec/usecase/ValidateManifestsUseCase.js +101 -0
  533. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +1 -0
  534. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +27 -0
  535. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +1 -0
  536. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +2 -0
  537. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +1 -0
  538. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +14 -0
  539. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +1 -0
  540. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +2 -0
  541. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +1 -0
  542. package/dist/spec/usecase/dto/index.d.ts +3 -0
  543. package/dist/spec/usecase/dto/index.d.ts.map +1 -0
  544. package/dist/spec/usecase/dto/index.js +3 -0
  545. package/dist/spec/usecase/dto/index.js.map +1 -0
  546. package/dist/spec/usecase/index.d.ts +10 -0
  547. package/dist/spec/usecase/index.d.ts.map +1 -0
  548. package/dist/spec/usecase/index.js +10 -0
  549. package/dist/spec/usecase/index.js.map +1 -0
  550. package/dist/testing/cases/before-hook.d.ts +4 -0
  551. package/dist/testing/cases/before-hook.d.ts.map +1 -0
  552. package/dist/testing/cases/before-hook.js +71 -0
  553. package/dist/testing/cases/before-hook.js.map +1 -0
  554. package/dist/testing/cases/corpus.d.ts +12 -0
  555. package/dist/testing/cases/corpus.d.ts.map +1 -0
  556. package/dist/testing/cases/corpus.js +91 -0
  557. package/dist/testing/cases/corpus.js.map +1 -0
  558. package/dist/testing/cases/policy.d.ts +74 -0
  559. package/dist/testing/cases/policy.d.ts.map +1 -0
  560. package/dist/testing/cases/policy.js +142 -0
  561. package/dist/testing/cases/policy.js.map +1 -0
  562. package/dist/testing/cases/printer.d.ts +4 -0
  563. package/dist/testing/cases/printer.d.ts.map +1 -0
  564. package/dist/testing/cases/printer.js +32 -0
  565. package/dist/testing/cases/printer.js.map +1 -0
  566. package/dist/testing/cases/report-view.d.ts +5 -0
  567. package/dist/testing/cases/report-view.d.ts.map +1 -0
  568. package/dist/testing/cases/report-view.js +33 -0
  569. package/dist/testing/cases/report-view.js.map +1 -0
  570. package/dist/testing/cases/requisition.d.ts +4 -0
  571. package/dist/testing/cases/requisition.d.ts.map +1 -0
  572. package/dist/testing/cases/requisition.js +38 -0
  573. package/dist/testing/cases/requisition.js.map +1 -0
  574. package/dist/testing/cases/search-places.d.ts +4 -0
  575. package/dist/testing/cases/search-places.d.ts.map +1 -0
  576. package/dist/testing/cases/search-places.js +60 -0
  577. package/dist/testing/cases/search-places.js.map +1 -0
  578. package/dist/testing/cases/stock.d.ts +4 -0
  579. package/dist/testing/cases/stock.d.ts.map +1 -0
  580. package/dist/testing/cases/stock.js +35 -0
  581. package/dist/testing/cases/stock.js.map +1 -0
  582. package/dist/testing/cases/store.d.ts +4 -0
  583. package/dist/testing/cases/store.d.ts.map +1 -0
  584. package/dist/testing/cases/store.js +100 -0
  585. package/dist/testing/cases/store.js.map +1 -0
  586. package/dist/testing/harness.d.ts +94 -0
  587. package/dist/testing/harness.d.ts.map +1 -0
  588. package/dist/testing/harness.js +168 -0
  589. package/dist/testing/harness.js.map +1 -0
  590. package/dist/testing/index.d.ts +37 -0
  591. package/dist/testing/index.d.ts.map +1 -0
  592. package/dist/testing/index.js +43 -0
  593. package/dist/testing/index.js.map +1 -0
  594. package/dist/testing/report.d.ts +15 -0
  595. package/dist/testing/report.d.ts.map +1 -0
  596. package/dist/testing/report.js +22 -0
  597. package/dist/testing/report.js.map +1 -0
  598. package/dist/web/createRestSurface.d.ts +7 -0
  599. package/dist/web/createRestSurface.d.ts.map +1 -0
  600. package/dist/web/createRestSurface.js +39 -0
  601. package/dist/web/createRestSurface.js.map +1 -0
  602. package/dist/web/index.d.ts +2 -0
  603. package/dist/web/index.d.ts.map +1 -0
  604. package/dist/web/index.js +2 -0
  605. package/dist/web/index.js.map +1 -0
  606. package/docs/adr/0008-structured-diagnostic-shape.md +2 -2
  607. package/docs/adr/0011-adapter-port-spec.md +2 -2
  608. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +21 -2
  609. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +5 -1
  610. package/docs/adr/0022-caller-observed-version-occ.md +1 -1
  611. package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
  612. package/docs/adr/0027-scheduled-procedure-triggers.md +1 -1
  613. package/docs/adr/0028-schema-ttl-expiry.md +3 -3
  614. package/docs/adr/0029-mcp-apps-interaction-contracts.md +324 -0
  615. package/docs/adr/0030-store.md +40 -0
  616. package/docs/adr/0031-host-cloud-core-contract.md +25 -0
  617. package/docs/adr/0032-store-centric-core-and-service-contract.md +361 -0
  618. package/docs/adr/0033-storage-converges-to-the-plan.md +92 -0
  619. package/docs/adr/0034-store-is-authored-as-sql.md +192 -0
  620. package/docs/adr/0035-sql-dialects.md +154 -0
  621. package/docs/adr/0036-host-and-dialect.md +65 -0
  622. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +124 -0
  623. package/docs/adr/0038-bun-native-host.md +63 -0
  624. package/docs/adr/README.md +23 -8
  625. package/docs/adr/adr-lite-861-admin-webmcp.md +6 -0
  626. package/docs/adr/adr-lite-909-admin-ui-kit.md +1 -1
  627. package/docs/examples/README.md +16 -18
  628. package/docs/examples/commerce-inventory.md +481 -0
  629. package/docs/examples/commerce.md +254 -0
  630. package/docs/examples/guarded-api.md +238 -0
  631. package/docs/examples/intake-hooks.md +237 -0
  632. package/docs/examples/intake.md +127 -0
  633. package/docs/examples/legal-documents.md +218 -0
  634. package/docs/examples/procurement.md +215 -0
  635. package/docs/examples/publication.md +211 -0
  636. package/docs/examples/reference-service/.dev.vars.example +4 -0
  637. package/docs/examples/reference-service/.mantle/generated/mantle.ts +174 -0
  638. package/docs/examples/reference-service/.mantle/generated/plan.json +1936 -0
  639. package/docs/examples/reference-service/README.md +33 -0
  640. package/docs/examples/reference-service/manifests/catalog.yaml +103 -0
  641. package/docs/examples/reference-service/manifests/orders.yaml +120 -0
  642. package/docs/examples/reference-service/mantle.config.json +1 -0
  643. package/docs/examples/reference-service/package.json +27 -0
  644. package/docs/examples/reference-service/smoke.mjs +156 -0
  645. package/docs/examples/reference-service/src/handlers.ts +36 -0
  646. package/docs/examples/reference-service/src/index.ts +33 -0
  647. package/docs/examples/reference-service/src/service.ts +78 -0
  648. package/docs/examples/{host-minimal-worker → reference-service}/tsconfig.json +7 -2
  649. package/docs/examples/reference-service/wrangler.jsonc +26 -0
  650. package/docs/examples/reservation.md +142 -0
  651. package/docs/handbook/cloudflare/authentication.md +96 -316
  652. package/docs/handbook/cloudflare/chatgpt-sites.md +104 -15
  653. package/docs/handbook/cloudflare/deploy-and-operate.md +77 -71
  654. package/docs/handbook/cloudflare/media-r2.md +64 -187
  655. package/docs/handbook/cloudflare/service-entry.md +138 -0
  656. package/docs/handbook/concepts/authorization.md +104 -94
  657. package/docs/handbook/concepts/four-atoms.md +68 -144
  658. package/docs/handbook/concepts/lifecycle-and-locales.md +62 -114
  659. package/docs/handbook/concepts/mcp-and-agents.md +112 -117
  660. package/docs/handbook/concepts/procedures-and-triggers.md +126 -181
  661. package/docs/handbook/concepts/runtime-and-adapters.md +177 -163
  662. package/docs/handbook/concepts/views.md +97 -173
  663. package/docs/handbook/examples/hub.md +17 -6
  664. package/docs/handbook/guides/admin-ui.md +101 -96
  665. package/docs/handbook/guides/agent-setup.md +56 -71
  666. package/docs/handbook/guides/typed-queries.md +105 -111
  667. package/docs/handbook/navigation.json +8 -33
  668. package/docs/handbook/reference/authorization.md +52 -271
  669. package/docs/handbook/reference/diagnostics.md +69 -178
  670. package/docs/handbook/reference/features.md +48 -50
  671. package/docs/handbook/reference/manifest.md +56 -116
  672. package/docs/handbook/reference/procedure.md +91 -279
  673. package/docs/handbook/reference/schema.md +154 -239
  674. package/docs/handbook/reference/site-config.md +58 -211
  675. package/docs/handbook/reference/surface.md +69 -181
  676. package/docs/handbook/reference/trigger.md +72 -181
  677. package/docs/handbook/reference/view.md +140 -241
  678. package/docs/handbook/releases/index.md +58 -77
  679. package/docs/handbook/start/overview.md +59 -51
  680. package/docs/handbook/start/project-and-cli.md +132 -105
  681. package/docs/handbook/start/quickstart-worker.md +102 -160
  682. package/docs/skills/develop/SKILL.md +114 -240
  683. package/docs/skills/develop/mcp-app.md +79 -0
  684. package/docs/skills/integrate/SKILL.md +83 -47
  685. package/docs/skills/media-gc/SKILL.md +21 -10
  686. package/docs/skills/provision/SKILL.md +68 -162
  687. package/docs/skills/update/SKILL.md +33 -34
  688. package/docs/upgrade-0.1-to-0.2.md +211 -0
  689. package/package.json +87 -106
  690. package/dist/admin-ui.d.ts +0 -2
  691. package/dist/admin-ui.d.ts.map +0 -1
  692. package/dist/admin-ui.js +0 -2
  693. package/dist/admin-ui.js.map +0 -1
  694. package/dist/admin.d.ts +0 -2
  695. package/dist/admin.d.ts.map +0 -1
  696. package/dist/admin.js +0 -2
  697. package/dist/admin.js.map +0 -1
  698. package/dist/auth.d.ts +0 -2
  699. package/dist/auth.d.ts.map +0 -1
  700. package/dist/auth.js +0 -2
  701. package/dist/auth.js.map +0 -1
  702. package/dist/bun.d.ts +0 -2
  703. package/dist/bun.d.ts.map +0 -1
  704. package/dist/bun.js +0 -2
  705. package/dist/bun.js.map +0 -1
  706. package/dist/cli/generate-cloudflare.d.ts +0 -7
  707. package/dist/cli/generate-cloudflare.d.ts.map +0 -1
  708. package/dist/cli/generate-cloudflare.js +0 -123
  709. package/dist/cli/generate-cloudflare.js.map +0 -1
  710. package/dist/cli/generate-project.d.ts +0 -25
  711. package/dist/cli/generate-project.d.ts.map +0 -1
  712. package/dist/cli/generate-project.js +0 -282
  713. package/dist/cli/generate-project.js.map +0 -1
  714. package/dist/cli/generate-sites.d.ts +0 -8
  715. package/dist/cli/generate-sites.d.ts.map +0 -1
  716. package/dist/cli/generate-sites.js +0 -273
  717. package/dist/cli/generate-sites.js.map +0 -1
  718. package/dist/cli/harness.d.ts +0 -3
  719. package/dist/cli/harness.d.ts.map +0 -1
  720. package/dist/cli/harness.js +0 -214
  721. package/dist/cli/harness.js.map +0 -1
  722. package/dist/cli/skills.d.ts +0 -3
  723. package/dist/cli/skills.d.ts.map +0 -1
  724. package/dist/cli/skills.js +0 -128
  725. package/dist/cli/skills.js.map +0 -1
  726. package/dist/cloudflare.d.ts +0 -2
  727. package/dist/cloudflare.d.ts.map +0 -1
  728. package/dist/cloudflare.js +0 -2
  729. package/dist/cloudflare.js.map +0 -1
  730. package/dist/codegen/emitMantleModule.d.ts +0 -22
  731. package/dist/codegen/emitMantleModule.d.ts.map +0 -1
  732. package/dist/codegen/emitMantleModule.js +0 -291
  733. package/dist/codegen/emitMantleModule.js.map +0 -1
  734. package/dist/codegen.d.ts +0 -2
  735. package/dist/codegen.d.ts.map +0 -1
  736. package/dist/codegen.js +0 -2
  737. package/dist/codegen.js.map +0 -1
  738. package/dist/runtime-testing.d.ts +0 -2
  739. package/dist/runtime-testing.d.ts.map +0 -1
  740. package/dist/runtime-testing.js +0 -2
  741. package/dist/runtime-testing.js.map +0 -1
  742. package/dist/runtime.d.ts +0 -2
  743. package/dist/runtime.d.ts.map +0 -1
  744. package/dist/runtime.js +0 -2
  745. package/dist/runtime.js.map +0 -1
  746. package/dist/spec.d.ts +0 -2
  747. package/dist/spec.d.ts.map +0 -1
  748. package/dist/spec.js +0 -2
  749. package/dist/spec.js.map +0 -1
  750. package/dist/vercel-libsql.d.ts +0 -2
  751. package/dist/vercel-libsql.d.ts.map +0 -1
  752. package/dist/vercel-libsql.js +0 -2
  753. package/dist/vercel-libsql.js.map +0 -1
  754. package/dist/vercel.d.ts +0 -2
  755. package/dist/vercel.d.ts.map +0 -1
  756. package/dist/vercel.js +0 -2
  757. package/dist/vercel.js.map +0 -1
  758. package/dist/web.d.ts +0 -2
  759. package/dist/web.d.ts.map +0 -1
  760. package/dist/web.js +0 -2
  761. package/dist/web.js.map +0 -1
  762. package/docs/adapter-guide.md +0 -222
  763. package/docs/agent-prompts.md +0 -64
  764. package/docs/api-mcp-authorization.md +0 -5
  765. package/docs/assets/mantle-admin-developer.png +0 -0
  766. package/docs/assets/mantle-admin-operations.png +0 -0
  767. package/docs/assets/mantle-hero.jpg +0 -0
  768. package/docs/auth-hosting-model.md +0 -166
  769. package/docs/cloudflare-low-level-composition.md +0 -5
  770. package/docs/consumer-onboarding-audit.md +0 -65
  771. package/docs/deferred-lifecycle-queues.md +0 -5
  772. package/docs/design-atoms.md +0 -16
  773. package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
  774. package/docs/direct-authoring.md +0 -5
  775. package/docs/examples/builtin-commerce.md +0 -269
  776. package/docs/examples/builtin-intake.md +0 -143
  777. package/docs/examples/builtin-legal-documents.md +0 -189
  778. package/docs/examples/builtin-procurement.md +0 -241
  779. package/docs/examples/builtin-publication.md +0 -241
  780. package/docs/examples/builtin-reservation.md +0 -149
  781. package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
  782. package/docs/examples/cf-primitives-guarded-api.md +0 -429
  783. package/docs/examples/cf-primitives-intake-hooks.md +0 -319
  784. package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
  785. package/docs/examples/host-chatgpt-sites/README.md +0 -70
  786. package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
  787. package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
  788. package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
  789. package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
  790. package/docs/examples/host-chatgpt-sites/drizzle/0004_mantle.sql +0 -10
  791. package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
  792. package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
  793. package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
  794. package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
  795. package/docs/examples/host-chatgpt-sites/package.json +0 -1
  796. package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
  797. package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
  798. package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
  799. package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -43
  800. package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
  801. package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
  802. package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
  803. package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
  804. package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
  805. package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
  806. package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
  807. package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
  808. package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
  809. package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
  810. package/docs/examples/host-local-admin-otp/README.md +0 -80
  811. package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
  812. package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
  813. package/docs/examples/host-local-admin-otp/package.json +0 -29
  814. package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
  815. package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
  816. package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
  817. package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
  818. package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
  819. package/docs/examples/host-minimal-worker/README.md +0 -41
  820. package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
  821. package/docs/examples/host-minimal-worker/package.json +0 -26
  822. package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
  823. package/docs/examples/host-minimal-worker/src/index.ts +0 -4
  824. package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
  825. package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
  826. package/docs/handbook/chatgpt-sites/generated-app.md +0 -84
  827. package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
  828. package/docs/handbook/chatgpt-sites/index.md +0 -133
  829. package/docs/handbook/cloudflare/bindings.md +0 -291
  830. package/docs/handbook/cloudflare/conventional-worker.md +0 -166
  831. package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
  832. package/docs/handbook/cloudflare/low-level-composition.md +0 -169
  833. package/docs/handbook/cloudflare/public-web.md +0 -144
  834. package/docs/handbook/cloudflare/site-chrome.md +0 -75
  835. package/docs/handbook/examples/commerce-transaction.md +0 -11
  836. package/docs/handbook/examples/commerce.md +0 -11
  837. package/docs/handbook/examples/guarded-api.md +0 -10
  838. package/docs/handbook/examples/intake-form.md +0 -12
  839. package/docs/handbook/examples/intake-hooks.md +0 -11
  840. package/docs/handbook/examples/legal-documents.md +0 -10
  841. package/docs/handbook/examples/procurement-approvals.md +0 -10
  842. package/docs/handbook/examples/publication.md +0 -10
  843. package/docs/handbook/examples/reservation.md +0 -10
  844. package/docs/handbook/start/quickstart-admin.md +0 -52
  845. package/docs/labels.md +0 -71
  846. package/docs/media-uploads.md +0 -5
  847. package/docs/migration-0.1.2.md +0 -13
  848. package/docs/performance-harness.md +0 -228
  849. package/docs/release-process.md +0 -244
  850. package/docs/schema-indexes.md +0 -5
  851. package/docs/sealed-pipeline-ownership.md +0 -101
  852. package/docs/skills/plugin/SKILL.md +0 -132
  853. package/docs/skills/theme/SKILL.md +0 -77
  854. package/docs/spec-only-host-adoption.md +0 -157
  855. package/docs/transaction-patterns.md +0 -5
  856. package/skills/README.md +0 -127
  857. package/skills/develop/SKILL.md +0 -258
  858. package/skills/install/SKILL.md +0 -112
  859. package/skills/integrate/SKILL.md +0 -60
  860. package/skills/media-gc/SKILL.md +0 -85
  861. package/skills/plugin/SKILL.md +0 -132
  862. package/skills/provision/SKILL.md +0 -194
  863. package/skills/theme/SKILL.md +0 -77
  864. package/skills/update/SKILL.md +0 -51
  865. package/templates/chatgpt-sites/auth.ts +0 -66
  866. package/templates/chatgpt-sites/build.mjs +0 -14
  867. package/templates/chatgpt-sites/env.ts +0 -1
  868. package/templates/chatgpt-sites/mcp.ts +0 -48
  869. package/templates/chatgpt-sites/public-mcp.ts +0 -29
  870. package/templates/chatgpt-sites/smoke-local.mjs +0 -20
@@ -0,0 +1,215 @@
1
+ ---
2
+ description: Members submit purchase requisitions and see only their own; staff review the queue with an optimistic lock.
3
+ ---
4
+ # Procurement approvals with member and staff roles
5
+
6
+ [Examples hub](./README.md)
7
+
8
+ Two audiences share one table: signed-in members submit and track their own
9
+ requisitions, and staff approve or reject them. Every Procedure is SQL.
10
+
11
+ ## Problem
12
+
13
+ A signed-in member submits a request number, an item, a quantity, a need-by
14
+ date and a justification, and sees only their own requisitions. Staff with the
15
+ `owner` or `editor` role see every `submitted` requisition, soonest need-by
16
+ date first, and mark each `approved` or `rejected` with a note. Two reviewers
17
+ must not silently overwrite each other's decision.
18
+
19
+ ## Manifest
20
+
21
+ ```yaml
22
+ apiVersion: cms.mantle.aotter.net/v2
23
+ kind: Schema
24
+ metadata: { name: purchase-requisitions }
25
+ spec:
26
+ title: Purchase requisitions
27
+ description: Member-submitted purchase needs waiting for staff review.
28
+ lifecycle: operational
29
+ uniqueIndexes: [[requestNumber]]
30
+ indexes:
31
+ - [requestedBy, needBy]
32
+ - [requestStatus, needBy]
33
+ schema:
34
+ type: object
35
+ additionalProperties: false
36
+ required: [requestNumber, requestedBy, item, quantity, needBy, justification, requestStatus]
37
+ properties:
38
+ requestNumber: { type: string, maxLength: 40, pattern: "^REQ-[A-Z0-9-]+$" }
39
+ requestedBy: { type: string }
40
+ item: { type: string, minLength: 1, maxLength: 160 }
41
+ quantity: { type: integer, minimum: 1 }
42
+ needBy: { type: string, format: date }
43
+ justification: { type: string, minLength: 1, maxLength: 1000 }
44
+ requestStatus: { type: string, enum: [submitted, approved, rejected] }
45
+ reviewerNote: { type: string, maxLength: 1000 }
46
+ ---
47
+ apiVersion: cms.mantle.aotter.net/v2
48
+ kind: View
49
+ metadata: { name: my-requisitions }
50
+ spec:
51
+ title: My requisitions
52
+ description: The signed-in member's own purchase requisitions and their approval status.
53
+ surface: public
54
+ requires: { auth: { all: [ctx.user] } }
55
+ sql: |
56
+ SELECT id, requestNumber, item, quantity, needBy, justification, requestStatus, reviewerNote, created_at
57
+ FROM "purchase-requisitions"
58
+ WHERE requestedBy = auth.uid()
59
+ ORDER BY created_at DESC LIMIT 100
60
+ ---
61
+ apiVersion: cms.mantle.aotter.net/v2
62
+ kind: View
63
+ metadata: { name: pending-approvals }
64
+ spec:
65
+ title: Pending approvals
66
+ description: Purchase requisitions waiting for a staff decision, soonest need-by date first.
67
+ surface: staff
68
+ requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
69
+ sql: |
70
+ SELECT id, version, requestNumber, requestedBy, item, quantity, needBy, justification, created_at
71
+ FROM "purchase-requisitions"
72
+ WHERE requestStatus = 'submitted'
73
+ ORDER BY needBy LIMIT 100
74
+ ---
75
+ apiVersion: cms.mantle.aotter.net/v2
76
+ kind: Procedure
77
+ metadata: { name: submit-requisition }
78
+ spec:
79
+ title: Submit requisition
80
+ description: Submit a purchase requisition as the signed-in member.
81
+ requires: { auth: { all: [ctx.user] } }
82
+ input:
83
+ type: object
84
+ additionalProperties: false
85
+ required: [requestNumber, item, quantity, needBy, justification]
86
+ properties:
87
+ requestNumber: { type: string, maxLength: 40, pattern: "^REQ-[A-Z0-9-]+$" }
88
+ item: { type: string, minLength: 1, maxLength: 160 }
89
+ quantity: { type: integer, minimum: 1 }
90
+ needBy: { type: string, format: date }
91
+ justification: { type: string, minLength: 1, maxLength: 1000 }
92
+ output: { type: object }
93
+ handler:
94
+ sql: |
95
+ INSERT INTO "purchase-requisitions" (requestNumber, requestedBy, item, quantity, needBy, justification, requestStatus)
96
+ VALUES (input.requestNumber, auth.uid(), input.item, input.quantity, input.needBy, input.justification, 'submitted')
97
+ RETURNING id, requestNumber AS "requestNumber"
98
+ ---
99
+ apiVersion: cms.mantle.aotter.net/v2
100
+ kind: Procedure
101
+ metadata: { name: review-requisition }
102
+ spec:
103
+ title: Review requisition
104
+ description: Approve or reject a submitted requisition, with the version the reviewer saw.
105
+ requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
106
+ input:
107
+ type: object
108
+ additionalProperties: false
109
+ required: [id, expectedVersion, requestStatus]
110
+ properties:
111
+ id:
112
+ type: string
113
+ x-mantle-ref: { schema: purchase-requisitions, field: id }
114
+ expectedVersion: { type: integer, minimum: 1 }
115
+ requestStatus: { type: string, enum: [approved, rejected] }
116
+ reviewerNote: { type: string, maxLength: 1000 }
117
+ output: { type: object }
118
+ handler:
119
+ sql: |
120
+ UPDATE "purchase-requisitions"
121
+ SET requestStatus = input.requestStatus, reviewerNote = COALESCE(input.reviewerNote, reviewerNote)
122
+ WHERE id = input.id AND version = input.expectedVersion AND requestStatus = 'submitted'
123
+ RETURNING id, version, requestStatus AS "requestStatus"
124
+ ---
125
+ apiVersion: cms.mantle.aotter.net/v2
126
+ kind: Trigger
127
+ metadata: { name: submit-requisition-http }
128
+ spec:
129
+ source: { kind: http, method: POST, path: /api/requisitions }
130
+ target: { procedure: submit-requisition }
131
+ ---
132
+ apiVersion: cms.mantle.aotter.net/v2
133
+ kind: Trigger
134
+ metadata: { name: submit-requisition-mcp }
135
+ spec:
136
+ source: { kind: mcp, surface: public }
137
+ target: { procedure: submit-requisition }
138
+ ---
139
+ apiVersion: cms.mantle.aotter.net/v2
140
+ kind: Trigger
141
+ metadata: { name: review-requisition-mcp }
142
+ spec:
143
+ source: { kind: mcp, surface: staff }
144
+ target: { procedure: review-requisition }
145
+ ```
146
+
147
+ ### Ownership without trusting the caller
148
+
149
+ - **The writer is `auth.uid()`, never an input.** `submit-requisition` sets
150
+ `requestedBy` to the caller's subject key in its SQL, and its input has no
151
+ such field. The status starts as the literal `'submitted'`.
152
+ - **Why not `scope`?** `scope: { requestedBy: auth.uid() }` would hide every
153
+ other member's rows from *every* user caller, staff included, so reviewers
154
+ could not see the queue. Scope is for rows only their owner may ever see.
155
+ Here the member View filters on `requestedBy = auth.uid()` instead, and
156
+ `requires: ctx.user` means an anonymous caller is 401 before the query runs.
157
+ - **A Schema whose name is not a plain identifier is quoted in SQL**:
158
+ `"purchase-requisitions"`.
159
+
160
+ ### Optimistic concurrency
161
+
162
+ `review-requisition` pins one row with `id = input.id AND version =
163
+ input.expectedVersion`. `expectedVersion` is the version the reviewer read,
164
+ not that value plus one. A stale version matches no row, and a row op that
165
+ writes nothing fails with `CONFLICT` (HTTP 409), so nothing changes and the
166
+ reviewer reads again. `requestStatus = 'submitted'` in the same `WHERE` keeps a
167
+ decided row from being decided twice. The Procedure's `target` is inferred from
168
+ that `WHERE`.
169
+
170
+ The object form of `x-mantle-ref` names the bound field. The Schema's one
171
+ single-field unique index is `[requestNumber]`, so the string form would leave
172
+ Admin to guess, and it would pick the request number.
173
+
174
+ ## Handlers
175
+
176
+ None.
177
+
178
+ ## Try it
179
+
180
+ ```sh
181
+ curl -i http://127.0.0.1:8787/api/views/my-requisitions
182
+ # HTTP 401, {"error":{"code":"UNAUTHENTICATED",...}}
183
+
184
+ curl -sS -X POST http://127.0.0.1:8787/api/requisitions \
185
+ -H 'content-type: application/json' -H "origin: http://127.0.0.1:8787" -H "cookie: $SESSION_COOKIE" \
186
+ -d '{"requestNumber":"REQ-2026-0002","item":"Monitor arm","quantity":2,"needBy":"2026-11-02","justification":"Second screen for review work."}'
187
+ ```
188
+
189
+ A duplicate `requestNumber` is HTTP 409 `CONFLICT`. Staff call
190
+ `pending_approvals` on `/mcp/staff`, then:
191
+
192
+ ```json
193
+ {
194
+ "jsonrpc": "2.0", "id": 2, "method": "tools/call",
195
+ "params": { "name": "review_requisition", "arguments": { "id": "<id>", "expectedVersion": 1, "requestStatus": "approved", "reviewerNote": "Within budget." } }
196
+ }
197
+ ```
198
+
199
+ Replaying `expectedVersion: 1` afterwards is an error result with code
200
+ `CONFLICT`. A contributor gets `AUTH_DENIED`. The public surface lists
201
+ `submit_requisition` and `my_requisitions`; `review_requisition` is only on the
202
+ staff surface.
203
+
204
+ ## What this leaves out
205
+
206
+ - **Approval chains.** One decision by one staff member. Sequential approvers
207
+ need a step field and a `before_update` hook that checks the transition.
208
+ - **Budgets.** A live budget check belongs in a `requires.guard` handler.
209
+ - **Notifications.** See the `after_create` hook in
210
+ [Intake with bot check and notification](./intake-hooks.md).
211
+
212
+ ## Source
213
+
214
+ - [Authorization](../handbook/concepts/authorization.md): `scope`, `auth.uid()` and `requires`
215
+ - [Procedure reference](../handbook/reference/procedure.md): row ops and locks
@@ -0,0 +1,211 @@
1
+ ---
2
+ description: Localized posts with a stable parent identity, a public per-locale list, public full-text search and a reader suggestion box.
3
+ ---
4
+ # Publication: localized posts with a public list
5
+
6
+ [Examples hub](./README.md)
7
+
8
+ Posts in several languages, a public list per locale, public search, and
9
+ reader suggestions. Every Procedure is SQL; editors draft and publish through
10
+ Admin.
11
+
12
+ ## Problem
13
+
14
+ Editors draft posts in one or more locales and publish each language version
15
+ on its own. Every language version shares one stable identity, its slug, so
16
+ the site can link translations and Admin can group them. Visitors read a
17
+ per-locale list of published posts, newest first, and search them. Readers may
18
+ suggest topics; suggestions are records staff read, never published.
19
+
20
+ ## Manifest
21
+
22
+ ```yaml
23
+ apiVersion: cms.mantle.aotter.net/v2
24
+ kind: Schema
25
+ metadata: { name: posts }
26
+ spec:
27
+ title: Posts
28
+ description: Stable post identities shared by every language version.
29
+ lifecycle: publishing
30
+ uniqueIndexes: [[slug]]
31
+ schema:
32
+ type: object
33
+ required: [slug]
34
+ properties:
35
+ slug: { type: string, maxLength: 120, pattern: "^[a-z0-9-]+$" }
36
+ ---
37
+ apiVersion: cms.mantle.aotter.net/v2
38
+ kind: Schema
39
+ metadata: { name: post-translations }
40
+ spec:
41
+ title: Post translations
42
+ description: Localized titles and bodies for each post.
43
+ localized: true
44
+ translates: { parent: posts, on: slug }
45
+ lifecycle: publishing
46
+ uniqueIndexes: [[slug, locale]]
47
+ indexes: [[locale, publishedAt]]
48
+ searchableFields: [title, excerpt, body]
49
+ schema:
50
+ type: object
51
+ required: [slug, locale, title, publishedAt]
52
+ properties:
53
+ slug: { type: string, maxLength: 120, pattern: "^[a-z0-9-]+$" }
54
+ locale: { type: string }
55
+ title: { type: string }
56
+ excerpt: { type: string }
57
+ body: { type: string, x-mcp-hint: markdown }
58
+ publishedAt: { type: string, format: date-time }
59
+ ---
60
+ # Public Views over publishing Schemas see published rows only.
61
+ apiVersion: cms.mantle.aotter.net/v2
62
+ kind: View
63
+ metadata: { name: published-posts }
64
+ spec:
65
+ title: Published posts
66
+ description: Published posts in one locale, newest first.
67
+ surface: public
68
+ input:
69
+ type: object
70
+ additionalProperties: false
71
+ required: [locale]
72
+ properties:
73
+ locale: { type: string }
74
+ sql: |
75
+ SELECT id, slug, locale, title, excerpt, publishedAt, updated_at
76
+ FROM "post-translations"
77
+ WHERE locale = input.locale
78
+ ORDER BY publishedAt DESC LIMIT 50
79
+ ---
80
+ apiVersion: cms.mantle.aotter.net/v2
81
+ kind: View
82
+ metadata: { name: search-posts }
83
+ spec:
84
+ title: Search posts
85
+ description: Full-text search over published posts in one locale.
86
+ surface: public
87
+ input:
88
+ type: object
89
+ additionalProperties: false
90
+ required: [locale, q]
91
+ properties:
92
+ locale: { type: string }
93
+ q: { type: string, minLength: 1 }
94
+ sql: |
95
+ SELECT t.id, t.slug, t.title, t.excerpt FROM "post-translations" t
96
+ WHERE t.locale = input.locale AND mantle.search(t, input.q)
97
+ ORDER BY mantle.search_rank(t), t.id
98
+ LIMIT 20
99
+ ---
100
+ apiVersion: cms.mantle.aotter.net/v2
101
+ kind: Schema
102
+ metadata: { name: post-suggestions }
103
+ spec:
104
+ title: Post suggestions
105
+ description: Reader suggestions for future posts.
106
+ lifecycle: operational
107
+ schema:
108
+ type: object
109
+ required: [title, email]
110
+ properties:
111
+ title: { type: string }
112
+ email: { type: string, format: email }
113
+ note: { type: string }
114
+ ---
115
+ apiVersion: cms.mantle.aotter.net/v2
116
+ kind: Procedure
117
+ metadata: { name: submit-post-suggestion }
118
+ spec:
119
+ input:
120
+ type: object
121
+ additionalProperties: false
122
+ required: [title, email]
123
+ properties:
124
+ title: { type: string }
125
+ email: { type: string, format: email }
126
+ note: { type: string }
127
+ output: { type: object }
128
+ handler:
129
+ sql: |
130
+ INSERT INTO "post-suggestions" (title, email, note)
131
+ VALUES (input.title, input.email, input.note)
132
+ RETURNING id
133
+ ---
134
+ apiVersion: cms.mantle.aotter.net/v2
135
+ kind: Trigger
136
+ metadata: { name: submit-post-suggestion-http }
137
+ spec:
138
+ source: { kind: http, method: POST, path: /api/post-suggestions }
139
+ target: { procedure: submit-post-suggestion }
140
+ ```
141
+
142
+ How the pieces fit:
143
+
144
+ - **`posts` is the parent** and holds only what every language shares: the
145
+ slug.
146
+ - **`post-translations` is the localized child.** `translates: { parent: posts,
147
+ on: slug }` needs `localized: true`, at least one content field besides
148
+ `slug` and `locale`, and a parent that exists and is not itself localized.
149
+ Admin uses it to group translations under their post.
150
+ - **`locale` is a plain field in 0.2.0.** `localized` is presentation
151
+ metadata: Store does not check a row's `locale` against the site's locales.
152
+ Validate it in the Procedure or guard that writes it if it matters.
153
+ - **Published-only is injected.** Both public Views read a `publishing`
154
+ Schema, so drafts and archived rows never appear, and the SQL does not test
155
+ `status`.
156
+ - **Search is `mantle.search`** over `searchableFields`, a trigram full-text
157
+ index, so a three-character Chinese substring matches. A shorter query falls
158
+ back to a scan. `mantle.search_rank` orders by relevance; the trailing `t.id`
159
+ is the tiebreak a cursor needs. `publishedAt` is a display time set by
160
+ editors; nothing publishes a draft at that time.
161
+
162
+ ### The single-Schema alternative
163
+
164
+ One localized `posts` Schema with `uniqueIndexes: [[slug, locale]]` and no
165
+ parent also works: each locale row is independent, and only the slug
166
+ convention links them. Choose it when translations share no fields and editors
167
+ do not need to see which languages are missing. Both shapes serve the same
168
+ `published-posts` View.
169
+
170
+ ## Handlers
171
+
172
+ None.
173
+
174
+ ## Rendering
175
+
176
+ 0.2.0 has no Mantle-rendered public pages; `createWebSurface` is not ported.
177
+ Render `/en/posts/<slug>` from the service's own `fetch` (or any frontend) over
178
+ the REST View, escape every field, and render `body` from Markdown with HTML
179
+ disabled.
180
+
181
+ ## Try it
182
+
183
+ ```sh
184
+ curl -sS 'http://127.0.0.1:8787/api/views/published-posts?locale=en&limit=10'
185
+ curl -sS 'http://127.0.0.1:8787/api/views/search-posts?locale=en&q=index'
186
+ curl -sS -X POST http://127.0.0.1:8787/api/post-suggestions \
187
+ -H 'content-type: application/json' \
188
+ -d '{"title":"Write about indexes","email":"reader@example.test"}'
189
+ ```
190
+
191
+ A View answers `{ "rows": [...], "nextCursor": "…" }`; pass `cursor` back for
192
+ the next page. Leaving out `locale` is HTTP 400 `INPUT_VALIDATION_FAILED`.
193
+
194
+ | MCP surface | Tool | From |
195
+ |---|---|---|
196
+ | `/mcp` | `published_posts`, `search_posts` (plus `limit` and `cursor`) | the public Views |
197
+
198
+ There is no `submit_post_suggestion` tool, because no MCP Trigger targets that
199
+ Procedure. Editors write posts through Admin's API, not through generated
200
+ record tools.
201
+
202
+ ## What this leaves out
203
+
204
+ - **Comments.** Another operational Schema with its own moderation Procedures.
205
+ - **Scheduled publishing.** A schedule Trigger whose `ref` handler sets
206
+ `status` with `ctx.store.write` could do it; SQL cannot set `status`.
207
+
208
+ ## Source
209
+
210
+ - [Schema reference](../handbook/reference/schema.md) and [View reference](../handbook/reference/view.md): `localized`, `translates`, `searchableFields`, `input`
211
+ - [Lifecycle and locales](../handbook/concepts/lifecycle-and-locales.md)
@@ -0,0 +1,4 @@
1
+ # Copy to .dev.vars for local sign-in: one-time codes are printed to the wrangler log. Never deploy these values.
2
+ PUBLIC_ORIGIN=http://127.0.0.1:8787
3
+ ADMIN_EMAIL=you@example.com
4
+ BETTER_AUTH_SECRET=replace-with-a-random-32-byte-secret
@@ -0,0 +1,174 @@
1
+ // Generated by `mantle generate`. Do not edit by hand.
2
+ import type { Caller, HandlerContext, InvocationCause, MantleStore, StoreDelete, StoreInsert, StoreRow, StoreSelect, StoreSelectResult, StoreUpdate, StoreViewOptions, StoreWriteResult } from "@aotter/mantle";
3
+ import type { ContentState, RuntimePlan } from "@aotter/mantle/spec";
4
+ import planFile from "./plan.json" with { type: "json" };
5
+
6
+ /** The sealed plan, for `createMantle(service, { plan })`. */
7
+ export const plan = planFile.plan as unknown as RuntimePlan;
8
+ /** SHA-256 of the manifest sources the plan was compiled from; not part of the fingerprint. */
9
+ export const sourceHash: string = planFile.sourceHash;
10
+
11
+ export namespace Mantle {
12
+
13
+ /** Entry data for Schema 'items' */
14
+ export interface Entry_items {
15
+ sku: string;
16
+ name: string;
17
+ priceCents?: number;
18
+ stock: number;
19
+ [key: string]: unknown;
20
+ }
21
+
22
+ /** Entry data for Schema 'orders' */
23
+ export interface Entry_orders {
24
+ owner: string;
25
+ itemId: string;
26
+ qty: number;
27
+ orderStatus: "placed" | "cancelled";
28
+ placedAt?: string;
29
+ [key: string]: unknown;
30
+ }
31
+
32
+ /** Entry data for Schema 'activity' */
33
+ export interface Entry_activity {
34
+ kind: string;
35
+ subject: string;
36
+ detail?: string;
37
+ [key: string]: unknown;
38
+ }
39
+
40
+ /** Procedure 'place-order' input */
41
+ export interface ProcInput_place_u002d_order {
42
+ itemId: string;
43
+ qty: number;
44
+ [key: string]: unknown;
45
+ }
46
+
47
+ /** Procedure 'place-order' output */
48
+ export interface ProcOutput_place_u002d_order {
49
+ [key: string]: unknown;
50
+ }
51
+
52
+ /** Procedure 'cancel-order' input */
53
+ export interface ProcInput_cancel_u002d_order {
54
+ orderId: string;
55
+ expectedVersion: number;
56
+ [key: string]: unknown;
57
+ }
58
+
59
+ /** Procedure 'cancel-order' output */
60
+ export interface ProcOutput_cancel_u002d_order {
61
+ [key: string]: unknown;
62
+ }
63
+
64
+ /** Procedure 'restock' input */
65
+ export interface ProcInput_restock {
66
+ sku: string;
67
+ name: string;
68
+ qty: number;
69
+ [key: string]: unknown;
70
+ }
71
+
72
+ /** Procedure 'restock' output */
73
+ export interface ProcOutput_restock {
74
+ [key: string]: unknown;
75
+ }
76
+
77
+ /** Procedure 'record-orders' input */
78
+ export interface ProcInput_record_u002d_orders {
79
+ [key: string]: unknown;
80
+ }
81
+
82
+ /** Procedure 'record-orders' output */
83
+ export interface ProcOutput_record_u002d_orders {
84
+ [key: string]: unknown;
85
+ }
86
+
87
+ /** Procedure 'weekly-digest' input */
88
+ export interface ProcInput_weekly_u002d_digest {
89
+ [key: string]: unknown;
90
+ }
91
+
92
+ /** Procedure 'weekly-digest' output */
93
+ export interface ProcOutput_weekly_u002d_digest {
94
+ [key: string]: unknown;
95
+ }
96
+
97
+ /** Row shape returned by View 'catalog' */
98
+ export type ViewRow_catalog = { readonly "id": unknown; readonly "sku": NonNullable<Entry_items["sku"]> | null; readonly "name": NonNullable<Entry_items["name"]> | null; readonly "priceCents": NonNullable<Entry_items["priceCents"]> | null; readonly "stock": NonNullable<Entry_items["stock"]> | null; };
99
+
100
+ /** Input accepted by View 'search-items' */
101
+ export type ViewInput_search_u002d_items = {
102
+ q: string;
103
+ [key: string]: unknown;
104
+ };
105
+
106
+ /** Row shape returned by View 'search-items' */
107
+ export type ViewRow_search_u002d_items = { readonly "id": unknown; readonly "name": NonNullable<Entry_items["name"]> | null; readonly "stock": NonNullable<Entry_items["stock"]> | null; };
108
+
109
+ /** Row shape returned by View 'my-orders' */
110
+ export type ViewRow_my_u002d_orders = { readonly "id": unknown; readonly "qty": NonNullable<Entry_orders["qty"]> | null; readonly "orderStatus": NonNullable<Entry_orders["orderStatus"]> | null; readonly "item": NonNullable<Entry_items["name"]> | null; readonly "version": unknown; };
111
+
112
+ /** Row shape returned by View 'sales-by-item' */
113
+ export type ViewRow_sales_u002d_by_u002d_item = { readonly "name": NonNullable<Entry_items["name"]> | null; readonly "orders": unknown; readonly "units": unknown; };
114
+
115
+ /** Row shape returned by View 'recent-activity' */
116
+ export type ViewRow_recent_u002d_activity = { readonly "kind": NonNullable<Entry_activity["kind"]> | null; readonly "subject": NonNullable<Entry_activity["subject"]> | null; readonly "detail": NonNullable<Entry_activity["detail"]> | null; };
117
+
118
+ }
119
+
120
+ export interface Schemas {
121
+ readonly "activity": Mantle.Entry_activity;
122
+ readonly "items": Mantle.Entry_items;
123
+ readonly "orders": Mantle.Entry_orders;
124
+ }
125
+ /** Optional fields: omitted, a value, or `null` to leave or make them empty. */
126
+ type Nullable<T> = { readonly [K in keyof T]?: T[K] | null };
127
+ type InsertValues = {
128
+ readonly "activity": Pick<Schemas["activity"], "kind" | "subject"> & Nullable<Pick<Schemas["activity"], "detail">>;
129
+ readonly "items": Pick<Schemas["items"], "sku" | "name"> & Partial<Pick<Schemas["items"], "stock">> & Nullable<Pick<Schemas["items"], "priceCents">>;
130
+ readonly "orders": Pick<Schemas["orders"], "itemId" | "qty" | "orderStatus"> & Nullable<Pick<Schemas["orders"], "placedAt">>;
131
+ };
132
+ type UpdateSet = {
133
+ readonly "activity": Partial<InsertValues["activity"]>;
134
+ readonly "items": Partial<InsertValues["items"]>;
135
+ readonly "orders": Partial<InsertValues["orders"]>;
136
+ };
137
+
138
+ export interface Views {
139
+ readonly "catalog": { readonly input: undefined; readonly row: Mantle.ViewRow_catalog; readonly required: false };
140
+ readonly "my-orders": { readonly input: undefined; readonly row: Mantle.ViewRow_my_u002d_orders; readonly required: false };
141
+ readonly "recent-activity": { readonly input: undefined; readonly row: Mantle.ViewRow_recent_u002d_activity; readonly required: false };
142
+ readonly "sales-by-item": { readonly input: undefined; readonly row: Mantle.ViewRow_sales_u002d_by_u002d_item; readonly required: false };
143
+ readonly "search-items": { readonly input: Mantle.ViewInput_search_u002d_items; readonly row: Mantle.ViewRow_search_u002d_items; readonly required: true };
144
+ }
145
+
146
+ /** Views page with `limit` and `cursor`; `search` and `filters` match the View's `uiSchema.list` fields (ADR-0032 decision 5). */
147
+ export type ViewOptions<N extends keyof Views> = { readonly limit?: number; readonly cursor?: string } & Pick<StoreViewOptions, "search" | "filters"> &
148
+ (Views[N]["input"] extends undefined ? {} : Views[N]["required"] extends true ? { readonly input: Views[N]["input"] } : { readonly input?: Views[N]["input"] });
149
+ type Write = { [N in keyof Schemas & string]:
150
+ | (Omit<StoreInsert, "insert" | "values"> & { readonly insert: N; readonly values: InsertValues[N] })
151
+ | (Omit<StoreUpdate, "update" | "set"> & { readonly update: N; readonly set: UpdateSet[N] })
152
+ | (Omit<StoreDelete, "delete"> & { readonly delete: N })
153
+ }[keyof Schemas & string];
154
+
155
+ /** `runtime.store`, typed over this plan's Schemas and Views. */
156
+ export type Store = Omit<MantleStore, "as" | "select" | "write" | "view"> & {
157
+ as(caller: Caller, cause?: InvocationCause): CallerStore;
158
+ select(query: Omit<StoreSelect, "from"> & { readonly from: "activity" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["activity"]>>>;
159
+ select(query: Omit<StoreSelect, "from"> & { readonly from: "items" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["items"]>>>;
160
+ select(query: Omit<StoreSelect, "from"> & { readonly from: "orders" }): Promise<StoreSelectResult<StoreRow & Partial<Schemas["orders"]>>>;
161
+ write(ops: readonly Write[]): Promise<readonly StoreWriteResult[]>;
162
+ view<N extends keyof Views & string>(name: N, ...options: Views[N]["required"] extends true ? [ViewOptions<N>] : [ViewOptions<N>?]): Promise<StoreSelectResult<Views[N]["row"]>>;
163
+ };
164
+ /** `ctx.store`: scope follows the caller. `sweepExpired` is present only for the system caller (a schedule Trigger). */
165
+ export type CallerStore = Omit<Store, "as" | "sweepExpired"> & { readonly sweepExpired?: Store["sweepExpired"] };
166
+
167
+ /** A handler receives this plan's typed `ctx.store`. */
168
+ export type Handler<I, O, Env = unknown> = (input: I, ctx: Omit<HandlerContext<Env>, "store"> & { readonly store: CallerStore }) => O | Promise<O>;
169
+ /** Exactly the plan's handler refs: a missing or an extra one is a type error. */
170
+ export type MantleHandlers<Env = unknown> = {
171
+ readonly "cancelOrder": Handler<Mantle.ProcInput_cancel_u002d_order, Mantle.ProcOutput_cancel_u002d_order, Env>;
172
+ readonly "recordOrders": Handler<Mantle.ProcInput_record_u002d_orders, Mantle.ProcOutput_record_u002d_orders, Env>;
173
+ readonly "weeklyDigest": Handler<Mantle.ProcInput_weekly_u002d_digest, Mantle.ProcOutput_weekly_u002d_digest, Env>;
174
+ };