dineway 0.1.49 → 0.2.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 (418) hide show
  1. package/dist/{activity-events-CwM7yxPW.mjs → activity-events-y6eT8UW6.mjs} +6 -38
  2. package/dist/actor-CrObAPV0.mjs +37 -0
  3. package/dist/after-BfniwgIf.mjs +9 -0
  4. package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
  5. package/dist/api/route-utils.d.mts +10 -10
  6. package/dist/api/route-utils.mjs +16 -13
  7. package/dist/api/schemas/index.d.mts +2 -2
  8. package/dist/api/schemas/index.mjs +5 -4
  9. package/dist/{api-BMIxRIEN.mjs → api-ByrU2q-Z.mjs} +60 -36
  10. package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
  11. package/dist/{apply-D_RlTYtC.mjs → apply-bZswmZPm.mjs} +117 -77
  12. package/dist/astro/image-endpoint.d.mts +7 -0
  13. package/dist/astro/image-endpoint.mjs +54 -0
  14. package/dist/astro/index.d.mts +35 -11
  15. package/dist/astro/index.mjs +157 -23
  16. package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
  17. package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
  18. package/dist/astro/middleware/auth.d.mts +10 -10
  19. package/dist/astro/middleware/auth.mjs +42 -24
  20. package/dist/astro/middleware/redirect.mjs +13 -4
  21. package/dist/astro/middleware/request-context.mjs +8 -5
  22. package/dist/astro/middleware/seed.d.mts +1 -1
  23. package/dist/astro/middleware/seed.mjs +2 -2
  24. package/dist/astro/middleware/setup.mjs +1 -1
  25. package/dist/astro/middleware.mjs +333 -192
  26. package/dist/astro/routes/admin.astro +6 -1
  27. package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
  28. package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
  29. package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
  30. package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
  31. package/dist/astro/routes/api/admin/briefing.mjs +21 -17
  32. package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
  33. package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
  34. package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
  35. package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
  36. package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
  37. package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
  38. package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
  39. package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
  40. package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
  41. package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
  42. package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
  43. package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
  44. package/dist/astro/routes/api/admin/context/_id_/history.mjs +26 -24
  45. package/dist/astro/routes/api/admin/context/_id_/index.mjs +26 -24
  46. package/dist/astro/routes/api/admin/context/_id_/review.mjs +31 -28
  47. package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +31 -28
  48. package/dist/astro/routes/api/admin/context/diff.mjs +30 -27
  49. package/dist/astro/routes/api/admin/context/index.mjs +31 -28
  50. package/dist/astro/routes/api/admin/context/stale.mjs +30 -27
  51. package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -24
  52. package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +30 -27
  53. package/dist/astro/routes/api/admin/hitl-requests/index.mjs +30 -27
  54. package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +27 -25
  55. package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
  56. package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
  57. package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
  58. package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +55 -51
  59. package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -51
  60. package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
  61. package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +53 -49
  62. package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +52 -48
  63. package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
  64. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
  65. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
  66. package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +52 -48
  67. package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
  68. package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
  69. package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
  70. package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +31 -27
  71. package/dist/astro/routes/api/admin/review-requests/index.mjs +10 -9
  72. package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
  73. package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
  74. package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
  75. package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
  76. package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
  77. package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
  78. package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
  79. package/dist/astro/routes/api/admin/users/index.mjs +7 -6
  80. package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
  81. package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
  82. package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
  83. package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
  84. package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
  85. package/dist/astro/routes/api/auth/logout.mjs +2 -2
  86. package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
  87. package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
  88. package/dist/astro/routes/api/auth/me.mjs +9 -8
  89. package/dist/astro/routes/api/auth/mode.mjs +1 -1
  90. package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
  91. package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
  92. package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
  93. package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
  94. package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
  95. package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
  96. package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
  97. package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
  98. package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
  99. package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
  100. package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
  101. package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
  102. package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
  103. package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
  104. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
  105. package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
  106. package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
  107. package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -5
  108. package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
  109. package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
  110. package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
  111. package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +10 -9
  112. package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
  113. package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
  114. package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -9
  115. package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
  116. package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
  117. package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -5
  118. package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -9
  119. package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
  120. package/dist/astro/routes/api/content/_collection_/index.mjs +10 -9
  121. package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
  122. package/dist/astro/routes/api/dashboard.mjs +9 -8
  123. package/dist/astro/routes/api/dev/emails.mjs +2 -2
  124. package/dist/astro/routes/api/health.mjs +1 -1
  125. package/dist/astro/routes/api/import/probe.d.mts +3 -3
  126. package/dist/astro/routes/api/import/probe.mjs +22 -10
  127. package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
  128. package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
  129. package/dist/astro/routes/api/import/wordpress/execute.mjs +84 -37
  130. package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
  131. package/dist/astro/routes/api/import/wordpress/media.mjs +19 -13
  132. package/dist/astro/routes/api/import/wordpress/prepare.mjs +35 -32
  133. package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
  134. package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +120 -100
  135. package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
  136. package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
  137. package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
  138. package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +283 -55
  139. package/dist/astro/routes/api/manifest.mjs +14 -5
  140. package/dist/astro/routes/api/mcp.mjs +265 -69
  141. package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
  142. package/dist/astro/routes/api/media/_id_.mjs +11 -7
  143. package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
  144. package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
  145. package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
  146. package/dist/astro/routes/api/media/providers/index.mjs +2 -2
  147. package/dist/astro/routes/api/media/upload-url.mjs +11 -10
  148. package/dist/astro/routes/api/media.mjs +27 -34
  149. package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +31 -28
  150. package/dist/astro/routes/api/menus/_name_/items.mjs +31 -28
  151. package/dist/astro/routes/api/menus/_name_/reorder.mjs +31 -28
  152. package/dist/astro/routes/api/menus/_name_/translations.mjs +31 -28
  153. package/dist/astro/routes/api/menus/_name_.mjs +31 -28
  154. package/dist/astro/routes/api/menus/index.mjs +31 -28
  155. package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
  156. package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
  157. package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
  158. package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
  159. package/dist/astro/routes/api/oauth/register.mjs +4 -4
  160. package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
  161. package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
  162. package/dist/astro/routes/api/oauth/token.mjs +6 -6
  163. package/dist/astro/routes/api/openapi.json.mjs +4 -3
  164. package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
  165. package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
  166. package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
  167. package/dist/astro/routes/api/redirects/_id_.mjs +32 -29
  168. package/dist/astro/routes/api/redirects/index.mjs +32 -29
  169. package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
  170. package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
  171. package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +47 -43
  172. package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +47 -43
  173. package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +47 -43
  174. package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +47 -43
  175. package/dist/astro/routes/api/schema/collections/index.mjs +47 -43
  176. package/dist/astro/routes/api/schema/index.mjs +13 -14
  177. package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
  178. package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
  179. package/dist/astro/routes/api/search/enable.mjs +11 -10
  180. package/dist/astro/routes/api/search/index.mjs +10 -9
  181. package/dist/astro/routes/api/search/rebuild.mjs +11 -10
  182. package/dist/astro/routes/api/search/stats.mjs +6 -6
  183. package/dist/astro/routes/api/search/suggest.mjs +10 -9
  184. package/dist/astro/routes/api/sections/_slug_.mjs +31 -28
  185. package/dist/astro/routes/api/sections/index.mjs +31 -28
  186. package/dist/astro/routes/api/settings/email.mjs +4 -4
  187. package/dist/astro/routes/api/settings.mjs +31 -28
  188. package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
  189. package/dist/astro/routes/api/setup/admin.mjs +12 -11
  190. package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
  191. package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
  192. package/dist/astro/routes/api/setup/index.mjs +29 -25
  193. package/dist/astro/routes/api/setup/status.mjs +3 -3
  194. package/dist/astro/routes/api/snapshot.mjs +8 -7
  195. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +34 -31
  196. package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +34 -31
  197. package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +34 -31
  198. package/dist/astro/routes/api/taxonomies/index.mjs +34 -31
  199. package/dist/astro/routes/api/themes/preview.mjs +5 -5
  200. package/dist/astro/routes/api/typegen.mjs +4 -4
  201. package/dist/astro/routes/api/well-known/auth.mjs +3 -3
  202. package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
  203. package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
  204. package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +30 -27
  205. package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +31 -28
  206. package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +31 -28
  207. package/dist/astro/routes/api/widget-areas/_name_.mjs +28 -26
  208. package/dist/astro/routes/api/widget-areas/index.mjs +31 -28
  209. package/dist/astro/routes/api/widget-components.mjs +2 -2
  210. package/dist/astro/routes/robots.txt.mjs +8 -7
  211. package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
  212. package/dist/astro/routes/sitemap.xml.mjs +9 -8
  213. package/dist/astro/session-driver.d.mts +1 -1
  214. package/dist/astro/session-driver.mjs +2 -2
  215. package/dist/astro/types.d.mts +21 -13
  216. package/dist/{audit-BeNsSyfU.mjs → audit-ByVKIwWF.mjs} +1 -1
  217. package/dist/auth/providers/github.d.mts +1 -1
  218. package/dist/auth/providers/google.d.mts +1 -1
  219. package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
  220. package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
  221. package/dist/{briefing-DJX6irto.mjs → briefing-BJaJI8dm.mjs} +2 -1
  222. package/dist/{briefing-CkTee1ex.mjs → briefing-CawZ59CY.mjs} +90 -28
  223. package/dist/bundle-7C_DpkEq.mjs +602 -0
  224. package/dist/{byline-BVC1lV6G.mjs → byline-e51-fWRs.mjs} +30 -62
  225. package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-CUvbslGc.d.mts} +80 -37
  226. package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
  227. package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
  228. package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-87nNnYl4.mjs} +2 -2
  229. package/dist/{bylines-LN9XISRo.mjs → bylines-CMQNCNFh.mjs} +9 -3
  230. package/dist/{bylines-DwokOFj6.mjs → bylines-y4LO-dTj.mjs} +5 -5
  231. package/dist/{cache-Bac05gBd.mjs → cache-C-FNTFYK.mjs} +2 -2
  232. package/dist/{chunks-CuUt7K50.mjs → chunks-CxBt-GxR.mjs} +1 -1
  233. package/dist/cli/index.mjs +94 -659
  234. package/dist/client/external-auth-headers.d.mts +1 -1
  235. package/dist/client/index.d.mts +1 -1
  236. package/dist/client/index.mjs +2 -1
  237. package/dist/{comment-Beue8-15.mjs → comment-DlA4iChg.mjs} +13 -3
  238. package/dist/comment-reaction-DfFao1ST.mjs +58 -0
  239. package/dist/{comments-DcjFIfqX.mjs → comments-DApFGMsP.mjs} +1 -1
  240. package/dist/{content-CBxYGWfL.mjs → content-Bh4BDjv8.mjs} +51 -34
  241. package/dist/content-refresh-CgutSUfO.mjs +1576 -0
  242. package/dist/{context-CQVNZaR8.mjs → context-C5W3G18y.mjs} +111 -50
  243. package/dist/{context-Df1xVYyr.mjs → context-CK4ym2Sf.mjs} +2 -2
  244. package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
  245. package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
  246. package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
  247. package/dist/db/index.d.mts +3 -3
  248. package/dist/db/index.mjs +1 -1
  249. package/dist/db/libsql.d.mts +1 -1
  250. package/dist/db/postgres.d.mts +1 -1
  251. package/dist/db/sqlite.d.mts +1 -1
  252. package/dist/{device-flow-BZVGftqi.mjs → device-flow-BnqRH-T9.mjs} +5 -5
  253. package/dist/{placeholder-d54Qr_7n.mjs → enrich-DIFIFA8O.mjs} +36 -9
  254. package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
  255. package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
  256. package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-Crzypjqu.mjs} +1 -1
  257. package/dist/hitl-Hw1RmWOq.mjs +677 -0
  258. package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
  259. package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
  260. package/dist/import-Bh9biJfx.mjs +1354 -0
  261. package/dist/{index-CZiWCQDp.d.mts → index-D4y6NGiy.d.mts} +75 -3
  262. package/dist/index.d.mts +17 -16
  263. package/dist/index.mjs +80 -68
  264. package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
  265. package/dist/{load-D9OiGr2m.mjs → load-DmYeniXl.mjs} +1 -1
  266. package/dist/{loader--GOYux8M.mjs → loader-CjWqjweO.mjs} +117 -31
  267. package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
  268. package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
  269. package/dist/media/image-endpoint.d.mts +32 -0
  270. package/dist/media/image-endpoint.mjs +111 -0
  271. package/dist/media/index.d.mts +27 -2
  272. package/dist/media/index.mjs +5 -3
  273. package/dist/media/local-runtime.d.mts +16 -11
  274. package/dist/media/local-runtime.mjs +9 -7
  275. package/dist/{media-CbKyYukG.mjs → media-DMj0grzC.mjs} +3 -1
  276. package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
  277. package/dist/media-url-lEKSrpr9.mjs +20 -0
  278. package/dist/{menus-BZbXf-ej.mjs → menus-TaW1gKnk.mjs} +19 -5
  279. package/dist/{menus-C7F0sCrC.mjs → menus-xvsnVZXw.mjs} +80 -15
  280. package/dist/{normalize-ByemhhfW.mjs → normalize-5ek_z7de.mjs} +8 -1
  281. package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
  282. package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
  283. package/dist/object-cache/memory.d.mts +14 -0
  284. package/dist/object-cache/memory.mjs +55 -0
  285. package/dist/object-cache-D51qOseS.mjs +419 -0
  286. package/dist/page/index.d.mts +4 -3
  287. package/dist/page/index.mjs +2 -2
  288. package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
  289. package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
  290. package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
  291. package/dist/plugin-utils.d.mts +9 -9
  292. package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
  293. package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
  294. package/dist/{plugins-DzfqRREq.mjs → plugins-BolVa-tl.mjs} +831 -63
  295. package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
  296. package/dist/{preview-C-3YTX2U.mjs → preview-vSVg6fwG.mjs} +4 -3
  297. package/dist/process-cache-7xgAO9JY.mjs +106 -0
  298. package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
  299. package/dist/{public-url-B4xV4rGa.d.mts → public-url-gsp3oUbu.d.mts} +1 -1
  300. package/dist/{query-Ds0EnMFX.mjs → query-CfRCdaL3.mjs} +281 -76
  301. package/dist/{query-CZ3TH_Uu.mjs → query-jaAmw8E1.mjs} +11 -6
  302. package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
  303. package/dist/{redirect-CEACczxo.mjs → redirect-BAjt4Z6b.mjs} +2 -2
  304. package/dist/{redirects-DYj1yPxs.mjs → redirects-BTdwpQtE.mjs} +47 -24
  305. package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
  306. package/dist/{registry-D7HACema.mjs → registry-CtyVedcN.mjs} +130 -77
  307. package/dist/request-context.d.mts +2 -0
  308. package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
  309. package/dist/{review-requests-Qum4713s.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
  310. package/dist/{review-requests-BW2NxY-l.mjs → review-requests-DUyEmtmG.mjs} +1 -1
  311. package/dist/{runner-09sTqtv0.d.mts → runner-1tC2tIRV.d.mts} +1 -1
  312. package/dist/runner-DB7CRfOF.mjs +6740 -0
  313. package/dist/{runtime-C4-2lSFg.d.mts → runtime-BOeiQsCv.d.mts} +1952 -1489
  314. package/dist/runtime.d.mts +10 -10
  315. package/dist/runtime.mjs +3 -3
  316. package/dist/schema-DXdYj4R3.mjs +8 -0
  317. package/dist/{search-Gdrqj582.mjs → search-DSaLgEFI.mjs} +5 -3
  318. package/dist/{secrets-CeGpBFV2.mjs → secrets-CDZo2k8L.mjs} +14 -11
  319. package/dist/{sections-BOjU13Y-.mjs → sections-PVVXHGfp.mjs} +2 -2
  320. package/dist/seed/index.d.mts +2 -2
  321. package/dist/seed/index.mjs +21 -18
  322. package/dist/seo/index.d.mts +1 -1
  323. package/dist/seo/index.mjs +3 -12
  324. package/dist/{seo-CLj8lS7Q.mjs → seo-CQG3GCHQ.mjs} +5 -2
  325. package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
  326. package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
  327. package/dist/{service-jGlhrICs.mjs → service-DiN4ZuPp.mjs} +2 -2
  328. package/dist/session-user-CAKImna3.mjs +22 -0
  329. package/dist/{settings-CUXOxzsT.mjs → settings-BbqgHWpU.mjs} +28 -55
  330. package/dist/{settings-DlBsT2VS.mjs → settings-i4VPP8bT.mjs} +2 -2
  331. package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
  332. package/dist/{site-activity-DONFrMBJ.mjs → site-activity-Dy3FROs0.mjs} +1 -1
  333. package/dist/{site-context-C8Az_P_I.mjs → site-context-DQiL8Fl5.mjs} +23 -652
  334. package/dist/{site-url-DIMD68go.mjs → site-url-BML3GQYm.mjs} +1 -1
  335. package/dist/status-DANd8ERo.mjs +21 -0
  336. package/dist/storage/local.d.mts +1 -1
  337. package/dist/storage/local.mjs +1 -1
  338. package/dist/storage/s3.d.mts +1 -1
  339. package/dist/storage/s3.mjs +1 -1
  340. package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-9s-v03H-.mjs} +36 -29
  341. package/dist/taxonomies-DRiixp_E.mjs +443 -0
  342. package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
  343. package/dist/transport-BNmCqLu7.mjs +134 -0
  344. package/dist/types-4garmdWa.mjs +66 -0
  345. package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
  346. package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
  347. package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
  348. package/dist/types-DF7ZuGGk.d.mts +118 -0
  349. package/dist/types-DU0bU2Wu.d.mts +2392 -0
  350. package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
  351. package/dist/{types-CSgR9nQB.mjs → types-Dq1qT19x.mjs} +1 -1
  352. package/dist/ui/server-runtime.d.mts +15 -15
  353. package/dist/ui/server-runtime.mjs +24 -20
  354. package/dist/url-Cac7a9QZ.mjs +33 -0
  355. package/dist/{user-DTLoZs16.mjs → user-BIZPzCb9.mjs} +2 -2
  356. package/dist/{utils-B8hBJ9Oz.mjs → utils-CMDhr5Xd.mjs} +129 -7
  357. package/dist/{validate-DzjCdy6v.d.mts → validate-CZvb-BKB.d.mts} +10 -7
  358. package/dist/{validate-DWmPO6oj.mjs → validate-DNs0pTSc.mjs} +11 -6
  359. package/dist/version-BTvfRGc6.mjs +6 -0
  360. package/dist/{widgets-BpJ8EpPd.mjs → widgets-f0ibZUIq.mjs} +46 -43
  361. package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
  362. package/dist/{zod-generator-K91-g665.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
  363. package/package.json +30 -8
  364. package/src/components/Block.astro +50 -0
  365. package/src/components/Comments.astro +143 -1
  366. package/src/components/DinewayHead.astro +19 -2
  367. package/src/components/DinewayImage.astro +66 -33
  368. package/src/components/DinewayMedia.astro +1 -2
  369. package/src/components/Image.astro +85 -40
  370. package/src/components/InlinePortableTextEditor.tsx +12 -2
  371. package/src/components/JsonLdScript.astro +9 -0
  372. package/src/components/LiveSearch.astro +40 -4
  373. package/src/components/index.ts +4 -0
  374. package/src/components/live-search-routing.ts +30 -0
  375. package/src/components/portable-text-text-align.ts +15 -0
  376. package/src/ui.ts +2 -0
  377. package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
  378. package/dist/import-4YBXbDkI.mjs +0 -684
  379. package/dist/runner-DzIpHGND.mjs +0 -2836
  380. package/dist/schema-Bsi-VpYv.mjs +0 -8
  381. package/dist/taxonomies-CZ-_DitR.mjs +0 -327
  382. package/dist/types-CuJOqHfM.d.mts +0 -758
  383. package/dist/version-C4gfn0PJ.mjs +0 -6
  384. /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
  385. /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
  386. /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
  387. /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
  388. /package/dist/{context-types-r8oFvyOq.mjs → context-types-DqTo6C79.mjs} +0 -0
  389. /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
  390. /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
  391. /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
  392. /package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
  393. /package/dist/{mime-CbKsKDCB.mjs → mime-CA7Lgovc.mjs} +0 -0
  394. /package/dist/{mode-CZqCF9dZ.mjs → mode-C4CIyjtR.mjs} +0 -0
  395. /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
  396. /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
  397. /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
  398. /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
  399. /package/dist/{patterns-DKAX6oqN.mjs → patterns-BhAvqO0S.mjs} +0 -0
  400. /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
  401. /package/dist/{public-url-B_m9IwdV.mjs → public-url-BEz_sM9n.mjs} +0 -0
  402. /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
  403. /package/dist/{request-cache-ho99schz.mjs → request-cache-D9GQBxMP.mjs} +0 -0
  404. /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
  405. /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
  406. /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
  407. /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
  408. /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
  409. /package/dist/{tokens-SLmgowfd.mjs → tokens-1RK1n6ED.mjs} +0 -0
  410. /package/dist/{transaction-CFLhEOuH.mjs → transaction-C2EOMTJA.mjs} +0 -0
  411. /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
  412. /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
  413. /package/dist/{types-CJ8DkL0q.mjs → types-B3t5cxhU.mjs} +0 -0
  414. /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
  415. /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
  416. /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
  417. /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
  418. /package/dist/{url-w7Mp5qAD.mjs → url-CpyFDFpO.mjs} +0 -0
@@ -1,37 +1,43 @@
1
1
  import "../../../dialect-helpers-fk43GbDb.mjs";
2
2
  import "../../../base64-F8-DUraK.mjs";
3
- import "../../../types-CSgR9nQB.mjs";
4
- import "../../../loader--GOYux8M.mjs";
5
- import "../../../content-CBxYGWfL.mjs";
6
- import "../../../media-CbKyYukG.mjs";
7
- import "../../../options-LsPjZlqD.mjs";
8
- import "../../../site-activity-DONFrMBJ.mjs";
9
- import { t as ReviewRequestRepository } from "../../../review-requests-BW2NxY-l.mjs";
10
- import "../../../entity-aliases-4y93Yjuc.mjs";
11
- import "../../../request-cache-ho99schz.mjs";
12
- import { a as ContextRepository, i as parseSiteBriefingScope, r as formatSiteBriefingText, t as SiteBriefingAssembler } from "../../../briefing-CkTee1ex.mjs";
13
- import { t as SITE_CONTEXT_TYPES } from "../../../context-types-r8oFvyOq.mjs";
14
- import "../../../fts-manager-B5l_qwrA.mjs";
15
- import "../../../registry-D7HACema.mjs";
16
- import "../../../settings-CUXOxzsT.mjs";
17
- import { n as VERSION } from "../../../version-C4gfn0PJ.mjs";
18
- import "../../../query-CZ3TH_Uu.mjs";
19
- import "../../../zod-generator-K91-g665.mjs";
20
- import "../../../schema-Bsi-VpYv.mjs";
21
- import { t as apiError } from "../../../error-DCSuUAZW.mjs";
22
- import { P as settingsUpdateBody, Sn as contentBylineInputSchema, sn as contentSeoInput } from "../../../redirects-ocRJmQHP.mjs";
23
- import "../../../byline-fields-cNrLJVRs.mjs";
3
+ import "../../../types-Dq1qT19x.mjs";
4
+ import "../../../loader-CjWqjweO.mjs";
5
+ import "../../../object-cache-D51qOseS.mjs";
6
+ import "../../../content-Bh4BDjv8.mjs";
7
+ import "../../../media-DMj0grzC.mjs";
8
+ import "../../../options-DQPTH5n0.mjs";
9
+ import "../../../site-activity-Dy3FROs0.mjs";
10
+ import { t as ReviewRequestRepository } from "../../../review-requests-DUyEmtmG.mjs";
11
+ import { a as ASSIGNMENT_STATUSES, i as ASSIGNMENT_PRIORITIES, l as HITL_REQUEST_PRIORITIES, r as ASSIGNMENT_ACTOR_TYPES, t as HitlRequestService, u as HITL_REQUEST_STATUSES } from "../../../hitl-Hw1RmWOq.mjs";
12
+ import "../../../request-cache-D9GQBxMP.mjs";
13
+ import { a as ContextRepository, i as parseSiteBriefingScope, r as formatSiteBriefingText, t as SiteBriefingAssembler } from "../../../briefing-CawZ59CY.mjs";
14
+ import { t as SITE_CONTEXT_TYPES } from "../../../context-types-DqTo6C79.mjs";
15
+ import "../../../content-refresh-CgutSUfO.mjs";
16
+ import "../../../fts-manager-Crzypjqu.mjs";
17
+ import "../../../registry-CtyVedcN.mjs";
18
+ import "../../../settings-BbqgHWpU.mjs";
19
+ import { n as VERSION } from "../../../version-BTvfRGc6.mjs";
20
+ import "../../../query-jaAmw8E1.mjs";
21
+ import "../../../zod-generator-B7TMjyFJ.mjs";
22
+ import "../../../schema-DXdYj4R3.mjs";
23
+ import { t as apiError } from "../../../error-CytFlgcd.mjs";
24
+ import { Cn as contentBylineInputSchema, P as settingsUpdateBody, _n as bylineCreateBody, cn as contentSeoInput, xn as bylineUpdateBody } from "../../../redirects-CA-xylPG.mjs";
25
+ import "../../../byline-fields-DOJO16Gm.mjs";
26
+ import "../../../status-DANd8ERo.mjs";
24
27
  import "../../../api/schemas/index.mjs";
25
- import "../../../utils-B8hBJ9Oz.mjs";
26
- import "../../../search-Gdrqj582.mjs";
27
- import { i as hasScope } from "../../../api-tokens-CYUoFGo7.mjs";
28
- import { C as HITL_REQUEST_STATUSES, E as ASSIGNMENT_STATUSES, S as HITL_REQUEST_PRIORITIES, T as ASSIGNMENT_PRIORITIES, _ as RiskPolicyEvaluator, a as ActorExpertiseService, b as toPublicContextEntry, f as SettingsHitlPayloadBuilder, g as SchemaHitlPayloadBuilder, i as HandoffSnapshotStore, n as HitlRequestService, o as EntityResolver, r as AssignmentService, t as WorkflowHitlCoordinator, v as ReviewPayloadBuilder, w as ASSIGNMENT_ACTOR_TYPES, x as toPublicContextEntryPage, y as toPublicContextDiff } from "../../../site-context-C8Az_P_I.mjs";
29
- import { T as resolveActorIdentity, b as schemaMcpToolSource, d as logSchemaActivity, o as logContentActivity, p as logSiteActivitySafely, r as contentMcpToolSource, t as activityChangedKeys } from "../../../activity-events-CwM7yxPW.mjs";
28
+ import { i as hasScope } from "../../../api-tokens-2r7OWi_I.mjs";
29
+ import { r as registerPluginMcpRegistry, t as createReviewedPluginMcpCommandExecutor } from "../../../mcp-reviewed-executor-TwVbMzG6.mjs";
30
+ import { t as resolveActorIdentity } from "../../../actor-CrObAPV0.mjs";
31
+ import { d as logSchemaActivity, o as logContentActivity, p as logSiteActivitySafely, r as contentMcpToolSource, t as activityChangedKeys, x as schemaMcpToolSource } from "../../../activity-events-y6eT8UW6.mjs";
32
+ import "../../../utils-CMDhr5Xd.mjs";
33
+ import "../../../search-DSaLgEFI.mjs";
34
+ import { n as convertDataForWrite, t as convertDataForRead } from "../../../portable-text-dA_UlJwW.mjs";
35
+ import { _ as ReviewPayloadBuilder, a as EntityResolver, b as toPublicContextEntryPage, d as SettingsHitlPayloadBuilder, g as RiskPolicyEvaluator, h as SchemaHitlPayloadBuilder, i as ActorExpertiseService, n as AssignmentService, r as HandoffSnapshotStore, t as WorkflowHitlCoordinator, v as toPublicContextDiff, y as toPublicContextEntry } from "../../../site-context-DQiL8Fl5.mjs";
30
36
  import { z } from "zod";
31
37
  import { Role, canActOnOwn, hasPermission } from "@dineway-ai/auth";
32
- import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
33
38
  import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
34
39
  import { ErrorCode, McpError } from "@modelcontextprotocol/sdk/types.js";
40
+ import { WebStandardStreamableHTTPServerTransport } from "@modelcontextprotocol/sdk/server/webStandardStreamableHttp.js";
35
41
 
36
42
  //#region src/mcp/server.ts
37
43
  const COLLECTION_SLUG_PATTERN = /^[a-z][a-z0-9_]*$/;
@@ -101,6 +107,28 @@ function getExtra(extra) {
101
107
  function getDineway(extra) {
102
108
  return getExtra(extra).dineway;
103
109
  }
110
+ async function getCollectionFields(dineway, collection) {
111
+ try {
112
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
113
+ return (await new SchemaRegistry(dineway.db).getCollectionWithFields(collection))?.fields ?? null;
114
+ } catch {
115
+ return null;
116
+ }
117
+ }
118
+ async function convertWriteData(dineway, collection, data) {
119
+ const fields = await getCollectionFields(dineway, collection);
120
+ if (!fields) return data;
121
+ return convertDataForWrite(data, fields);
122
+ }
123
+ async function applyReadMarkdown(dineway, collection, items) {
124
+ const fields = await getCollectionFields(dineway, collection);
125
+ if (!fields) return;
126
+ for (const item of items) if (item.data && typeof item.data === "object") item.data = convertDataForRead(item.data, fields, false);
127
+ }
128
+ async function invalidateBylines() {
129
+ const { invalidateBylineCache } = await import("../../../bylines-y4LO-dTj.mjs").then((n) => n.t);
130
+ invalidateBylineCache();
131
+ }
104
132
  function canReadDrafts(extra) {
105
133
  return hasPermission({ role: getExtra(extra).userRole }, "content:read_drafts");
106
134
  }
@@ -240,7 +268,8 @@ function scopeReadableForExpertise(payload, scope) {
240
268
  case "menu": return contentDiffReadableForHandoff(payload);
241
269
  case "collection":
242
270
  case "site": return contentDiffReadableForHandoff(payload) || schemaReadableForHandoff(payload) || pluginsReadableForHandoff(payload);
243
- case "plugin": return pluginsReadableForHandoff(payload);
271
+ case "plugin":
272
+ case "plugin_extension": return pluginsReadableForHandoff(payload);
244
273
  }
245
274
  } catch {
246
275
  return false;
@@ -426,7 +455,7 @@ async function logMcpContentActivity(dineway, locals, collection, entryId, actio
426
455
  function experimentalWorkflowDescription(description) {
427
456
  return "Experimental: this deferred Site Context workflow surface exists on the current branch but is not part of the approved baseline contract. " + description;
428
457
  }
429
- function createMcpServer() {
458
+ function createMcpServer(options = {}) {
430
459
  const server = new McpServer({
431
460
  name: "dineway",
432
461
  version: VERSION
@@ -457,6 +486,7 @@ function createMcpServer() {
457
486
  db: ec.db,
458
487
  storage: ec.storage,
459
488
  configuredPlugins: ec.configuredPlugins,
489
+ sandboxedPluginEntries: ec.sandboxedPluginEntries,
460
490
  marketplaceUrl: ec.config.marketplace,
461
491
  permissions: briefingPermissions(payload)
462
492
  }).assemble({
@@ -1536,21 +1566,30 @@ function createMcpServer() {
1536
1566
  cursor: z.string().optional().describe("Pagination cursor from a previous response"),
1537
1567
  orderBy: z.string().optional().describe("Field to sort by (e.g. 'created_at', 'updated_at')"),
1538
1568
  order: z.enum(["asc", "desc"]).optional().describe("Sort direction (default 'desc')"),
1539
- locale: z.string().optional().describe("Filter by locale (e.g. 'en', 'fr'). Only relevant when i18n is enabled.")
1569
+ locale: z.string().optional().describe("Filter by locale (e.g. 'en', 'fr'). Only relevant when i18n is enabled."),
1570
+ markdown: z.boolean().optional().describe("Return rich text (portableText) fields as Markdown strings instead of Portable Text arrays (default false).")
1540
1571
  }),
1541
1572
  annotations: { readOnlyHint: true }
1542
1573
  }, async (args, extra) => {
1543
1574
  requireScope(extra, "content:read");
1544
1575
  const ec = getDineway(extra);
1545
1576
  const status = canReadDrafts(extra) ? args.status : "published";
1546
- return unwrap(await ec.handleContentList(args.collection, {
1577
+ const result = await ec.handleContentList(args.collection, {
1547
1578
  status,
1548
1579
  limit: args.limit,
1549
1580
  cursor: args.cursor,
1550
1581
  orderBy: args.orderBy,
1551
1582
  order: args.order,
1552
1583
  locale: args.locale
1553
- }));
1584
+ });
1585
+ if (result.success && args.markdown) {
1586
+ const data = result.data;
1587
+ if (data && typeof data === "object" && "items" in data && Array.isArray(data.items)) {
1588
+ const items = data.items.filter((item) => typeof item === "object" && item !== null);
1589
+ await applyReadMarkdown(ec, args.collection, items);
1590
+ }
1591
+ }
1592
+ return unwrap(result);
1554
1593
  });
1555
1594
  server.registerTool("content_get", {
1556
1595
  title: "Get Content",
@@ -1558,28 +1597,32 @@ function createMcpServer() {
1558
1597
  inputSchema: z.object({
1559
1598
  collection: z.string().describe("Collection slug (e.g. 'posts', 'pages')"),
1560
1599
  id: z.string().describe("Content item ID (ULID) or slug"),
1561
- locale: z.string().optional().describe("Locale to scope slug lookup (e.g. 'fr'). Only affects slug resolution; IDs are globally unique.")
1600
+ locale: z.string().optional().describe("Locale to scope slug lookup (e.g. 'fr'). Only affects slug resolution; IDs are globally unique."),
1601
+ markdown: z.boolean().optional().describe("Return rich text (portableText) fields as Markdown strings instead of Portable Text arrays (default false).")
1562
1602
  }),
1563
1603
  annotations: { readOnlyHint: true }
1564
1604
  }, async (args, extra) => {
1565
1605
  requireScope(extra, "content:read");
1566
- const result = await getDineway(extra).handleContentGet(args.collection, args.id, args.locale);
1606
+ const ec = getDineway(extra);
1607
+ const result = await ec.handleContentGet(args.collection, args.id, args.locale);
1567
1608
  if (result.success && !canReadDrafts(extra)) {
1568
1609
  const data = result.data && typeof result.data === "object" ? result.data : {};
1569
1610
  if (!isPublishedRecord("item" in data ? data.item : data)) return errorResult("Content not found");
1570
1611
  }
1612
+ if (result.success && args.markdown && result.data?.item) await applyReadMarkdown(ec, args.collection, [result.data.item]);
1571
1613
  return unwrap(result);
1572
1614
  });
1573
1615
  server.registerTool("content_create", {
1574
1616
  title: "Create Content",
1575
- description: "Create a new content item in a collection. The 'data' object should contain field values matching the collection's schema (use schema_get_collection to check). Rich text fields accept Portable Text JSON arrays. A slug is auto-generated if not provided. Items are created as 'draft' by default — use content_publish to make them live.",
1617
+ description: "Create a new content item in a collection. The 'data' object should contain field values matching the collection's schema (use schema_get_collection to check). For rich text (portableText) fields, pass a Markdown string — converted to Portable Text automatically; prefer this. Pass a Portable Text JSON array only for complex content Markdown can't express. A slug is auto-generated if not provided. Items are created as 'draft' by default — use content_publish to make them live.",
1576
1618
  inputSchema: z.object({
1577
1619
  collection: z.string().describe("Collection slug (e.g. 'posts', 'pages')"),
1578
1620
  data: z.record(z.string(), z.unknown()).describe("Field values as key-value pairs matching the collection schema"),
1579
1621
  slug: z.string().optional().describe("URL slug (auto-generated from title if omitted)"),
1580
1622
  status: z.enum(["draft", "published"]).optional().describe("Initial status (default 'draft'). Requires publish permission."),
1581
1623
  locale: z.string().optional().describe("Locale for this content (e.g. 'fr'). Defaults to default locale."),
1582
- translationOf: z.string().optional().describe("ID of the content item this is a translation of. Links items in the same translation group.")
1624
+ translationOf: z.string().optional().describe("ID of the content item this is a translation of. Links items in the same translation group."),
1625
+ bylines: z.array(contentBylineInputSchema).optional().describe("Bylines to credit. Each entry references an existing byline by id, with an optional roleLabel. The first entry becomes the primary byline.")
1583
1626
  }),
1584
1627
  annotations: { destructiveHint: false }
1585
1628
  }, async (args, extra) => {
@@ -1593,6 +1636,7 @@ function createMcpServer() {
1593
1636
  if (!source.success) return unwrap(source);
1594
1637
  requireOwnership(extra, extractContentAuthorId(source.data), "content:edit_own", "content:edit_any");
1595
1638
  }
1639
+ const data = await convertWriteData(dineway, args.collection, args.data);
1596
1640
  if (args.status === "published") {
1597
1641
  if (!hasPermission({
1598
1642
  id: userId,
@@ -1600,11 +1644,12 @@ function createMcpServer() {
1600
1644
  }, "content:publish_own")) throw new McpError(ErrorCode.InvalidRequest, "Insufficient permissions: publishing requires content:publish_own");
1601
1645
  if (contentPublishReviewRequired(extra)) throw new McpError(ErrorCode.InvalidRequest, "Token-authenticated content creation with immediate publish is review-gated. Create a draft first, submit review_request_submit, resolve it as approved, then call content_publish with review_request_id.");
1602
1646
  const result = await dineway.handleContentCreate(args.collection, {
1603
- data: args.data,
1647
+ data,
1604
1648
  slug: args.slug,
1605
1649
  authorId: userId,
1606
1650
  locale: args.locale,
1607
- translationOf: args.translationOf
1651
+ translationOf: args.translationOf,
1652
+ bylines: args.bylines
1608
1653
  });
1609
1654
  if (!result.success) return unwrap(result);
1610
1655
  const itemId = extractContentId(result.data);
@@ -1622,11 +1667,12 @@ function createMcpServer() {
1622
1667
  return unwrap(result);
1623
1668
  }
1624
1669
  const result = await dineway.handleContentCreate(args.collection, {
1625
- data: args.data,
1670
+ data,
1626
1671
  slug: args.slug,
1627
1672
  authorId: userId,
1628
1673
  locale: args.locale,
1629
- translationOf: args.translationOf
1674
+ translationOf: args.translationOf,
1675
+ bylines: args.bylines
1630
1676
  });
1631
1677
  if (result.success) {
1632
1678
  const itemId = extractContentId(result.data);
@@ -1641,7 +1687,7 @@ function createMcpServer() {
1641
1687
  });
1642
1688
  server.registerTool("content_update", {
1643
1689
  title: "Update Content",
1644
- description: "Update an existing content item. Only include fields you want to change in the 'data' object — unspecified fields are left unchanged. 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 field updates. `publishedAt` requires content:publish_any permission and is useful for content imports.",
1690
+ 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. 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 field updates. `publishedAt` requires content:publish_any permission and is useful for content imports.",
1645
1691
  inputSchema: z.object({
1646
1692
  collection: z.string().describe("Collection slug"),
1647
1693
  id: z.string().describe("Content item ID or slug"),
@@ -1676,12 +1722,13 @@ function createMcpServer() {
1676
1722
  }, "content:publish_any")) return errorResult("[INSUFFICIENT_PERMISSIONS] Setting publishedAt requires content:publish_any permission");
1677
1723
  }
1678
1724
  const hasInlineUpdates = args.data || args.slug || args.seo !== void 0 || args.bylines !== void 0 || args.publishedAt !== void 0;
1725
+ const data = args.data ? await convertWriteData(dineway, args.collection, args.data) : args.data;
1679
1726
  if (args.status === "published") {
1680
1727
  requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
1681
1728
  if (contentPublishReviewRequired(extra) && hasInlineUpdates) throw new McpError(ErrorCode.InvalidRequest, "Token-authenticated publish with inline content changes is review-gated. Save the draft first, submit review_request_submit, resolve it as approved, then publish with review_request_id.");
1682
1729
  if (hasInlineUpdates) {
1683
1730
  const updateResult = await dineway.handleContentUpdate(args.collection, resolvedId, {
1684
- data: args.data,
1731
+ data,
1685
1732
  slug: args.slug,
1686
1733
  authorId: userId,
1687
1734
  locale: args.locale,
@@ -1708,7 +1755,7 @@ function createMcpServer() {
1708
1755
  requireOwnership(extra, ownerId, "content:publish_own", "content:publish_any");
1709
1756
  if (hasInlineUpdates) {
1710
1757
  const updateResult = await dineway.handleContentUpdate(args.collection, resolvedId, {
1711
- data: args.data,
1758
+ data,
1712
1759
  slug: args.slug,
1713
1760
  authorId: userId,
1714
1761
  locale: args.locale,
@@ -1731,7 +1778,7 @@ function createMcpServer() {
1731
1778
  return unwrap(unpublishResult);
1732
1779
  }
1733
1780
  const result = await dineway.handleContentUpdate(args.collection, resolvedId, {
1734
- data: args.data,
1781
+ data,
1735
1782
  slug: args.slug,
1736
1783
  authorId: userId,
1737
1784
  locale: args.locale,
@@ -2018,7 +2065,7 @@ function createMcpServer() {
2018
2065
  requireRole(extra, Role.EDITOR);
2019
2066
  const ec = getDineway(extra);
2020
2067
  try {
2021
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2068
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2022
2069
  return jsonResult({ items: await new SchemaRegistry(ec.db).listCollections() });
2023
2070
  } catch (error) {
2024
2071
  return errorResult(error);
@@ -2034,7 +2081,7 @@ function createMcpServer() {
2034
2081
  requireRole(extra, Role.EDITOR);
2035
2082
  const ec = getDineway(extra);
2036
2083
  try {
2037
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2084
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2038
2085
  const collection = await new SchemaRegistry(ec.db).getCollectionWithFields(args.slug);
2039
2086
  if (!collection) return errorResult(`Collection '${args.slug}' not found`);
2040
2087
  return jsonResult(collection);
@@ -2064,7 +2111,7 @@ function createMcpServer() {
2064
2111
  requireRole(extra, Role.ADMIN);
2065
2112
  const ec = getDineway(extra);
2066
2113
  try {
2067
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2114
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2068
2115
  const collection = await new SchemaRegistry(ec.db).createCollection({
2069
2116
  slug: args.slug,
2070
2117
  label: args.label,
@@ -2128,7 +2175,7 @@ function createMcpServer() {
2128
2175
  request
2129
2176
  });
2130
2177
  }
2131
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2178
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2132
2179
  await new SchemaRegistry(ec.db).deleteCollection(args.slug, { force: args.force });
2133
2180
  ec.invalidateManifest();
2134
2181
  await logSchemaActivity(ec.db, locals, {
@@ -2192,7 +2239,7 @@ function createMcpServer() {
2192
2239
  requireRole(extra, Role.ADMIN);
2193
2240
  const ec = getDineway(extra);
2194
2241
  try {
2195
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2242
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2196
2243
  const field = await new SchemaRegistry(ec.db).createField(args.collection, {
2197
2244
  slug: args.slug,
2198
2245
  label: args.label,
@@ -2261,7 +2308,7 @@ function createMcpServer() {
2261
2308
  request
2262
2309
  });
2263
2310
  }
2264
- const { SchemaRegistry } = await import("../../../schema-Bsi-VpYv.mjs").then((n) => n.t);
2311
+ const { SchemaRegistry } = await import("../../../schema-DXdYj4R3.mjs").then((n) => n.t);
2265
2312
  await new SchemaRegistry(ec.db).deleteField(args.collection, args.fieldSlug);
2266
2313
  ec.invalidateManifest();
2267
2314
  await logSchemaActivity(ec.db, locals, {
@@ -2394,7 +2441,7 @@ function createMcpServer() {
2394
2441
  requireScope(extra, "content:read");
2395
2442
  const ec = getDineway(extra);
2396
2443
  try {
2397
- const { searchWithDb } = await import("../../../search-Gdrqj582.mjs").then((n) => n.t);
2444
+ const { searchWithDb } = await import("../../../search-DSaLgEFI.mjs").then((n) => n.t);
2398
2445
  return jsonResult(await searchWithDb(ec.db, args.query, {
2399
2446
  collections: args.collections,
2400
2447
  locale: args.locale,
@@ -2404,6 +2451,124 @@ function createMcpServer() {
2404
2451
  return errorResult(error);
2405
2452
  }
2406
2453
  });
2454
+ server.registerTool("byline_list", {
2455
+ title: "List Bylines",
2456
+ description: "List bylines (author/contributor credits) with optional filtering and pagination. Bylines are standalone records referenced by content items; use the returned id with content_create/content_update or byline_get. Use the nextCursor value from the response to fetch the next page.",
2457
+ inputSchema: z.object({
2458
+ search: z.string().optional().describe("Filter by display name or slug substring"),
2459
+ isGuest: z.boolean().optional().describe("Filter by guest byline state"),
2460
+ userId: z.string().optional().describe("Filter to the byline linked to a Dineway user ID"),
2461
+ locale: z.string().optional().describe("Filter by locale (omit for all)"),
2462
+ limit: z.number().int().min(1).max(100).optional().describe("Max items (default 50)"),
2463
+ cursor: z.string().min(1).max(2048).optional().describe("Pagination cursor")
2464
+ }),
2465
+ annotations: { readOnlyHint: true }
2466
+ }, async (args, extra) => {
2467
+ requireScope(extra, "content:read");
2468
+ const ec = getDineway(extra);
2469
+ try {
2470
+ const { BylineRepository } = await import("../../../byline-e51-fWRs.mjs").then((n) => n.n);
2471
+ return jsonResult(await new BylineRepository(ec.db).findMany({
2472
+ search: args.search,
2473
+ isGuest: args.isGuest,
2474
+ userId: args.userId,
2475
+ locale: args.locale,
2476
+ limit: args.limit,
2477
+ cursor: args.cursor
2478
+ }));
2479
+ } catch (error) {
2480
+ return errorResult(error);
2481
+ }
2482
+ });
2483
+ server.registerTool("byline_get", {
2484
+ title: "Get Byline",
2485
+ description: "Get a single byline by its ID, including bio, avatar, website, linked user, and any custom fields.",
2486
+ inputSchema: z.object({ id: z.string().describe("Byline ID") }),
2487
+ annotations: { readOnlyHint: true }
2488
+ }, async (args, extra) => {
2489
+ requireScope(extra, "content:read");
2490
+ const ec = getDineway(extra);
2491
+ try {
2492
+ const { BylineRepository } = await import("../../../byline-e51-fWRs.mjs").then((n) => n.n);
2493
+ const byline = await new BylineRepository(ec.db).findById(args.id);
2494
+ if (!byline) return errorResult(`Byline '${args.id}' not found`);
2495
+ return jsonResult(byline);
2496
+ } catch (error) {
2497
+ return errorResult(error);
2498
+ }
2499
+ });
2500
+ server.registerTool("byline_create", {
2501
+ title: "Create Byline",
2502
+ description: "Create a new byline (author/contributor credit). The slug must be unique and contain only lowercase letters, digits, and hyphens. Link the byline to a Dineway user via userId, or leave it as a standalone guest credit. The returned id can then be passed to content_create/content_update bylines.",
2503
+ inputSchema: z.object({ ...bylineCreateBody.shape }),
2504
+ annotations: { destructiveHint: false }
2505
+ }, async (args, extra) => {
2506
+ requireScope(extra, "content:write");
2507
+ requireRole(extra, Role.EDITOR);
2508
+ const ec = getDineway(extra);
2509
+ try {
2510
+ const { handleBylineCreate } = await import("../../../bylines-CMQNCNFh.mjs").then((n) => n.t);
2511
+ const result = await handleBylineCreate(ec.db, args);
2512
+ if (result.success) await invalidateBylines();
2513
+ return unwrap(result);
2514
+ } catch (error) {
2515
+ return errorResult(error);
2516
+ }
2517
+ });
2518
+ server.registerTool("byline_update", {
2519
+ title: "Update Byline",
2520
+ description: "Update an existing byline. Any field can be omitted to leave it unchanged. Renaming the slug must not collide with another byline.",
2521
+ inputSchema: z.object({
2522
+ id: z.string().describe("Byline ID to update"),
2523
+ ...bylineUpdateBody.shape
2524
+ })
2525
+ }, async (args, extra) => {
2526
+ requireScope(extra, "content:write");
2527
+ requireRole(extra, Role.EDITOR);
2528
+ const ec = getDineway(extra);
2529
+ try {
2530
+ const { handleBylineUpdate } = await import("../../../bylines-CMQNCNFh.mjs").then((n) => n.t);
2531
+ const { id, ...input } = args;
2532
+ const result = await handleBylineUpdate(ec.db, id, input);
2533
+ if (result.success) await invalidateBylines();
2534
+ return unwrap(result);
2535
+ } catch (error) {
2536
+ return errorResult(error);
2537
+ }
2538
+ });
2539
+ server.registerTool("byline_delete", {
2540
+ title: "Delete Byline",
2541
+ description: "Permanently delete a byline. Any content crediting this byline loses the association, and it is cleared as a primary byline where set.",
2542
+ inputSchema: z.object({ id: z.string().describe("Byline ID to delete") }),
2543
+ annotations: { destructiveHint: true }
2544
+ }, async (args, extra) => {
2545
+ requireScope(extra, "content:write");
2546
+ requireRole(extra, Role.EDITOR);
2547
+ const ec = getDineway(extra);
2548
+ try {
2549
+ const { BylineRepository } = await import("../../../byline-e51-fWRs.mjs").then((n) => n.n);
2550
+ if (!await new BylineRepository(ec.db).delete(args.id)) return errorResult(`Byline '${args.id}' not found`);
2551
+ await invalidateBylines();
2552
+ return jsonResult({ deleted: args.id });
2553
+ } catch (error) {
2554
+ return errorResult(error);
2555
+ }
2556
+ });
2557
+ server.registerTool("byline_translations", {
2558
+ title: "List Byline Translations",
2559
+ description: "Return every locale variant of a byline, identified via its shared translation group.",
2560
+ inputSchema: z.object({ id: z.string().describe("Byline ID") }),
2561
+ annotations: { readOnlyHint: true }
2562
+ }, async (args, extra) => {
2563
+ requireScope(extra, "content:read");
2564
+ const ec = getDineway(extra);
2565
+ try {
2566
+ const { handleBylineTranslations } = await import("../../../bylines-CMQNCNFh.mjs").then((n) => n.t);
2567
+ return unwrap(await handleBylineTranslations(ec.db, args.id));
2568
+ } catch (error) {
2569
+ return errorResult(error);
2570
+ }
2571
+ });
2407
2572
  server.registerTool("taxonomy_list", {
2408
2573
  title: "List Taxonomies",
2409
2574
  description: "List all taxonomy definitions (e.g. categories, tags). Taxonomies are classification systems applied to content. Each has a name, label, and can be hierarchical (categories) or flat (tags). Optionally filter by locale.",
@@ -2413,7 +2578,7 @@ function createMcpServer() {
2413
2578
  requireScope(extra, "content:read");
2414
2579
  const ec = getDineway(extra);
2415
2580
  try {
2416
- const { handleTaxonomyList } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2581
+ const { handleTaxonomyList } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2417
2582
  return unwrap(await handleTaxonomyList(ec.db, { locale: args.locale }));
2418
2583
  } catch (error) {
2419
2584
  return errorResult(error);
@@ -2433,12 +2598,12 @@ function createMcpServer() {
2433
2598
  requireScope(extra, "content:read");
2434
2599
  const ec = getDineway(extra);
2435
2600
  try {
2436
- const { handleTaxonomyList } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2601
+ const { handleTaxonomyList } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2437
2602
  const listResult = await handleTaxonomyList(ec.db, { locale: args.locale });
2438
2603
  if (!listResult.success) return unwrap(listResult);
2439
2604
  if (!listResult.data.taxonomies.find((t) => t.name === args.taxonomy)) return errorResult(`Taxonomy '${args.taxonomy}' not found`);
2440
- const { TaxonomyRepository } = await import("../../../taxonomy-B169Nm6B.mjs").then((n) => n.n);
2441
- const { decodeCursor, encodeCursor } = await import("../../../types-CSgR9nQB.mjs").then((n) => n.a);
2605
+ const { TaxonomyRepository } = await import("../../../taxonomy-Dvsw6BOs.mjs").then((n) => n.n);
2606
+ const { decodeCursor, encodeCursor } = await import("../../../types-Dq1qT19x.mjs").then((n) => n.a);
2442
2607
  const repo = new TaxonomyRepository(ec.db);
2443
2608
  const limit = Math.min(args.limit ?? 50, 100);
2444
2609
  const terms = await repo.findByName(args.taxonomy, { locale: args.locale });
@@ -2487,7 +2652,7 @@ function createMcpServer() {
2487
2652
  requireRole(extra, Role.EDITOR);
2488
2653
  const ec = getDineway(extra);
2489
2654
  try {
2490
- const { handleTermCreate } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2655
+ const { handleTermCreate } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2491
2656
  return unwrap(await handleTermCreate(ec.db, args.taxonomy, {
2492
2657
  slug: args.slug,
2493
2658
  label: args.label,
@@ -2517,7 +2682,7 @@ function createMcpServer() {
2517
2682
  requireRole(extra, Role.EDITOR);
2518
2683
  const ec = getDineway(extra);
2519
2684
  try {
2520
- const { handleTermUpdate } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2685
+ const { handleTermUpdate } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2521
2686
  return unwrap(await handleTermUpdate(ec.db, args.taxonomy, args.termSlug, {
2522
2687
  slug: args.slug,
2523
2688
  label: args.label,
@@ -2542,7 +2707,7 @@ function createMcpServer() {
2542
2707
  requireRole(extra, Role.EDITOR);
2543
2708
  const ec = getDineway(extra);
2544
2709
  try {
2545
- const { handleTermDelete } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2710
+ const { handleTermDelete } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2546
2711
  return unwrap(await handleTermDelete(ec.db, args.taxonomy, args.termSlug, { locale: args.locale }));
2547
2712
  } catch (error) {
2548
2713
  return errorResult(error);
@@ -2557,7 +2722,7 @@ function createMcpServer() {
2557
2722
  requireScope(extra, "content:read");
2558
2723
  const ec = getDineway(extra);
2559
2724
  try {
2560
- const { handleTermTranslations } = await import("../../../taxonomies-D9Sw4wWM.mjs").then((n) => n.l);
2725
+ const { handleTermTranslations } = await import("../../../taxonomies-9s-v03H-.mjs").then((n) => n.l);
2561
2726
  return unwrap(await handleTermTranslations(ec.db, args.id));
2562
2727
  } catch (error) {
2563
2728
  return errorResult(error);
@@ -2572,7 +2737,7 @@ function createMcpServer() {
2572
2737
  requireScope(extra, "content:read");
2573
2738
  const ec = getDineway(extra);
2574
2739
  try {
2575
- const { handleMenuList } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2740
+ const { handleMenuList } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2576
2741
  return unwrap(await handleMenuList(ec.db, { locale: args.locale }));
2577
2742
  } catch (error) {
2578
2743
  return errorResult(error);
@@ -2590,7 +2755,7 @@ function createMcpServer() {
2590
2755
  requireScope(extra, "content:read");
2591
2756
  const ec = getDineway(extra);
2592
2757
  try {
2593
- const { handleMenuGet } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2758
+ const { handleMenuGet } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2594
2759
  return unwrap(await handleMenuGet(ec.db, args.name, { locale: args.locale }));
2595
2760
  } catch (error) {
2596
2761
  return errorResult(error);
@@ -2605,7 +2770,7 @@ function createMcpServer() {
2605
2770
  requireScope(extra, "content:read");
2606
2771
  const ec = getDineway(extra);
2607
2772
  try {
2608
- const { handleMenuTranslations } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2773
+ const { handleMenuTranslations } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2609
2774
  return unwrap(await handleMenuTranslations(ec.db, args.id));
2610
2775
  } catch (error) {
2611
2776
  return errorResult(error);
@@ -2625,7 +2790,7 @@ function createMcpServer() {
2625
2790
  requireRole(extra, Role.EDITOR);
2626
2791
  const ec = getDineway(extra);
2627
2792
  try {
2628
- const { handleMenuCreate } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2793
+ const { handleMenuCreate } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2629
2794
  return unwrap(await handleMenuCreate(ec.db, {
2630
2795
  name: args.name,
2631
2796
  label: args.label,
@@ -2649,7 +2814,7 @@ function createMcpServer() {
2649
2814
  requireRole(extra, Role.EDITOR);
2650
2815
  const ec = getDineway(extra);
2651
2816
  try {
2652
- const { handleMenuUpdate } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2817
+ const { handleMenuUpdate } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2653
2818
  return unwrap(await handleMenuUpdate(ec.db, args.name, {
2654
2819
  label: args.label,
2655
2820
  locale: args.locale
@@ -2671,7 +2836,7 @@ function createMcpServer() {
2671
2836
  requireRole(extra, Role.EDITOR);
2672
2837
  const ec = getDineway(extra);
2673
2838
  try {
2674
- const { handleMenuDelete } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2839
+ const { handleMenuDelete } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2675
2840
  return unwrap(await handleMenuDelete(ec.db, args.name, { locale: args.locale }));
2676
2841
  } catch (error) {
2677
2842
  return errorResult(error);
@@ -2706,7 +2871,7 @@ function createMcpServer() {
2706
2871
  requireRole(extra, Role.EDITOR);
2707
2872
  const ec = getDineway(extra);
2708
2873
  try {
2709
- const { handleMenuSetItems } = await import("../../../menus-BZbXf-ej.mjs").then((n) => n.d);
2874
+ const { handleMenuSetItems } = await import("../../../menus-TaW1gKnk.mjs").then((n) => n.d);
2710
2875
  return unwrap(await handleMenuSetItems(ec.db, args.name, args.items, { locale: args.locale }));
2711
2876
  } catch (error) {
2712
2877
  return errorResult(error);
@@ -2753,7 +2918,7 @@ function createMcpServer() {
2753
2918
  requireRole(extra, Role.ADMIN);
2754
2919
  const ec = getDineway(extra);
2755
2920
  try {
2756
- const { handleSettingsGet } = await import("../../../settings-DlBsT2VS.mjs").then((n) => n.r);
2921
+ const { handleSettingsGet } = await import("../../../settings-i4VPP8bT.mjs").then((n) => n.r);
2757
2922
  return unwrap(await handleSettingsGet(ec.db, ec.storage));
2758
2923
  } catch (error) {
2759
2924
  return errorResult(error);
@@ -2790,7 +2955,7 @@ function createMcpServer() {
2790
2955
  request
2791
2956
  });
2792
2957
  }
2793
- const { handleSettingsUpdate } = await import("../../../settings-DlBsT2VS.mjs").then((n) => n.r);
2958
+ const { handleSettingsUpdate } = await import("../../../settings-i4VPP8bT.mjs").then((n) => n.r);
2794
2959
  const result = await handleSettingsUpdate(ec.db, ec.storage, settingsInput);
2795
2960
  if (!result.success) return unwrap(result);
2796
2961
  await logSiteActivitySafely(ec.db, locals, {
@@ -2812,8 +2977,36 @@ function createMcpServer() {
2812
2977
  return errorResult(error);
2813
2978
  }
2814
2979
  });
2980
+ if (options.pluginMcpRegistry) registerPluginMcpRegistry(server, options.pluginMcpRegistry, {
2981
+ resolveContext: resolvePluginMcpExecutionContext,
2982
+ authorizeTarget: options.authorizePluginMcpTarget,
2983
+ authorizeSensitiveOutput: options.authorizePluginMcpSensitiveOutput,
2984
+ executeCommand: options.executePluginMcpCommand
2985
+ });
2815
2986
  return server;
2816
2987
  }
2988
+ function resolvePluginMcpExecutionContext(plugin, requestExtra) {
2989
+ if (!isMcpRequestExtra(requestExtra)) throw new Error("Dineway MCP request context is unavailable");
2990
+ const payload = getExtra(requestExtra);
2991
+ const resolvedActor = resolveActorIdentity(actorLocals(payload));
2992
+ return {
2993
+ plugin,
2994
+ actor: {
2995
+ type: resolvedActor.actorType,
2996
+ id: resolvedActor.actorId,
2997
+ userId: payload.userId || null,
2998
+ role: payload.userRole,
2999
+ authMethod: payload.authToken?.type ?? "session",
3000
+ tokenScopes: payload.tokenScopes
3001
+ },
3002
+ db: payload.dineway.db,
3003
+ storage: payload.dineway.storage,
3004
+ http: typeof payload.dineway.getPluginHttpAccess === "function" ? payload.dineway.getPluginHttpAccess(plugin.id) : void 0
3005
+ };
3006
+ }
3007
+ function isMcpRequestExtra(value) {
3008
+ return typeof value === "object" && value !== null;
3009
+ }
2817
3010
 
2818
3011
  //#endregion
2819
3012
  //#region src/astro/routes/api/mcp.ts
@@ -2834,7 +3027,10 @@ const POST = async ({ request, locals }) => {
2834
3027
  const { dineway, user } = locals;
2835
3028
  if (!dineway) return apiError("NOT_CONFIGURED", "Dineway is not initialized", 500);
2836
3029
  if (!user) return apiError("UNAUTHORIZED", "Authentication required", 401);
2837
- const server = createMcpServer();
3030
+ const server = createMcpServer({
3031
+ pluginMcpRegistry: dineway.getPluginMcpRegistry(),
3032
+ executePluginMcpCommand: createReviewedPluginMcpCommandExecutor()
3033
+ });
2838
3034
  try {
2839
3035
  const transport = new WebStandardStreamableHTTPServerTransport({ sessionIdGenerator: void 0 });
2840
3036
  await server.connect(transport);