emdash 0.36.0 → 0.38.0

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 (991) hide show
  1. package/dist/{activation-K0kGBWuJ.mjs → activation-DyNTe_Tl.mjs} +3 -3
  2. package/dist/{activation-K0kGBWuJ.mjs.map → activation-DyNTe_Tl.mjs.map} +1 -1
  3. package/dist/{adapters-CzL3H752.d.mts → adapters-DCEgOBXi.d.mts} +4 -2
  4. package/dist/{adapters-CzL3H752.d.mts.map → adapters-DCEgOBXi.d.mts.map} +1 -1
  5. package/dist/{allowed-origins-maylGaHv.mjs → allowed-origins-GFUVavRj.mjs} +2 -2
  6. package/dist/{allowed-origins-maylGaHv.mjs.map → allowed-origins-GFUVavRj.mjs.map} +1 -1
  7. package/dist/api/route-utils.d.mts +3 -3
  8. package/dist/api/route-utils.mjs +25 -24
  9. package/dist/api/route-utils.mjs.map +1 -1
  10. package/dist/api/schemas/index.d.mts +2 -2
  11. package/dist/api/schemas/index.mjs +5 -5
  12. package/dist/api-BvxJmnFY.mjs +10094 -0
  13. package/dist/api-BvxJmnFY.mjs.map +1 -0
  14. package/dist/{api-tokens-9YrrCoE6.mjs → api-tokens-xpGqMHrC.mjs} +2 -2
  15. package/dist/{api-tokens-9YrrCoE6.mjs.map → api-tokens-xpGqMHrC.mjs.map} +1 -1
  16. package/dist/{apply-B_VMpJ2P.mjs → apply-DLmM3R7f.mjs} +26 -22
  17. package/dist/apply-DLmM3R7f.mjs.map +1 -0
  18. package/dist/artifact-fetch-P2JXVwOq.mjs +972 -0
  19. package/dist/artifact-fetch-P2JXVwOq.mjs.map +1 -0
  20. package/dist/astro/image-endpoint.mjs +2 -2
  21. package/dist/astro/image-endpoint.mjs.map +1 -1
  22. package/dist/astro/index.d.mts +12 -12
  23. package/dist/astro/index.d.mts.map +1 -1
  24. package/dist/astro/index.mjs +138 -39
  25. package/dist/astro/index.mjs.map +1 -1
  26. package/dist/astro/middleware/auth.d.mts +10 -10
  27. package/dist/astro/middleware/auth.mjs +6 -6
  28. package/dist/astro/middleware/media-usage-write-fence.mjs +3 -3
  29. package/dist/astro/middleware/redirect.mjs +7 -5
  30. package/dist/astro/middleware/redirect.mjs.map +1 -1
  31. package/dist/astro/middleware/request-context.mjs +3 -3
  32. package/dist/astro/middleware/setup.mjs +1 -1
  33. package/dist/astro/middleware.d.mts +10 -10
  34. package/dist/astro/middleware.d.mts.map +1 -1
  35. package/dist/astro/middleware.mjs +223 -232
  36. package/dist/astro/middleware.mjs.map +1 -1
  37. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +6 -6
  38. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +6 -6
  39. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +3 -3
  40. package/dist/astro/routes/api/admin/api-tokens/index.d.mts.map +1 -1
  41. package/dist/astro/routes/api/admin/api-tokens/index.mjs +5 -5
  42. package/dist/astro/routes/api/admin/api-tokens/index.mjs.map +1 -1
  43. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  44. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -9
  45. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -9
  46. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -9
  47. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -17
  48. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -17
  49. package/dist/astro/routes/api/admin/bylines/index.mjs +17 -17
  50. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +13 -13
  51. package/dist/astro/routes/api/admin/comments/_id_.mjs +5 -5
  52. package/dist/astro/routes/api/admin/comments/bulk.mjs +10 -10
  53. package/dist/astro/routes/api/admin/comments/counts.mjs +5 -5
  54. package/dist/astro/routes/api/admin/comments/index.mjs +10 -10
  55. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +4 -4
  56. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  57. package/dist/astro/routes/api/admin/media-usage/activation.mjs +13 -13
  58. package/dist/astro/routes/api/admin/media-usage/collection-deletions/index.mjs +15 -15
  59. package/dist/astro/routes/api/admin/media-usage/collection-deletions/retry.mjs +15 -15
  60. package/dist/astro/routes/api/admin/media-usage/progress.mjs +14 -14
  61. package/dist/astro/routes/api/admin/media-usage/repair.mjs +17 -17
  62. package/dist/astro/routes/api/admin/media-usage/work/index.mjs +15 -15
  63. package/dist/astro/routes/api/admin/media-usage/work/retry.mjs +15 -15
  64. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +4 -4
  65. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs.map +1 -1
  66. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +4 -4
  67. package/dist/astro/routes/api/admin/oauth-clients/index.mjs.map +1 -1
  68. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +59 -56
  69. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs.map +1 -1
  70. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +59 -56
  71. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs.map +1 -1
  72. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +57 -54
  73. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs.map +1 -1
  74. package/dist/astro/routes/api/admin/plugins/_id_/mcp.mjs +4 -4
  75. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs +57 -54
  76. package/dist/astro/routes/api/admin/plugins/_id_/settings.mjs.map +1 -1
  77. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +58 -55
  78. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs.map +1 -1
  79. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +58 -55
  80. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs.map +1 -1
  81. package/dist/astro/routes/api/admin/plugins/index.mjs +57 -54
  82. package/dist/astro/routes/api/admin/plugins/index.mjs.map +1 -1
  83. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  84. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +57 -54
  85. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs.map +1 -1
  86. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +58 -55
  87. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs.map +1 -1
  88. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +57 -54
  89. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs.map +1 -1
  90. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs +58 -55
  91. package/dist/astro/routes/api/admin/plugins/registry/_id_/uninstall.mjs.map +1 -1
  92. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.d.mts.map +1 -1
  93. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs +64 -57
  94. package/dist/astro/routes/api/admin/plugins/registry/_id_/update.mjs.map +1 -1
  95. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs +18 -16
  96. package/dist/astro/routes/api/admin/plugins/registry/artifact.mjs.map +1 -1
  97. package/dist/astro/routes/api/admin/plugins/registry/install.d.mts.map +1 -1
  98. package/dist/astro/routes/api/admin/plugins/registry/install.mjs +65 -58
  99. package/dist/astro/routes/api/admin/plugins/registry/install.mjs.map +1 -1
  100. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts +8 -0
  101. package/dist/astro/routes/api/admin/plugins/registry/verify.d.mts.map +1 -0
  102. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs +96 -0
  103. package/dist/astro/routes/api/admin/plugins/registry/verify.mjs.map +1 -0
  104. package/dist/astro/routes/api/admin/plugins/updates.mjs +57 -54
  105. package/dist/astro/routes/api/admin/plugins/updates.mjs.map +1 -1
  106. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +57 -54
  107. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs.map +1 -1
  108. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  109. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +57 -54
  110. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs.map +1 -1
  111. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +1 -1
  112. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +1 -1
  113. package/dist/astro/routes/api/admin/users/_id_/index.mjs +6 -6
  114. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +3 -3
  115. package/dist/astro/routes/api/admin/users/index.mjs +6 -6
  116. package/dist/astro/routes/api/auth/dev-bypass.mjs +3 -3
  117. package/dist/astro/routes/api/auth/invite/accept.mjs +1 -1
  118. package/dist/astro/routes/api/auth/invite/complete.mjs +11 -11
  119. package/dist/astro/routes/api/auth/invite/index.mjs +8 -8
  120. package/dist/astro/routes/api/auth/invite/register-options.mjs +10 -10
  121. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  122. package/dist/astro/routes/api/auth/magic-link/send.mjs +10 -10
  123. package/dist/astro/routes/api/auth/magic-link/verify.mjs +2 -2
  124. package/dist/astro/routes/api/auth/me.mjs +7 -7
  125. package/dist/astro/routes/api/auth/mode.mjs +2 -2
  126. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +4 -4
  127. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  128. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -6
  129. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  130. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -12
  131. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -10
  132. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -11
  133. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -11
  134. package/dist/astro/routes/api/auth/signup/complete.mjs +11 -11
  135. package/dist/astro/routes/api/auth/signup/request.mjs +10 -10
  136. package/dist/astro/routes/api/auth/signup/verify.mjs +1 -1
  137. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +14 -14
  138. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +13 -13
  139. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  140. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.d.mts.map +1 -1
  141. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +19 -5
  142. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs.map +1 -1
  143. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +3 -3
  144. package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts +10 -0
  145. package/dist/astro/routes/api/content/_collection_/_id_/lock.d.mts.map +1 -0
  146. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs +66 -0
  147. package/dist/astro/routes/api/content/_collection_/_id_/lock.mjs.map +1 -0
  148. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +2 -2
  149. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -11
  150. package/dist/astro/routes/api/content/_collection_/_id_/publish.d.mts.map +1 -1
  151. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +18 -10
  152. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs.map +1 -1
  153. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs +20 -18
  154. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/children.mjs.map +1 -1
  155. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs +20 -18
  156. package/dist/astro/routes/api/content/_collection_/_id_/references/_relation_/parents.mjs.map +1 -1
  157. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +3 -3
  158. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  159. package/dist/astro/routes/api/content/_collection_/_id_/schedule.d.mts.map +1 -1
  160. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +15 -8
  161. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs.map +1 -1
  162. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -15
  163. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs.map +1 -1
  164. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  165. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.d.mts.map +1 -1
  166. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +19 -5
  167. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs.map +1 -1
  168. package/dist/astro/routes/api/content/_collection_/_id_.d.mts.map +1 -1
  169. package/dist/astro/routes/api/content/_collection_/_id_.mjs +23 -11
  170. package/dist/astro/routes/api/content/_collection_/_id_.mjs.map +1 -1
  171. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  172. package/dist/astro/routes/api/content/_collection_/index.mjs +14 -9
  173. package/dist/astro/routes/api/content/_collection_/index.mjs.map +1 -1
  174. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -7
  175. package/dist/astro/routes/api/dashboard.mjs +8 -8
  176. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  177. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  178. package/dist/astro/routes/api/import/probe.mjs +18 -18
  179. package/dist/astro/routes/api/import/wordpress/analyze.mjs +3 -3
  180. package/dist/astro/routes/api/import/wordpress/execute.d.mts +11 -11
  181. package/dist/astro/routes/api/import/wordpress/execute.mjs +15 -14
  182. package/dist/astro/routes/api/import/wordpress/execute.mjs.map +1 -1
  183. package/dist/astro/routes/api/import/wordpress/media.d.mts +10 -10
  184. package/dist/astro/routes/api/import/wordpress/media.mjs +11 -11
  185. package/dist/astro/routes/api/import/wordpress/prepare.mjs +10 -10
  186. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +11 -11
  187. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +13 -13
  188. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  189. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +18 -18
  190. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +11 -11
  191. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +29 -28
  192. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs.map +1 -1
  193. package/dist/astro/routes/api/manifest.mjs +4 -4
  194. package/dist/astro/routes/api/manifest.mjs.map +1 -1
  195. package/dist/astro/routes/api/mcp.mjs +213 -74
  196. package/dist/astro/routes/api/mcp.mjs.map +1 -1
  197. package/dist/astro/routes/api/media/_id_/confirm.mjs +11 -11
  198. package/dist/astro/routes/api/media/_id_/replace.d.mts +8 -0
  199. package/dist/astro/routes/api/media/_id_/replace.d.mts.map +1 -0
  200. package/dist/astro/routes/api/media/_id_/replace.mjs +91 -0
  201. package/dist/astro/routes/api/media/_id_/replace.mjs.map +1 -0
  202. package/dist/astro/routes/api/media/_id_/upload.mjs +6 -6
  203. package/dist/astro/routes/api/media/_id_/usage.mjs +19 -19
  204. package/dist/astro/routes/api/media/_id_.mjs +18 -18
  205. package/dist/astro/routes/api/media/file/_...key_.d.mts.map +1 -1
  206. package/dist/astro/routes/api/media/file/_...key_.mjs +3 -2
  207. package/dist/astro/routes/api/media/file/_...key_.mjs.map +1 -1
  208. package/dist/astro/routes/api/media/folders/_id_.mjs +8 -8
  209. package/dist/astro/routes/api/media/folders/index.mjs +8 -8
  210. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  211. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  212. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  213. package/dist/astro/routes/api/media/upload-url.mjs +16 -14
  214. package/dist/astro/routes/api/media/upload-url.mjs.map +1 -1
  215. package/dist/astro/routes/api/media.d.mts.map +1 -1
  216. package/dist/astro/routes/api/media.mjs +53 -30
  217. package/dist/astro/routes/api/media.mjs.map +1 -1
  218. package/dist/astro/routes/api/menus/_name_/items/_id_.d.mts.map +1 -1
  219. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +20 -13
  220. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs.map +1 -1
  221. package/dist/astro/routes/api/menus/_name_/items.d.mts.map +1 -1
  222. package/dist/astro/routes/api/menus/_name_/items.mjs +15 -11
  223. package/dist/astro/routes/api/menus/_name_/items.mjs.map +1 -1
  224. package/dist/astro/routes/api/menus/_name_/reorder.d.mts.map +1 -1
  225. package/dist/astro/routes/api/menus/_name_/reorder.mjs +15 -11
  226. package/dist/astro/routes/api/menus/_name_/reorder.mjs.map +1 -1
  227. package/dist/astro/routes/api/menus/_name_/translations.d.mts.map +1 -1
  228. package/dist/astro/routes/api/menus/_name_/translations.mjs +16 -12
  229. package/dist/astro/routes/api/menus/_name_/translations.mjs.map +1 -1
  230. package/dist/astro/routes/api/menus/_name_.d.mts.map +1 -1
  231. package/dist/astro/routes/api/menus/_name_.mjs +21 -14
  232. package/dist/astro/routes/api/menus/_name_.mjs.map +1 -1
  233. package/dist/astro/routes/api/menus/index.d.mts.map +1 -1
  234. package/dist/astro/routes/api/menus/index.mjs +15 -11
  235. package/dist/astro/routes/api/menus/index.mjs.map +1 -1
  236. package/dist/astro/routes/api/oauth/authorize.mjs +6 -6
  237. package/dist/astro/routes/api/oauth/device/authorize.mjs +5 -5
  238. package/dist/astro/routes/api/oauth/device/code.mjs +8 -8
  239. package/dist/astro/routes/api/oauth/device/token.mjs +7 -7
  240. package/dist/astro/routes/api/oauth/register.mjs +2 -2
  241. package/dist/astro/routes/api/oauth/token/refresh.mjs +5 -5
  242. package/dist/astro/routes/api/oauth/token/revoke.mjs +5 -5
  243. package/dist/astro/routes/api/oauth/token.mjs +5 -5
  244. package/dist/astro/routes/api/openapi.json.mjs +184 -52
  245. package/dist/astro/routes/api/openapi.json.mjs.map +1 -1
  246. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +4 -4
  247. package/dist/astro/routes/api/redirects/404s/index.mjs +12 -11
  248. package/dist/astro/routes/api/redirects/404s/index.mjs.map +1 -1
  249. package/dist/astro/routes/api/redirects/404s/summary.mjs +12 -11
  250. package/dist/astro/routes/api/redirects/404s/summary.mjs.map +1 -1
  251. package/dist/astro/routes/api/redirects/_id_.mjs +13 -12
  252. package/dist/astro/routes/api/redirects/_id_.mjs.map +1 -1
  253. package/dist/astro/routes/api/redirects/index.mjs +13 -12
  254. package/dist/astro/routes/api/redirects/index.mjs.map +1 -1
  255. package/dist/astro/routes/api/relations/_id_/index.mjs +20 -18
  256. package/dist/astro/routes/api/relations/_id_/index.mjs.map +1 -1
  257. package/dist/astro/routes/api/relations/_id_/translations.mjs +15 -13
  258. package/dist/astro/routes/api/relations/_id_/translations.mjs.map +1 -1
  259. package/dist/astro/routes/api/relations/index.mjs +20 -18
  260. package/dist/astro/routes/api/relations/index.mjs.map +1 -1
  261. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  262. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +3 -3
  263. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +57 -54
  264. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs.map +1 -1
  265. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +57 -54
  266. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs.map +1 -1
  267. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +57 -54
  268. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs.map +1 -1
  269. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +57 -54
  270. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs.map +1 -1
  271. package/dist/astro/routes/api/schema/collections/index.mjs +57 -54
  272. package/dist/astro/routes/api/schema/collections/index.mjs.map +1 -1
  273. package/dist/astro/routes/api/schema/collections/reorder.mjs +57 -54
  274. package/dist/astro/routes/api/schema/collections/reorder.mjs.map +1 -1
  275. package/dist/astro/routes/api/schema/index.mjs +13 -11
  276. package/dist/astro/routes/api/schema/index.mjs.map +1 -1
  277. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +57 -54
  278. package/dist/astro/routes/api/schema/orphans/_slug_.mjs.map +1 -1
  279. package/dist/astro/routes/api/schema/orphans/index.mjs +57 -54
  280. package/dist/astro/routes/api/schema/orphans/index.mjs.map +1 -1
  281. package/dist/astro/routes/api/search/enable.mjs +12 -11
  282. package/dist/astro/routes/api/search/enable.mjs.map +1 -1
  283. package/dist/astro/routes/api/search/index.mjs +11 -10
  284. package/dist/astro/routes/api/search/index.mjs.map +1 -1
  285. package/dist/astro/routes/api/search/rebuild.mjs +12 -11
  286. package/dist/astro/routes/api/search/rebuild.mjs.map +1 -1
  287. package/dist/astro/routes/api/search/stats.mjs +7 -6
  288. package/dist/astro/routes/api/search/stats.mjs.map +1 -1
  289. package/dist/astro/routes/api/search/suggest.mjs +11 -10
  290. package/dist/astro/routes/api/search/suggest.mjs.map +1 -1
  291. package/dist/astro/routes/api/sections/_slug_.mjs +11 -10
  292. package/dist/astro/routes/api/sections/_slug_.mjs.map +1 -1
  293. package/dist/astro/routes/api/sections/index.mjs +11 -10
  294. package/dist/astro/routes/api/sections/index.mjs.map +1 -1
  295. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs +7 -6
  296. package/dist/astro/routes/api/settings/backups/archives/_name_.mjs.map +1 -1
  297. package/dist/astro/routes/api/settings/backups/archives/index.mjs +6 -5
  298. package/dist/astro/routes/api/settings/backups/archives/index.mjs.map +1 -1
  299. package/dist/astro/routes/api/settings/backups/export.mjs +7 -6
  300. package/dist/astro/routes/api/settings/backups/export.mjs.map +1 -1
  301. package/dist/astro/routes/api/settings/backups/index.mjs +8 -7
  302. package/dist/astro/routes/api/settings/backups/index.mjs.map +1 -1
  303. package/dist/astro/routes/api/settings/email.mjs +5 -5
  304. package/dist/astro/routes/api/settings/email.mjs.map +1 -1
  305. package/dist/astro/routes/api/settings.d.mts.map +1 -1
  306. package/dist/astro/routes/api/settings.mjs +21 -17
  307. package/dist/astro/routes/api/settings.mjs.map +1 -1
  308. package/dist/astro/routes/api/setup/admin-verify.mjs +12 -12
  309. package/dist/astro/routes/api/setup/admin.mjs +11 -11
  310. package/dist/astro/routes/api/setup/dev-bypass.mjs +35 -33
  311. package/dist/astro/routes/api/setup/dev-bypass.mjs.map +1 -1
  312. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  313. package/dist/astro/routes/api/setup/index.mjs +35 -33
  314. package/dist/astro/routes/api/setup/index.mjs.map +1 -1
  315. package/dist/astro/routes/api/setup/status.mjs +3 -3
  316. package/dist/astro/routes/api/snapshot.mjs +8 -7
  317. package/dist/astro/routes/api/snapshot.mjs.map +1 -1
  318. package/dist/astro/routes/api/taxonomies/_name_/reorder.d.mts.map +1 -1
  319. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs +22 -17
  320. package/dist/astro/routes/api/taxonomies/_name_/reorder.mjs.map +1 -1
  321. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.d.mts.map +1 -1
  322. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +23 -18
  323. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs.map +1 -1
  324. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.d.mts.map +1 -1
  325. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +27 -19
  326. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs.map +1 -1
  327. package/dist/astro/routes/api/taxonomies/_name_/terms/index.d.mts.map +1 -1
  328. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +22 -17
  329. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs.map +1 -1
  330. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs +16 -15
  331. package/dist/astro/routes/api/taxonomies/_name_/translations.mjs.map +1 -1
  332. package/dist/astro/routes/api/taxonomies/_name_.d.mts.map +1 -1
  333. package/dist/astro/routes/api/taxonomies/_name_.mjs +28 -20
  334. package/dist/astro/routes/api/taxonomies/_name_.mjs.map +1 -1
  335. package/dist/astro/routes/api/taxonomies/index.d.mts.map +1 -1
  336. package/dist/astro/routes/api/taxonomies/index.mjs +22 -17
  337. package/dist/astro/routes/api/taxonomies/index.mjs.map +1 -1
  338. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  339. package/dist/astro/routes/api/typegen.mjs +4 -4
  340. package/dist/astro/routes/api/well-known/auth.mjs +2 -2
  341. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +2 -2
  342. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +2 -2
  343. package/dist/astro/routes/api/widget-areas/_name_/reorder.d.mts.map +1 -1
  344. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +10 -8
  345. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs.map +1 -1
  346. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.d.mts.map +1 -1
  347. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +18 -14
  348. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs.map +1 -1
  349. package/dist/astro/routes/api/widget-areas/_name_/widgets.d.mts.map +1 -1
  350. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +16 -13
  351. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs.map +1 -1
  352. package/dist/astro/routes/api/widget-areas/_name_.d.mts.map +1 -1
  353. package/dist/astro/routes/api/widget-areas/_name_.mjs +9 -7
  354. package/dist/astro/routes/api/widget-areas/_name_.mjs.map +1 -1
  355. package/dist/astro/routes/api/widget-areas/index.d.mts.map +1 -1
  356. package/dist/astro/routes/api/widget-areas/index.mjs +16 -13
  357. package/dist/astro/routes/api/widget-areas/index.mjs.map +1 -1
  358. package/dist/astro/routes/api/widget-components.mjs +2 -2
  359. package/dist/astro/routes/robots.txt.mjs +8 -8
  360. package/dist/astro/routes/sitemap-_collection_.xml.mjs +13 -12
  361. package/dist/astro/routes/sitemap-_collection_.xml.mjs.map +1 -1
  362. package/dist/astro/routes/sitemap.xml.mjs +9 -9
  363. package/dist/astro/types.d.mts +50 -20
  364. package/dist/astro/types.d.mts.map +1 -1
  365. package/dist/auth/providers/github.d.mts +1 -1
  366. package/dist/auth/providers/google.d.mts +1 -1
  367. package/dist/{authorize-ByYs-Uxs.mjs → authorize-C2QHlWSS.mjs} +2 -2
  368. package/dist/{authorize-ByYs-Uxs.mjs.map → authorize-C2QHlWSS.mjs.map} +1 -1
  369. package/dist/{backup-ChyHfIoX.mjs → backup-oS8ft5Cm.mjs} +5 -5
  370. package/dist/{backup-ChyHfIoX.mjs.map → backup-oS8ft5Cm.mjs.map} +1 -1
  371. package/dist/{bundle-DZFhFurR.mjs → bundle-CL0JjIPx.mjs} +4 -4
  372. package/dist/{bundle-DZFhFurR.mjs.map → bundle-CL0JjIPx.mjs.map} +1 -1
  373. package/dist/{byline-Cpnwrje1.mjs → byline-Vdi85CsZ.mjs} +27 -14
  374. package/dist/byline-Vdi85CsZ.mjs.map +1 -0
  375. package/dist/{byline-fields-CAyA_Umd.mjs → byline-fields-DPVRFMz2.mjs} +2 -2
  376. package/dist/{byline-fields-CAyA_Umd.mjs.map → byline-fields-DPVRFMz2.mjs.map} +1 -1
  377. package/dist/{byline-registry-Bpu9-MVs.mjs → byline-registry-BxDGIO0I.mjs} +2 -2
  378. package/dist/{byline-registry-Bpu9-MVs.mjs.map → byline-registry-BxDGIO0I.mjs.map} +1 -1
  379. package/dist/{bylines-BSo9B9RX.mjs → bylines-BX8QhcTk.mjs} +7 -7
  380. package/dist/{bylines-BSo9B9RX.mjs.map → bylines-BX8QhcTk.mjs.map} +1 -1
  381. package/dist/{bylines-CHjvehVX.mjs → bylines-w-E1IEQd.mjs} +3 -3
  382. package/dist/{bylines-CHjvehVX.mjs.map → bylines-w-E1IEQd.mjs.map} +1 -1
  383. package/dist/{cache-5VirJ2Cn.mjs → cache--7HKu5Xm.mjs} +4 -4
  384. package/dist/{cache-5VirJ2Cn.mjs.map → cache--7HKu5Xm.mjs.map} +1 -1
  385. package/dist/{capture-triggers-CNW1q3HK.mjs → capture-triggers-CeAsC76Z.mjs} +2 -2
  386. package/dist/{capture-triggers-CNW1q3HK.mjs.map → capture-triggers-CeAsC76Z.mjs.map} +1 -1
  387. package/dist/{challenge-store-D5pSY2S1.mjs → challenge-store-BIOak-tp.mjs} +5 -3
  388. package/dist/challenge-store-BIOak-tp.mjs.map +1 -0
  389. package/dist/chrome-tags-DzDQBCjX.mjs +24 -0
  390. package/dist/chrome-tags-DzDQBCjX.mjs.map +1 -0
  391. package/dist/{chunks-bNiX6_DR.mjs → chunks-VG_tyqnP.mjs} +2 -2
  392. package/dist/{chunks-bNiX6_DR.mjs.map → chunks-VG_tyqnP.mjs.map} +1 -1
  393. package/dist/cli/index.mjs +68 -40
  394. package/dist/cli/index.mjs.map +1 -1
  395. package/dist/client/cf-access.d.mts +1 -1
  396. package/dist/client/index.d.mts +17 -7
  397. package/dist/client/index.d.mts.map +1 -1
  398. package/dist/client/index.mjs +17 -12
  399. package/dist/client/index.mjs.map +1 -1
  400. package/dist/{collection-deletion-m_oi2c0N.mjs → collection-deletion-BCwaWTDw.mjs} +4 -4
  401. package/dist/{collection-deletion-m_oi2c0N.mjs.map → collection-deletion-BCwaWTDw.mjs.map} +1 -1
  402. package/dist/collection-slugs-cache-7lTmNzeA.mjs +85 -0
  403. package/dist/collection-slugs-cache-7lTmNzeA.mjs.map +1 -0
  404. package/dist/{comment-reaction-CRuItEjt.mjs → comment-reaction-CDyvPQRj.mjs} +2 -2
  405. package/dist/{comment-reaction-CRuItEjt.mjs.map → comment-reaction-CDyvPQRj.mjs.map} +1 -1
  406. package/dist/{comment-DhvLEdhQ.mjs → comment-vxOzWbZN.mjs} +2 -2
  407. package/dist/{comment-DhvLEdhQ.mjs.map → comment-vxOzWbZN.mjs.map} +1 -1
  408. package/dist/{comments-CLj4bi8I.mjs → comments-VzmVLyaC.mjs} +2 -2
  409. package/dist/{comments-CLj4bi8I.mjs.map → comments-VzmVLyaC.mjs.map} +1 -1
  410. package/dist/{components-v4U4DT2y.mjs → components-CL6Wkdk-.mjs} +1 -1
  411. package/dist/{components-v4U4DT2y.mjs.map → components-CL6Wkdk-.mjs.map} +1 -1
  412. package/dist/config--eWjQJE5.mjs +217 -0
  413. package/dist/config--eWjQJE5.mjs.map +1 -0
  414. package/dist/{index-DWbJrsAg.d.mts → config-CGAhyOjP.d.mts} +276 -76
  415. package/dist/config-CGAhyOjP.d.mts.map +1 -0
  416. package/dist/{config-DrfghTPe.d.mts → config-ChFzshGd.d.mts} +1 -1
  417. package/dist/{config-DrfghTPe.d.mts.map → config-ChFzshGd.d.mts.map} +1 -1
  418. package/dist/{content-CP-SeXNa.mjs → content-CNfMWuhY.mjs} +202 -46
  419. package/dist/content-CNfMWuhY.mjs.map +1 -0
  420. package/dist/{content-list-query-BhejKVqb.d.mts → content-list-query-B8d4UQp9.d.mts} +1 -1
  421. package/dist/{content-list-query-BhejKVqb.d.mts.map → content-list-query-B8d4UQp9.d.mts.map} +1 -1
  422. package/dist/{content-refresh-DLOfIhYc.mjs → content-refresh-GTMyi2Xy.mjs} +53 -26
  423. package/dist/content-refresh-GTMyi2Xy.mjs.map +1 -0
  424. package/dist/{content-repair-BCxzy0r4.mjs → content-repair-CIMt5C0U.mjs} +4 -4
  425. package/dist/{content-repair-BCxzy0r4.mjs.map → content-repair-CIMt5C0U.mjs.map} +1 -1
  426. package/dist/{context-BR5hRWiK.mjs → context-C9PB8vGd.mjs} +308 -33
  427. package/dist/context-C9PB8vGd.mjs.map +1 -0
  428. package/dist/{cron-CWfWrWKG.mjs → cron-DHAy9oyq.mjs} +1 -1
  429. package/dist/{cron-CWfWrWKG.mjs.map → cron-DHAy9oyq.mjs.map} +1 -1
  430. package/dist/{dashboard-CkIV2rnQ.mjs → dashboard-BNSvAN8A.mjs} +5 -5
  431. package/dist/{dashboard-CkIV2rnQ.mjs.map → dashboard-BNSvAN8A.mjs.map} +1 -1
  432. package/dist/db/index.d.mts +3 -3
  433. package/dist/db/index.mjs +2 -2
  434. package/dist/db/index.mjs.map +1 -1
  435. package/dist/db/libsql-migrations.d.mts +1 -1
  436. package/dist/db/libsql-migrations.mjs +5 -5
  437. package/dist/db/libsql.d.mts +1 -1
  438. package/dist/db/postgres-migrations.d.mts +1 -1
  439. package/dist/db/postgres-migrations.mjs +5 -5
  440. package/dist/db/postgres.d.mts +1 -1
  441. package/dist/db/postgres.d.mts.map +1 -1
  442. package/dist/db/postgres.mjs +19 -3
  443. package/dist/db/postgres.mjs.map +1 -1
  444. package/dist/db/sqlite-migrations.d.mts +1 -1
  445. package/dist/db/sqlite-migrations.mjs +5 -5
  446. package/dist/db/sqlite.d.mts +1 -1
  447. package/dist/db/sqlite.mjs +1 -1
  448. package/dist/{default-YMEfcQUx.mjs → default-ByZ0JqZo.mjs} +1 -1
  449. package/dist/{default-YMEfcQUx.mjs.map → default-ByZ0JqZo.mjs.map} +1 -1
  450. package/dist/{deferred-tasks-DfqxH5Xf.d.mts → deferred-tasks-Cu4NSJpa.d.mts} +1 -1
  451. package/dist/{deferred-tasks-DfqxH5Xf.d.mts.map → deferred-tasks-Cu4NSJpa.d.mts.map} +1 -1
  452. package/dist/dev-typegen-DHT7lcMU.mjs +29 -0
  453. package/dist/dev-typegen-DHT7lcMU.mjs.map +1 -0
  454. package/dist/{device-flow-CojjSBwb.mjs → device-flow-Cf6bhCCT.mjs} +4 -4
  455. package/dist/{device-flow-CojjSBwb.mjs.map → device-flow-Cf6bhCCT.mjs.map} +1 -1
  456. package/dist/{dialect-helpers-BSbfaO3F.mjs → dialect-helpers-BcQvkHgn.mjs} +83 -2
  457. package/dist/dialect-helpers-BcQvkHgn.mjs.map +1 -0
  458. package/dist/{direct-executor-BWeWiRYB.mjs → direct-executor-yAyUGSqB.mjs} +3 -3
  459. package/dist/{direct-executor-BWeWiRYB.mjs.map → direct-executor-yAyUGSqB.mjs.map} +1 -1
  460. package/dist/{dist-89xCrGqi.mjs → dist-BAsh8dbf.mjs} +1 -1
  461. package/dist/{dist-89xCrGqi.mjs.map → dist-BAsh8dbf.mjs.map} +1 -1
  462. package/dist/{email-console-CEJgR_LB.mjs → email-console-DNup1Fku.mjs} +1 -1
  463. package/dist/{email-console-CEJgR_LB.mjs.map → email-console-DNup1Fku.mjs.map} +1 -1
  464. package/dist/{enrich-BX0IDp4z.mjs → enrich-t2Xvjdqa.mjs} +3 -3
  465. package/dist/{enrich-BX0IDp4z.mjs.map → enrich-t2Xvjdqa.mjs.map} +1 -1
  466. package/dist/entry-lock-BEr8gDkG.mjs +163 -0
  467. package/dist/entry-lock-BEr8gDkG.mjs.map +1 -0
  468. package/dist/{relations-C7B46bcU.d.mts → entry-lock-CGAtrwAR.d.mts} +265 -76
  469. package/dist/entry-lock-CGAtrwAR.d.mts.map +1 -0
  470. package/dist/{redirects-CRIM55KH.mjs → entry-lock-DIYHAaSw.mjs} +112 -34
  471. package/dist/entry-lock-DIYHAaSw.mjs.map +1 -0
  472. package/dist/entry-locks-BEcX7ET0.mjs +167 -0
  473. package/dist/entry-locks-BEcX7ET0.mjs.map +1 -0
  474. package/dist/{error-D9w94fjV.mjs → error-BDcFyoRt.mjs} +2 -2
  475. package/dist/{error-D9w94fjV.mjs.map → error-BDcFyoRt.mjs.map} +1 -1
  476. package/dist/{errors-n2j49uNf.mjs → errors-DvMdNrgf.mjs} +10 -1
  477. package/dist/errors-DvMdNrgf.mjs.map +1 -0
  478. package/dist/{escape-DN4Qmjsl.mjs → escape-B3asJC6W.mjs} +1 -1
  479. package/dist/{escape-DN4Qmjsl.mjs.map → escape-B3asJC6W.mjs.map} +1 -1
  480. package/dist/{field-defs-cache-Bh4q6oar.mjs → field-defs-cache-Cf5FHK0M.mjs} +5 -5
  481. package/dist/{field-defs-cache-Bh4q6oar.mjs.map → field-defs-cache-Cf5FHK0M.mjs.map} +1 -1
  482. package/dist/{fts-manager-BhOdW0bi.mjs → fts-manager-iddym8cd.mjs} +4 -4
  483. package/dist/{fts-manager-BhOdW0bi.mjs.map → fts-manager-iddym8cd.mjs.map} +1 -1
  484. package/dist/{hash-CTcngWvj.mjs → hash-BRweX6jz.mjs} +1 -1
  485. package/dist/{hash-CTcngWvj.mjs.map → hash-BRweX6jz.mjs.map} +1 -1
  486. package/dist/hook-result-BrshYHLx.d.mts +31 -0
  487. package/dist/hook-result-BrshYHLx.d.mts.map +1 -0
  488. package/dist/{hreflang-7pTHsLZJ.d.mts → hreflang-CQpu5bMy.d.mts} +2 -2
  489. package/dist/{hreflang-7pTHsLZJ.d.mts.map → hreflang-CQpu5bMy.d.mts.map} +1 -1
  490. package/dist/{hreflang-Huc6O5wa.mjs → hreflang-DshnweTC.mjs} +9 -8
  491. package/dist/{hreflang-Huc6O5wa.mjs.map → hreflang-DshnweTC.mjs.map} +1 -1
  492. package/dist/{identity-DXmb4aVp.mjs → identity-CjGKDq8J.mjs} +3 -3
  493. package/dist/{identity-DXmb4aVp.mjs.map → identity-CjGKDq8J.mjs.map} +1 -1
  494. package/dist/{import-C4_O3KXU.mjs → import-D96g2otw.mjs} +6 -6
  495. package/dist/{import-C4_O3KXU.mjs.map → import-D96g2otw.mjs.map} +1 -1
  496. package/dist/{index-6bRee8zb.d.mts → index-1ECYpfiF.d.mts} +3 -3
  497. package/dist/{index-6bRee8zb.d.mts.map → index-1ECYpfiF.d.mts.map} +1 -1
  498. package/dist/index.d.mts +22 -21
  499. package/dist/index.mjs +84 -81
  500. package/dist/{init-lock-DJkX6Hto.mjs → init-lock-CFNBe_iH.mjs} +1 -1
  501. package/dist/{init-lock-DJkX6Hto.mjs.map → init-lock-CFNBe_iH.mjs.map} +1 -1
  502. package/dist/{load-Bo7fZAbg.mjs → load-DPtY9cZo.mjs} +2 -2
  503. package/dist/{load-Bo7fZAbg.mjs.map → load-DPtY9cZo.mjs.map} +1 -1
  504. package/dist/{loader-ZsjE4paL.mjs → loader-WJi6GFRn.mjs} +90 -17
  505. package/dist/loader-WJi6GFRn.mjs.map +1 -0
  506. package/dist/{manifest-builder-QXuqvVMP.mjs → manifest-builder-BfNlGQIA.mjs} +2 -2
  507. package/dist/{manifest-builder-QXuqvVMP.mjs.map → manifest-builder-BfNlGQIA.mjs.map} +1 -1
  508. package/dist/{manifest-schema-CUYPfCEH.mjs → manifest-schema-CILooI5J.mjs} +5 -5
  509. package/dist/manifest-schema-CILooI5J.mjs.map +1 -0
  510. package/dist/media/image-endpoint.d.mts +4 -2
  511. package/dist/media/image-endpoint.d.mts.map +1 -1
  512. package/dist/media/image-endpoint.mjs +6 -4
  513. package/dist/media/image-endpoint.mjs.map +1 -1
  514. package/dist/media/index.d.mts +1 -1
  515. package/dist/media/index.mjs +3 -3
  516. package/dist/media/local-runtime.d.mts +12 -12
  517. package/dist/media/local-runtime.mjs +7 -7
  518. package/dist/{media-D6SeAfBl.mjs → media-BBm8Wg3f.mjs} +30 -2
  519. package/dist/media-BBm8Wg3f.mjs.map +1 -0
  520. package/dist/{media-BjwNuLEu.mjs → media-C1EIZKh1.mjs} +35 -5
  521. package/dist/media-C1EIZKh1.mjs.map +1 -0
  522. package/dist/{media-allowlist-D35v7bmL.mjs → media-allowlist-elXJgb_K.mjs} +2 -2
  523. package/dist/{media-allowlist-D35v7bmL.mjs.map → media-allowlist-elXJgb_K.mjs.map} +1 -1
  524. package/dist/{media-folders-D-0CmRZj.mjs → media-folders-DASfX_DH.mjs} +1 -1
  525. package/dist/{media-folders-D-0CmRZj.mjs.map → media-folders-DASfX_DH.mjs.map} +1 -1
  526. package/dist/{media-upload-C7bLXGcI.mjs → media-upload-C7_AQJ5v.mjs} +9 -9
  527. package/dist/{media-upload-C7bLXGcI.mjs.map → media-upload-C7_AQJ5v.mjs.map} +1 -1
  528. package/dist/{media-url-DH7giMx_.mjs → media-url-8dVl1loq.mjs} +19 -2
  529. package/dist/media-url-8dVl1loq.mjs.map +1 -0
  530. package/dist/{media-usage-BTRJvS6V.mjs → media-usage-C1EswMTq.mjs} +10 -10
  531. package/dist/{media-usage-BTRJvS6V.mjs.map → media-usage-C1EswMTq.mjs.map} +1 -1
  532. package/dist/{media-usage-activation-Dx0kPV6b.mjs → media-usage-activation-CrHNltlL.mjs} +3 -3
  533. package/dist/{media-usage-activation-Dx0kPV6b.mjs.map → media-usage-activation-CrHNltlL.mjs.map} +1 -1
  534. package/dist/{media-usage-work-C-fhM30c.mjs → media-usage-work-C5B1zT1c.mjs} +2 -2
  535. package/dist/{media-usage-work-C-fhM30c.mjs.map → media-usage-work-C5B1zT1c.mjs.map} +1 -1
  536. package/dist/{media-usage-work-DWb2XPMI.mjs → media-usage-work-IkQx_Yz6.mjs} +4 -4
  537. package/dist/{media-usage-work-DWb2XPMI.mjs.map → media-usage-work-IkQx_Yz6.mjs.map} +1 -1
  538. package/dist/{media-usage-write-fence-BwoJVRDC.mjs → media-usage-write-fence-B9anjOSg.mjs} +3 -3
  539. package/dist/{media-usage-write-fence-BwoJVRDC.mjs.map → media-usage-write-fence-B9anjOSg.mjs.map} +1 -1
  540. package/dist/{menus-CNg0QlDt.mjs → menus-D8mC4eaN.mjs} +406 -175
  541. package/dist/menus-D8mC4eaN.mjs.map +1 -0
  542. package/dist/{menus-CD7EFLwz.mjs → menus-UdwjHZJC.mjs} +12 -4
  543. package/dist/{menus-CD7EFLwz.mjs.map → menus-UdwjHZJC.mjs.map} +1 -1
  544. package/dist/migrations/index.d.mts +1 -1
  545. package/dist/migrations/index.mjs +4 -4
  546. package/dist/{mime-CUIG6x84.mjs → mime-DYpsOAny.mjs} +1 -1
  547. package/dist/{mime-CUIG6x84.mjs.map → mime-DYpsOAny.mjs.map} +1 -1
  548. package/dist/{mode-DaUM_MB2.mjs → mode-Dm4BHhRH.mjs} +1 -1
  549. package/dist/{mode-DaUM_MB2.mjs.map → mode-Dm4BHhRH.mjs.map} +1 -1
  550. package/dist/{node-sqlite-compat-Udb4Y-rs.mjs → node-sqlite-compat-2sezm-Zd.mjs} +1 -1
  551. package/dist/{node-sqlite-compat-Udb4Y-rs.mjs.map → node-sqlite-compat-2sezm-Zd.mjs.map} +1 -1
  552. package/dist/{normalize-CSxdKBVa.mjs → normalize-4nkKGsuW.mjs} +15 -5
  553. package/dist/normalize-4nkKGsuW.mjs.map +1 -0
  554. package/dist/{oauth-authorization-Dpsb-fMJ.mjs → oauth-authorization-BxE_lURD.mjs} +4 -4
  555. package/dist/{oauth-authorization-Dpsb-fMJ.mjs.map → oauth-authorization-BxE_lURD.mjs.map} +1 -1
  556. package/dist/{oauth-clients-Bxnoe_67.mjs → oauth-clients-DJIdOdq0.mjs} +1 -1
  557. package/dist/{oauth-clients-Bxnoe_67.mjs.map → oauth-clients-DJIdOdq0.mjs.map} +1 -1
  558. package/dist/{oauth-state-store-0C4s0K6w.mjs → oauth-state-store-CsdxP57n.mjs} +1 -1
  559. package/dist/{oauth-state-store-0C4s0K6w.mjs.map → oauth-state-store-CsdxP57n.mjs.map} +1 -1
  560. package/dist/{oauth-user-lookup-wlGYSeqX.mjs → oauth-user-lookup-HzzW-dkF.mjs} +1 -1
  561. package/dist/{oauth-user-lookup-wlGYSeqX.mjs.map → oauth-user-lookup-HzzW-dkF.mjs.map} +1 -1
  562. package/dist/object-cache/memory.d.mts +1 -1
  563. package/dist/{object-cache-71tPfV4A.mjs → object-cache-DVKnyOfy.mjs} +19 -3
  564. package/dist/object-cache-DVKnyOfy.mjs.map +1 -0
  565. package/dist/{options-BHPeIbBd.mjs → options-D1FBiAv1.mjs} +60 -5
  566. package/dist/options-D1FBiAv1.mjs.map +1 -0
  567. package/dist/{options-BhZIeFY1.d.mts → options-D8Y0VHc7.d.mts} +30 -11
  568. package/dist/options-D8Y0VHc7.d.mts.map +1 -0
  569. package/dist/page/index.d.mts +2 -2
  570. package/dist/page/index.d.mts.map +1 -1
  571. package/dist/page/index.mjs +12 -0
  572. package/dist/page/index.mjs.map +1 -1
  573. package/dist/{parse-BRJg1kz8.mjs → parse-WRg5C3NX.mjs} +2 -2
  574. package/dist/{parse-BRJg1kz8.mjs.map → parse-WRg5C3NX.mjs.map} +1 -1
  575. package/dist/{passkey-config-B3P0nHRR.mjs → passkey-config-qIdO-wF6.mjs} +1 -1
  576. package/dist/{passkey-config-B3P0nHRR.mjs.map → passkey-config-qIdO-wF6.mjs.map} +1 -1
  577. package/dist/{patterns-D9iDO3j8.mjs → patterns-DC8CLptu.mjs} +1 -1
  578. package/dist/{patterns-D9iDO3j8.mjs.map → patterns-DC8CLptu.mjs.map} +1 -1
  579. package/dist/{placeholder-BR4ZhVJl.d.mts → placeholder-COrvARyD.d.mts} +1 -1
  580. package/dist/{placeholder-BR4ZhVJl.d.mts.map → placeholder-COrvARyD.d.mts.map} +1 -1
  581. package/dist/plugin-types.d.mts +8 -3
  582. package/dist/plugin-types.d.mts.map +1 -1
  583. package/dist/plugin-utils.d.mts +10 -10
  584. package/dist/plugins/adapt-sandbox-entry.d.mts +10 -10
  585. package/dist/plugins/adapt-sandbox-entry.mjs +2 -2
  586. package/dist/{policy-BVRganJQ.mjs → policy-XCfb-IE9.mjs} +2 -2
  587. package/dist/{policy-BVRganJQ.mjs.map → policy-XCfb-IE9.mjs.map} +1 -1
  588. package/dist/{portable-text-C8Tvp4_g.mjs → portable-text-BS3d5n-0.mjs} +1 -1
  589. package/dist/{portable-text-C8Tvp4_g.mjs.map → portable-text-BS3d5n-0.mjs.map} +1 -1
  590. package/dist/{preview-dn2dUyM0.mjs → preview-BxwsGgGp.mjs} +2 -2
  591. package/dist/{preview-dn2dUyM0.mjs.map → preview-BxwsGgGp.mjs.map} +1 -1
  592. package/dist/{protocol-CuBEsqgE.d.mts → protocol-CLn58-nw.d.mts} +2 -2
  593. package/dist/{protocol-CuBEsqgE.d.mts.map → protocol-CLn58-nw.d.mts.map} +1 -1
  594. package/dist/{public-url-DRz_AinV.mjs → public-url-FWWAvnre.mjs} +1 -1
  595. package/dist/{public-url-DRz_AinV.mjs.map → public-url-FWWAvnre.mjs.map} +1 -1
  596. package/dist/{query-D18vTdha.mjs → query-DygOte9M.mjs} +26 -17
  597. package/dist/query-DygOte9M.mjs.map +1 -0
  598. package/dist/{query-tZDEdtCN.mjs → query-gtXT03Wc.mjs} +5 -5
  599. package/dist/{query-tZDEdtCN.mjs.map → query-gtXT03Wc.mjs.map} +1 -1
  600. package/dist/{rate-limit-on7KPo-v.mjs → rate-limit-CQUPm0dh.mjs} +2 -2
  601. package/dist/{rate-limit-on7KPo-v.mjs.map → rate-limit-CQUPm0dh.mjs.map} +1 -1
  602. package/dist/{redirect-DrbEmU9a.mjs → redirect-D1cWafi6.mjs} +1 -1
  603. package/dist/{redirect-DrbEmU9a.mjs.map → redirect-D1cWafi6.mjs.map} +1 -1
  604. package/dist/{redirect-CZkbozu9.mjs → redirect-DId44BS1.mjs} +19 -6
  605. package/dist/redirect-DId44BS1.mjs.map +1 -0
  606. package/dist/{redirects-BahWiu8Z.mjs → redirects-DN-ZE33W.mjs} +5 -5
  607. package/dist/{redirects-BahWiu8Z.mjs.map → redirects-DN-ZE33W.mjs.map} +1 -1
  608. package/dist/{registry-Cx-jEJOS.mjs → registry-DTqaqxed.mjs} +46 -12
  609. package/dist/registry-DTqaqxed.mjs.map +1 -0
  610. package/dist/{relation-A6wLF_DS.mjs → relation-DxgCHOBw.mjs} +2 -2
  611. package/dist/{relation-A6wLF_DS.mjs.map → relation-DxgCHOBw.mjs.map} +1 -1
  612. package/dist/{relations-Cj5hZ6Zg.mjs → relations-KKDSLUwS.mjs} +4 -4
  613. package/dist/{relations-Cj5hZ6Zg.mjs.map → relations-KKDSLUwS.mjs.map} +1 -1
  614. package/dist/{relations-BTPM2saV.mjs → relations-rOmbndUJ.mjs} +8 -8
  615. package/dist/relations-rOmbndUJ.mjs.map +1 -0
  616. package/dist/{request-cache-DH9zdCOD.mjs → request-cache-DAZZmesc.mjs} +1 -1
  617. package/dist/{request-cache-DH9zdCOD.mjs.map → request-cache-DAZZmesc.mjs.map} +1 -1
  618. package/dist/request-context.d.mts +1 -1
  619. package/dist/{request-meta-DRp5ENd_.mjs → request-meta-BgjUQLQ-.mjs} +2 -2
  620. package/dist/{request-meta-DRp5ENd_.mjs.map → request-meta-BgjUQLQ-.mjs.map} +1 -1
  621. package/dist/{resolve-DxUpTMmE.mjs → resolve-Cy0aWSRj.mjs} +37 -4
  622. package/dist/resolve-Cy0aWSRj.mjs.map +1 -0
  623. package/dist/{runner-zgqA_CqP.d.mts → runner-CfwysRM0.d.mts} +3 -2
  624. package/dist/runner-CfwysRM0.d.mts.map +1 -0
  625. package/dist/{runner-77GOZCnH.mjs → runner-nEzvnogG.mjs} +476 -295
  626. package/dist/runner-nEzvnogG.mjs.map +1 -0
  627. package/dist/runtime.d.mts +11 -11
  628. package/dist/runtime.mjs +3 -2
  629. package/dist/runtime.mjs.map +1 -1
  630. package/dist/{schema-BY-oVntF.mjs → schema-CRu38Pr5.mjs} +3 -3
  631. package/dist/{schema-BY-oVntF.mjs.map → schema-CRu38Pr5.mjs.map} +1 -1
  632. package/dist/{schema-Cw9kVK0I.mjs → schema-DifxndJx.mjs} +5 -5
  633. package/dist/{schema-Cw9kVK0I.mjs.map → schema-DifxndJx.mjs.map} +1 -1
  634. package/dist/{scopes-vMR1uIbt.mjs → scopes-D5A1OZbq.mjs} +3 -3
  635. package/dist/{scopes-vMR1uIbt.mjs.map → scopes-D5A1OZbq.mjs.map} +1 -1
  636. package/dist/{search-CfT3KxO5.mjs → search-DEPFSBFq.mjs} +4 -4
  637. package/dist/{search-CfT3KxO5.mjs.map → search-DEPFSBFq.mjs.map} +1 -1
  638. package/dist/{secrets-BH2Qow1-.mjs → secrets-CdfzLdoO.mjs} +3 -3
  639. package/dist/{secrets-BH2Qow1-.mjs.map → secrets-CdfzLdoO.mjs.map} +1 -1
  640. package/dist/{sections-DTfjyf1z.mjs → sections-3X52kmIR.mjs} +2 -2
  641. package/dist/{sections-DTfjyf1z.mjs.map → sections-3X52kmIR.mjs.map} +1 -1
  642. package/dist/seed/index.d.mts +2 -2
  643. package/dist/seed/index.mjs +28 -26
  644. package/dist/seo/index.d.mts +3 -3
  645. package/dist/seo/index.d.mts.map +1 -1
  646. package/dist/seo/index.mjs +20 -21
  647. package/dist/seo/index.mjs.map +1 -1
  648. package/dist/{seo-Cm-dtvgk.mjs → seo-Bw68KxRc.mjs} +3 -3
  649. package/dist/{seo-Cm-dtvgk.mjs.map → seo-Bw68KxRc.mjs.map} +1 -1
  650. package/dist/{seo-BSiTIXzd.mjs → seo-C4AmbsMU.mjs} +3 -2
  651. package/dist/seo-C4AmbsMU.mjs.map +1 -0
  652. package/dist/{service-DYsDHEKe.mjs → service-J_-Vgo7R.mjs} +3 -3
  653. package/dist/{service-DYsDHEKe.mjs.map → service-J_-Vgo7R.mjs.map} +1 -1
  654. package/dist/{session-user-CNAfvsdw.mjs → session-user-CbnMMwk6.mjs} +1 -1
  655. package/dist/{session-user-CNAfvsdw.mjs.map → session-user-CbnMMwk6.mjs.map} +1 -1
  656. package/dist/{settings-DjtkUo__.mjs → settings-AnEFYICn.mjs} +3 -3
  657. package/dist/{settings-DjtkUo__.mjs.map → settings-AnEFYICn.mjs.map} +1 -1
  658. package/dist/{settings-BgN-0DT-.mjs → settings-DcMjREe5.mjs} +21 -8
  659. package/dist/settings-DcMjREe5.mjs.map +1 -0
  660. package/dist/{setup-complete-CcpXaPU7.mjs → setup-complete-BClXXTvr.mjs} +2 -2
  661. package/dist/{setup-complete-CcpXaPU7.mjs.map → setup-complete-BClXXTvr.mjs.map} +1 -1
  662. package/dist/{setup-nonce-Reyw30jg.mjs → setup-nonce-BheRa4RG.mjs} +1 -1
  663. package/dist/{setup-nonce-Reyw30jg.mjs.map → setup-nonce-BheRa4RG.mjs.map} +1 -1
  664. package/dist/{single-flight-cache-BPuGPdcN.mjs → single-flight-cache-jaswDzmQ.mjs} +2 -2
  665. package/dist/{single-flight-cache-BPuGPdcN.mjs.map → single-flight-cache-jaswDzmQ.mjs.map} +1 -1
  666. package/dist/{site-url-Cs_V9n3V.mjs → site-url-Bqf-ea3N.mjs} +3 -3
  667. package/dist/{site-url-Cs_V9n3V.mjs.map → site-url-Bqf-ea3N.mjs.map} +1 -1
  668. package/dist/{snapshot-DSB8P7Lm.mjs → snapshot-C4CtXntb.mjs} +51 -35
  669. package/dist/snapshot-C4CtXntb.mjs.map +1 -0
  670. package/dist/{ssrf-DqebVE34.mjs → ssrf-gl4gFNhw.mjs} +151 -93
  671. package/dist/ssrf-gl4gFNhw.mjs.map +1 -0
  672. package/dist/{state-BJfU9Uzw.mjs → state-1F6IOhdQ.mjs} +1 -1
  673. package/dist/{state-BJfU9Uzw.mjs.map → state-1F6IOhdQ.mjs.map} +1 -1
  674. package/dist/{status-DDu8HIQl.mjs → status-Cenfk_r5.mjs} +1 -1
  675. package/dist/{status-DDu8HIQl.mjs.map → status-Cenfk_r5.mjs.map} +1 -1
  676. package/dist/storage/local.d.mts +2 -1
  677. package/dist/storage/local.d.mts.map +1 -1
  678. package/dist/storage/local.mjs +1 -1
  679. package/dist/storage/local.mjs.map +1 -1
  680. package/dist/storage/s3.d.mts +2 -1
  681. package/dist/storage/s3.d.mts.map +1 -1
  682. package/dist/storage/s3.mjs +3 -2
  683. package/dist/storage/s3.mjs.map +1 -1
  684. package/dist/{target-D0o26Azo.mjs → target-CRzeTs8G.mjs} +1 -1
  685. package/dist/{target-D0o26Azo.mjs.map → target-CRzeTs8G.mjs.map} +1 -1
  686. package/dist/{taxonomies-CPGxo-bn.mjs → taxonomies-BOdxuZpV.mjs} +23 -13
  687. package/dist/taxonomies-BOdxuZpV.mjs.map +1 -0
  688. package/dist/{taxonomies-kmyudNGP.mjs → taxonomies-NcFDq5Gg.mjs} +58 -23
  689. package/dist/taxonomies-NcFDq5Gg.mjs.map +1 -0
  690. package/dist/{taxonomy-8X09dLN5.mjs → taxonomy-DP1vny4K.mjs} +12 -4
  691. package/dist/{taxonomy-8X09dLN5.mjs.map → taxonomy-DP1vny4K.mjs.map} +1 -1
  692. package/dist/{tokens-gTS-IVUp.mjs → tokens-CDk8ox9p.mjs} +1 -1
  693. package/dist/{tokens-gTS-IVUp.mjs.map → tokens-CDk8ox9p.mjs.map} +1 -1
  694. package/dist/{transport-_6R1ub7t.d.mts → transport-BVn4tVb9.d.mts} +1 -1
  695. package/dist/{transport-_6R1ub7t.d.mts.map → transport-BVn4tVb9.d.mts.map} +1 -1
  696. package/dist/{transport-fX59xaJz.mjs → transport-DP0JI-8i.mjs} +1 -1
  697. package/dist/{transport-fX59xaJz.mjs.map → transport-DP0JI-8i.mjs.map} +1 -1
  698. package/dist/{trusted-proxy-fe6nEgR4.mjs → trusted-proxy-BTM6UxqD.mjs} +1 -1
  699. package/dist/{trusted-proxy-fe6nEgR4.mjs.map → trusted-proxy-BTM6UxqD.mjs.map} +1 -1
  700. package/dist/{types-D_DWe7k9.d.mts → types-2n848aVW.d.mts} +3 -2
  701. package/dist/types-2n848aVW.d.mts.map +1 -0
  702. package/dist/types-A2cN6a4a.mjs +3 -0
  703. package/dist/{types-75KIqzL9.mjs → types-BMXnRIrX.mjs} +4 -2
  704. package/dist/types-BMXnRIrX.mjs.map +1 -0
  705. package/dist/{types-Vg6f5i3s.d.mts → types-BouXpOsa.d.mts} +121 -4
  706. package/dist/types-BouXpOsa.d.mts.map +1 -0
  707. package/dist/{types-BXUmsINL.mjs → types-ByG2coLw.mjs} +1 -1
  708. package/dist/{types-BXUmsINL.mjs.map → types-ByG2coLw.mjs.map} +1 -1
  709. package/dist/types-CQPWhPxE.mjs.map +1 -1
  710. package/dist/{types-Blb-MRC3.d.mts → types-DEfNJ__A.d.mts} +1 -1
  711. package/dist/{types-Blb-MRC3.d.mts.map → types-DEfNJ__A.d.mts.map} +1 -1
  712. package/dist/{types-Br-ERaxh.d.mts → types-DKcKSbtB.d.mts} +23 -7
  713. package/dist/types-DKcKSbtB.d.mts.map +1 -0
  714. package/dist/{types-BzBd3PeX.d.mts → types-DRYs7uTL.d.mts} +1 -1
  715. package/dist/{types-BzBd3PeX.d.mts.map → types-DRYs7uTL.d.mts.map} +1 -1
  716. package/dist/{types-CLqvnd05.d.mts → types-DaEg7KX2.d.mts} +1 -1
  717. package/dist/{types-CLqvnd05.d.mts.map → types-DaEg7KX2.d.mts.map} +1 -1
  718. package/dist/{types-DJQxln7q.d.mts → types-LU8utpP_.d.mts} +14 -10
  719. package/dist/types-LU8utpP_.d.mts.map +1 -0
  720. package/dist/{types-D5VVLr7J.d.mts → types-VpYfPUxN.d.mts} +1 -1
  721. package/dist/{types-D5VVLr7J.d.mts.map → types-VpYfPUxN.d.mts.map} +1 -1
  722. package/dist/{types-DM3vioBY.mjs → types-c9GP7Dj5.mjs} +1 -1
  723. package/dist/{types-DM3vioBY.mjs.map → types-c9GP7Dj5.mjs.map} +1 -1
  724. package/dist/{types-DHxzBjbD.d.mts → types-tJWDK__M.d.mts} +14 -1
  725. package/dist/types-tJWDK__M.d.mts.map +1 -0
  726. package/dist/{upload-attempts-CNyGSepg.mjs → upload-attempts-C6S2y-lp.mjs} +1 -1
  727. package/dist/{upload-attempts-CNyGSepg.mjs.map → upload-attempts-C6S2y-lp.mjs.map} +1 -1
  728. package/dist/{url-pattern-K-KdXcSe.mjs → url-pattern-UYtxVTuj.mjs} +1 -1
  729. package/dist/{url-pattern-K-KdXcSe.mjs.map → url-pattern-UYtxVTuj.mjs.map} +1 -1
  730. package/dist/{user-CtYY0tp2.mjs → user-DIsIXogT.mjs} +2 -2
  731. package/dist/{user-CtYY0tp2.mjs.map → user-DIsIXogT.mjs.map} +1 -1
  732. package/dist/{utils-HztC73hq.mjs → utils-BicP5Qbg.mjs} +2 -2
  733. package/dist/{utils-HztC73hq.mjs.map → utils-BicP5Qbg.mjs.map} +1 -1
  734. package/dist/{validate-Dd-IUjnZ.mjs → validate-D8VPn4Hv.mjs} +8 -3
  735. package/dist/validate-D8VPn4Hv.mjs.map +1 -0
  736. package/dist/{validate-DlqdOZXB.d.mts → validate-Df6Dvwbw.d.mts} +12 -7
  737. package/dist/validate-Df6Dvwbw.d.mts.map +1 -0
  738. package/dist/{validation-D83n7Npi.mjs → validation-CzMJn9Ku.mjs} +13 -11
  739. package/dist/{validation-D83n7Npi.mjs.map → validation-CzMJn9Ku.mjs.map} +1 -1
  740. package/dist/version-CK67_SXX.mjs +7 -0
  741. package/dist/{version-ri-sCyAp.mjs.map → version-CK67_SXX.mjs.map} +1 -1
  742. package/dist/{widgets-CpmZd9Q-.mjs → widgets-RFVAxQl3.mjs} +18 -5
  743. package/dist/widgets-RFVAxQl3.mjs.map +1 -0
  744. package/dist/{wxr-taxonomies-BFd0y72_.d.mts → wxr-taxonomies-BX4yQL9s.d.mts} +1 -1
  745. package/dist/{wxr-taxonomies-BFd0y72_.d.mts.map → wxr-taxonomies-BX4yQL9s.d.mts.map} +1 -1
  746. package/dist/{wxr-taxonomies-Df4vxWcU.mjs → wxr-taxonomies-Csdp7yde.mjs} +4 -4
  747. package/dist/{wxr-taxonomies-Df4vxWcU.mjs.map → wxr-taxonomies-Csdp7yde.mjs.map} +1 -1
  748. package/dist/{zod-generator-DylzusHh.mjs → zod-generator-CNRGdnBY.mjs} +11 -7
  749. package/dist/zod-generator-CNRGdnBY.mjs.map +1 -0
  750. package/package.json +16 -11
  751. package/src/api/errors.ts +9 -0
  752. package/src/api/handlers/content.ts +115 -90
  753. package/src/api/handlers/entry-lock.ts +206 -0
  754. package/src/api/handlers/index.ts +1 -0
  755. package/src/api/handlers/manifest.ts +162 -12
  756. package/src/api/handlers/marketplace.ts +28 -20
  757. package/src/api/handlers/media.ts +30 -0
  758. package/src/api/handlers/menus.ts +9 -0
  759. package/src/api/handlers/registry.ts +406 -297
  760. package/src/api/handlers/revision.ts +2 -1
  761. package/src/api/handlers/seo.ts +10 -1
  762. package/src/api/handlers/snapshot.ts +84 -72
  763. package/src/api/handlers/taxonomies.ts +25 -9
  764. package/src/api/openapi/document.ts +196 -11
  765. package/src/api/parse.ts +1 -1
  766. package/src/api/schemas/auth.ts +4 -4
  767. package/src/api/schemas/bylines.ts +3 -3
  768. package/src/api/schemas/comments.ts +1 -1
  769. package/src/api/schemas/common.ts +3 -2
  770. package/src/api/schemas/content.ts +86 -22
  771. package/src/api/schemas/entry-lock.ts +48 -0
  772. package/src/api/schemas/index.ts +1 -0
  773. package/src/api/schemas/media.ts +52 -0
  774. package/src/api/schemas/redirects.ts +6 -1
  775. package/src/api/schemas/schema.ts +14 -1
  776. package/src/api/schemas/setup.ts +1 -1
  777. package/src/api/schemas/taxonomies.ts +2 -2
  778. package/src/api/schemas/users.ts +1 -1
  779. package/src/api/types.ts +25 -10
  780. package/src/astro/dev-typegen.ts +35 -0
  781. package/src/astro/image-endpoint.ts +2 -2
  782. package/src/astro/integration/dev-typegen.ts +91 -0
  783. package/src/astro/integration/index.ts +18 -50
  784. package/src/astro/integration/routes.ts +10 -0
  785. package/src/astro/integration/runtime.ts +13 -5
  786. package/src/astro/integration/vite-config.ts +51 -2
  787. package/src/astro/middleware.ts +21 -0
  788. package/src/astro/routes/api/admin/api-tokens/index.ts +4 -1
  789. package/src/astro/routes/api/admin/oauth-clients/[id].ts +1 -1
  790. package/src/astro/routes/api/admin/oauth-clients/index.ts +1 -1
  791. package/src/astro/routes/api/admin/plugins/registry/[id]/update.ts +4 -0
  792. package/src/astro/routes/api/admin/plugins/registry/artifact.ts +3 -7
  793. package/src/astro/routes/api/admin/plugins/registry/install.ts +4 -0
  794. package/src/astro/routes/api/admin/plugins/registry/verify.ts +60 -0
  795. package/src/astro/routes/api/content/[collection]/[id]/discard-draft.ts +18 -2
  796. package/src/astro/routes/api/content/[collection]/[id]/lock.ts +133 -0
  797. package/src/astro/routes/api/content/[collection]/[id]/publish.ts +12 -1
  798. package/src/astro/routes/api/content/[collection]/[id]/schedule.ts +20 -0
  799. package/src/astro/routes/api/content/[collection]/[id]/unpublish.ts +16 -2
  800. package/src/astro/routes/api/content/[collection]/[id].ts +27 -2
  801. package/src/astro/routes/api/content/[collection]/index.ts +3 -0
  802. package/src/astro/routes/api/manifest.ts +1 -1
  803. package/src/astro/routes/api/media/[id]/replace.ts +114 -0
  804. package/src/astro/routes/api/media/file/[...key].ts +4 -1
  805. package/src/astro/routes/api/media/upload-url.ts +8 -4
  806. package/src/astro/routes/api/media.ts +54 -8
  807. package/src/astro/routes/api/menus/[name]/items/[id].ts +7 -2
  808. package/src/astro/routes/api/menus/[name]/items.ts +4 -1
  809. package/src/astro/routes/api/menus/[name]/reorder.ts +4 -1
  810. package/src/astro/routes/api/menus/[name]/translations.ts +4 -1
  811. package/src/astro/routes/api/menus/[name].ts +7 -2
  812. package/src/astro/routes/api/menus/index.ts +4 -1
  813. package/src/astro/routes/api/settings/email.ts +1 -1
  814. package/src/astro/routes/api/settings.ts +4 -1
  815. package/src/astro/routes/api/taxonomies/[name]/reorder.ts +4 -1
  816. package/src/astro/routes/api/taxonomies/[name]/terms/[slug]/translations.ts +4 -1
  817. package/src/astro/routes/api/taxonomies/[name]/terms/[slug].ts +7 -2
  818. package/src/astro/routes/api/taxonomies/[name]/terms/index.ts +4 -1
  819. package/src/astro/routes/api/taxonomies/[name].ts +7 -2
  820. package/src/astro/routes/api/taxonomies/index.ts +4 -1
  821. package/src/astro/routes/api/widget-areas/[name]/reorder.ts +3 -1
  822. package/src/astro/routes/api/widget-areas/[name]/widgets/[id].ts +5 -2
  823. package/src/astro/routes/api/widget-areas/[name]/widgets.ts +3 -1
  824. package/src/astro/routes/api/widget-areas/[name].ts +3 -1
  825. package/src/astro/routes/api/widget-areas/index.ts +3 -1
  826. package/src/astro/routes/sitemap-[collection].xml.ts +4 -0
  827. package/src/astro/types.ts +36 -8
  828. package/src/auth/challenge-store.ts +3 -1
  829. package/src/aws-sdk.d.ts +1 -0
  830. package/src/cache/chrome-tags.ts +24 -0
  831. package/src/cli/commands/content.ts +31 -5
  832. package/src/cli/commands/export-seed.ts +2 -0
  833. package/src/client/index.ts +34 -7
  834. package/src/components/EmDashBodyEnd.astro +4 -1
  835. package/src/components/EmDashBodyStart.astro +4 -1
  836. package/src/components/EmDashHead.astro +35 -16
  837. package/src/components/EmDashImage.astro +2 -1
  838. package/src/components/EmDashMedia.astro +2 -1
  839. package/src/components/Gallery.astro +18 -4
  840. package/src/components/InlineEditor.astro +3 -1
  841. package/src/components/InlinePortableTextEditor.tsx +112 -12
  842. package/src/components/PortableText.astro +4 -0
  843. package/src/components/Table.astro +147 -62
  844. package/src/components/widgets/Archives.astro +2 -37
  845. package/src/config/errors.ts +13 -0
  846. package/src/content/converters/index.ts +2 -0
  847. package/src/content/converters/mark-safety.ts +1 -0
  848. package/src/content/converters/portable-text-identity.ts +139 -0
  849. package/src/content/converters/portable-text-to-prosemirror.ts +226 -69
  850. package/src/content/converters/prosemirror-to-portable-text.ts +128 -28
  851. package/src/content/converters/types.ts +11 -0
  852. package/src/database/dialect-helpers.ts +125 -0
  853. package/src/database/migrations/017_authorization_codes.ts +14 -4
  854. package/src/database/migrations/074_content_deleted_scheduled_index.ts +55 -0
  855. package/src/database/migrations/075_entry_edit_locks.ts +44 -0
  856. package/src/database/migrations/076_collection_nav_group.ts +22 -0
  857. package/src/database/migrations/077_plugin_storage_revisions.ts +89 -0
  858. package/src/database/migrations/runner.ts +9 -1
  859. package/src/database/repositories/byline.ts +32 -16
  860. package/src/database/repositories/content.ts +284 -48
  861. package/src/database/repositories/entry-locks.ts +257 -0
  862. package/src/database/repositories/media-usage.ts +66 -37
  863. package/src/database/repositories/media.ts +60 -1
  864. package/src/database/repositories/options.ts +69 -5
  865. package/src/database/repositories/plugin-storage.ts +233 -9
  866. package/src/database/repositories/redirect.ts +17 -6
  867. package/src/database/repositories/taxonomy.ts +8 -0
  868. package/src/database/repositories/types.ts +11 -7
  869. package/src/database/types.ts +15 -1
  870. package/src/db/adapters.ts +8 -1
  871. package/src/db/postgres.ts +23 -0
  872. package/src/emdash-runtime.ts +196 -199
  873. package/src/fields/boolean.ts +1 -1
  874. package/src/fields/datetime.ts +1 -1
  875. package/src/fields/file.ts +1 -1
  876. package/src/fields/integer.ts +1 -1
  877. package/src/fields/json.ts +1 -1
  878. package/src/fields/multiselect.ts +1 -1
  879. package/src/fields/number.ts +1 -1
  880. package/src/fields/portable-text.ts +1 -1
  881. package/src/fields/richtext.ts +1 -1
  882. package/src/fields/select.ts +1 -1
  883. package/src/fields/slug.ts +1 -1
  884. package/src/fields/text.ts +1 -1
  885. package/src/fields/textarea.ts +1 -1
  886. package/src/fields/types.ts +2 -2
  887. package/src/i18n/resolve.ts +44 -4
  888. package/src/index.ts +39 -3
  889. package/src/loader.ts +96 -12
  890. package/src/mcp/server.ts +251 -29
  891. package/src/media/image-endpoint.ts +5 -2
  892. package/src/media/normalize.ts +15 -4
  893. package/src/media/responsive.ts +23 -0
  894. package/src/media/usage/cleanup.ts +9 -8
  895. package/src/media/usage/content-refresh.ts +2 -1
  896. package/src/menus/index.ts +33 -21
  897. package/src/object-cache/index.ts +44 -2
  898. package/src/page/seo-contributions.ts +78 -1
  899. package/src/page/seo-panel.ts +47 -0
  900. package/src/plugin-types.ts +27 -1
  901. package/src/plugins/conditional-storage.ts +30 -0
  902. package/src/plugins/context.ts +49 -17
  903. package/src/plugins/hooks.ts +10 -1
  904. package/src/plugins/index.ts +15 -0
  905. package/src/plugins/manager.ts +6 -2
  906. package/src/plugins/manifest-schema.ts +1 -1
  907. package/src/plugins/routes.ts +3 -1
  908. package/src/plugins/sandbox/hook-result.ts +52 -0
  909. package/src/plugins/sandbox/index.ts +10 -0
  910. package/src/plugins/sandbox/types.ts +16 -2
  911. package/src/plugins/storage-query.ts +45 -0
  912. package/src/plugins/storage-update.ts +96 -0
  913. package/src/plugins/types.ts +120 -0
  914. package/src/query.ts +29 -3
  915. package/src/registry/artifact-checksum.ts +15 -0
  916. package/src/registry/artifact-verification.ts +85 -0
  917. package/src/registry/authoritative-records.ts +180 -0
  918. package/src/registry/config.ts +130 -27
  919. package/src/registry/record-labels.ts +28 -0
  920. package/src/registry/types.ts +5 -6
  921. package/src/schema/collection-slugs-cache.ts +157 -0
  922. package/src/schema/registry.ts +45 -3
  923. package/src/schema/types.ts +25 -6
  924. package/src/schema/zod-generator.ts +16 -13
  925. package/src/security/ssrf.ts +172 -143
  926. package/src/seed/apply.ts +4 -0
  927. package/src/seed/types.ts +7 -2
  928. package/src/seed/validate.ts +18 -1
  929. package/src/seo/hreflang.ts +1 -0
  930. package/src/seo/index.ts +5 -10
  931. package/src/seo/media-url.ts +26 -0
  932. package/src/settings/index.ts +16 -0
  933. package/src/storage/local.ts +1 -0
  934. package/src/storage/s3.ts +2 -0
  935. package/src/storage/types.ts +2 -0
  936. package/src/taxonomies/index.ts +40 -20
  937. package/src/taxonomies/term-counts.ts +22 -5
  938. package/src/widgets/archives.ts +67 -0
  939. package/src/widgets/index.ts +16 -0
  940. package/dist/api-B0w3uBiG.mjs +0 -2269
  941. package/dist/api-B0w3uBiG.mjs.map +0 -1
  942. package/dist/apply-B_VMpJ2P.mjs.map +0 -1
  943. package/dist/byline-Cpnwrje1.mjs.map +0 -1
  944. package/dist/challenge-store-D5pSY2S1.mjs.map +0 -1
  945. package/dist/content-CP-SeXNa.mjs.map +0 -1
  946. package/dist/content-refresh-DLOfIhYc.mjs.map +0 -1
  947. package/dist/context-BR5hRWiK.mjs.map +0 -1
  948. package/dist/dialect-helpers-BSbfaO3F.mjs.map +0 -1
  949. package/dist/errors-n2j49uNf.mjs.map +0 -1
  950. package/dist/index-DWbJrsAg.d.mts.map +0 -1
  951. package/dist/loader-ZsjE4paL.mjs.map +0 -1
  952. package/dist/manifest-schema-CUYPfCEH.mjs.map +0 -1
  953. package/dist/media-BjwNuLEu.mjs.map +0 -1
  954. package/dist/media-D6SeAfBl.mjs.map +0 -1
  955. package/dist/media-url-DH7giMx_.mjs.map +0 -1
  956. package/dist/menus-CNg0QlDt.mjs.map +0 -1
  957. package/dist/normalize-CSxdKBVa.mjs.map +0 -1
  958. package/dist/object-cache-71tPfV4A.mjs.map +0 -1
  959. package/dist/options-BHPeIbBd.mjs.map +0 -1
  960. package/dist/options-BhZIeFY1.d.mts.map +0 -1
  961. package/dist/query-D18vTdha.mjs.map +0 -1
  962. package/dist/redirect-CZkbozu9.mjs.map +0 -1
  963. package/dist/redirects-CRIM55KH.mjs.map +0 -1
  964. package/dist/registry-BiO5WwPq.mjs +0 -2716
  965. package/dist/registry-BiO5WwPq.mjs.map +0 -1
  966. package/dist/registry-Cx-jEJOS.mjs.map +0 -1
  967. package/dist/relations-BTPM2saV.mjs.map +0 -1
  968. package/dist/relations-C7B46bcU.d.mts.map +0 -1
  969. package/dist/resolve-DxUpTMmE.mjs.map +0 -1
  970. package/dist/runner-77GOZCnH.mjs.map +0 -1
  971. package/dist/runner-zgqA_CqP.d.mts.map +0 -1
  972. package/dist/seo-BSiTIXzd.mjs.map +0 -1
  973. package/dist/settings-BgN-0DT-.mjs.map +0 -1
  974. package/dist/snapshot-DSB8P7Lm.mjs.map +0 -1
  975. package/dist/ssrf-DqebVE34.mjs.map +0 -1
  976. package/dist/taxonomies-CPGxo-bn.mjs.map +0 -1
  977. package/dist/taxonomies-kmyudNGP.mjs.map +0 -1
  978. package/dist/types-75KIqzL9.mjs.map +0 -1
  979. package/dist/types-Br-ERaxh.d.mts.map +0 -1
  980. package/dist/types-D6OcIp2P.mjs +0 -3
  981. package/dist/types-DHxzBjbD.d.mts.map +0 -1
  982. package/dist/types-DJQxln7q.d.mts.map +0 -1
  983. package/dist/types-D_DWe7k9.d.mts.map +0 -1
  984. package/dist/types-Vg6f5i3s.d.mts.map +0 -1
  985. package/dist/validate-Dd-IUjnZ.mjs.map +0 -1
  986. package/dist/validate-DlqdOZXB.d.mts.map +0 -1
  987. package/dist/version-ri-sCyAp.mjs +0 -7
  988. package/dist/widgets-CpmZd9Q-.mjs.map +0 -1
  989. package/dist/zod-generator-DylzusHh.mjs.map +0 -1
  990. /package/dist/{api-tokens-B5NHLNUN.mjs → api-tokens-B_lfpmH3.mjs} +0 -0
  991. /package/dist/{ssrf-BPKzkm6O.mjs → ssrf-TQhaljuI.mjs} +0 -0
@@ -1,14 +1,14 @@
1
1
  import "../../../config-C3EBstHi.mjs";
2
2
  import { i as encodeBase64, t as decodeBase64 } from "../../../base64-CvLhUKQv.mjs";
3
3
  import { i as InvalidCursorError, o as decodeCursor } from "../../../types-CQPWhPxE.mjs";
4
- import { t as apiError } from "../../../error-D9w94fjV.mjs";
5
- import { t as CONTENT_TYPE_RE } from "../../../media-BjwNuLEu.mjs";
6
- import { Gt as updateFieldBody, Pt as createCollectionBody, Wt as updateCollectionBody, in as contentSeoInput, pn as bylineCreateBody, xn as contentBylineInputSchema, yn as bylineUpdateBody } from "../../../redirects-CRIM55KH.mjs";
7
- import "../../../relations-BTPM2saV.mjs";
8
- import "../../../status-DDu8HIQl.mjs";
4
+ import { t as apiError } from "../../../error-BDcFyoRt.mjs";
5
+ import { t as CONTENT_TYPE_RE } from "../../../media-C1EIZKh1.mjs";
6
+ import { En as bylineUpdateBody, K as createTaxonomyDefBody, On as contentBylineInputSchema, Xt as updateFieldBody, Yt as updateCollectionBody, bn as bylineCreateBody, st as updateTaxonomyDefBody, un as contentSeoInput, zt as createCollectionBody } from "../../../entry-lock-DIYHAaSw.mjs";
7
+ import "../../../relations-rOmbndUJ.mjs";
8
+ import "../../../status-Cenfk_r5.mjs";
9
9
  import "../../../api/schemas/index.mjs";
10
- import { i as hasScope$1 } from "../../../api-tokens-B5NHLNUN.mjs";
11
- import { n as convertDataForWrite, t as convertDataForRead } from "../../../portable-text-C8Tvp4_g.mjs";
10
+ import { i as hasScope$1 } from "../../../api-tokens-B_lfpmH3.mjs";
11
+ import { n as convertDataForWrite, t as convertDataForRead } from "../../../portable-text-BS3d5n-0.mjs";
12
12
  import { z } from "zod";
13
13
  import { Permissions, Role, canActOnOwn, hasPermission } from "@emdash-cms/auth";
14
14
  import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
@@ -18,8 +18,26 @@ import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
18
18
  const COLLECTION_SLUG_PATTERN = /^[a-z][a-z0-9_]*$/;
19
19
  /** http(s) scheme matcher used by `settings_update` URL validation. */
20
20
  const HTTP_SCHEME_PATTERN = /^https?:\/\//i;
21
+ /**
22
+ * Shared wording for the `_rev` parameter on write tools. Agents only see the
23
+ * tool schema, so the retry protocol is stated here.
24
+ */
25
+ const REV_PARAM_DESCRIPTION = "Revision token proving you have read the current item. Call content_get first and pass back the _rev it returns. If this call fails with CONFLICT the item changed in the meantime: call content_get again and retry with the new token.";
26
+ /**
27
+ * Replaces Zod's "expected string, received undefined" for a caller that never
28
+ * read the schema, so the message says where the token comes from.
29
+ */
30
+ const REV_MISSING_ERROR = "_rev is required: call content_get for this item and pass back the _rev it returns.";
21
31
  const TAXONOMY_CURSOR_VERSION = 2;
22
32
  const MAX_TAXONOMY_CURSOR_LENGTH = 2048;
33
+ const contentDateTimeInputSchema = z.iso.datetime({
34
+ offset: true,
35
+ message: "must be an ISO 8601 datetime"
36
+ }).or(z.iso.datetime({
37
+ offset: true,
38
+ precision: -1,
39
+ message: "must be an ISO 8601 datetime"
40
+ }));
23
41
  const settingsMediaReferenceSchema = z.object({
24
42
  mediaId: z.string().describe("Media item ID (use media_create or media_list)"),
25
43
  alt: z.string().optional().describe("Alt text for the media reference")
@@ -64,10 +82,14 @@ const schemaUpdateCollectionToolSchema = z.object({
64
82
  urlPattern: updateCollectionBody.shape.urlPattern.describe("New public URL pattern; pass null to clear it"),
65
83
  routable: updateCollectionBody.shape.routable.describe("Whether entries require a slug before they can be published"),
66
84
  hasSeo: updateCollectionBody.shape.hasSeo.describe("Whether the collection supports SEO metadata"),
85
+ group: updateCollectionBody.shape.group.describe("Admin sidebar folder shared with other collections of the same group; pass null to move the collection back inline"),
67
86
  commentsEnabled: updateCollectionBody.shape.commentsEnabled.describe("Whether comments are enabled for this collection"),
68
87
  commentsModeration: updateCollectionBody.shape.commentsModeration.describe("Comment moderation policy"),
69
88
  commentsClosedAfterDays: updateCollectionBody.shape.commentsClosedAfterDays.describe("Close comments after this many days; 0 keeps them open"),
70
- commentsAutoApproveUsers: updateCollectionBody.shape.commentsAutoApproveUsers.describe("Whether comments from authenticated users are automatically approved")
89
+ commentsAutoApproveUsers: updateCollectionBody.shape.commentsAutoApproveUsers.describe("Whether comments from authenticated users are automatically approved"),
90
+ editLocking: updateCollectionBody.shape.editLocking.describe("Whether opening an entry takes an edit lock that refuses other editors' writes"),
91
+ titleField: updateCollectionBody.shape.titleField.describe("Field slug to use as the Title column in admin lists; pass null to fall back to the default"),
92
+ dateField: updateCollectionBody.shape.dateField.describe("Datetime field slug to use as the Date column in admin lists; pass null to fall back to the default")
71
93
  });
72
94
  const schemaUpdateFieldToolSchema = z.object({
73
95
  collection: z.string().min(1).max(63).regex(COLLECTION_SLUG_PATTERN, "Invalid collection slug").describe("Collection slug containing the field"),
@@ -234,7 +256,7 @@ function getEmDash(extra) {
234
256
  }
235
257
  async function getCollectionFields(ec, collection) {
236
258
  try {
237
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
259
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
238
260
  const col = await new SchemaRegistry(ec.db).getCollectionWithFields(collection);
239
261
  return col ? col.fields : null;
240
262
  } catch {
@@ -263,7 +285,7 @@ async function applyReadMarkdown(ec, collection, items) {
263
285
  for (const item of items) if (item.data && typeof item.data === "object") item.data = convertDataForRead(item.data, fields, false);
264
286
  }
265
287
  async function invalidateBylines() {
266
- const { invalidateBylineCache } = await import("../../../bylines-BSo9B9RX.mjs").then((n) => n.t);
288
+ const { invalidateBylineCache } = await import("../../../bylines-BX8QhcTk.mjs").then((n) => n.t);
267
289
  invalidateBylineCache();
268
290
  }
269
291
  /**
@@ -342,6 +364,12 @@ function extractContentId(data) {
342
364
  const item = obj.item && typeof obj.item === "object" ? obj.item : obj;
343
365
  return typeof item?.id === "string" ? item.id : void 0;
344
366
  }
367
+ /** Extract the `_rev` token from a content handler response. */
368
+ function extractContentRev(data) {
369
+ if (!data || typeof data !== "object") return void 0;
370
+ const rev = data._rev;
371
+ return typeof rev === "string" ? rev : void 0;
372
+ }
345
373
  function createMcpServer(pluginTools = [], request) {
346
374
  const server = new McpServer({
347
375
  name: "emdash",
@@ -430,7 +458,7 @@ function createMcpServer(pluginTools = [], request) {
430
458
  });
431
459
  server.registerTool("content_get", {
432
460
  title: "Get Content",
433
- description: "Get a single content item by its ID or slug. Returns the full content data including all field values, metadata, and a _rev token for optimistic concurrency (pass _rev back when updating to detect conflicts).",
461
+ description: "Get a single content item by its ID or slug. Returns the full content data including all field values, metadata, and a _rev token. content_update, content_publish, content_unpublish and content_discard_draft require that token, so read the item here before calling them.",
434
462
  inputSchema: z.object({
435
463
  collection: z.string().describe("Collection slug (e.g. 'posts', 'pages')"),
436
464
  id: z.string().describe("Content item ID (ULID) or slug"),
@@ -473,7 +501,11 @@ function createMcpServer(pluginTools = [], request) {
473
501
  }, async (args, extra) => {
474
502
  requireScope(extra, "content:write");
475
503
  requireRole(extra, Role.CONTRIBUTOR);
476
- const { emdash, userId } = getExtra(extra);
504
+ const { emdash, userId, userRole } = getExtra(extra);
505
+ const actor = {
506
+ id: userId,
507
+ role: userRole
508
+ };
477
509
  if (args.translationOf) {
478
510
  const source = await emdash.handleContentGet(args.collection, args.translationOf);
479
511
  if (!source.success) return unwrap(source);
@@ -483,7 +515,7 @@ function createMcpServer(pluginTools = [], request) {
483
515
  if (args.status === "published") {
484
516
  if (!hasPermission({
485
517
  id: userId,
486
- role: getExtra(extra).userRole
518
+ role: userRole
487
519
  }, "content:publish_own")) throw new EmDashAuthError("Insufficient permissions: publishing requires content:publish_own", "INSUFFICIENT_PERMISSIONS");
488
520
  const result = await emdash.handleContentCreate(args.collection, {
489
521
  data,
@@ -492,7 +524,8 @@ function createMcpServer(pluginTools = [], request) {
492
524
  locale: args.locale,
493
525
  translationOf: args.translationOf,
494
526
  bylines: args.bylines,
495
- taxonomies: args.taxonomies
527
+ taxonomies: args.taxonomies,
528
+ actor
496
529
  });
497
530
  if (!result.success) return unwrap(result);
498
531
  const itemId = extractContentId(result.data);
@@ -506,12 +539,13 @@ function createMcpServer(pluginTools = [], request) {
506
539
  locale: args.locale,
507
540
  translationOf: args.translationOf,
508
541
  bylines: args.bylines,
509
- taxonomies: args.taxonomies
542
+ taxonomies: args.taxonomies,
543
+ actor
510
544
  }));
511
545
  });
512
546
  server.registerTool("content_update", {
513
547
  title: "Update Content",
514
- description: "Update an existing content item. Only include fields you want to change in the 'data' object — unspecified fields are left unchanged. Rich text (portableText) fields accept a Markdown string (recommended, converted automatically); use a Portable Text JSON array only for complex content Markdown can't express (custom blocks, embeds). Pass the _rev token from content_get to enable optimistic concurrency checking (the update fails if the item was modified since you read it). `seo` and `bylines` are persisted alongside the field updates in a single transaction. `publishedAt` requires the content:publish_any permission and is useful for migrations or correcting historical dates.",
548
+ description: "Update an existing content item. Only include fields you want to change in the 'data' object — unspecified fields are left unchanged. Rich text (portableText) fields accept a Markdown string (recommended, converted automatically); use a Portable Text JSON array only for complex content Markdown can't express (custom blocks, embeds). Requires the _rev token from content_get, so read the item before updating it: the update fails if the item changed since that read. When status is not set, a change to a published item is staged as a draft, so the response shows the new values while the live version keeps the old ones until content_publish. `seo` and `bylines` are persisted alongside the field updates in a single transaction. `publishedAt` requires the content:publish_any permission and is useful for migrations or correcting historical dates.",
515
549
  inputSchema: z.object({
516
550
  collection: z.string().describe("Collection slug"),
517
551
  id: z.string().describe("Content item ID or slug"),
@@ -522,16 +556,17 @@ function createMcpServer(pluginTools = [], request) {
522
556
  seo: contentSeoInput.optional().describe("Per-content SEO metadata. Only valid for collections with SEO enabled (see schema_get_collection.hasSeo). Fields not included are left unchanged; pass null to clear."),
523
557
  bylines: z.array(contentBylineInputSchema).optional().describe("Replace the byline list for this item. The first entry becomes the primary byline. Pass an empty array to clear all bylines."),
524
558
  taxonomies: z.record(z.string(), z.array(z.string())).optional().describe("Replace taxonomy term assignments as { taxonomyName: [termSlug, ...] }. Term slugs are resolved in the entry's locale. Only named taxonomies are touched; other taxonomies are left unchanged. Pass an empty array to clear a taxonomy."),
525
- publishedAt: z.iso.datetime({
526
- offset: true,
527
- message: "must be an ISO 8601 datetime"
528
- }).nullish().describe("Override the publication timestamp (ISO 8601). Requires content:publish_any permission. Pass null to clear. Useful for content migrations."),
529
- _rev: z.string().optional().describe("Revision token from content_get for conflict detection")
559
+ publishedAt: contentDateTimeInputSchema.nullish().describe("Override the publication timestamp (ISO 8601). Requires content:publish_any permission. Pass null to clear. Useful for content migrations."),
560
+ _rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION)
530
561
  })
531
562
  }, async (args, extra) => {
532
563
  requireScope(extra, "content:write");
533
564
  requireRole(extra, Role.AUTHOR);
534
565
  const { emdash, userId, userRole } = getExtra(extra);
566
+ const actor = {
567
+ id: userId,
568
+ role: userRole
569
+ };
535
570
  const existing = await emdash.handleContentGet(args.collection, args.id, args.locale);
536
571
  if (!existing.success) return unwrap(existing);
537
572
  const ownerId = extractContentAuthorId(existing.data);
@@ -546,11 +581,12 @@ function createMcpServer(pluginTools = [], request) {
546
581
  const resolvedId = extractContentId(existing.data) ?? args.id;
547
582
  if (args.status === "published") {
548
583
  requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
584
+ let rev = args._rev;
549
585
  if (args.data || args.slug || args.seo !== void 0 || args.bylines !== void 0 || args.taxonomies !== void 0 || args.publishedAt !== void 0) {
550
586
  const updateResult = await emdash.handleContentUpdate(args.collection, resolvedId, {
551
587
  data,
552
588
  slug: args.slug,
553
- authorId: userId,
589
+ actor,
554
590
  locale: args.locale,
555
591
  seo: args.seo,
556
592
  bylines: args.bylines,
@@ -559,16 +595,18 @@ function createMcpServer(pluginTools = [], request) {
559
595
  _rev: args._rev
560
596
  });
561
597
  if (!updateResult.success) return unwrap(updateResult);
598
+ rev = extractContentRev(updateResult.data);
562
599
  }
563
- return unwrap(await emdash.handleContentPublish(args.collection, resolvedId));
600
+ return unwrap(await emdash.handleContentPublish(args.collection, resolvedId, { _rev: rev }));
564
601
  }
565
602
  if (args.status === "draft") {
566
603
  requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
604
+ let rev = args._rev;
567
605
  if (args.data || args.slug || args.seo !== void 0 || args.bylines !== void 0 || args.taxonomies !== void 0 || args.publishedAt !== void 0) {
568
606
  const updateResult = await emdash.handleContentUpdate(args.collection, resolvedId, {
569
607
  data,
570
608
  slug: args.slug,
571
- authorId: userId,
609
+ actor,
572
610
  locale: args.locale,
573
611
  seo: args.seo,
574
612
  bylines: args.bylines,
@@ -577,13 +615,14 @@ function createMcpServer(pluginTools = [], request) {
577
615
  _rev: args._rev
578
616
  });
579
617
  if (!updateResult.success) return unwrap(updateResult);
618
+ rev = extractContentRev(updateResult.data);
580
619
  }
581
- return unwrap(await emdash.handleContentUnpublish(args.collection, resolvedId));
620
+ return unwrap(await emdash.handleContentUnpublish(args.collection, resolvedId, { _rev: rev }));
582
621
  }
583
622
  return unwrap(await emdash.handleContentUpdate(args.collection, resolvedId, {
584
623
  data,
585
624
  slug: args.slug,
586
- authorId: userId,
625
+ actor,
587
626
  locale: args.locale,
588
627
  seo: args.seo,
589
628
  bylines: args.bylines,
@@ -646,10 +685,8 @@ function createMcpServer(pluginTools = [], request) {
646
685
  inputSchema: z.object({
647
686
  collection: z.string().describe("Collection slug"),
648
687
  id: z.string().describe("Content item ID or slug"),
649
- publishedAt: z.iso.datetime({
650
- offset: true,
651
- message: "must be an ISO 8601 datetime"
652
- }).optional().describe("Override publication timestamp (ISO 8601). Requires content:publish_any permission. Useful when importing content with original publish dates.")
688
+ _rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION),
689
+ publishedAt: contentDateTimeInputSchema.optional().describe("Override publication timestamp (ISO 8601). Requires content:publish_any permission. Useful when importing content with original publish dates.")
653
690
  })
654
691
  }, async (args, extra) => {
655
692
  requireScope(extra, "content:write");
@@ -665,14 +702,18 @@ function createMcpServer(pluginTools = [], request) {
665
702
  }, "content:publish_any")) throw new EmDashAuthError("Setting publishedAt requires content:publish_any permission", "INSUFFICIENT_PERMISSIONS");
666
703
  }
667
704
  const resolvedId = extractContentId(existing.data) ?? args.id;
668
- return unwrap(await emdash.handleContentPublish(args.collection, resolvedId, { publishedAt: args.publishedAt }));
705
+ return unwrap(await emdash.handleContentPublish(args.collection, resolvedId, {
706
+ publishedAt: args.publishedAt,
707
+ _rev: args._rev
708
+ }));
669
709
  });
670
710
  server.registerTool("content_unpublish", {
671
711
  title: "Unpublish Content",
672
- description: "Unpublish a content item, reverting it to draft status. It will no longer be visible on the live site but its content is preserved.",
712
+ description: "Unpublish a content item, reverting it to draft status. It will no longer be visible on the live site, but its content and publication date are preserved.",
673
713
  inputSchema: z.object({
674
714
  collection: z.string().describe("Collection slug"),
675
- id: z.string().describe("Content item ID or slug")
715
+ id: z.string().describe("Content item ID or slug"),
716
+ _rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION)
676
717
  })
677
718
  }, async (args, extra) => {
678
719
  requireScope(extra, "content:write");
@@ -682,7 +723,7 @@ function createMcpServer(pluginTools = [], request) {
682
723
  if (!existing.success) return unwrap(existing);
683
724
  requireOwnership(extra, extractContentAuthorId(existing.data), "content:publish_own", "content:publish_any");
684
725
  const resolvedId = extractContentId(existing.data) ?? args.id;
685
- return unwrap(await ec.handleContentUnpublish(args.collection, resolvedId));
726
+ return unwrap(await ec.handleContentUnpublish(args.collection, resolvedId, { _rev: args._rev }));
686
727
  });
687
728
  server.registerTool("content_schedule", {
688
729
  title: "Schedule Content",
@@ -737,7 +778,8 @@ function createMcpServer(pluginTools = [], request) {
737
778
  description: "Discard the current draft changes and revert to the last published version. Only works on items that have been published at least once.",
738
779
  inputSchema: z.object({
739
780
  collection: z.string().describe("Collection slug"),
740
- id: z.string().describe("Content item ID or slug")
781
+ id: z.string().describe("Content item ID or slug"),
782
+ _rev: z.string({ error: REV_MISSING_ERROR }).describe(REV_PARAM_DESCRIPTION)
741
783
  }),
742
784
  annotations: { destructiveHint: true }
743
785
  }, async (args, extra) => {
@@ -748,7 +790,7 @@ function createMcpServer(pluginTools = [], request) {
748
790
  if (!existing.success) return unwrap(existing);
749
791
  requireOwnership(extra, extractContentAuthorId(existing.data), "content:edit_own", "content:edit_any");
750
792
  const resolvedId = extractContentId(existing.data) ?? args.id;
751
- return unwrap(await ec.handleContentDiscardDraft(args.collection, resolvedId));
793
+ return unwrap(await ec.handleContentDiscardDraft(args.collection, resolvedId, { _rev: args._rev }));
752
794
  });
753
795
  server.registerTool("content_list_trashed", {
754
796
  title: "List Trashed Content",
@@ -819,7 +861,7 @@ function createMcpServer(pluginTools = [], request) {
819
861
  requireScope(extra, "content:read");
820
862
  const ec = getEmDash(extra);
821
863
  try {
822
- const { BylineRepository } = await import("../../../byline-Cpnwrje1.mjs").then((n) => n.n);
864
+ const { BylineRepository } = await import("../../../byline-Vdi85CsZ.mjs").then((n) => n.n);
823
865
  return jsonResult(await new BylineRepository(ec.db).findMany({
824
866
  search: args.search,
825
867
  isGuest: args.isGuest,
@@ -841,7 +883,7 @@ function createMcpServer(pluginTools = [], request) {
841
883
  requireScope(extra, "content:read");
842
884
  const ec = getEmDash(extra);
843
885
  try {
844
- const { BylineRepository } = await import("../../../byline-Cpnwrje1.mjs").then((n) => n.n);
886
+ const { BylineRepository } = await import("../../../byline-Vdi85CsZ.mjs").then((n) => n.n);
845
887
  const byline = await new BylineRepository(ec.db).findById(args.id);
846
888
  if (!byline) return respondError("NOT_FOUND", `Byline '${args.id}' not found`);
847
889
  return jsonResult(byline);
@@ -859,7 +901,7 @@ function createMcpServer(pluginTools = [], request) {
859
901
  requireRole(extra, Role.EDITOR);
860
902
  const ec = getEmDash(extra);
861
903
  try {
862
- const { handleBylineCreate } = await import("../../../bylines-CHjvehVX.mjs").then((n) => n.t);
904
+ const { handleBylineCreate } = await import("../../../bylines-w-E1IEQd.mjs").then((n) => n.t);
863
905
  const result = await handleBylineCreate(ec.db, args);
864
906
  if (result.success) await invalidateBylines();
865
907
  return unwrap(result);
@@ -879,7 +921,7 @@ function createMcpServer(pluginTools = [], request) {
879
921
  requireRole(extra, Role.EDITOR);
880
922
  const ec = getEmDash(extra);
881
923
  try {
882
- const { handleBylineUpdate } = await import("../../../bylines-CHjvehVX.mjs").then((n) => n.t);
924
+ const { handleBylineUpdate } = await import("../../../bylines-w-E1IEQd.mjs").then((n) => n.t);
883
925
  const { id, ...input } = args;
884
926
  const result = await handleBylineUpdate(ec.db, id, input);
885
927
  if (result.success) await invalidateBylines();
@@ -898,7 +940,7 @@ function createMcpServer(pluginTools = [], request) {
898
940
  requireRole(extra, Role.EDITOR);
899
941
  const ec = getEmDash(extra);
900
942
  try {
901
- const { BylineRepository } = await import("../../../byline-Cpnwrje1.mjs").then((n) => n.n);
943
+ const { BylineRepository } = await import("../../../byline-Vdi85CsZ.mjs").then((n) => n.n);
902
944
  if (!await new BylineRepository(ec.db).delete(args.id)) return respondError("NOT_FOUND", `Byline '${args.id}' not found`);
903
945
  await invalidateBylines();
904
946
  return jsonResult({ deleted: args.id });
@@ -915,7 +957,7 @@ function createMcpServer(pluginTools = [], request) {
915
957
  requireScope(extra, "content:read");
916
958
  const ec = getEmDash(extra);
917
959
  try {
918
- const { handleBylineTranslations } = await import("../../../bylines-CHjvehVX.mjs").then((n) => n.t);
960
+ const { handleBylineTranslations } = await import("../../../bylines-w-E1IEQd.mjs").then((n) => n.t);
919
961
  return unwrap(await handleBylineTranslations(ec.db, args.id));
920
962
  } catch (error) {
921
963
  return respondHandlerError(error, "BYLINE_TRANSLATIONS_ERROR");
@@ -931,7 +973,7 @@ function createMcpServer(pluginTools = [], request) {
931
973
  requireRole(extra, Role.EDITOR);
932
974
  const ec = getEmDash(extra);
933
975
  try {
934
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
976
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
935
977
  return jsonResult({ items: await new SchemaRegistry(ec.db).listCollections() });
936
978
  } catch (error) {
937
979
  return respondHandlerError(error, "SCHEMA_LIST_ERROR");
@@ -947,7 +989,7 @@ function createMcpServer(pluginTools = [], request) {
947
989
  requireRole(extra, Role.EDITOR);
948
990
  const ec = getEmDash(extra);
949
991
  try {
950
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
992
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
951
993
  const collection = await new SchemaRegistry(ec.db).getCollectionWithFields(args.slug);
952
994
  if (!collection) return respondError("NOT_FOUND", `Collection '${args.slug}' not found`);
953
995
  return jsonResult(collection);
@@ -965,14 +1007,16 @@ function createMcpServer(pluginTools = [], request) {
965
1007
  description: z.string().optional().describe("Description of this collection"),
966
1008
  icon: z.string().optional().describe("Icon name for the admin UI"),
967
1009
  supports: createCollectionBody.shape.supports.describe("Features to enable (default: ['drafts', 'revisions'])"),
968
- routable: createCollectionBody.shape.routable.describe("Require a slug before publishing (default: true)")
1010
+ routable: createCollectionBody.shape.routable.describe("Require a slug before publishing (default: true)"),
1011
+ editLocking: createCollectionBody.shape.editLocking.describe("Take an edit lock when an entry is opened (default: true)"),
1012
+ group: createCollectionBody.shape.group.describe("Admin sidebar folder shared with other collections of the same group")
969
1013
  })
970
1014
  }, async (args, extra) => {
971
1015
  requireScope(extra, "schema:write");
972
1016
  requireRole(extra, Role.ADMIN);
973
1017
  const ec = getEmDash(extra);
974
1018
  try {
975
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
1019
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
976
1020
  const collection = await new SchemaRegistry(ec.db).createCollection({
977
1021
  slug: args.slug,
978
1022
  label: args.label,
@@ -980,7 +1024,9 @@ function createMcpServer(pluginTools = [], request) {
980
1024
  description: args.description,
981
1025
  icon: args.icon,
982
1026
  supports: args.supports,
983
- routable: args.routable
1027
+ routable: args.routable,
1028
+ editLocking: args.editLocking,
1029
+ group: args.group
984
1030
  });
985
1031
  ec.invalidateUrlPatternCache();
986
1032
  return jsonResult(collection);
@@ -1001,7 +1047,7 @@ function createMcpServer(pluginTools = [], request) {
1001
1047
  requireRole(extra, Role.ADMIN);
1002
1048
  const ec = getEmDash(extra);
1003
1049
  try {
1004
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
1050
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
1005
1051
  await new SchemaRegistry(ec.db).deleteCollection(args.slug, { force: args.force });
1006
1052
  ec.invalidateUrlPatternCache();
1007
1053
  return jsonResult({ deleted: args.slug });
@@ -1020,7 +1066,7 @@ function createMcpServer(pluginTools = [], request) {
1020
1066
  const ec = getEmDash(extra);
1021
1067
  const { slug, ...input } = args;
1022
1068
  try {
1023
- const { handleSchemaCollectionUpdate } = await import("../../../schema-Cw9kVK0I.mjs").then((n) => n.h);
1069
+ const { handleSchemaCollectionUpdate } = await import("../../../schema-DifxndJx.mjs").then((n) => n.h);
1024
1070
  const result = await handleSchemaCollectionUpdate(ec.db, slug, input);
1025
1071
  if (result.success) ec.invalidateUrlPatternCache();
1026
1072
  return unwrap(result);
@@ -1065,7 +1111,7 @@ function createMcpServer(pluginTools = [], request) {
1065
1111
  options: z.object({
1066
1112
  collection: z.string().optional().describe("Target collection slug for reference fields"),
1067
1113
  rows: z.number().optional().describe("Number of rows for textarea")
1068
- }).passthrough().optional().describe("Widget configuration"),
1114
+ }).loose().optional().describe("Widget configuration"),
1069
1115
  searchable: z.boolean().optional().describe("Include in full-text search index (default false)"),
1070
1116
  indexed: z.boolean().optional().describe("Create a physical index for structured sorting"),
1071
1117
  translatable: z.boolean().optional().describe("Whether this field is translatable (default true). Non-translatable fields are synced across all locales in a translation group.")
@@ -1075,7 +1121,7 @@ function createMcpServer(pluginTools = [], request) {
1075
1121
  requireRole(extra, Role.ADMIN);
1076
1122
  const ec = getEmDash(extra);
1077
1123
  try {
1078
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
1124
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
1079
1125
  return jsonResult(await new SchemaRegistry(ec.db).createField(args.collection, {
1080
1126
  slug: args.slug,
1081
1127
  label: args.label,
@@ -1106,7 +1152,7 @@ function createMcpServer(pluginTools = [], request) {
1106
1152
  requireRole(extra, Role.ADMIN);
1107
1153
  const ec = getEmDash(extra);
1108
1154
  try {
1109
- const { SchemaRegistry } = await import("../../../schema-BY-oVntF.mjs").then((n) => n.t);
1155
+ const { SchemaRegistry } = await import("../../../schema-CRu38Pr5.mjs").then((n) => n.t);
1110
1156
  await new SchemaRegistry(ec.db).deleteField(args.collection, args.fieldSlug);
1111
1157
  return jsonResult({
1112
1158
  deleted: args.fieldSlug,
@@ -1127,7 +1173,7 @@ function createMcpServer(pluginTools = [], request) {
1127
1173
  const ec = getEmDash(extra);
1128
1174
  const { collection, fieldSlug, ...input } = args;
1129
1175
  try {
1130
- const { handleSchemaFieldUpdate } = await import("../../../schema-Cw9kVK0I.mjs").then((n) => n.h);
1176
+ const { handleSchemaFieldUpdate } = await import("../../../schema-DifxndJx.mjs").then((n) => n.h);
1131
1177
  return unwrap(await handleSchemaFieldUpdate(ec.db, collection, fieldSlug, input));
1132
1178
  } catch (error) {
1133
1179
  return respondHandlerError(error, "SCHEMA_FIELD_UPDATE_ERROR");
@@ -1187,7 +1233,7 @@ function createMcpServer(pluginTools = [], request) {
1187
1233
  inputSchema: z.object({
1188
1234
  filename: z.string().min(1).describe("Filename including extension (e.g. 'cover.png')"),
1189
1235
  base64: z.string().optional().describe("Base64-encoded file contents. Provide exactly one of base64 / url."),
1190
- url: z.string().url().optional().describe("Public http(s) URL to fetch the file from. Provide exactly one of base64 / url."),
1236
+ url: z.url().optional().describe("Public http(s) URL to fetch the file from. Provide exactly one of base64 / url."),
1191
1237
  contentType: z.string().regex(CONTENT_TYPE_RE, "Invalid content type").optional().describe("MIME type (e.g. 'image/png'). Required with base64; with url it defaults to the response's Content-Type header."),
1192
1238
  alt: z.string().optional().describe("Alt text for accessibility")
1193
1239
  }),
@@ -1198,7 +1244,7 @@ function createMcpServer(pluginTools = [], request) {
1198
1244
  const { emdash, userId } = getExtra(extra);
1199
1245
  if (!emdash.storage) return respondError("NO_STORAGE", "Storage not configured");
1200
1246
  try {
1201
- const { handleMediaUpload } = await import("../../../media-upload-C7bLXGcI.mjs");
1247
+ const { handleMediaUpload } = await import("../../../media-upload-C7_AQJ5v.mjs");
1202
1248
  return unwrap(await handleMediaUpload(emdash.db, emdash.storage, {
1203
1249
  filename: args.filename,
1204
1250
  base64: args.base64,
@@ -1278,7 +1324,7 @@ function createMcpServer(pluginTools = [], request) {
1278
1324
  };
1279
1325
  } else input = { scope: "all" };
1280
1326
  try {
1281
- const { handleMediaUsageRepair } = await import("../../../media-usage-BTRJvS6V.mjs").then((n) => n.o);
1327
+ const { handleMediaUsageRepair } = await import("../../../media-usage-C1EswMTq.mjs").then((n) => n.o);
1282
1328
  return unwrap(await handleMediaUsageRepair(ec.db, input));
1283
1329
  } catch (error) {
1284
1330
  return respondHandlerError(error, "MEDIA_USAGE_REPAIR_ERROR");
@@ -1299,7 +1345,7 @@ function createMcpServer(pluginTools = [], request) {
1299
1345
  requireScope(extra, "content:read");
1300
1346
  const ec = getEmDash(extra);
1301
1347
  try {
1302
- const { searchWithDb } = await import("../../../search-CfT3KxO5.mjs").then((n) => n.t);
1348
+ const { searchWithDb } = await import("../../../search-DEPFSBFq.mjs").then((n) => n.t);
1303
1349
  return jsonResult(await searchWithDb(ec.db, args.query, {
1304
1350
  collections: args.collections,
1305
1351
  locale: args.locale,
@@ -1319,12 +1365,105 @@ function createMcpServer(pluginTools = [], request) {
1319
1365
  requireScope(extra, "content:read");
1320
1366
  const ec = getEmDash(extra);
1321
1367
  try {
1322
- const { handleTaxonomyList } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1368
+ const { handleTaxonomyList } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1323
1369
  return unwrap(await handleTaxonomyList(ec.db, { locale: args.locale }));
1324
1370
  } catch (error) {
1325
1371
  return respondHandlerError(error, "TAXONOMY_LIST_ERROR");
1326
1372
  }
1327
1373
  });
1374
+ server.registerTool("taxonomy_get", {
1375
+ title: "Get Taxonomy Definition",
1376
+ description: "Get a single taxonomy definition by name. Taxonomy definitions describe a classification system (e.g. categories or tags), which collections it applies to, and whether it is hierarchical. Pass `locale` to resolve a specific translation; otherwise the lowest matching locale is returned.",
1377
+ inputSchema: z.object({
1378
+ name: z.string().describe("Taxonomy name (e.g. 'categories', 'tags')"),
1379
+ locale: z.string().optional().describe("Locale to resolve the definition for")
1380
+ }),
1381
+ annotations: { readOnlyHint: true }
1382
+ }, async (args, extra) => {
1383
+ requireScope(extra, "content:read");
1384
+ const ec = getEmDash(extra);
1385
+ try {
1386
+ const { handleTaxonomyGet } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1387
+ return unwrap(await handleTaxonomyGet(ec.db, args.name, { locale: args.locale }));
1388
+ } catch (error) {
1389
+ return respondHandlerError(error, "TAXONOMY_GET_ERROR");
1390
+ }
1391
+ });
1392
+ server.registerTool("taxonomy_create", {
1393
+ title: "Create Taxonomy Definition",
1394
+ description: "Create a new taxonomy definition. Definitions are per-locale; pass `locale` when the same taxonomy name exists in multiple translations. `collections` names which content types the taxonomy applies to. If `translationOf` is set, the new definition joins the source's translation group and inherits `hierarchical` and `collections` from the source when those fields are omitted.",
1395
+ inputSchema: z.object({
1396
+ name: createTaxonomyDefBody.shape.name.describe("Taxonomy name (lowercase letters, numbers, underscores)"),
1397
+ label: createTaxonomyDefBody.shape.label.describe("Display name"),
1398
+ labelSingular: createTaxonomyDefBody.shape.labelSingular.describe("Singular form of the display name"),
1399
+ hierarchical: createTaxonomyDefBody.shape.hierarchical.describe("Whether the taxonomy supports parent/child terms (defaults to false, or inherited from translationOf)"),
1400
+ collections: createTaxonomyDefBody.shape.collections.describe("Collection slugs this taxonomy applies to (defaults to [], or inherited from translationOf)"),
1401
+ locale: z.string().optional().describe("Locale for this definition (e.g. 'fr-fr')"),
1402
+ translationOf: z.string().optional().describe("Existing taxonomy definition id to create this locale variant from")
1403
+ })
1404
+ }, async (args, extra) => {
1405
+ requireScope(extra, "taxonomies:manage");
1406
+ requireRole(extra, Role.EDITOR);
1407
+ const ec = getEmDash(extra);
1408
+ try {
1409
+ const { handleTaxonomyCreate } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1410
+ return unwrap(await handleTaxonomyCreate(ec.db, {
1411
+ name: args.name,
1412
+ label: args.label,
1413
+ labelSingular: args.labelSingular,
1414
+ hierarchical: args.hierarchical,
1415
+ collections: args.collections,
1416
+ locale: args.locale,
1417
+ translationOf: args.translationOf
1418
+ }));
1419
+ } catch (error) {
1420
+ return respondHandlerError(error, "TAXONOMY_CREATE_ERROR");
1421
+ }
1422
+ });
1423
+ server.registerTool("taxonomy_update", {
1424
+ title: "Update Taxonomy Definition",
1425
+ description: "Update an existing taxonomy definition. The taxonomy `name` cannot be changed. Pass `locale` to update a specific translation; otherwise the lowest matching locale is updated. Any field may be omitted to leave it unchanged.",
1426
+ inputSchema: z.object({
1427
+ name: z.string().describe("Taxonomy name to update"),
1428
+ label: updateTaxonomyDefBody.shape.label.describe("New display name"),
1429
+ labelSingular: updateTaxonomyDefBody.shape.labelSingular.describe("New singular display name; pass null to clear"),
1430
+ hierarchical: updateTaxonomyDefBody.shape.hierarchical.describe("Whether the taxonomy supports parent/child terms"),
1431
+ collections: updateTaxonomyDefBody.shape.collections.describe("Collection slugs this taxonomy applies to"),
1432
+ locale: z.string().optional().describe("Locale of the definition to update")
1433
+ })
1434
+ }, async (args, extra) => {
1435
+ requireScope(extra, "taxonomies:manage");
1436
+ requireRole(extra, Role.EDITOR);
1437
+ const ec = getEmDash(extra);
1438
+ try {
1439
+ const { handleTaxonomyUpdate } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1440
+ return unwrap(await handleTaxonomyUpdate(ec.db, args.name, {
1441
+ label: args.label,
1442
+ labelSingular: args.labelSingular,
1443
+ hierarchical: args.hierarchical,
1444
+ collections: args.collections,
1445
+ locale: args.locale
1446
+ }));
1447
+ } catch (error) {
1448
+ return respondHandlerError(error, "TAXONOMY_UPDATE_ERROR");
1449
+ }
1450
+ });
1451
+ server.registerTool("taxonomy_delete", {
1452
+ title: "Delete Taxonomy Definition",
1453
+ description: "Delete a taxonomy definition and all of its terms in every locale, along with any content assignments those terms hold. This cannot be undone.",
1454
+ inputSchema: z.object({ name: z.string().describe("Taxonomy name to delete") }),
1455
+ annotations: { destructiveHint: true }
1456
+ }, async (args, extra) => {
1457
+ requireScope(extra, "taxonomies:manage");
1458
+ requireRole(extra, Role.EDITOR);
1459
+ const ec = getEmDash(extra);
1460
+ try {
1461
+ const { handleTaxonomyDelete } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1462
+ return unwrap(await handleTaxonomyDelete(ec.db, args.name));
1463
+ } catch (error) {
1464
+ return respondHandlerError(error, "TAXONOMY_DELETE_ERROR");
1465
+ }
1466
+ });
1328
1467
  server.registerTool("taxonomy_list_terms", {
1329
1468
  title: "List Taxonomy Terms",
1330
1469
  description: "List terms in a taxonomy with pagination. Terms are individual entries (e.g. specific categories or tags). Hierarchical taxonomies can have parent-child relationships.",
@@ -1339,11 +1478,11 @@ function createMcpServer(pluginTools = [], request) {
1339
1478
  requireScope(extra, "content:read");
1340
1479
  const ec = getEmDash(extra);
1341
1480
  try {
1342
- const { handleTaxonomyList } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1481
+ const { handleTaxonomyList } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1343
1482
  const listResult = await handleTaxonomyList(ec.db, { locale: args.locale });
1344
1483
  if (!listResult.success) return unwrap(listResult);
1345
1484
  if (!listResult.data.taxonomies.find((t) => t.name === args.taxonomy)) return respondError("NOT_FOUND", `Taxonomy '${args.taxonomy}' not found`);
1346
- const { TaxonomyRepository } = await import("../../../taxonomy-8X09dLN5.mjs").then((n) => n.n);
1485
+ const { TaxonomyRepository } = await import("../../../taxonomy-DP1vny4K.mjs").then((n) => n.n);
1347
1486
  const repo = new TaxonomyRepository(ec.db);
1348
1487
  const limit = Math.min(args.limit ?? 50, 100);
1349
1488
  let cursor;
@@ -1404,7 +1543,7 @@ function createMcpServer(pluginTools = [], request) {
1404
1543
  requireRole(extra, Role.EDITOR);
1405
1544
  const ec = getEmDash(extra);
1406
1545
  try {
1407
- const { handleTermCreate } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1546
+ const { handleTermCreate } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1408
1547
  return unwrap(await handleTermCreate(ec.db, args.taxonomy, {
1409
1548
  slug: args.slug,
1410
1549
  label: args.label,
@@ -1433,7 +1572,7 @@ function createMcpServer(pluginTools = [], request) {
1433
1572
  requireRole(extra, Role.EDITOR);
1434
1573
  const ec = getEmDash(extra);
1435
1574
  try {
1436
- const { handleTermUpdate } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1575
+ const { handleTermUpdate } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1437
1576
  return unwrap(await handleTermUpdate(ec.db, args.taxonomy, args.termSlug, {
1438
1577
  slug: args.slug,
1439
1578
  label: args.label,
@@ -1457,7 +1596,7 @@ function createMcpServer(pluginTools = [], request) {
1457
1596
  requireRole(extra, Role.EDITOR);
1458
1597
  const ec = getEmDash(extra);
1459
1598
  try {
1460
- const { handleTermDelete } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1599
+ const { handleTermDelete } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1461
1600
  return unwrap(await handleTermDelete(ec.db, args.taxonomy, args.termSlug));
1462
1601
  } catch (error) {
1463
1602
  return respondHandlerError(error, "TAXONOMY_TERM_DELETE_ERROR");
@@ -1472,7 +1611,7 @@ function createMcpServer(pluginTools = [], request) {
1472
1611
  requireScope(extra, "content:read");
1473
1612
  const ec = getEmDash(extra);
1474
1613
  try {
1475
- const { handleTermTranslations } = await import("../../../taxonomies-CPGxo-bn.mjs").then((n) => n.m);
1614
+ const { handleTermTranslations } = await import("../../../taxonomies-BOdxuZpV.mjs").then((n) => n.m);
1476
1615
  return unwrap(await handleTermTranslations(ec.db, args.id));
1477
1616
  } catch (error) {
1478
1617
  return respondHandlerError(error, "TERM_TRANSLATIONS_ERROR");
@@ -1487,7 +1626,7 @@ function createMcpServer(pluginTools = [], request) {
1487
1626
  requireScope(extra, "content:read");
1488
1627
  const ec = getEmDash(extra);
1489
1628
  try {
1490
- const { handleMenuList } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1629
+ const { handleMenuList } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1491
1630
  return unwrap(await handleMenuList(ec.db, { locale: args.locale }));
1492
1631
  } catch (error) {
1493
1632
  return respondHandlerError(error, "MENU_LIST_ERROR");
@@ -1505,7 +1644,7 @@ function createMcpServer(pluginTools = [], request) {
1505
1644
  requireScope(extra, "content:read");
1506
1645
  const ec = getEmDash(extra);
1507
1646
  try {
1508
- const { handleMenuGet } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1647
+ const { handleMenuGet } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1509
1648
  return unwrap(await handleMenuGet(ec.db, args.name, { locale: args.locale }));
1510
1649
  } catch (error) {
1511
1650
  return respondHandlerError(error, "MENU_GET_ERROR");
@@ -1520,7 +1659,7 @@ function createMcpServer(pluginTools = [], request) {
1520
1659
  requireScope(extra, "content:read");
1521
1660
  const ec = getEmDash(extra);
1522
1661
  try {
1523
- const { handleMenuTranslations } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1662
+ const { handleMenuTranslations } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1524
1663
  return unwrap(await handleMenuTranslations(ec.db, args.id));
1525
1664
  } catch (error) {
1526
1665
  return respondHandlerError(error, "MENU_TRANSLATIONS_ERROR");
@@ -1540,7 +1679,7 @@ function createMcpServer(pluginTools = [], request) {
1540
1679
  requireRole(extra, Role.EDITOR);
1541
1680
  const ec = getEmDash(extra);
1542
1681
  try {
1543
- const { handleMenuCreate } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1682
+ const { handleMenuCreate } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1544
1683
  return unwrap(await handleMenuCreate(ec.db, {
1545
1684
  name: args.name,
1546
1685
  label: args.label,
@@ -1564,7 +1703,7 @@ function createMcpServer(pluginTools = [], request) {
1564
1703
  requireRole(extra, Role.EDITOR);
1565
1704
  const ec = getEmDash(extra);
1566
1705
  try {
1567
- const { handleMenuUpdate } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1706
+ const { handleMenuUpdate } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1568
1707
  return unwrap(await handleMenuUpdate(ec.db, args.name, {
1569
1708
  label: args.label,
1570
1709
  locale: args.locale
@@ -1586,7 +1725,7 @@ function createMcpServer(pluginTools = [], request) {
1586
1725
  requireRole(extra, Role.EDITOR);
1587
1726
  const ec = getEmDash(extra);
1588
1727
  try {
1589
- const { handleMenuDelete } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1728
+ const { handleMenuDelete } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1590
1729
  return unwrap(await handleMenuDelete(ec.db, args.name, { locale: args.locale }));
1591
1730
  } catch (error) {
1592
1731
  return respondHandlerError(error, "MENU_DELETE_ERROR");
@@ -1621,7 +1760,7 @@ function createMcpServer(pluginTools = [], request) {
1621
1760
  requireRole(extra, Role.EDITOR);
1622
1761
  const ec = getEmDash(extra);
1623
1762
  try {
1624
- const { handleMenuSetItems } = await import("../../../menus-CD7EFLwz.mjs").then((n) => n.d);
1763
+ const { handleMenuSetItems } = await import("../../../menus-UdwjHZJC.mjs").then((n) => n.d);
1625
1764
  return unwrap(await handleMenuSetItems(ec.db, args.name, args.items, { locale: args.locale }));
1626
1765
  } catch (error) {
1627
1766
  return respondHandlerError(error, "MENU_SET_ITEMS_ERROR");
@@ -1668,7 +1807,7 @@ function createMcpServer(pluginTools = [], request) {
1668
1807
  requireRole(extra, Role.EDITOR);
1669
1808
  const ec = getEmDash(extra);
1670
1809
  try {
1671
- const { handleSettingsGet } = await import("../../../settings-DjtkUo__.mjs").then((n) => n.r);
1810
+ const { handleSettingsGet } = await import("../../../settings-AnEFYICn.mjs").then((n) => n.r);
1672
1811
  return unwrap(await handleSettingsGet(ec.db, ec.storage));
1673
1812
  } catch (error) {
1674
1813
  return respondHandlerError(error, "SETTINGS_READ_ERROR");
@@ -1682,7 +1821,7 @@ function createMcpServer(pluginTools = [], request) {
1682
1821
  tagline: z.string().optional().describe("Site tagline / short description"),
1683
1822
  logo: settingsMediaReferenceSchema.optional().describe("Logo media reference ({ mediaId, alt? })"),
1684
1823
  favicon: settingsMediaReferenceSchema.optional().describe("Favicon media reference ({ mediaId, alt? })"),
1685
- url: z.union([z.string().url().refine((u) => HTTP_SCHEME_PATTERN.test(u), "URL must use http or https"), z.literal("")]).optional().describe("Canonical site URL (http or https). Empty string clears it."),
1824
+ url: z.union([z.url().refine((u) => HTTP_SCHEME_PATTERN.test(u), "URL must use http or https"), z.literal("")]).optional().describe("Canonical site URL (http or https). Empty string clears it."),
1686
1825
  postsPerPage: z.number().int().min(1).max(100).optional().describe("Default page size for content listings"),
1687
1826
  dateFormat: z.string().optional().describe("Date format token string"),
1688
1827
  timezone: z.string().optional().describe("IANA timezone identifier"),
@@ -1694,7 +1833,7 @@ function createMcpServer(pluginTools = [], request) {
1694
1833
  requireRole(extra, Role.ADMIN);
1695
1834
  const ec = getEmDash(extra);
1696
1835
  try {
1697
- const { handleSettingsUpdate } = await import("../../../settings-DjtkUo__.mjs").then((n) => n.r);
1836
+ const { handleSettingsUpdate } = await import("../../../settings-AnEFYICn.mjs").then((n) => n.r);
1698
1837
  return unwrap(await handleSettingsUpdate(ec.db, ec.storage, args));
1699
1838
  } catch (error) {
1700
1839
  return respondHandlerError(error, "SETTINGS_UPDATE_ERROR");