@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
@@ -1,299 +1,355 @@
1
- import { existsSync, readFileSync } from "node:fs";
2
- import { mkdir, readFile, readdir, rm, writeFile } from "node:fs/promises";
3
- import { dirname, join, resolve } from "node:path";
1
+ /**
2
+ * `mantle generate` and `mantle generate --check` (ADR-0032 decision 12 and amendment "mantle generate"): manifests and
3
+ * `mantle.config.json` in, `.mantle/generated/plan.json` and `.mantle/generated/mantle.ts` out. It never installs a package.
4
+ */
5
+ import { createHash } from "node:crypto";
6
+ import { existsSync } from "node:fs";
7
+ import { lstat, mkdir, readdir, readFile, writeFile } from "node:fs/promises";
4
8
  import { createRequire } from "node:module";
5
- import { cwd, stderr, stdout } from "node:process";
6
- import { fileURLToPath } from "node:url";
9
+ import { dirname, join, resolve } from "node:path";
10
+ import { pathToFileURL } from "node:url";
11
+ import process, { cwd as processCwd, stderr, stdout } from "node:process";
7
12
  import { parseArgs } from "node:util";
8
- import { parseManifestSources, ValidateManifestsUseCase } from "@aotter/mantle-spec";
9
- import { loadManifestsFromRoot } from "@aotter/mantle-spec/cli";
10
- import { assertMantleNamespace, emitMantleModule } from "../codegen/emitMantleModule.js";
11
- import { prepareProject } from "./generate-project.js";
12
- import { prepareSites } from "./generate-sites.js";
13
+ import { planStorageChanges } from "../d1/storage.js";
14
+ import { compileLinkedPlan, parseManifestSources, validateDiagnostic, ValidateManifestsUseCase } from "../spec/index.js";
15
+ import * as d1 from "../d1/compile/index.js";
16
+ import * as pg from "../postgres/compile/index.js";
17
+ import { translateParseArgsError } from "../spec/infrastructure/cli/parseArgsError.js";
18
+ import { emitMantleModule } from "./emitModule.js";
19
+ import { toCloudflareCron } from "../spec/domain/service/CloudflareCron.js";
20
+ import { presetWarnings, writePreset } from "./preset.js";
21
+ const FEATURES = ["mcp", "admin", "web"];
22
+ const IDENTITIES = ["mantle", "custom", "none"];
23
+ /** Where the service runs (ADR-0036). `none` writes no preset: the application wires `createMantle` itself. */
24
+ const HOSTS = ["cloudflare", "bun", "none"];
25
+ /** The built-in dialects by every name a config may give them. The SQLite dialect's plans still record `@aotter/mantle/d1`. */
26
+ const BUILT_IN = { sqlite: "sqlite", d1: "sqlite", [d1.name]: "sqlite", postgres: "postgres", [pg.name]: "postgres" };
27
+ const builtInOf = (dialect) => (dialect === undefined ? "sqlite" : BUILT_IN[dialect]);
28
+ const CONFIG = "mantle.config.json";
29
+ const OUT = ".mantle/generated";
30
+ /** The packages a selection needs in the project; `@aotter/mantle` itself is always one. */
31
+ const PACKAGES = {
32
+ mcp: ["@modelcontextprotocol/server", "@modelcontextprotocol/ext-apps"], admin: ["@aotter/mantle-ui"], web: [],
33
+ mantle: ["better-auth", "@better-auth/oauth-provider", "@better-auth/mcp", "@better-auth/cimd"], custom: [], none: [],
34
+ };
35
+ /** What a Cloudflare preset over PostgreSQL imports (Hyperdrive speaks the PostgreSQL protocol; `pg` is the driver). */
36
+ const POSTGRES_PACKAGES = ["pg"];
37
+ /** compilePlan's key order is already deterministic, and a JSON Schema's `properties` order is what Admin and MCP show. */
38
+ const json = (v) => `${JSON.stringify(v, null, 2)}\n`;
39
+ /** A BOM or CRLF line endings (a Windows checkout) are not a different source. */
40
+ const normalize = (text) => text.replace(/^\uFEFF/, "").replace(/\r\n/g, "\n");
41
+ const readText = (path) => readFile(path, "utf8").then(normalize, () => undefined);
42
+ function findUp(root, rel) {
43
+ for (let dir = root;; dir = dirname(dir)) {
44
+ if (existsSync(join(dir, rel)))
45
+ return join(dir, rel);
46
+ if (dirname(dir) === dir)
47
+ return undefined;
48
+ }
49
+ }
50
+ const LOCKFILES = ["pnpm-lock.yaml", "yarn.lock", "bun.lock", "bun.lockb", "package-lock.json"];
51
+ /** The nearest directory with a lockfile decides the package manager. */
52
+ function installCommand(root, packages) {
53
+ let lock;
54
+ for (let dir = root; !lock; dir = dirname(dir)) {
55
+ lock = LOCKFILES.find((f) => existsSync(join(dir, f)));
56
+ if (dirname(dir) === dir)
57
+ break;
58
+ }
59
+ const add = lock === "pnpm-lock.yaml" ? "pnpm add" : lock === "yarn.lock" ? "yarn add" : lock?.startsWith("bun") ? "bun add" : "npm install";
60
+ return `${add} ${packages.join(" ")}`;
61
+ }
13
62
  /**
14
- * Locate the optional Admin SPA. A Core-only install does not have
15
- * `@aotter/mantle-admin-ui`, so resolution failure is not an error.
63
+ * A `node_modules` walk, the layout bundlers resolve from. Under Yarn PnP there is no `node_modules`, so Node's own resolution
64
+ * decides; elsewhere it is not used, because it also honours `NODE_PATH`, which a bundler does not.
16
65
  */
17
- export function resolveAdminUiIndexHtml() {
66
+ function installed(root, name) {
67
+ if (!process.versions.pnp)
68
+ return !!findUp(root, join("node_modules", name, "package.json"));
69
+ try {
70
+ createRequire(join(root, "package.json")).resolve(`${name}/package.json`);
71
+ return true;
72
+ }
73
+ catch (err) {
74
+ return err.code === "ERR_PACKAGE_PATH_NOT_EXPORTED"; // found, it just does not export package.json
75
+ }
76
+ }
77
+ /** Each selected feature (and the identity) whose packages are not installed, and `admin` without an identity. */
78
+ function featureDiagnostics(root, config) {
79
+ const out = [];
80
+ const need = (what, packages) => {
81
+ const missing = packages.filter((p) => !installed(root, p));
82
+ if (missing.length)
83
+ out.push(validateDiagnostic({ code: "GENERATE_FEATURE_DEPENDENCY_MISSING", severity: "error", path: what, message: `${what} needs ${missing.join(", ")}, which ${missing.length > 1 ? "are" : "is"} not installed. Run \`${installCommand(root, missing)}\`; mantle generate never installs packages.` }));
84
+ };
85
+ need("@aotter/mantle", ["@aotter/mantle"]);
86
+ need(`identity '${config.identity}'`, PACKAGES[config.identity]);
87
+ for (const f of config.features)
88
+ need(`feature '${f}'`, PACKAGES[f]);
89
+ // a preset written now serves the staff MCP App, which @aotter/mantle-ui builds; a service already written is the application's
90
+ const writesPreset = (config.host ?? "cloudflare") !== "none" && !!builtInOf(config.dialect) && !existsSync(join(root, "src/service.ts"));
91
+ if (writesPreset && (config.host ?? "cloudflare") === "cloudflare" && builtInOf(config.dialect) === "postgres")
92
+ need("dialect 'postgres' on Cloudflare", POSTGRES_PACKAGES);
93
+ if (writesPreset && config.host === "bun")
94
+ need("host 'bun' types", ["bun-types"]);
95
+ if (writesPreset && config.features.includes("mcp") && config.identity !== "none" && !config.features.includes("admin"))
96
+ need("the staff MCP App", ["@aotter/mantle-ui"]);
97
+ if (config.features.includes("admin") && config.identity === "none")
98
+ out.push(validateDiagnostic({ code: "GENERATE_FEATURE_DEPENDENCY_MISSING", severity: "error", path: "feature 'admin'", message: "feature 'admin' needs a caller identity, and identity is 'none'. Pass --identity mantle or --identity custom, or leave admin out of --features." }));
99
+ return out;
100
+ }
101
+ function readConfig(text) {
102
+ let v;
18
103
  try {
19
- const path = fileURLToPath(import.meta.resolve("@aotter/mantle-admin-ui/index.html"));
20
- return existsSync(path) ? path : null;
104
+ v = JSON.parse(text);
21
105
  }
22
- catch {
23
- return null;
106
+ catch (err) {
107
+ throw new Error(`${CONFIG} is not valid JSON: ${err instanceof Error ? err.message : String(err)}`);
24
108
  }
109
+ if (!v || typeof v !== "object" || Array.isArray(v))
110
+ throw new Error(`${CONFIG} must be a JSON object.`);
111
+ if (v.version === 1)
112
+ throw new Error(`${CONFIG} is a 0.1.x selection (version 1, with a host): move it to version 2 as node_modules/@aotter/mantle/docs/upgrade-0.1-to-0.2.md describes.`);
113
+ const features = v.features;
114
+ if (v.version !== 2 || !IDENTITIES.includes(v.identity) || !Array.isArray(features) || FEATURES.filter((f) => features.includes(f)).join() !== features.join())
115
+ throw new Error(`${CONFIG} must be { "version": 2, "identity": ${IDENTITIES.map((i) => `"${i}"`).join(" | ")}, "features": a subset of ${FEATURES.join(", ")} in that order }.`);
116
+ if ("dialect" in v && (typeof v.dialect !== "string" || !v.dialect))
117
+ throw new Error(`${CONFIG} "dialect" must be a module name: "sqlite", "postgres" or a dialect package.`);
118
+ if ("host" in v && !HOSTS.includes(v.host))
119
+ throw new Error(`${CONFIG} "host" must be one of ${HOSTS.map((h) => `"${h}"`).join(", ")}.`);
120
+ return { config: { version: 2, identity: v.identity, features, ...(typeof v.host === "string" ? { host: v.host } : {}), ...(typeof v.dialect === "string" ? { dialect: v.dialect } : {}) }, raw: v };
25
121
  }
26
- function resolveProjectAdminUiIndexHtml(root) {
122
+ /** The dialect's compile side: `<dialect>/compile`, resolved from the project as a bundler would, or the built-in D1. */
123
+ async function loadDialect(root, dialect) {
124
+ const builtIn = builtInOf(dialect);
125
+ if (builtIn || dialect === undefined)
126
+ return builtIn === "postgres" ? pg : d1;
127
+ // a package name, never a path: the config must not make generate run a file outside node_modules
128
+ if (!/^(@[a-z0-9-~][a-z0-9-._~]*\/)?[a-z0-9-~][a-z0-9-._~]*(\/[a-z0-9-._~]+)*$/.test(dialect) || dialect.split("/").some((p) => p === "." || p === ".."))
129
+ throw new Error(`${CONFIG} "dialect" must be a package name (or sqlite, postgres); got ${JSON.stringify(dialect)}.`);
130
+ let path;
27
131
  try {
28
- const path = createRequire(join(root, "package.json")).resolve("@aotter/mantle-admin-ui/index.html");
29
- return existsSync(path) ? path : null;
132
+ // the package's exports must give <dialect>/compile a `default` (or `require`) condition, which require.resolve reads
133
+ path = createRequire(join(root, "package.json")).resolve(`${dialect}/compile`);
30
134
  }
31
- catch {
32
- return null;
135
+ catch (err) {
136
+ throw new Error(`${CONFIG} names the dialect ${dialect}, and ${dialect}/compile cannot be found (${err.code ?? "error"}). Install it; mantle generate never installs packages.`);
33
137
  }
138
+ const mod = await import(pathToFileURL(path).href);
139
+ if (mod.name !== dialect || typeof mod.version !== "string" || typeof mod.accepts !== "function")
140
+ throw new Error(`${dialect}/compile is not a dialect's compile side: it must export name "${dialect}", a version string and accepts().`);
141
+ return mod;
142
+ }
143
+ /** The selection: saved config, then flags. An explicit `--features` without `--identity` means `none` (decision 12). */
144
+ function select(saved, features, identity, host, dialect) {
145
+ if (identity !== undefined && !IDENTITIES.includes(identity))
146
+ throw new Error(`--identity must be one of ${IDENTITIES.join(", ")}; got ${identity}`);
147
+ if (host !== undefined && !HOSTS.includes(host))
148
+ throw new Error(`--host must be one of ${HOSTS.join(", ")}; got ${host}`);
149
+ if (dialect !== undefined && !dialect)
150
+ throw new Error("--dialect must be sqlite, postgres or a dialect package name");
151
+ if (saved && identity !== undefined && identity !== saved.identity)
152
+ throw new Error(`Switching identity from '${saved.identity}' to '${identity}' on a rerun is refused: it never drops tables. Change ${CONFIG} deliberately once the data is moved.`);
153
+ // the axes are chosen once: another host or engine is a new composition and, for the engine, a data move
154
+ if (saved && host !== undefined && host !== (saved.host ?? "cloudflare"))
155
+ throw new Error(`Switching host from '${saved.host ?? "cloudflare"}' to '${host}' on a rerun is refused: src/service.ts is yours. Change ${CONFIG} and the composition deliberately.`);
156
+ if (saved && dialect !== undefined && (builtInOf(dialect) ?? dialect) !== (builtInOf(saved.dialect) ?? saved.dialect))
157
+ throw new Error(`Switching dialect from '${saved.dialect ?? "sqlite"}' to '${dialect}' on a rerun is refused: the data stays where it is. Change ${CONFIG} deliberately once it is moved.`);
158
+ const picked = features === undefined ? saved?.features ?? FEATURES : features.split(",").map((f) => f.trim()).filter(Boolean);
159
+ const unknown = picked.filter((f) => !FEATURES.includes(f));
160
+ if (unknown.length)
161
+ throw new Error(`--features accepts only ${FEATURES.join(", ")}; got ${unknown.join(", ")}`);
162
+ // a flag that restates the saved axis (another spelling was refused above) keeps the saved spelling, so nothing is rewritten
163
+ const h = saved ? saved.host ?? (host === "cloudflare" ? undefined : host) : host;
164
+ const d = saved ? saved.dialect ?? (dialect !== undefined && builtInOf(dialect) === "sqlite" ? undefined : dialect) : dialect ?? (host === "bun" ? "postgres" : undefined);
165
+ return { version: 2, identity: (identity ?? saved?.identity ?? (features === undefined ? "mantle" : "none")), features: FEATURES.filter((f) => picked.includes(f)), ...(h ? { host: h } : {}), ...(d ? { dialect: d } : {}) };
166
+ }
167
+ /** Every `.yaml`/`.yml` file directly in the manifest directory, by name. */
168
+ async function readManifests(dir) {
169
+ const names = (await readdir(dir, { withFileTypes: true })).filter((d) => !d.isDirectory() && /\.ya?ml$/i.test(d.name)).map((d) => d.name).sort();
170
+ return Promise.all(names.map(async (name) => ({ name, text: normalize(await readFile(join(dir, name), "utf8")) })));
171
+ }
172
+ /** `node:sqlite` on Node 22 binds only anonymous `?`, so a numbered `?N` becomes `?` with its value in the order it appears. */
173
+ async function openSqliteFile(path) {
174
+ const { DatabaseSync } = await import("node:sqlite");
175
+ const db = new DatabaseSync(path, { readOnly: true });
176
+ return {
177
+ batch: async (stmts) => stmts.map((s) => {
178
+ const binds = [];
179
+ const sql = s.sql.replace(/\?(\d+)/g, (_, n) => (binds.push(s.binds[Number(n) - 1]), "?"));
180
+ return { rows: db.prepare(sql).all(...binds) };
181
+ }),
182
+ };
34
183
  }
184
+ const print = (ds) => ds.forEach((d) => stderr.write(`${d.code} ${d.path}: ${d.message}\n`));
185
+ const HELP = `mantle generate — compile manifests to .mantle/generated/plan.json and mantle.ts, and write the
186
+ service preset (src/service.ts, src/index.ts, wrangler.jsonc, ...) once, when src/service.ts does not exist
187
+
188
+ Usage: mantle generate [options]
189
+
190
+ Options:
191
+ --manifests <dir> Manifest directory (default: ./manifests)
192
+ --features <list> Comma-separated positive list of ${FEATURES.join(", ")} (default: all)
193
+ --identity <kind> ${IDENTITIES.join(", ")} (default: mantle; none with an explicit --features)
194
+ --host <host> ${HOSTS.join(", ")} (default: cloudflare); bun defaults to postgres; none writes no preset
195
+ --dialect <name> sqlite (alias d1), postgres, or a dialect package (default: sqlite)
196
+ --check Write nothing; exit 1 when a generated file or ${CONFIG} is stale
197
+ --database <file> With --check: a SQLite file (e.g. wrangler's local D1 under .wrangler/state/v3/d1/),
198
+ opened read-only; prints the SQL storage convergence would run
199
+ -h, --help This help
200
+ `;
35
201
  export async function runGenerate(rawArgs, deps = {}) {
36
- let options;
202
+ let values;
37
203
  try {
38
- const parsed = parseGenerateArgs(rawArgs);
39
- if (parsed === null) {
40
- printHelp();
41
- return 0;
42
- }
43
- options = parsed;
204
+ ({ values } = parseArgs({ args: [...rawArgs], options: { manifests: { type: "string" }, features: { type: "string" }, identity: { type: "string" }, host: { type: "string" }, dialect: { type: "string" }, check: { type: "boolean" }, database: { type: "string" }, help: { type: "boolean", short: "h" } } }));
44
205
  }
45
- catch (error) {
46
- stderr.write(`${message(error)}\n`);
206
+ catch (err) {
207
+ stderr.write(`${translateParseArgsError(err).message}\n`);
47
208
  return 2;
48
209
  }
49
- const root = cwd();
50
- let loaded = await loadManifestsFromRoot(options.manifests);
51
- if (loaded.parseErrors.some((diagnostic) => diagnostic.code !== "MANIFEST_ROOT_NOT_FOUND") ||
52
- (options.manifestsExplicit && loaded.parseErrors.length > 0)) {
53
- printDiagnostics(loaded.parseErrors);
54
- return 1;
55
- }
56
- let project;
210
+ if (values.help)
211
+ return (stdout.write(HELP), 0);
212
+ const root = resolve(deps.cwd ?? processCwd());
213
+ const check = values.check === true;
214
+ if (values.database !== undefined && !check)
215
+ return (stderr.write("--database is read only with --check.\n"), 2);
216
+ let config;
217
+ let saved;
218
+ let dialect;
57
219
  try {
58
- project = await prepareProject({
59
- root, host: options.host, features: options.features, check: options.check, output: options.output,
60
- });
220
+ const savedText = await readFile(join(root, CONFIG), "utf8").catch((e) => (e.code === "ENOENT" ? undefined : Promise.reject(e)));
221
+ saved = savedText === undefined ? undefined : readConfig(savedText);
222
+ config = select(saved?.config, values.features, values.identity, values.host, values.dialect);
223
+ dialect = await loadDialect(root, config.dialect);
61
224
  }
62
- catch (error) {
63
- stderr.write(`${message(error)}\n`);
225
+ catch (err) {
226
+ stderr.write(`${err instanceof Error ? err.message : String(err)}\n`);
64
227
  return 2;
65
228
  }
66
- if (project.mode === "project" && !options.manifestsExplicit && loaded.parseErrors.length === 1 &&
67
- loaded.parseErrors[0]?.code === "MANIFEST_ROOT_NOT_FOUND") {
68
- let names;
69
- try {
70
- names = await readdir(resolve(root, options.manifests));
71
- }
72
- catch (error) {
73
- if (error.code !== "ENOENT") {
74
- printDiagnostics(loaded.parseErrors);
75
- return 1;
76
- }
77
- names = [];
78
- }
79
- if (!names.some((name) => /\.ya?ml$/i.test(name))) {
80
- const empty = parseManifestSources({ sources: [] });
81
- if (empty.ok)
82
- loaded = { parsed: empty.value, parseErrors: [], root: loaded.root };
83
- }
229
+ const manifests = values.manifests ?? "manifests";
230
+ let files;
231
+ try {
232
+ files = await readManifests(resolve(root, manifests));
84
233
  }
85
- const validation = loaded.parsed
86
- ? ValidateManifestsUseCase.run({ parsed: loaded.parsed })
87
- : { diagnostics: [], errorCount: 0, warningCount: 0 };
88
- const validationErrors = [...loaded.parseErrors, ...validation.diagnostics]
89
- .filter((diagnostic) => diagnostic.severity === "error");
90
- if (validationErrors.length > 0 || !validation.linked) {
91
- printDiagnostics(validationErrors);
92
- return 1;
234
+ catch (err) {
235
+ return (stderr.write(`MANIFEST_ROOT_NOT_FOUND ${manifests}: cannot read the manifest directory (${err.code ?? "error"})\n`), 1);
93
236
  }
94
- if (project.mode === "project" && project.selection?.host !== "cf") {
95
- const schedule = loaded.parsed.entries.find((entry) => entry.manifest.kind === "Trigger" && entry.manifest.spec.source.kind === "schedule");
96
- if (schedule) {
97
- stderr.write(`RESOURCE_UNAVAILABLE: Trigger '${schedule.manifest.metadata.name}' requires host 'cf'; '${project.selection?.host ?? "none"}' does not register Cron Triggers.\n`);
98
- return 1;
237
+ if (!files.length)
238
+ return (stderr.write(`MANIFEST_ROOT_NOT_FOUND ${manifests}: no .yaml or .yml manifest files\n`), 1);
239
+ const parsed = parseManifestSources({ sources: files.map((f) => ({ sourceId: f.name, text: f.text })) });
240
+ if (!parsed.ok)
241
+ return (print(parsed.diagnostics), 1);
242
+ const validation = ValidateManifestsUseCase.run({ parsed: parsed.value });
243
+ const errors = validation.diagnostics.filter((d) => d.severity === "error");
244
+ if (errors.length || !validation.linked)
245
+ return (print(errors), 1);
246
+ // warnings (MCP input shapes, missing tool descriptions) are advice: printed, never a failure
247
+ for (const d of validation.diagnostics)
248
+ if (d.severity === "warning")
249
+ stderr.write(`warning: ${d.code} ${d.path}: ${d.message}\n`);
250
+ const compiled = await compileLinkedPlan(validation.linked, dialect);
251
+ // the storage dry-run is the SQLite dialect's; a preset is written for the built-in dialects on Cloudflare (ADR-0036)
252
+ const builtIn = dialect === d1;
253
+ const host = config.host ?? "cloudflare";
254
+ const preset = host !== "none" ? builtInOf(config.dialect) : undefined;
255
+ if (!builtIn && values.database !== undefined)
256
+ return (stderr.write(`--database is a SQLite file for the sqlite dialect; ${dialect.name} plans its own storage.\n`), 2);
257
+ if (!compiled.ok)
258
+ return (print(compiled.diagnostics), 1);
259
+ const missing = featureDiagnostics(root, config);
260
+ if (missing.length)
261
+ return (print(missing), 1);
262
+ // the grammar has no rule across cron fields, so the Cloudflare preset's refusals come before anything is written
263
+ const unmappable = Object.entries(compiled.plan.triggers).flatMap(([name, t]) => {
264
+ if (host === "bun" && t.source.kind === "schedule" && t.source.enabled !== false)
265
+ return [`Trigger ${name}: Bun has no built-in cron dispatcher. Use host none with an explicit scheduler, or disable this Trigger before generating the Bun preset.\n`];
266
+ if (host !== "cloudflare" || t.source.kind !== "schedule" || t.source.enabled === false)
267
+ return [];
268
+ try {
269
+ return (toCloudflareCron(t.source.cron), []);
270
+ }
271
+ catch (err) {
272
+ return [`Trigger ${name}: ${err.message}\n`];
99
273
  }
100
- }
101
- const emitted = emitMantleModule({
102
- linked: validation.linked,
103
- namespace: options.namespace,
104
274
  });
105
- if (!emitted.ok) {
106
- printDiagnostics(emitted.diagnostics);
107
- return 1;
108
- }
109
- let sites = null;
110
- if (options.reviewUniqueIndexes && project.selection?.host !== "chatgpt-sites") {
111
- stderr.write("--review-unique-indexes requires a managed ChatGPT Sites project.\n");
112
- return 2;
113
- }
114
- if (project.mode === "project" && project.selection?.host === "chatgpt-sites") {
115
- try {
116
- sites = await prepareSites(root, project.selection.output ?? options.output, project.selection, loaded.parsed.entries.filter((entry) => entry.manifest.kind === "Schema").map((entry) => entry.manifest), options.check, options.reviewUniqueIndexes);
117
- if (sites.report)
118
- stdout.write(`${sites.report}\n`);
275
+ if (unmappable.length)
276
+ return (unmappable.forEach((m) => stderr.write(m)), 1);
277
+ // the source hash is the manifests as authored, keyed by name so the project's location never enters it
278
+ const sourceHash = createHash("sha256").update(JSON.stringify(files.map((f) => [f.name, f.text]))).digest("hex");
279
+ const outputs = [
280
+ [join(OUT, "plan.json"), json({ sourceHash, plan: compiled.plan })],
281
+ [join(OUT, "mantle.ts"), emitMantleModule(compiled.plan, validation.linked)],
282
+ ];
283
+ // the config is rewritten only when the selection changes, and keeps whatever else it holds
284
+ const changed = (a, b) => !a || a.identity !== b.identity || a.features.join() !== b.features.join() || a.host !== b.host || a.dialect !== b.dialect;
285
+ if (changed(saved?.config, config))
286
+ outputs.push([CONFIG, json({ ...saved?.raw, version: 2, identity: config.identity, features: config.features, ...(config.host ? { host: config.host } : {}), ...(config.dialect ? { dialect: config.dialect } : {}) })]);
287
+ if (!check) {
288
+ for (const d of [".mantle", OUT]) {
289
+ const st = await lstat(join(root, d)).catch(() => undefined);
290
+ if (st?.isSymbolicLink())
291
+ return (stderr.write(`Refusing to write through the symlink ${d}; generated files live in a real directory.\n`), 2);
119
292
  }
120
- catch (error) {
121
- stderr.write(`${message(error)}\n`);
122
- return 2;
293
+ for (const [path, text] of outputs) {
294
+ if ((await readText(join(root, path))) === text)
295
+ continue;
296
+ await mkdir(dirname(join(root, path)), { recursive: true });
297
+ await writeFile(join(root, path), text, "utf8");
123
298
  }
124
- }
125
- const adminIndex = project.mode === "legacy" || project.selection?.features.includes("admin")
126
- ? (deps.resolveAdminUiIndexHtml ?? (project.mode === "legacy" ? resolveAdminUiIndexHtml : () => resolveProjectAdminUiIndexHtml(root)))()
127
- : null;
128
- const adminUnavailable = project.selection?.features.includes("admin") && adminIndex === null;
129
- if (adminUnavailable) {
130
- stderr.write("Selected Admin UI is not installed or its assets are missing. Install declared packages and rerun mantle generate.\n");
131
- if (!options.check && !project.incomplete)
132
- return 1;
133
- }
134
- if (!options.check && project.commit) {
299
+ stdout.write(`Generated ${OUT}/plan.json and ${OUT}/mantle.ts (fingerprint ${compiled.plan.fingerprint.slice(0, 12)}; identity ${config.identity}; features ${config.features.join(", ") || "none"}${host === "cloudflare" ? "" : `; host ${host}`}${builtIn ? "" : `; dialect ${dialect.name}`}).\n`);
300
+ if (!preset) {
301
+ if (host === "cloudflare")
302
+ stdout.write(`No preset for the dialect ${dialect.name}: compose src/service.ts with its storage adapter.\n`);
303
+ return 0;
304
+ }
305
+ const selection = { ...config, host, dialect: preset };
306
+ let written;
135
307
  try {
136
- await project.commit();
137
- await sites?.commit();
308
+ written = await writePreset(root, selection, compiled.plan);
138
309
  }
139
- catch (error) {
140
- stderr.write(`${message(error)}\n`);
141
- return 2;
310
+ catch (err) {
311
+ return (stderr.write(`${err instanceof Error ? err.message : String(err)}; rerun mantle generate to finish the preset.\n`), 2);
142
312
  }
143
- }
144
- if (project.incomplete && !options.check)
145
- return 1;
146
- const output = resolve(cwd(), project.selection?.output ?? options.output);
147
- const generatedCurrent = await syncText(join(output, "mantle.ts"), emitted.source, options.check);
148
- let stale = project.incomplete || adminUnavailable || !generatedCurrent || Boolean(sites?.stale);
149
- if (adminIndex !== null) {
150
- const adminSource = dirname(adminIndex);
151
- const adminTarget = resolve(cwd(), "public/_mantle/admin");
152
- stale = !(await syncAdminAssets(adminSource, adminTarget, options.check)) || stale;
153
- if (!options.check)
154
- warnMissingWranglerAssets(cwd());
155
- }
156
- if (stale && options.check) {
157
- stderr.write("Mantle generated files are stale; run `mantle generate`.\n");
158
- return 1;
159
- }
160
- if (project.mode === "project") {
161
- if (!options.check)
162
- stdout.write(project.selection?.host === "cf"
163
- ? "Generated Cloudflare Worker composition and typed bindings.\n"
164
- : project.selection?.host === "chatgpt-sites"
165
- ? "Generated ChatGPT Sites composition and typed bindings. Apply reviewed local D1 migrations before serving.\n"
166
- : "Generated host-free Spec bindings.\n");
313
+ // host and dialect cannot change on a rerun (select refuses it), so only the identity and features can drift from src/service.ts
314
+ const selectionChanged = !!saved && (saved.config.identity !== config.identity || saved.config.features.join() !== config.features.join());
315
+ for (const w of await presetWarnings(root, selection, selectionChanged, compiled.plan))
316
+ stderr.write(`warning: ${w}\n`);
317
+ if (written.length)
318
+ stdout.write(`Wrote the service preset, which is yours to edit: ${written.join(", ")}.\n`);
167
319
  return 0;
168
320
  }
169
- if (!options.check)
170
- printGenerateNextSteps(adminIndex !== null);
171
- return 0;
172
- }
173
- function parseGenerateArgs(rawArgs) {
174
- const { values } = parseArgs({
175
- args: [...rawArgs],
176
- options: {
177
- manifests: { type: "string" },
178
- output: { type: "string", short: "o" },
179
- namespace: { type: "string" },
180
- host: { type: "string" },
181
- features: { type: "string" },
182
- "review-unique-indexes": { type: "boolean" },
183
- check: { type: "boolean" },
184
- help: { type: "boolean", short: "h" },
185
- },
186
- });
187
- if (values.help)
188
- return null;
189
- const namespace = values.namespace ?? "Mantle";
190
- assertMantleNamespace(namespace, "--namespace");
191
- return {
192
- manifests: values.manifests ?? "./manifests",
193
- output: values.output ?? ".mantle/generated",
194
- namespace,
195
- check: values.check === true,
196
- host: values.host,
197
- features: values.features,
198
- reviewUniqueIndexes: values["review-unique-indexes"] === true,
199
- manifestsExplicit: values.manifests !== undefined,
200
- };
201
- }
202
- function printHelp() {
203
- stdout.write(`mantle generate — compile manifests and assemble selected application features
204
-
205
- Usage: mantle generate [options]
206
-
207
- For a new application, the default selects Spec, Runtime, API, MCP, Admin and Web.
208
- Select a host with --host cf or --host chatgpt-sites. --features replaces the
209
- default with a positive list; required feature dependencies are added.
210
- Existing authored applications retain their direct-authoring compile mode.
211
-
212
- Options:
213
- --manifests <dir> Manifest directory (default: ./manifests)
214
- -o, --output <dir> Generated root (default: .mantle/generated)
215
- --namespace <name> Generated type namespace (default: Mantle)
216
- --host <name> cf or chatgpt-sites (required for host-dependent features)
217
- --features <list> Comma-separated: spec,runtime,api,mcp,admin,web
218
- --review-unique-indexes Plan a reviewed Sites unique-index tuple replacement
219
- --check Check selection, dependencies and output without writing
220
- -h, --help This help
221
-
222
- Documentation:
223
- Handbook: docs/handbook/start/project-and-cli.md or https://mantle.tools/
224
- `);
225
- }
226
- export function printGenerateNextSteps(adminUiInstalled, write = stdout.write.bind(stdout)) {
227
- if (adminUiInstalled) {
228
- write("Synced public/_mantle/admin/ from @aotter/mantle-admin-ui (opt-in, prebuilt; do not vite-build).\n" +
229
- "Admin / Dev UI next steps:\n" +
230
- " 1. wrangler assets.directory=./public and binding=ASSETS\n" +
231
- " 2. pnpm dev → open /admin/sign-in\n" +
232
- " 3. email OTP via ConsoleEmailSender (code in wrangler logs)\n" +
233
- "PUBLIC_ORIGIN must equal the origin wrangler prints; a mismatch is INVALID_ORIGIN.\n" +
234
- "See docs/examples/host-local-admin-otp or node_modules/@aotter/mantle/docs/examples/host-local-admin-otp.\n");
235
- return;
321
+ let code = 0;
322
+ for (const [path, text] of outputs) {
323
+ if ((await readText(join(root, path))) === text)
324
+ continue;
325
+ stderr.write(`stale: ${path}\n`);
326
+ code = 1;
236
327
  }
237
- write("API-only (Admin is opt-in). A complete service does not require a Dev UI. " +
238
- "To add Admin later: install @aotter/mantle-admin and @aotter/mantle-admin-ui, " +
239
- "re-run generate, configure wrangler ASSETS, and wire local email-otp " +
240
- "(docs/examples/host-local-admin-otp or node_modules/@aotter/mantle/docs/examples/host-local-admin-otp).\n");
241
- }
242
- function printDiagnostics(diagnostics) {
243
- for (const diagnostic of diagnostics) {
244
- stderr.write(`${diagnostic.code} ${diagnostic.path}: ${diagnostic.message}\n`);
328
+ if (code)
329
+ stderr.write("Mantle generated files are stale; run `mantle generate`.\n");
330
+ if (!builtIn || (!deps.driver && values.database === undefined))
331
+ return code;
332
+ try {
333
+ const storage = await planStorageChanges(deps.driver ?? (await openSqliteFile(resolve(root, values.database))), compiled.plan.schemas, { fingerprint: compiled.plan.fingerprint });
334
+ for (const u of storage.undeclared)
335
+ stdout.write(`-- ${u.code} ${u.schema}: ${u.message}\n`);
336
+ if (storage.skipped)
337
+ stdout.write("-- Storage: this database already booted this plan's fingerprint; boot applies nothing.\n");
338
+ else if (storage.blocked.length) {
339
+ for (const b of storage.blocked)
340
+ stderr.write(`${b.code} ${b.schema}: ${b.message}\n`);
341
+ stderr.write("Storage convergence is blocked: boot refuses to serve until the changes above are made.\n");
342
+ code = 1;
343
+ }
344
+ else if (!storage.sql.length)
345
+ stdout.write("-- Storage: nothing to do.\n");
346
+ else
347
+ stdout.write(`-- The SQL storage convergence would run on this database (nothing was applied):\n${storage.sql.map((q) => `${q};\n`).join("")}`);
245
348
  }
246
- }
247
- async function syncText(path, expected, check) {
248
- const current = await readFile(path, "utf8").catch(() => null);
249
- if (current === expected)
250
- return true;
251
- if (check)
252
- return false;
253
- await mkdir(dirname(path), { recursive: true });
254
- await writeFile(path, expected, "utf8");
255
- return true;
256
- }
257
- /** Cheap hint: Admin SPA was synced but wrangler has no ASSETS binding. */
258
- export function warnMissingWranglerAssets(root, write = stderr.write.bind(stderr)) {
259
- const wrangler = ["wrangler.jsonc", "wrangler.json", "wrangler.toml"]
260
- .map((name) => join(root, name))
261
- .find((path) => existsSync(path));
262
- if (!wrangler)
263
- return;
264
- const text = readFileSync(wrangler, "utf8");
265
- if (/["']?binding["']?\s*[:=]\s*["']ASSETS["']/.test(text))
266
- return;
267
- write("warning: @aotter/mantle-admin-ui synced public/_mantle/admin, but wrangler has no ASSETS binding. " +
268
- "/admin can return HTML 200 while /_mantle/admin/assets/* 404s (white screen). " +
269
- 'Add "assets": { "directory": "./public", "binding": "ASSETS" }. ' +
270
- "Do not put /_mantle in run_worker_first.\n");
271
- }
272
- async function syncAdminAssets(source, target, check) {
273
- const sourceFiles = (await listFiles(source)).filter((path) => !path.startsWith("server."));
274
- const targetFiles = await listFiles(target).catch(() => []);
275
- const current = sourceFiles.length === targetFiles.length
276
- && sourceFiles.every((path, index) => path === targetFiles[index])
277
- && (await Promise.all(sourceFiles.map(async (path) => (await readFile(join(source, path))).equals(await readFile(join(target, path)))))).every(Boolean);
278
- if (current || check)
279
- return current;
280
- await rm(target, { recursive: true, force: true });
281
- for (const path of sourceFiles) {
282
- const destination = join(target, path);
283
- await mkdir(dirname(destination), { recursive: true });
284
- await writeFile(destination, await readFile(join(source, path)));
349
+ catch (err) {
350
+ // a missing, corrupt, locked or non-file database: say which, without a stack or the absolute path
351
+ return (stderr.write(`--database ${values.database}: ${(err instanceof Error ? err.message : String(err)).replaceAll(root, ".")}\n`), 2);
285
352
  }
286
- return true;
287
- }
288
- async function listFiles(root, prefix = "") {
289
- const entries = await readdir(join(root, prefix), { withFileTypes: true });
290
- const files = await Promise.all(entries.map((entry) => {
291
- const path = join(prefix, entry.name);
292
- return entry.isDirectory() ? listFiles(root, path) : [path];
293
- }));
294
- return files.flat().sort();
295
- }
296
- function message(error) {
297
- return error instanceof Error ? error.message : String(error);
353
+ return code;
298
354
  }
299
355
  //# sourceMappingURL=generate.js.map