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

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 (495) hide show
  1. package/README.md +166 -298
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +288 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +21 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +155 -0
  8. package/dist/auth/hardening.d.ts +24 -0
  9. package/dist/auth/hardening.js +40 -0
  10. package/dist/auth/identity.d.ts +121 -0
  11. package/dist/auth/identity.js +203 -0
  12. package/dist/auth/oauth.d.ts +63 -0
  13. package/dist/auth/oauth.js +217 -0
  14. package/dist/auth/resource-seeds.js +10 -0
  15. package/dist/auth/routes.d.ts +32 -0
  16. package/dist/auth/routes.js +226 -0
  17. package/dist/build/compiler.d.ts +721 -0
  18. package/dist/build/compiler.js +7029 -0
  19. package/dist/build/spec/domain/model/ManifestGrammar.d.ts +439 -0
  20. package/dist/build/spec/domain/model/RuntimePlan.d.ts +168 -0
  21. package/dist/build/spec/domain/model/SqlIr.d.ts +129 -0
  22. package/dist/build/spec/domain/model/UserFields.d.ts +21 -0
  23. package/dist/build/spec/domain/service/PlanFingerprint.d.ts +7 -0
  24. package/dist/build/spec/kernel/diagnostic.d.ts +108 -0
  25. package/dist/bun/assets.d.ts +2 -0
  26. package/dist/bun/assets.js +24 -0
  27. package/dist/domain/adminOrder.js +24 -0
  28. package/dist/domain/columns.js +57 -0
  29. package/dist/domain/describe/chunk-ZVXBGP7Y.js +424 -0
  30. package/dist/domain/describe/index.d.ts +58 -0
  31. package/dist/domain/describe/index.js +115 -0
  32. package/dist/domain/describe/target-hash.d.ts +8 -0
  33. package/dist/domain/describe/target-hash.js +12 -0
  34. package/dist/domain/describe/targets.d.ts +40 -0
  35. package/dist/domain/entry.js +33 -0
  36. package/dist/domain/generated-tools.js +19 -0
  37. package/dist/domain/generation.d.ts +16 -0
  38. package/dist/domain/generation.js +1 -0
  39. package/dist/domain/input.js +17 -0
  40. package/dist/domain/model.js +1 -0
  41. package/dist/domain/paging.js +230 -0
  42. package/dist/domain/recipes.js +24 -0
  43. package/dist/domain/userReferences.js +5 -0
  44. package/dist/domain/wireScalars.js +47 -0
  45. package/dist/infrastructure/adminEntries.js +153 -0
  46. package/dist/infrastructure/adminPaging.js +72 -0
  47. package/dist/infrastructure/artifacts.js +71 -0
  48. package/dist/infrastructure/authSchema.js +83 -0
  49. package/dist/infrastructure/bundle.js +188 -0
  50. package/dist/infrastructure/cli.js +118 -0
  51. package/dist/infrastructure/generate.d.ts +12 -0
  52. package/dist/infrastructure/generate.js +189 -0
  53. package/dist/infrastructure/generateAuth.d.ts +8 -0
  54. package/dist/infrastructure/generateAuth.js +74 -0
  55. package/dist/infrastructure/help.js +60 -0
  56. package/dist/infrastructure/init.js +54 -0
  57. package/dist/infrastructure/inputs.js +41 -0
  58. package/dist/infrastructure/mounts.js +25 -0
  59. package/dist/infrastructure/wrangler.js +109 -0
  60. package/dist/kernel/authorization.d.ts +4 -0
  61. package/dist/kernel/authorization.js +16 -0
  62. package/dist/kernel/binds.d.ts +60 -0
  63. package/dist/kernel/binds.js +49 -0
  64. package/dist/kernel/caller-identity.d.ts +24 -0
  65. package/dist/kernel/caller-identity.js +22 -0
  66. package/dist/kernel/contract-error.d.ts +12 -0
  67. package/dist/kernel/contract-error.js +14 -0
  68. package/dist/kernel/contracts.d.ts +143 -0
  69. package/dist/kernel/contracts.js +97 -0
  70. package/dist/kernel/cron.d.ts +1 -0
  71. package/dist/kernel/cron.js +58 -0
  72. package/dist/kernel/dialect/common.d.ts +38 -0
  73. package/dist/kernel/dialect/common.js +6 -0
  74. package/dist/kernel/dialect/postgres.d.ts +16 -0
  75. package/dist/kernel/dialect/postgres.js +18 -0
  76. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  77. package/dist/kernel/dialect/sqlite.js +34 -0
  78. package/dist/kernel/drain.d.ts +5 -0
  79. package/dist/kernel/drain.js +35 -0
  80. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  81. package/dist/kernel/driver/bun-sqlite.js +77 -0
  82. package/dist/kernel/driver/d1.d.ts +24 -0
  83. package/dist/kernel/driver/d1.js +22 -0
  84. package/dist/kernel/driver/postgres.d.ts +25 -0
  85. package/dist/kernel/driver/postgres.js +99 -0
  86. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  87. package/dist/kernel/driver/transaction-context.js +29 -0
  88. package/dist/kernel/email.d.ts +28 -0
  89. package/dist/kernel/email.js +38 -0
  90. package/dist/kernel/host-access.d.ts +10 -0
  91. package/dist/kernel/host-access.js +65 -0
  92. package/dist/kernel/host-caller.d.ts +39 -0
  93. package/dist/kernel/host-caller.js +56 -0
  94. package/dist/kernel/json-body.d.ts +4 -0
  95. package/dist/kernel/json-body.js +44 -0
  96. package/dist/kernel/mcp-apps.d.ts +69 -0
  97. package/dist/kernel/mcp-apps.js +40 -0
  98. package/dist/kernel/mcp-call.d.ts +5 -0
  99. package/dist/kernel/mcp-call.js +25 -0
  100. package/dist/kernel/mcp-handler.js +371 -0
  101. package/dist/kernel/mcp.d.ts +110 -0
  102. package/dist/kernel/mcp.js +50 -0
  103. package/dist/kernel/media.d.ts +27 -0
  104. package/dist/kernel/media.js +216 -0
  105. package/dist/kernel/paging.d.ts +55 -0
  106. package/dist/kernel/paging.js +95 -0
  107. package/dist/kernel/publishing.d.ts +4 -0
  108. package/dist/kernel/publishing.js +16 -0
  109. package/dist/kernel/r2-media.d.ts +42 -0
  110. package/dist/kernel/r2-media.js +78 -0
  111. package/dist/kernel/rest-dispatch.js +38 -0
  112. package/dist/kernel/rest-router.js +64 -0
  113. package/dist/kernel/rest.d.ts +58 -0
  114. package/dist/kernel/rest.js +41 -0
  115. package/dist/kernel/scalars.d.ts +6 -0
  116. package/dist/kernel/scalars.js +44 -0
  117. package/dist/kernel/search.js +5 -0
  118. package/dist/kernel/site-types.d.ts +146 -0
  119. package/dist/kernel/site-types.js +1 -0
  120. package/dist/kernel/site.d.ts +39 -0
  121. package/dist/kernel/site.js +32 -0
  122. package/dist/kernel/store.d.ts +175 -0
  123. package/dist/kernel/store.js +269 -0
  124. package/dist/kernel/surface.d.ts +10 -0
  125. package/dist/kernel/surface.js +19 -0
  126. package/dist/kernel/sweep.d.ts +17 -0
  127. package/dist/kernel/sweep.js +27 -0
  128. package/dist/kernel/translations.d.ts +1 -0
  129. package/dist/kernel/translations.js +13 -0
  130. package/dist/kernel/user-caller.d.ts +31 -0
  131. package/dist/kernel/user-caller.js +67 -0
  132. package/dist/kernel/user-field-name.js +3 -0
  133. package/dist/kernel/user-fields.d.ts +35 -0
  134. package/dist/kernel/user-fields.js +81 -0
  135. package/dist/kernel/validation.d.ts +15 -0
  136. package/dist/kernel/validation.js +54 -0
  137. package/dist/kernel/web-gateway.js +68 -0
  138. package/dist/kernel/web-head.js +15 -0
  139. package/dist/kernel/web-index.js +40 -0
  140. package/dist/kernel/web-response.js +8 -0
  141. package/dist/kernel/web.d.ts +77 -0
  142. package/dist/kernel/web.js +124 -0
  143. package/dist/kernel/where.js +27 -0
  144. package/dist/testing/index.d.ts +1 -0
  145. package/dist/testing/index.js +1 -0
  146. package/dist/usecase/adminBindings.js +143 -0
  147. package/dist/usecase/adminClient.js +87 -0
  148. package/dist/usecase/adminDescriptors.js +107 -0
  149. package/dist/usecase/generate.js +166 -0
  150. package/dist/usecase/handlers.js +21 -0
  151. package/dist/usecase/mcp-media.js +17 -0
  152. package/dist/usecase/mcp.js +100 -0
  153. package/dist/usecase/paging.js +71 -0
  154. package/dist/usecase/publishing.js +63 -0
  155. package/dist/usecase/refusals.js +27 -0
  156. package/dist/usecase/rest.js +54 -0
  157. package/dist/usecase/search.js +7 -0
  158. package/dist/usecase/site.js +39 -0
  159. package/dist/usecase/stores.js +64 -0
  160. package/dist/usecase/tool-version.js +9 -0
  161. package/dist/usecase/translations.js +78 -0
  162. package/dist/usecase/ttl.js +20 -0
  163. package/dist/usecase/validation.js +241 -0
  164. package/dist/usecase/web.js +23 -0
  165. package/docs/examples/README.md +39 -18
  166. package/docs/examples/app-shell/.dev.vars.example +4 -0
  167. package/docs/examples/app-shell/README.md +121 -0
  168. package/docs/examples/app-shell/accept.mjs +91 -0
  169. package/docs/examples/app-shell/gitignore +7 -0
  170. package/docs/examples/app-shell/package.json +43 -0
  171. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  172. package/docs/examples/app-shell/smoke-kit.mjs +168 -0
  173. package/docs/examples/app-shell/src/auth.ts +58 -0
  174. package/docs/examples/app-shell/src/handlers.ts +5 -0
  175. package/docs/examples/app-shell/src/index.ts +4 -0
  176. package/docs/examples/app-shell/src/routes.ts +14 -0
  177. package/docs/examples/app-shell/src/schedule.ts +8 -0
  178. package/docs/examples/app-shell/src/service.ts +70 -0
  179. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  180. package/docs/examples/app-shell/src/signup.ts +8 -0
  181. package/docs/examples/app-shell/tsconfig.json +26 -0
  182. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  183. package/docs/examples/app-shell/wrangler.jsonc +62 -0
  184. package/docs/examples/club-events/README.md +65 -0
  185. package/docs/examples/club-events/manifests/club-events.yaml +247 -0
  186. package/docs/examples/club-events/smoke.mjs +127 -0
  187. package/docs/examples/club-events/src/handlers.ts +25 -0
  188. package/docs/examples/club-events/src/signup.ts +9 -0
  189. package/docs/examples/generated-web/README.md +78 -0
  190. package/docs/examples/generated-web/posts.yaml +38 -0
  191. package/docs/examples/generated-web/seed.sql +6 -0
  192. package/docs/examples/generated-web/src/worker.ts +43 -0
  193. package/docs/examples/generated-web/tsconfig.json +8 -0
  194. package/docs/examples/generated-web/wrangler.jsonc +8 -0
  195. package/docs/examples/purchasing/.dev.vars.example +6 -0
  196. package/docs/examples/purchasing/README.md +99 -0
  197. package/docs/examples/purchasing/manifests/purchasing.yaml +374 -0
  198. package/docs/examples/purchasing/seed.sql +4 -0
  199. package/docs/examples/purchasing/smoke.mjs +191 -0
  200. package/docs/examples/purchasing/src/admin.tsx +13 -0
  201. package/docs/examples/purchasing/src/handlers.ts +33 -0
  202. package/docs/examples/purchasing/src/notify.ts +29 -0
  203. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  204. package/docs/examples/purchasing/src/routes.ts +53 -0
  205. package/docs/examples/purchasing/src/schedule.ts +31 -0
  206. package/docs/examples/purchasing/src/signup.ts +5 -0
  207. package/docs/examples/purchasing/src/supplier.ts +32 -0
  208. package/docs/examples/purchasing/wrangler.jsonc +69 -0
  209. package/docs/examples/recipes/README.md +60 -0
  210. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  211. package/docs/examples/recipes/smoke.mjs +102 -0
  212. package/docs/examples/recipes/src/media.ts +13 -0
  213. package/docs/examples/recipes/src/pages.ts +99 -0
  214. package/docs/examples/recipes/src/routes.ts +71 -0
  215. package/docs/examples/recipes/src/site-config.ts +12 -0
  216. package/docs/examples/recipes/wrangler.jsonc +74 -0
  217. package/docs/handbook/cloudflare/authentication.md +180 -322
  218. package/docs/handbook/cloudflare/chatgpt-sites.md +5 -23
  219. package/docs/handbook/cloudflare/deploy-and-operate.md +55 -77
  220. package/docs/handbook/cloudflare/media-r2.md +61 -205
  221. package/docs/handbook/cloudflare/service-entry.md +239 -0
  222. package/docs/handbook/concepts/authorization.md +10 -107
  223. package/docs/handbook/concepts/four-atoms.md +9 -168
  224. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -132
  225. package/docs/handbook/concepts/mcp-and-agents.md +24 -121
  226. package/docs/handbook/concepts/procedures-and-triggers.md +5 -217
  227. package/docs/handbook/concepts/runtime-and-adapters.md +15 -169
  228. package/docs/handbook/concepts/views.md +10 -185
  229. package/docs/handbook/examples/hub.md +3 -8
  230. package/docs/handbook/guides/adapter-guide.md +11 -0
  231. package/docs/handbook/guides/admin-ui.md +115 -133
  232. package/docs/handbook/guides/agent-setup.md +64 -74
  233. package/docs/handbook/guides/agent-workflow-acceptance.md +232 -0
  234. package/docs/handbook/guides/email.md +86 -0
  235. package/docs/handbook/guides/local-testing.md +40 -0
  236. package/docs/handbook/guides/mcp-apps.md +560 -0
  237. package/docs/handbook/guides/native-admin.md +566 -0
  238. package/docs/handbook/guides/native-execution.md +133 -0
  239. package/docs/handbook/guides/oauth.md +219 -0
  240. package/docs/handbook/guides/postgres-adapters.md +56 -0
  241. package/docs/handbook/guides/public-pages.md +87 -0
  242. package/docs/handbook/guides/size-and-startup.md +9 -0
  243. package/docs/handbook/guides/sql-patterns.md +266 -0
  244. package/docs/handbook/guides/typed-queries.md +211 -107
  245. package/docs/handbook/navigation.json +176 -55
  246. package/docs/handbook/reference/admin-descriptors.md +53 -0
  247. package/docs/handbook/reference/authorization.md +39 -266
  248. package/docs/handbook/reference/describe.md +56 -0
  249. package/docs/handbook/reference/diagnostics.md +19 -186
  250. package/docs/handbook/reference/features.md +45 -55
  251. package/docs/handbook/reference/manifest.md +6 -129
  252. package/docs/handbook/reference/procedure.md +11 -303
  253. package/docs/handbook/reference/schema.md +64 -240
  254. package/docs/handbook/reference/site-config.md +5 -218
  255. package/docs/handbook/reference/sql.md +64 -0
  256. package/docs/handbook/reference/surface.md +392 -201
  257. package/docs/handbook/reference/trigger.md +56 -192
  258. package/docs/handbook/reference/view.md +24 -243
  259. package/docs/handbook/releases/index.md +244 -77
  260. package/docs/handbook/start/agents.md +45 -0
  261. package/docs/handbook/start/overview.md +9 -48
  262. package/docs/handbook/start/project-and-cli.md +51 -104
  263. package/docs/handbook/start/quickstart-worker.md +43 -178
  264. package/docs/skills/develop/SKILL.md +79 -249
  265. package/docs/skills/integrate/SKILL.md +39 -50
  266. package/docs/skills/media-gc/SKILL.md +34 -10
  267. package/docs/skills/provision/SKILL.md +36 -186
  268. package/docs/skills/update/SKILL.md +23 -38
  269. package/docs/source/scripts/postgres-adapter.ts +101 -0
  270. package/docs/upgrade-0.1-to-0.2.md +227 -0
  271. package/package.json +120 -131
  272. package/skills/README.md +48 -108
  273. package/skills/mantle/SKILL.md +76 -0
  274. package/dist/admin-ui.d.ts +0 -2
  275. package/dist/admin-ui.d.ts.map +0 -1
  276. package/dist/admin-ui.js +0 -2
  277. package/dist/admin-ui.js.map +0 -1
  278. package/dist/admin.d.ts +0 -2
  279. package/dist/admin.d.ts.map +0 -1
  280. package/dist/admin.js +0 -2
  281. package/dist/admin.js.map +0 -1
  282. package/dist/auth.d.ts +0 -2
  283. package/dist/auth.d.ts.map +0 -1
  284. package/dist/auth.js +0 -2
  285. package/dist/auth.js.map +0 -1
  286. package/dist/bun.d.ts +0 -2
  287. package/dist/bun.d.ts.map +0 -1
  288. package/dist/bun.js +0 -2
  289. package/dist/bun.js.map +0 -1
  290. package/dist/cli/generate-cloudflare.d.ts +0 -7
  291. package/dist/cli/generate-cloudflare.d.ts.map +0 -1
  292. package/dist/cli/generate-cloudflare.js +0 -123
  293. package/dist/cli/generate-cloudflare.js.map +0 -1
  294. package/dist/cli/generate-project.d.ts +0 -25
  295. package/dist/cli/generate-project.d.ts.map +0 -1
  296. package/dist/cli/generate-project.js +0 -282
  297. package/dist/cli/generate-project.js.map +0 -1
  298. package/dist/cli/generate-sites.d.ts +0 -8
  299. package/dist/cli/generate-sites.d.ts.map +0 -1
  300. package/dist/cli/generate-sites.js +0 -273
  301. package/dist/cli/generate-sites.js.map +0 -1
  302. package/dist/cli/generate.d.ts +0 -20
  303. package/dist/cli/generate.d.ts.map +0 -1
  304. package/dist/cli/generate.js +0 -299
  305. package/dist/cli/generate.js.map +0 -1
  306. package/dist/cli/harness.d.ts +0 -3
  307. package/dist/cli/harness.d.ts.map +0 -1
  308. package/dist/cli/harness.js +0 -214
  309. package/dist/cli/harness.js.map +0 -1
  310. package/dist/cli/main.d.ts +0 -3
  311. package/dist/cli/main.d.ts.map +0 -1
  312. package/dist/cli/main.js +0 -77
  313. package/dist/cli/main.js.map +0 -1
  314. package/dist/cli/skills.d.ts +0 -3
  315. package/dist/cli/skills.d.ts.map +0 -1
  316. package/dist/cli/skills.js +0 -128
  317. package/dist/cli/skills.js.map +0 -1
  318. package/dist/cloudflare.d.ts +0 -2
  319. package/dist/cloudflare.d.ts.map +0 -1
  320. package/dist/cloudflare.js +0 -2
  321. package/dist/cloudflare.js.map +0 -1
  322. package/dist/codegen/emitMantleModule.d.ts +0 -22
  323. package/dist/codegen/emitMantleModule.d.ts.map +0 -1
  324. package/dist/codegen/emitMantleModule.js +0 -291
  325. package/dist/codegen/emitMantleModule.js.map +0 -1
  326. package/dist/codegen.d.ts +0 -2
  327. package/dist/codegen.d.ts.map +0 -1
  328. package/dist/codegen.js +0 -2
  329. package/dist/codegen.js.map +0 -1
  330. package/dist/runtime-testing.d.ts +0 -2
  331. package/dist/runtime-testing.d.ts.map +0 -1
  332. package/dist/runtime-testing.js +0 -2
  333. package/dist/runtime-testing.js.map +0 -1
  334. package/dist/runtime.d.ts +0 -2
  335. package/dist/runtime.d.ts.map +0 -1
  336. package/dist/runtime.js +0 -2
  337. package/dist/runtime.js.map +0 -1
  338. package/dist/spec.d.ts +0 -2
  339. package/dist/spec.d.ts.map +0 -1
  340. package/dist/spec.js +0 -2
  341. package/dist/spec.js.map +0 -1
  342. package/dist/vercel-libsql.d.ts +0 -2
  343. package/dist/vercel-libsql.d.ts.map +0 -1
  344. package/dist/vercel-libsql.js +0 -2
  345. package/dist/vercel-libsql.js.map +0 -1
  346. package/dist/vercel.d.ts +0 -2
  347. package/dist/vercel.d.ts.map +0 -1
  348. package/dist/vercel.js +0 -2
  349. package/dist/vercel.js.map +0 -1
  350. package/dist/web.d.ts +0 -2
  351. package/dist/web.d.ts.map +0 -1
  352. package/dist/web.js +0 -2
  353. package/dist/web.js.map +0 -1
  354. package/docs/adapter-guide.md +0 -222
  355. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  356. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  357. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  358. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  359. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  360. package/docs/adr/0010-locale-and-translates.md +0 -453
  361. package/docs/adr/0011-adapter-port-spec.md +0 -281
  362. package/docs/adr/0012-views-as-public-rest.md +0 -161
  363. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  364. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -900
  365. package/docs/adr/0016-site-semantic-layer.md +0 -70
  366. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  367. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  368. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -240
  369. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  370. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  371. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  372. package/docs/adr/0023-port-failure-contract.md +0 -69
  373. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  374. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  375. package/docs/adr/0026-progressive-generate.md +0 -36
  376. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  377. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  378. package/docs/adr/README.md +0 -81
  379. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  380. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  381. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  382. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  383. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  384. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  385. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  386. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -42
  387. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  388. package/docs/agent-prompts.md +0 -64
  389. package/docs/api-mcp-authorization.md +0 -5
  390. package/docs/assets/mantle-admin-developer.png +0 -0
  391. package/docs/assets/mantle-admin-operations.png +0 -0
  392. package/docs/assets/mantle-hero.jpg +0 -0
  393. package/docs/auth-hosting-model.md +0 -166
  394. package/docs/cloudflare-low-level-composition.md +0 -5
  395. package/docs/consumer-onboarding-audit.md +0 -65
  396. package/docs/deferred-lifecycle-queues.md +0 -5
  397. package/docs/design-atoms.md +0 -16
  398. package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
  399. package/docs/direct-authoring.md +0 -5
  400. package/docs/examples/builtin-commerce.md +0 -269
  401. package/docs/examples/builtin-intake.md +0 -143
  402. package/docs/examples/builtin-legal-documents.md +0 -189
  403. package/docs/examples/builtin-procurement.md +0 -241
  404. package/docs/examples/builtin-publication.md +0 -241
  405. package/docs/examples/builtin-reservation.md +0 -149
  406. package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
  407. package/docs/examples/cf-primitives-guarded-api.md +0 -429
  408. package/docs/examples/cf-primitives-intake-hooks.md +0 -319
  409. package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
  410. package/docs/examples/host-chatgpt-sites/README.md +0 -70
  411. package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
  412. package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
  413. package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
  414. package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
  415. package/docs/examples/host-chatgpt-sites/drizzle/0004_mantle.sql +0 -10
  416. package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
  417. package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
  418. package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
  419. package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
  420. package/docs/examples/host-chatgpt-sites/package.json +0 -1
  421. package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
  422. package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
  423. package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
  424. package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -43
  425. package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
  426. package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
  427. package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
  428. package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
  429. package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
  430. package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
  431. package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
  432. package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
  433. package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
  434. package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
  435. package/docs/examples/host-local-admin-otp/README.md +0 -80
  436. package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
  437. package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
  438. package/docs/examples/host-local-admin-otp/package.json +0 -29
  439. package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
  440. package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
  441. package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
  442. package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
  443. package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
  444. package/docs/examples/host-minimal-worker/README.md +0 -41
  445. package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
  446. package/docs/examples/host-minimal-worker/package.json +0 -26
  447. package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
  448. package/docs/examples/host-minimal-worker/src/index.ts +0 -4
  449. package/docs/examples/host-minimal-worker/tsconfig.json +0 -17
  450. package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
  451. package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
  452. package/docs/handbook/chatgpt-sites/generated-app.md +0 -84
  453. package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
  454. package/docs/handbook/chatgpt-sites/index.md +0 -133
  455. package/docs/handbook/cloudflare/bindings.md +0 -291
  456. package/docs/handbook/cloudflare/conventional-worker.md +0 -166
  457. package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
  458. package/docs/handbook/cloudflare/low-level-composition.md +0 -169
  459. package/docs/handbook/cloudflare/public-web.md +0 -144
  460. package/docs/handbook/cloudflare/site-chrome.md +0 -75
  461. package/docs/handbook/examples/commerce-transaction.md +0 -11
  462. package/docs/handbook/examples/commerce.md +0 -11
  463. package/docs/handbook/examples/guarded-api.md +0 -10
  464. package/docs/handbook/examples/intake-form.md +0 -12
  465. package/docs/handbook/examples/intake-hooks.md +0 -11
  466. package/docs/handbook/examples/legal-documents.md +0 -10
  467. package/docs/handbook/examples/procurement-approvals.md +0 -10
  468. package/docs/handbook/examples/publication.md +0 -10
  469. package/docs/handbook/examples/reservation.md +0 -10
  470. package/docs/handbook/start/quickstart-admin.md +0 -52
  471. package/docs/labels.md +0 -71
  472. package/docs/media-uploads.md +0 -5
  473. package/docs/migration-0.1.2.md +0 -13
  474. package/docs/performance-harness.md +0 -228
  475. package/docs/release-process.md +0 -244
  476. package/docs/schema-indexes.md +0 -5
  477. package/docs/sealed-pipeline-ownership.md +0 -101
  478. package/docs/skills/plugin/SKILL.md +0 -132
  479. package/docs/skills/theme/SKILL.md +0 -77
  480. package/docs/spec-only-host-adoption.md +0 -157
  481. package/docs/transaction-patterns.md +0 -5
  482. package/skills/develop/SKILL.md +0 -258
  483. package/skills/install/SKILL.md +0 -112
  484. package/skills/integrate/SKILL.md +0 -60
  485. package/skills/media-gc/SKILL.md +0 -85
  486. package/skills/plugin/SKILL.md +0 -132
  487. package/skills/provision/SKILL.md +0 -194
  488. package/skills/theme/SKILL.md +0 -77
  489. package/skills/update/SKILL.md +0 -51
  490. package/templates/chatgpt-sites/auth.ts +0 -66
  491. package/templates/chatgpt-sites/build.mjs +0 -14
  492. package/templates/chatgpt-sites/env.ts +0 -1
  493. package/templates/chatgpt-sites/mcp.ts +0 -48
  494. package/templates/chatgpt-sites/public-mcp.ts +0 -29
  495. package/templates/chatgpt-sites/smoke-local.mjs +0 -20
@@ -1,135 +1,117 @@
1
- ---
2
- description: How Schema, View, Procedure, Trigger and uiSchema become Admin forms, lists, navigation and actions, with a complete customization example.
3
- ---
4
- # Customize the Admin console
5
-
6
- Many Admin changes are manifest edits: labels, multiline inputs, operational
7
- list columns and tabs, reports and action placement. Admin API derives
8
- metadata from the compiled plan; the prebuilt SPA renders it. The host must
9
- already mount Admin API, authentication and Admin assets — see the
10
- [local Admin tutorial](../start/quickstart-admin.md).
11
-
12
- ## Manifest to rendered UI
13
-
14
- | User request | Author this | What Admin renders / constraints |
15
- |---|---|---|
16
- | Rename a collection or explain a field | Schema `title` / `description`, property `title` / `description` | Localized labels and help. Property names and stored values stay unchanged. |
17
- | Make a field required or an option list | JSON Schema `required`, `enum`, `type` | Required marker and type-derived control; enums become selects. These are data contracts, not styling flags. |
18
- | Make a string multiline | Schema or Procedure `uiSchema.fields.<name>.widget: textarea` | Textarea for a top-level string field. `textarea` is the only supported explicit widget. |
19
- | Edit Markdown or HTML | Property `x-mcp-hint: markdown` or `html` | Rich editor; these hints take precedence over `widget: textarea`. `richtext` currently uses a textarea. |
20
- | Edit a timestamp or show money | `format: date-time` on a string; `x-mcp-hint: timestamp-ms` or `money-minor` on a number | Date/time controls or number preview. Money uses minor units divided by 100 and a sibling `currency` when present. |
21
- | Reorder an operational record list | Schema `uiSchema.list.primaryField`, `.columns` | Linked leading data field, then ordered columns. Native columns such as `status` and `createdAt` are allowed in `columns`; `primaryField` must be a scalar data property. |
22
- | Add business-state tabs | Schema `uiSchema.list.filterField` | Operational-only enum tabs/sidebar links. Field needs a string enum and a left-prefix index. |
23
- | Search record contents | Schema `searchableFields` | Searches declared string fields plus entry id. This is substring search, not an index declaration. |
24
- | Show related records | Required property `x-mantle-ref` | Eligible child collections fold into the parent's workbench; translation children use language tabs. |
25
- | Also show a folded child in navigation | Schema `uiSchema.nav.standalone: true`, optional `parentField` | Adds its own list with parent filter, retaining the folded view. Multiple eligible parent refs require `parentField`; not allowed on translation children. |
26
- | Add a read-only report and CSV | View `surface: staff`, `title`, `uiSchema.list` | Report navigation; `columns`, `searchFields`, `filterFields` use output names. Server filters before pagination; CSV includes all matches. |
27
- | Add a list-level action | Eligible Procedure `uiSchema.collectionAction: <schema>` | Collection action with a form generated from Procedure `input`. |
28
- | Add a row action | Eligible Procedure input property `x-mantle-ref: <schema>` | Row operation with prefilled reference. Selection uses a same-name Schema property, then a sole single-field unique index, otherwise entry `id`. |
29
- | Make generic content editing read-only | Schema root `schema.readOnly: true` | Generic authoring writes are blocked; declared Procedures remain available. A disabled field is not an authorization rule. |
30
-
31
- The data editor also handles booleans, numbers, objects and arrays from JSON
32
- Schema. Bound fields (`x-mantle-bind`) display read-only because Runtime owns
33
- the value. Media controls depend on the supported media schema and host media
34
- policy; `uiSchema` alone cannot enable uploads.
35
-
36
- Schema list presentation (`primaryField`, `columns`, `filterField`) is for
37
- `lifecycle: operational`. Publishing collections keep the built-in publishing
38
- workflow. For an alternate publishing table, define a staff View report.
39
-
40
- ## Example: an operational inbox
41
-
42
- This complete source configures a collection and a separate staff report.
43
- The collection filters by `ticketState`, not Mantle's native publishing status.
44
-
45
- ```yaml
46
- apiVersion: cms.mantle.aotter.net/v1
47
- kind: Schema
48
- metadata:
49
- name: support-tickets
50
- spec:
51
- title: { en: Support tickets, zh-TW: 客服工單 }
52
- lifecycle: operational
53
- schema:
54
- type: object
55
- additionalProperties: false
56
- required: [subject, ticketState]
57
- properties:
58
- subject: { type: string, title: Subject }
59
- details: { type: string, description: Include the steps to reproduce. }
60
- ticketState: { type: string, enum: [open, waiting, closed] }
61
- indexes: [[ticketState]]
62
- searchableFields: [subject, details]
63
- uiSchema:
64
- fields:
65
- details: { widget: textarea }
66
- list:
67
- primaryField: subject
68
- columns: [ticketState, createdAt]
69
- filterField: ticketState
70
- ---
71
- apiVersion: cms.mantle.aotter.net/v1
72
- kind: View
73
- metadata:
74
- name: support-report
75
- spec:
76
- title: Support report
77
- surface: staff
78
- from: support-tickets
79
- fields: [id, subject, ticketState, createdAt]
80
- uiSchema:
81
- list:
82
- columns: [subject, ticketState, createdAt]
83
- searchFields: [subject]
84
- filterFields: [ticketState]
1
+ # Customize Admin from manifests
2
+
3
+ Select `--admin` and mount [native Admin](native-admin.md) from `@aotter/mantle-admin`. The app serves its assets and owns authentication. UI and SDK are separate packages.
4
+
5
+ Schema `uiSchema` selects fields, widgets, list columns, enum tabs and child navigation. The compiler derives sortable fields from indexed required/non-null fields; it emits selected system/statistics indexes in initial DDL. Apply those indexes through an explicit migration on existing databases.
6
+
7
+ Admin Views provide custom read lists; their SELECT outputs, column lineage and `uiSchema.list` define display/search/filter metadata. Procedures and MCP admin Triggers define operations with declared authorization, input checks and optional row targets. A hidden button never authorizes an operation.
8
+
9
+ Generic publishing edits apply to drafts; publishing transitions retain their atomic guards and OCC. Read-only collections refuse generic edits while declared Procedures can still run. Ref operations receive the caller/transaction-bound Store.
10
+
11
+ Use [`defineAdmin` components](native-admin.md#customising-admin) for app-owned cells, inputs, record asides and actions; server work is a Procedure, a View or an application route. Keep exact conflict/uncertain-outcome handling in the shared UI controller.
12
+
13
+ ## Theme
14
+
15
+ Admin is themed with CSS variables. Import your own stylesheet from `src/admin.tsx` (`import "./admin.css"`) and override the public tokens on `:root` for light and on `.dark` for dark:
16
+
17
+ ```css
18
+ :root {
19
+ --primary: #0f766e;
20
+ --primary-foreground: #ffffff;
21
+ --radius: 0.5rem;
22
+ }
23
+ .dark {
24
+ --primary: #2dd4bf;
25
+ --primary-foreground: #042f2e;
26
+ }
27
+ ```
28
+
29
+ Admin marks the active theme as both the `.dark` class and `data-theme="dark"` (or `"light"`) on the root. Dark tokens and Tailwind's `dark:` variant apply when either is present, so `[data-theme="dark"] {}` is equivalent to `.dark {}`. Your overrides apply in the browser Admin and, because the entry imports your CSS, in the [MCP App](mcp-apps.md#theme) too, where the host's neutral colours are laid over them.
30
+
31
+ | Token | Meaning |
32
+ | --- | --- |
33
+ | `--background` | Page background |
34
+ | `--foreground` | Default text |
35
+ | `--card` | Card and panel surface |
36
+ | `--card-foreground` | Text on a card |
37
+ | `--popover` | Menu, popover and dialog surface |
38
+ | `--popover-foreground` | Text on a popover |
39
+ | `--primary` | Brand color: primary buttons, active states |
40
+ | `--primary-foreground` | Text on `--primary` |
41
+ | `--secondary` | Secondary button surface |
42
+ | `--secondary-foreground` | Text on `--secondary` |
43
+ | `--muted` | Subtle surface: table stripes, disabled areas |
44
+ | `--muted-foreground` | Secondary text |
45
+ | `--accent` | Hover and selected surface |
46
+ | `--accent-foreground` | Text on `--accent` |
47
+ | `--destructive` | Destructive actions and errors |
48
+ | `--border` | Borders and dividers |
49
+ | `--input` | Form control borders |
50
+ | `--ring` | Focus ring |
51
+ | `--radius` | Base corner radius; the other radii derive from it |
52
+ | `--success` | Success status color |
53
+ | `--warning` | Warning status color |
54
+ | `--info` | Informational status color |
55
+ | `--chart-1` | Chart series 1 |
56
+ | `--chart-2` | Chart series 2 |
57
+ | `--chart-3` | Chart series 3 |
58
+ | `--chart-4` | Chart series 4 |
59
+ | `--chart-5` | Chart series 5 |
60
+ | `--sidebar` | Sidebar surface |
61
+ | `--sidebar-foreground` | Sidebar text |
62
+ | `--sidebar-primary` | Sidebar active item |
63
+ | `--sidebar-primary-foreground` | Text on `--sidebar-primary` |
64
+ | `--sidebar-accent` | Sidebar hover surface |
65
+ | `--sidebar-accent-foreground` | Text on `--sidebar-accent` |
66
+ | `--sidebar-border` | Sidebar borders |
67
+ | `--sidebar-ring` | Sidebar focus ring |
68
+ | `--app-base` | Solid color behind the page |
69
+ | `--app-background` | Page backdrop (any CSS background, such as a gradient) |
70
+
71
+ Every other variable, including `--mantle-blue-*` and `--chrome-glass`, is internal and may change without notice.
72
+
73
+ ## Eject a component
74
+
75
+ `@aotter/mantle-admin` ships a [shadcn registry](https://ui.shadcn.com/docs/registry) of starting-point components for the `defineAdmin` slots. Ejecting copies one into your source: you own that file and edit it freely, while the hooks it calls (`@aotter/mantle-admin/hooks`) and the slot prop types (`@aotter/mantle-admin/app`) keep upgrading with the package. The registry is inside the installed package, so the copy matches the version you run and no registry host is involved (the shadcn CLI itself downloads from npm and needs network). Install from the package, in the app's root:
76
+
77
+ ```bash
78
+ npx shadcn@4 add ./node_modules/@aotter/mantle-admin/dist/registry/admin-cell.json
79
+ ```
80
+
81
+ The file lands in `src/admin/<item>.tsx` (the item's `target` ignores aliases). The CLI needs a `tsconfig.json` and a `components.json` in the app's root; this minimal one works, because no alias or stylesheet is used:
82
+
83
+ ```json
84
+ {
85
+ "$schema": "https://ui.shadcn.com/schema.json",
86
+ "style": "new-york",
87
+ "rsc": false,
88
+ "tsx": true,
89
+ "tailwind": { "config": "", "css": "", "baseColor": "neutral", "cssVariables": true },
90
+ "aliases": { "components": "@/components", "utils": "@/lib/utils" }
91
+ }
92
+ ```
93
+
94
+ The CLI removes a comment above a file's first import, so each item keeps its header below the imports. Import it in `src/admin.tsx` and name the slot, replacing the sample collection, field, View and operation with your own:
95
+
96
+ ```tsx
97
+ import { AdminCell } from "./admin/admin-cell";
98
+
99
+ export default defineAdmin(admin, { components: { "cell:requests.status": AdminCell } });
85
100
  ```
86
101
 
87
- The collection shows Subject first, State and Created at next, state tabs,
88
- and a multiline Details editor. The report is a separate navigation entry
89
- with its own search/filter configuration and CSV export. Schema `.list` and
90
- View `.list` are different contracts; do not copy their keys between atoms.
91
-
92
- ## When a Procedure becomes a button
93
-
94
- `uiSchema.collectionAction` alone does not expose a Procedure. Admin discovers
95
- staff operations from either a staff MCP Trigger or an HTTP Trigger whose
96
- Procedure requires `ctx.staff`. Runtime rechecks Procedure `requires` on
97
- execution. Use the [Procedure reference](../reference/procedure.md#uischema)
98
- for a complete action declaration.
99
-
100
- An eligible operation with row bindings appears on those records. One with
101
- `collectionAction` appears on that collection's list. Operations without either
102
- appear in the standalone Operations screen. Row mutations use the observed
103
- entry version for optimistic concurrency where the Procedure contract declares
104
- `expectedVersion`; keep its input contract intact when adjusting presentation.
105
-
106
- ## Verify a change
107
-
108
- 1. Edit the application manifests, then run `mantle validate`, `mantle generate`
109
- and `mantle generate --check` through the local package manager.
110
- 2. Restart/reload the host so Admin receives the new compiled plan. Check
111
- `/admin/api/collections`, `/admin/api/views-manifest` or
112
- `/admin/api/operations` in an authenticated session if the UI seems stale.
113
- 3. Open the affected list and editor: check labels, actual columns, filters,
114
- form values and keyboard access. Verify a record after saving, and verify
115
- report filters in CSV as well as the visible page.
116
-
117
- `uiSchema` roots and supported nested keys are closed. Schema accepts `fields`,
118
- `list`, `nav`; Procedure accepts `collectionAction`, `fields`; staff View accepts
119
- `list`. They do not accept a custom layout, CSS, React component, arbitrary
120
- widget name or permission policy. See [Schema](../reference/schema.md#uischema),
121
- [View](../reference/view.md#uischemalist) and [Procedure](../reference/procedure.md#uischema).
122
-
123
- For a new layout or unsupported widget, use application-owned UI against the
124
- appropriate APIs or propose a change to the Admin UI package. Do not patch
125
- `public/_mantle/admin/`: generation replaces those prebuilt assets. Visitor
126
- frontend styles and the `theme` skill's site changes do not style Admin.
127
-
128
- ## Source
129
-
130
- - [Admin UI contract validation](../../../packages/mantle-spec/src/domain/service/SchemaAdminUiChecker.ts)
131
- - [Admin metadata and operation discovery](../../../packages/mantle-admin/src/mountMantleAdmin.ts)
132
- - [Entry form renderer](../../../packages/mantle-admin-ui/src/features/content/entry-edit-view.tsx)
133
- - [Collection renderer](../../../packages/mantle-admin-ui/src/features/content/collection-view.tsx)
134
- - [Action renderer](../../../packages/mantle-admin-ui/src/features/content/row-operations.tsx)
135
- - [Navigation rules](../../../packages/mantle-admin-ui/src/lib/collection-nav.ts)
102
+ | Item | Slots | Surface |
103
+ | --- | --- | --- |
104
+ | `admin-cell` | `cell:view:<view>.<column>` | both (also reusable as a browser collection cell) |
105
+ | `admin-input` | `input:<schema>.<field>` | browser |
106
+ | `admin-record-actions` | `record.actions:<schema>` (runs an operation with `useOperation`) | browser |
107
+ | `admin-record-aside` | `record.aside:<schema>` (lists a View's rows with `useView`) | browser |
108
+ | `admin-sidebar` | `Sidebar` (`renderDefault` with a footer link) | browser |
109
+ | `admin-home` | `Home` (`renderDefault` under a section that reads a View) | browser |
110
+
111
+ Each file starts with a comment naming its surface and rules, and imports only `react`, `@aotter/mantle-admin/app` and `@aotter/mantle-admin/hooks`. A `both` component also renders in the Admin MCP App, inside a host's sandboxed iframe, so keep it to these rules:
112
+
113
+ - Read data only through `useView` and `useOperation`; `useEntries`, `useEntry`, `useCollectionTotal`, `useMe` and `useBadges` read `unavailable` there. Declare what a card needs as an admin View.
114
+ - Link only with `<AdminLink>` or `useOpenLink()`; never `window.open` or `target="_blank"`.
115
+ - No `fetch`, no `document.cookie` or `localStorage` authentication, no remote origin that the host's CSP does not allow, and no assumed width.
116
+ - Where `useOperation` returns no `run` (a host without server tools), show the control disabled with a note rather than throwing or vanishing.
117
+ - Branch on `useAdminSurface()` (or the `surface` prop) if you must, and render something sensible in both branches.
@@ -1,97 +1,87 @@
1
1
  ---
2
- description: Trace what npx skills add installs, hand off to the pinned SDK, project version-matched skills and diagnose missing or stale instructions.
2
+ description: Install the Mantle agent plugin or its one skill, hand off to the installed package's own docs, and diagnose missing or stale instructions.
3
3
  ---
4
4
  # Install and verify agent instructions
5
5
 
6
- There are two separate installations: an agent's bootstrap skill and the
7
- application's SDK. Installing one does not install the other.
6
+ Two separate things are installed: the agent's `mantle` skill and the
7
+ application's `@aotter/mantle` package. Installing one does not install the
8
+ other, and the installed package is always the authority for the version it
9
+ carries.
8
10
 
9
- ## 1. Install the bootstrap skill
11
+ ## 1. Install the `mantle` skill
12
+
13
+ The Mantle plugin carries one OSS authoring skill, `mantle`, and local
14
+ acceptance references. It does not configure a hosted-service connection.
15
+ Install from the Git tag matching the exact SDK version you selected (currently
16
+ `v0.2.0-alpha.10`). Alpha releases integrate on `develop`; an unqualified
17
+ `aotter/mantle` source follows `main` and can install older, incompatible
18
+ instructions. A skill install does not upgrade the application's SDK.
19
+
20
+ For Codex, pin the marketplace checkout:
21
+
22
+ ```sh
23
+ codex plugin marketplace add aotter/mantle --ref v0.2.0-alpha.10
24
+ codex plugin add mantle@mantle
25
+ ```
26
+
27
+ For Claude Code, first clone the release into a directory you will keep:
10
28
 
11
29
  ```sh
12
- npx skills add aotter/mantle
30
+ git clone --depth 1 --branch v0.2.0-alpha.10 https://github.com/aotter/mantle.git mantle-plugin
13
31
  ```
14
32
 
15
- The installer selects the repository's `mantle` skill. Read its printed
16
- installation path. In a project-local Codex installation that is
17
- `.agents/skills/mantle/SKILL.md`, not `skills/install/SKILL.md` (the latter is
18
- its source-repository path). Other agent selections and global installation
19
- can use different locations.
33
+ Then, in Claude Code, use that checkout's absolute path:
20
34
 
21
- The command installs the selected brief; it does not materialize a Mantle
22
- application, install `@aotter/mantle`, or copy `docs/`. The unqualified GitHub
23
- source follows its default branch, not necessarily `develop` or the npm
24
- version you intend to use. The skills installer's lock identifies the source
25
- skill; it is not the application's dependency lockfile.
35
+ ```text
36
+ /plugin marketplace add /absolute/path/to/mantle-plugin
37
+ /plugin install mantle@mantle
38
+ ```
26
39
 
27
- ## 2. Select the SDK version, then read its own instructions
40
+ Cursor and GitHub Copilot use their plugin manifests from the same tagged
41
+ checkout. Without a plugin host, install only the consumer skill by name:
28
42
 
29
- Use the version the project already pins, or resolve the requested npm channel
30
- once and pin every selected `@aotter/mantle*` dependency to the same exact
31
- version. `latest` and `alpha` can describe different capabilities. Resolve only
32
- requirements the user has not provided: host, storage, public API/HTML, and
33
- whether staff need Admin. Follow the bootstrap skill to install the selected
34
- packages locally.
35
- No matching `mantle-starters` tag or bundle is needed to create a project.
43
+ ```sh
44
+ npx skills add https://github.com/aotter/mantle/tree/v0.2.0-alpha.10 --skill mantle
45
+ ```
36
46
 
37
- Then read:
47
+ When upgrading the SDK, update the marketplace ref or local tagged checkout and
48
+ refresh/reinstall the plugin using the host's native workflow. Verify the loaded
49
+ manifest version and skill source. Do not reset a checkout containing local edits.
50
+
51
+ Read the path the installer prints (for project-local Codex,
52
+ `.agents/skills/mantle/SKILL.md`). The skill installs no SDK, creates no
53
+ project and copies no handbook.
54
+
55
+ ## 2. Install the SDK, then read its own docs
56
+
57
+ Use the version the project already pins. For a new project, choose a 0.2.x
58
+ version with `npm view @aotter/mantle dist-tags` and install it with an exact
59
+ version; every `@aotter/mantle*` package stays at that same version. Then
60
+ read, from the application:
38
61
 
39
62
  ```text
40
- node_modules/@aotter/mantle/skills/install/SKILL.md
63
+ node_modules/@aotter/mantle/README.md
41
64
  node_modules/@aotter/mantle/docs/handbook/start/overview.md
42
65
  node_modules/@aotter/mantle/docs/handbook/reference/features.md
66
+ node_modules/@aotter/mantle/docs/skills/<workflow>/SKILL.md
43
67
  ```
44
68
 
45
- These files are in the npm tarball. They are the version-matched authority,
46
- including when the bootstrap skill came from a different Git ref. Every
47
- `docs/...` path in the skill resolves under the installed package, not under
48
- `.agents/skills/mantle/`. Keep using that SDK's docs for host examples and CLI
49
- behavior. No local `mantle` binary is available before package installation.
69
+ These ship in the npm tarball and match the installed code. Prefer them over
70
+ the skill's GitHub copy and over any online handbook.
50
71
 
51
- ## 3. Project the ongoing workflows
72
+ | Package skill | Read it when |
73
+ |---|---|
74
+ | `docs/skills/develop/SKILL.md` | changing manifests, handlers, the service or its surfaces |
75
+ | `docs/skills/integrate/SKILL.md` | adding Mantle to an existing application |
76
+ | `docs/skills/update/SKILL.md` | upgrading `@aotter/mantle`, including from 0.1.x |
77
+ | `docs/skills/provision/SKILL.md` | deploying, with production sign-in |
78
+ | `docs/skills/media-gc/SKILL.md` | auditing or removing stale R2 uploads |
52
79
 
53
- From the application root, after installing the SDK:
80
+ 0.2.0 has no `mantle skills` command: nothing is copied into the project.
81
+ An agent reads these files from `node_modules` when the task calls for them.
54
82
 
55
- ```sh
56
- pnpm exec mantle --help
57
- pnpm exec mantle skills
58
- pnpm exec mantle skills --check
59
- ```
83
+ ## 3. Verify the application
60
84
 
61
- | Artifact | What you get |
62
- |---|---|
63
- | `.agents/skills/mantle-{develop,plugin,theme,update}/SKILL.md` | The installed package's four project-scoped workflows. |
64
- | `.claude/skills/mantle-{develop,plugin,theme,update}/SKILL.md` | Identical bytes for Claude compatibility. |
65
- | `node_modules/@aotter/mantle/skills/` | All eight shipped skills, including opt-in `mantle`, `integrate`, `provision` and `media-gc`. |
66
- | `node_modules/@aotter/mantle/docs/` | Handbook and examples matched to the package. |
67
-
68
- `mantle skills` overwrites these four generated projections. Keep project-specific
69
- instructions elsewhere. `--check` does not write: exit 0 means they match,
70
- 1 means missing/stale projections, and 2 means a command/package error.
71
- `mantle generate` does not project skills. Projection does not remove an older
72
- bootstrap `install` or legacy `.agent/skills` copy; use the version-matched
73
- project skills for ongoing work.
74
-
75
- ## 4. Complete and verify the application
76
-
77
- Follow a [tutorial](../start/overview.md#start-with-your-integration), then run
78
- its generation, validation, TypeScript checks and actual local route probes.
79
- Successful skill installation proves only that the instructions were copied.
80
- It does not prove a server, login, Admin assets or MCP connection works.
81
-
82
- | Symptom | Cause and next step |
83
- |---|---|
84
- | `skills/install/SKILL.md` is missing | That is source provenance. Read the installer's destination instead. |
85
- | `docs/...` is missing after `skills add` | The skill does not carry the handbook. Install the pinned SDK and read its embedded docs. |
86
- | `mantle` is missing | Install local `@aotter/mantle`; run its binary through the project package manager. |
87
- | `MANIFEST_ROOT_NOT_FOUND` | Check the installed CLI and saved project selection. New generated projects may start with an empty manifest set; legacy compile mode still needs the configured source. |
88
- | `mantle skills --check` exits 1 | Run `mantle skills`, then read the refreshed project skill. |
89
- | No projected integrate/provision/media-gc skill | These are intentionally opt-in. Read their installed package files when the task calls for them. |
90
- | A documented feature fails on an older release | Use that release's docs or explicitly upgrade; changing a skill does not change Runtime. |
91
-
92
- ## Source
93
-
94
- - [Bootstrap install skill](../../../skills/install/SKILL.md)
95
- - [Projection implementation](../../../packages/mantle/src/cli/skills.ts)
96
- - [Package file list](../../../packages/mantle/package.json)
97
- - [Package docs and skills copying](../../../scripts/sync-package-docs.mjs)
85
+ Run the app's exact generation command with `--check`, typecheck, implement every printed handler and typecheck again. Test actual routes and persisted state. With selected Admin, mount `entries(bindings.schemas, bindings.adapter)` and serve assets separately. Verify member/admin OTP, row visibility and OCC. Installing a skill proves none of these flows.
86
+
87
+ If packaged docs are missing, reinstall the SDK version pinned by the app. If a feature differs from an online page, read the installed docs rather than assuming compatibility.