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.
- package/dist/{activity-events-CwM7yxPW.mjs → activity-events-y6eT8UW6.mjs} +6 -38
- package/dist/actor-CrObAPV0.mjs +37 -0
- package/dist/after-BfniwgIf.mjs +9 -0
- package/dist/{allowed-origins-CyGnbgBd.mjs → allowed-origins-_oeyP6x-.mjs} +1 -1
- package/dist/api/route-utils.d.mts +10 -10
- package/dist/api/route-utils.mjs +16 -13
- package/dist/api/schemas/index.d.mts +2 -2
- package/dist/api/schemas/index.mjs +5 -4
- package/dist/{api-BMIxRIEN.mjs → api-ByrU2q-Z.mjs} +60 -36
- package/dist/{api-tokens-DtvdtIkm.mjs → api-tokens-CjVMQT-X.mjs} +6 -2
- package/dist/{apply-D_RlTYtC.mjs → apply-bZswmZPm.mjs} +117 -77
- package/dist/astro/image-endpoint.d.mts +7 -0
- package/dist/astro/image-endpoint.mjs +54 -0
- package/dist/astro/index.d.mts +35 -11
- package/dist/astro/index.mjs +157 -23
- package/dist/astro/integration/shims/use-sync-external-store-with-selector.js +71 -0
- package/dist/astro/integration/shims/use-sync-external-store.js +1 -0
- package/dist/astro/middleware/auth.d.mts +10 -10
- package/dist/astro/middleware/auth.mjs +42 -24
- package/dist/astro/middleware/redirect.mjs +13 -4
- package/dist/astro/middleware/request-context.mjs +8 -5
- package/dist/astro/middleware/seed.d.mts +1 -1
- package/dist/astro/middleware/seed.mjs +2 -2
- package/dist/astro/middleware/setup.mjs +1 -1
- package/dist/astro/middleware.mjs +333 -192
- package/dist/astro/routes/admin.astro +6 -1
- package/dist/astro/routes/api/admin/allowed-domains/_domain_.mjs +7 -6
- package/dist/astro/routes/api/admin/allowed-domains/index.mjs +7 -6
- package/dist/astro/routes/api/admin/api-tokens/_id_.mjs +4 -4
- package/dist/astro/routes/api/admin/api-tokens/index.mjs +6 -6
- package/dist/astro/routes/api/admin/briefing.mjs +21 -17
- package/dist/astro/routes/api/admin/byline-fields/_slug_/usage.mjs +4 -4
- package/dist/astro/routes/api/admin/byline-fields/_slug_.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/index.mjs +9 -8
- package/dist/astro/routes/api/admin/byline-fields/reorder.mjs +9 -8
- package/dist/astro/routes/api/admin/bylines/_id_/index.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/_id_/translations.mjs +17 -14
- package/dist/astro/routes/api/admin/bylines/index.mjs +17 -14
- package/dist/astro/routes/api/admin/comments/_id_/status.mjs +14 -12
- package/dist/astro/routes/api/admin/comments/_id_.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/bulk.mjs +11 -9
- package/dist/astro/routes/api/admin/comments/counts.mjs +6 -5
- package/dist/astro/routes/api/admin/comments/index.mjs +11 -9
- package/dist/astro/routes/api/admin/context/_id_/history.mjs +26 -24
- package/dist/astro/routes/api/admin/context/_id_/index.mjs +26 -24
- package/dist/astro/routes/api/admin/context/_id_/review.mjs +31 -28
- package/dist/astro/routes/api/admin/context/_id_/supersede.mjs +31 -28
- package/dist/astro/routes/api/admin/context/diff.mjs +30 -27
- package/dist/astro/routes/api/admin/context/index.mjs +31 -28
- package/dist/astro/routes/api/admin/context/stale.mjs +30 -27
- package/dist/astro/routes/api/admin/hitl-requests/_id_/index.mjs +26 -24
- package/dist/astro/routes/api/admin/hitl-requests/_id_/resolve.mjs +30 -27
- package/dist/astro/routes/api/admin/hitl-requests/index.mjs +30 -27
- package/dist/astro/routes/api/admin/hooks/exclusive/_hookName_.mjs +27 -25
- package/dist/astro/routes/api/admin/hooks/exclusive/index.mjs +3 -3
- package/dist/astro/routes/api/admin/oauth-clients/_id_.mjs +6 -6
- package/dist/astro/routes/api/admin/oauth-clients/index.mjs +6 -6
- package/dist/astro/routes/api/admin/plugins/_id_/disable.mjs +55 -51
- package/dist/astro/routes/api/admin/plugins/_id_/enable.mjs +55 -51
- package/dist/astro/routes/api/admin/plugins/_id_/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/_id_/uninstall.mjs +53 -49
- package/dist/astro/routes/api/admin/plugins/_id_/update.mjs +52 -48
- package/dist/astro/routes/api/admin/plugins/index.mjs +47 -43
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/icon.mjs +2 -2
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/marketplace/_id_/install.mjs +52 -48
- package/dist/astro/routes/api/admin/plugins/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/plugins/updates.mjs +46 -42
- package/dist/astro/routes/api/admin/review-requests/_id_/index.mjs +5 -5
- package/dist/astro/routes/api/admin/review-requests/_id_/resolve.mjs +31 -27
- package/dist/astro/routes/api/admin/review-requests/index.mjs +10 -9
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/index.mjs +46 -42
- package/dist/astro/routes/api/admin/themes/marketplace/_id_/thumbnail.mjs +2 -2
- package/dist/astro/routes/api/admin/themes/marketplace/index.mjs +46 -42
- package/dist/astro/routes/api/admin/users/_id_/disable.mjs +3 -3
- package/dist/astro/routes/api/admin/users/_id_/enable.mjs +2 -2
- package/dist/astro/routes/api/admin/users/_id_/index.mjs +8 -7
- package/dist/astro/routes/api/admin/users/_id_/send-recovery.mjs +4 -4
- package/dist/astro/routes/api/admin/users/index.mjs +7 -6
- package/dist/astro/routes/api/auth/dev-bypass.mjs +4 -4
- package/dist/astro/routes/api/auth/invite/accept.mjs +2 -2
- package/dist/astro/routes/api/auth/invite/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/invite/index.mjs +9 -8
- package/dist/astro/routes/api/auth/invite/register-options.mjs +11 -10
- package/dist/astro/routes/api/auth/logout.mjs +2 -2
- package/dist/astro/routes/api/auth/magic-link/send.mjs +11 -10
- package/dist/astro/routes/api/auth/magic-link/verify.mjs +3 -3
- package/dist/astro/routes/api/auth/me.mjs +9 -8
- package/dist/astro/routes/api/auth/mode.mjs +1 -1
- package/dist/astro/routes/api/auth/oauth/_provider_/callback.mjs +3 -3
- package/dist/astro/routes/api/auth/oauth/_provider_.mjs +2 -2
- package/dist/astro/routes/api/auth/passkey/_id_.mjs +6 -5
- package/dist/astro/routes/api/auth/passkey/index.mjs +1 -1
- package/dist/astro/routes/api/auth/passkey/options.mjs +12 -11
- package/dist/astro/routes/api/auth/passkey/register/options.mjs +10 -9
- package/dist/astro/routes/api/auth/passkey/register/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/passkey/verify.mjs +11 -10
- package/dist/astro/routes/api/auth/setup-token/index.mjs +5 -5
- package/dist/astro/routes/api/auth/setup-token/verify.mjs +2 -2
- package/dist/astro/routes/api/auth/signup/complete.mjs +12 -11
- package/dist/astro/routes/api/auth/signup/request.mjs +11 -10
- package/dist/astro/routes/api/auth/signup/verify.mjs +2 -2
- package/dist/astro/routes/api/comments/_collection_/_contentId_/index.mjs +15 -13
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.d.mts +8 -0
- package/dist/astro/routes/api/comments/_collection_/_contentId_/reactions.mjs +160 -0
- package/dist/astro/routes/api/content/_collection_/_id_/compare.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/discard-draft.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/duplicate.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/permanent.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/preview-url.mjs +11 -10
- package/dist/astro/routes/api/content/_collection_/_id_/publish.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/_id_/restore.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_/revisions.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/schedule.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/_id_/terms/_taxonomy_.mjs +16 -14
- package/dist/astro/routes/api/content/_collection_/_id_/translations.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/_id_/unpublish.mjs +5 -5
- package/dist/astro/routes/api/content/_collection_/_id_.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/authors.mjs +2 -2
- package/dist/astro/routes/api/content/_collection_/index.mjs +10 -9
- package/dist/astro/routes/api/content/_collection_/trash.mjs +7 -6
- package/dist/astro/routes/api/dashboard.mjs +9 -8
- package/dist/astro/routes/api/dev/emails.mjs +2 -2
- package/dist/astro/routes/api/health.mjs +1 -1
- package/dist/astro/routes/api/import/probe.d.mts +3 -3
- package/dist/astro/routes/api/import/probe.mjs +22 -10
- package/dist/astro/routes/api/import/wordpress/analyze.mjs +9 -6
- package/dist/astro/routes/api/import/wordpress/execute.d.mts +19 -1
- package/dist/astro/routes/api/import/wordpress/execute.mjs +84 -37
- package/dist/astro/routes/api/import/wordpress/media.d.mts +13 -1
- package/dist/astro/routes/api/import/wordpress/media.mjs +19 -13
- package/dist/astro/routes/api/import/wordpress/prepare.mjs +35 -32
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.d.mts +18 -1
- package/dist/astro/routes/api/import/wordpress/rewrite-urls.mjs +120 -100
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.d.mts +1 -1
- package/dist/astro/routes/api/import/wordpress-plugin/analyze.mjs +24 -12
- package/dist/astro/routes/api/import/wordpress-plugin/execute.d.mts +56 -2
- package/dist/astro/routes/api/import/wordpress-plugin/execute.mjs +283 -55
- package/dist/astro/routes/api/manifest.mjs +14 -5
- package/dist/astro/routes/api/mcp.mjs +265 -69
- package/dist/astro/routes/api/media/_id_/confirm.mjs +38 -10
- package/dist/astro/routes/api/media/_id_.mjs +11 -7
- package/dist/astro/routes/api/media/file/_...key_.mjs +1 -1
- package/dist/astro/routes/api/media/providers/_providerId_/_itemId_.mjs +2 -2
- package/dist/astro/routes/api/media/providers/_providerId_/index.mjs +2 -2
- package/dist/astro/routes/api/media/providers/index.mjs +2 -2
- package/dist/astro/routes/api/media/upload-url.mjs +11 -10
- package/dist/astro/routes/api/media.mjs +27 -34
- package/dist/astro/routes/api/menus/_name_/items/_id_.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/items.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/reorder.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_/translations.mjs +31 -28
- package/dist/astro/routes/api/menus/_name_.mjs +31 -28
- package/dist/astro/routes/api/menus/index.mjs +31 -28
- package/dist/astro/routes/api/oauth/authorize.mjs +7 -7
- package/dist/astro/routes/api/oauth/device/authorize.mjs +6 -6
- package/dist/astro/routes/api/oauth/device/code.mjs +9 -9
- package/dist/astro/routes/api/oauth/device/token.mjs +8 -8
- package/dist/astro/routes/api/oauth/register.mjs +4 -4
- package/dist/astro/routes/api/oauth/token/refresh.mjs +6 -6
- package/dist/astro/routes/api/oauth/token/revoke.mjs +6 -6
- package/dist/astro/routes/api/oauth/token.mjs +6 -6
- package/dist/astro/routes/api/openapi.json.mjs +4 -3
- package/dist/astro/routes/api/plugins/_pluginId_/_...path_.mjs +30 -30
- package/dist/astro/routes/api/redirects/404s/index.mjs +11 -10
- package/dist/astro/routes/api/redirects/404s/summary.mjs +11 -10
- package/dist/astro/routes/api/redirects/_id_.mjs +32 -29
- package/dist/astro/routes/api/redirects/index.mjs +32 -29
- package/dist/astro/routes/api/revisions/_revisionId_/index.mjs +2 -2
- package/dist/astro/routes/api/revisions/_revisionId_/restore.mjs +2 -2
- package/dist/astro/routes/api/schema/collections/_slug_/fields/_fieldSlug_.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/index.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/fields/reorder.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/_slug_/index.mjs +47 -43
- package/dist/astro/routes/api/schema/collections/index.mjs +47 -43
- package/dist/astro/routes/api/schema/index.mjs +13 -14
- package/dist/astro/routes/api/schema/orphans/_slug_.mjs +46 -42
- package/dist/astro/routes/api/schema/orphans/index.mjs +46 -42
- package/dist/astro/routes/api/search/enable.mjs +11 -10
- package/dist/astro/routes/api/search/index.mjs +10 -9
- package/dist/astro/routes/api/search/rebuild.mjs +11 -10
- package/dist/astro/routes/api/search/stats.mjs +6 -6
- package/dist/astro/routes/api/search/suggest.mjs +10 -9
- package/dist/astro/routes/api/sections/_slug_.mjs +31 -28
- package/dist/astro/routes/api/sections/index.mjs +31 -28
- package/dist/astro/routes/api/settings/email.mjs +4 -4
- package/dist/astro/routes/api/settings.mjs +31 -28
- package/dist/astro/routes/api/setup/admin-verify.mjs +14 -13
- package/dist/astro/routes/api/setup/admin.mjs +12 -11
- package/dist/astro/routes/api/setup/dev-bypass.mjs +31 -25
- package/dist/astro/routes/api/setup/dev-reset.mjs +2 -2
- package/dist/astro/routes/api/setup/index.mjs +29 -25
- package/dist/astro/routes/api/setup/status.mjs +3 -3
- package/dist/astro/routes/api/snapshot.mjs +8 -7
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_/translations.mjs +34 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/_slug_.mjs +34 -31
- package/dist/astro/routes/api/taxonomies/_name_/terms/index.mjs +34 -31
- package/dist/astro/routes/api/taxonomies/index.mjs +34 -31
- package/dist/astro/routes/api/themes/preview.mjs +5 -5
- package/dist/astro/routes/api/typegen.mjs +4 -4
- package/dist/astro/routes/api/well-known/auth.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-authorization-server.mjs +3 -3
- package/dist/astro/routes/api/well-known/oauth-protected-resource.mjs +3 -3
- package/dist/astro/routes/api/widget-areas/_name_/reorder.mjs +30 -27
- package/dist/astro/routes/api/widget-areas/_name_/widgets/_id_.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_/widgets.mjs +31 -28
- package/dist/astro/routes/api/widget-areas/_name_.mjs +28 -26
- package/dist/astro/routes/api/widget-areas/index.mjs +31 -28
- package/dist/astro/routes/api/widget-components.mjs +2 -2
- package/dist/astro/routes/robots.txt.mjs +8 -7
- package/dist/astro/routes/sitemap-_collection_.xml.mjs +23 -14
- package/dist/astro/routes/sitemap.xml.mjs +9 -8
- package/dist/astro/session-driver.d.mts +1 -1
- package/dist/astro/session-driver.mjs +2 -2
- package/dist/astro/types.d.mts +21 -13
- package/dist/{audit-BeNsSyfU.mjs → audit-ByVKIwWF.mjs} +1 -1
- package/dist/auth/providers/github.d.mts +1 -1
- package/dist/auth/providers/google.d.mts +1 -1
- package/dist/{auth-control-guard-Dr14I98m.mjs → auth-control-guard-CqeUmQsv.mjs} +1 -1
- package/dist/{authorize-BLO0m7fW.mjs → authorize-CcBxcHtz.mjs} +1 -1
- package/dist/{briefing-DJX6irto.mjs → briefing-BJaJI8dm.mjs} +2 -1
- package/dist/{briefing-CkTee1ex.mjs → briefing-CawZ59CY.mjs} +90 -28
- package/dist/bundle-7C_DpkEq.mjs +602 -0
- package/dist/{byline-BVC1lV6G.mjs → byline-e51-fWRs.mjs} +30 -62
- package/dist/{byline-fields-uJlygdzM.d.mts → byline-fields-CUvbslGc.d.mts} +80 -37
- package/dist/{byline-fields-Cj39WhXC.mjs → byline-fields-D-N5qVIG.mjs} +1 -1
- package/dist/{byline-fields-cNrLJVRs.mjs → byline-fields-DOJO16Gm.mjs} +3 -3
- package/dist/{byline-registry-4v6tXMNX.mjs → byline-registry-87nNnYl4.mjs} +2 -2
- package/dist/{bylines-LN9XISRo.mjs → bylines-CMQNCNFh.mjs} +9 -3
- package/dist/{bylines-DwokOFj6.mjs → bylines-y4LO-dTj.mjs} +5 -5
- package/dist/{cache-Bac05gBd.mjs → cache-C-FNTFYK.mjs} +2 -2
- package/dist/{chunks-CuUt7K50.mjs → chunks-CxBt-GxR.mjs} +1 -1
- package/dist/cli/index.mjs +94 -659
- package/dist/client/external-auth-headers.d.mts +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.mjs +2 -1
- package/dist/{comment-Beue8-15.mjs → comment-DlA4iChg.mjs} +13 -3
- package/dist/comment-reaction-DfFao1ST.mjs +58 -0
- package/dist/{comments-DcjFIfqX.mjs → comments-DApFGMsP.mjs} +1 -1
- package/dist/{content-CBxYGWfL.mjs → content-Bh4BDjv8.mjs} +51 -34
- package/dist/content-refresh-CgutSUfO.mjs +1576 -0
- package/dist/{context-CQVNZaR8.mjs → context-C5W3G18y.mjs} +111 -50
- package/dist/{context-Df1xVYyr.mjs → context-CK4ym2Sf.mjs} +2 -2
- package/dist/{context-route-helpers-B9wj8Rmh.mjs → context-route-helpers-MASyGgWf.mjs} +2 -1
- package/dist/{cron-DxCAU_Sn.mjs → cron-cKcNTix_.mjs} +7 -3
- package/dist/{dashboard-B7ZUNuyF.mjs → dashboard-DQkVT7Ei.mjs} +4 -4
- package/dist/db/index.d.mts +3 -3
- package/dist/db/index.mjs +1 -1
- package/dist/db/libsql.d.mts +1 -1
- package/dist/db/postgres.d.mts +1 -1
- package/dist/db/sqlite.d.mts +1 -1
- package/dist/{device-flow-BZVGftqi.mjs → device-flow-BnqRH-T9.mjs} +5 -5
- package/dist/{placeholder-d54Qr_7n.mjs → enrich-DIFIFA8O.mjs} +36 -9
- package/dist/{error-DCSuUAZW.mjs → error-CytFlgcd.mjs} +5 -0
- package/dist/field-defs-cache-DRNdhBJv.mjs +49 -0
- package/dist/{fts-manager-B5l_qwrA.mjs → fts-manager-Crzypjqu.mjs} +1 -1
- package/dist/hitl-Hw1RmWOq.mjs +677 -0
- package/dist/{hitl-requests-7NlzVeUA.mjs → hitl-requests-B4Vbcmaq.mjs} +2 -2
- package/dist/{hitl-route-helpers-k---_H3-.mjs → hitl-route-helpers-hEVzvP8l.mjs} +5 -4
- package/dist/import-Bh9biJfx.mjs +1354 -0
- package/dist/{index-CZiWCQDp.d.mts → index-D4y6NGiy.d.mts} +75 -3
- package/dist/index.d.mts +17 -16
- package/dist/index.mjs +80 -68
- package/dist/{jsonld-DZ67souc.d.mts → jsonld-Dq0gsnOH.d.mts} +8 -4
- package/dist/{load-D9OiGr2m.mjs → load-DmYeniXl.mjs} +1 -1
- package/dist/{loader--GOYux8M.mjs → loader-CjWqjweO.mjs} +117 -31
- package/dist/{manifest-schema-qh2P7RDX.mjs → manifest-schema-BxVPYMJR.mjs} +34 -1
- package/dist/mcp-reviewed-executor-TwVbMzG6.mjs +555 -0
- package/dist/media/image-endpoint.d.mts +32 -0
- package/dist/media/image-endpoint.mjs +111 -0
- package/dist/media/index.d.mts +27 -2
- package/dist/media/index.mjs +5 -3
- package/dist/media/local-runtime.d.mts +16 -11
- package/dist/media/local-runtime.mjs +9 -7
- package/dist/{media-CbKyYukG.mjs → media-DMj0grzC.mjs} +3 -1
- package/dist/{media-allowlist-BYxJIcTO.mjs → media-allowlist-BlVCSzHx.mjs} +1 -1
- package/dist/media-url-lEKSrpr9.mjs +20 -0
- package/dist/{menus-BZbXf-ej.mjs → menus-TaW1gKnk.mjs} +19 -5
- package/dist/{menus-C7F0sCrC.mjs → menus-xvsnVZXw.mjs} +80 -15
- package/dist/{normalize-ByemhhfW.mjs → normalize-5ek_z7de.mjs} +8 -1
- package/dist/{oauth-authorization-DF-LCsIA.mjs → oauth-authorization-DiaGvRVz.mjs} +5 -5
- package/dist/{oauth-clients-Du-V0fEm.mjs → oauth-clients-Dl9E8dEM.mjs} +2 -2
- package/dist/object-cache/memory.d.mts +14 -0
- package/dist/object-cache/memory.mjs +55 -0
- package/dist/object-cache-D51qOseS.mjs +419 -0
- package/dist/page/index.d.mts +4 -3
- package/dist/page/index.mjs +2 -2
- package/dist/{parse-CneSgl7-.mjs → parse-CbymENaR.mjs} +1 -1
- package/dist/{parser-DxfsARXL.mjs → parser-C1nYd-81.mjs} +151 -9
- package/dist/{placeholder-CXfoCtCd.d.mts → placeholder-uvNRZBX9.d.mts} +12 -4
- package/dist/plugin-utils.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.d.mts +9 -9
- package/dist/plugins/adapt-sandbox-entry.mjs +11 -2
- package/dist/{plugins-DzfqRREq.mjs → plugins-BolVa-tl.mjs} +831 -63
- package/dist/{transport-LSdZVXHF.mjs → portable-text-dA_UlJwW.mjs} +1 -134
- package/dist/{preview-C-3YTX2U.mjs → preview-vSVg6fwG.mjs} +4 -3
- package/dist/process-cache-7xgAO9JY.mjs +106 -0
- package/dist/{provider-loader-9it4vd6L.d.mts → provider-loader-MD8zAbnH.d.mts} +1 -1
- package/dist/{public-url-B4xV4rGa.d.mts → public-url-gsp3oUbu.d.mts} +1 -1
- package/dist/{query-Ds0EnMFX.mjs → query-CfRCdaL3.mjs} +281 -76
- package/dist/{query-CZ3TH_Uu.mjs → query-jaAmw8E1.mjs} +11 -6
- package/dist/{rate-limit-i0G3IAOX.mjs → rate-limit-ZLdyWoZF.mjs} +2 -2
- package/dist/{redirect-CEACczxo.mjs → redirect-BAjt4Z6b.mjs} +2 -2
- package/dist/{redirects-DYj1yPxs.mjs → redirects-BTdwpQtE.mjs} +47 -24
- package/dist/{redirects-ocRJmQHP.mjs → redirects-CA-xylPG.mjs} +19 -11
- package/dist/{registry-D7HACema.mjs → registry-CtyVedcN.mjs} +130 -77
- package/dist/request-context.d.mts +2 -0
- package/dist/{request-meta-DAb6xaP9.mjs → request-meta-CUypToDJ.mjs} +1 -1
- package/dist/{review-requests-Qum4713s.mjs → review-requests-C9Ff11Vq.mjs} +1 -1
- package/dist/{review-requests-BW2NxY-l.mjs → review-requests-DUyEmtmG.mjs} +1 -1
- package/dist/{runner-09sTqtv0.d.mts → runner-1tC2tIRV.d.mts} +1 -1
- package/dist/runner-DB7CRfOF.mjs +6740 -0
- package/dist/{runtime-C4-2lSFg.d.mts → runtime-BOeiQsCv.d.mts} +1952 -1489
- package/dist/runtime.d.mts +10 -10
- package/dist/runtime.mjs +3 -3
- package/dist/schema-DXdYj4R3.mjs +8 -0
- package/dist/{search-Gdrqj582.mjs → search-DSaLgEFI.mjs} +5 -3
- package/dist/{secrets-CeGpBFV2.mjs → secrets-CDZo2k8L.mjs} +14 -11
- package/dist/{sections-BOjU13Y-.mjs → sections-PVVXHGfp.mjs} +2 -2
- package/dist/seed/index.d.mts +2 -2
- package/dist/seed/index.mjs +21 -18
- package/dist/seo/index.d.mts +1 -1
- package/dist/seo/index.mjs +3 -12
- package/dist/{seo-CLj8lS7Q.mjs → seo-CQG3GCHQ.mjs} +5 -2
- package/dist/{seo-contributions-CqVvReEj.mjs → seo-contributions-C1EnikHB.mjs} +11 -3
- package/dist/{seo-5lJOtB5J.mjs → seo-qa7Dn0jK.mjs} +22 -4
- package/dist/{service-jGlhrICs.mjs → service-DiN4ZuPp.mjs} +2 -2
- package/dist/session-user-CAKImna3.mjs +22 -0
- package/dist/{settings-CUXOxzsT.mjs → settings-BbqgHWpU.mjs} +28 -55
- package/dist/{settings-DlBsT2VS.mjs → settings-i4VPP8bT.mjs} +2 -2
- package/dist/{setup-complete-BRrdPYjZ.mjs → setup-complete-B8fl-mjV.mjs} +1 -1
- package/dist/{site-activity-DONFrMBJ.mjs → site-activity-Dy3FROs0.mjs} +1 -1
- package/dist/{site-context-C8Az_P_I.mjs → site-context-DQiL8Fl5.mjs} +23 -652
- package/dist/{site-url-DIMD68go.mjs → site-url-BML3GQYm.mjs} +1 -1
- package/dist/status-DANd8ERo.mjs +21 -0
- package/dist/storage/local.d.mts +1 -1
- package/dist/storage/local.mjs +1 -1
- package/dist/storage/s3.d.mts +1 -1
- package/dist/storage/s3.mjs +1 -1
- package/dist/{taxonomies-D9Sw4wWM.mjs → taxonomies-9s-v03H-.mjs} +36 -29
- package/dist/taxonomies-DRiixp_E.mjs +443 -0
- package/dist/{taxonomy-B169Nm6B.mjs → taxonomy-Dvsw6BOs.mjs} +44 -9
- package/dist/transport-BNmCqLu7.mjs +134 -0
- package/dist/types-4garmdWa.mjs +66 -0
- package/dist/{types-DSPGWjxO.d.mts → types-C8XW6L19.d.mts} +225 -4
- package/dist/{types-GaCtZ1k9.d.mts → types-CDpH6MA4.d.mts} +18 -0
- package/dist/{types-DRIKLmJI.d.mts → types-C_ly5eTp.d.mts} +17 -2
- package/dist/types-DF7ZuGGk.d.mts +118 -0
- package/dist/types-DU0bU2Wu.d.mts +2392 -0
- package/dist/{types-CwawBUTa.d.mts → types-DW_-sFyz.d.mts} +2 -1
- package/dist/{types-CSgR9nQB.mjs → types-Dq1qT19x.mjs} +1 -1
- package/dist/ui/server-runtime.d.mts +15 -15
- package/dist/ui/server-runtime.mjs +24 -20
- package/dist/url-Cac7a9QZ.mjs +33 -0
- package/dist/{user-DTLoZs16.mjs → user-BIZPzCb9.mjs} +2 -2
- package/dist/{utils-B8hBJ9Oz.mjs → utils-CMDhr5Xd.mjs} +129 -7
- package/dist/{validate-DzjCdy6v.d.mts → validate-CZvb-BKB.d.mts} +10 -7
- package/dist/{validate-DWmPO6oj.mjs → validate-DNs0pTSc.mjs} +11 -6
- package/dist/version-BTvfRGc6.mjs +6 -0
- package/dist/{widgets-BpJ8EpPd.mjs → widgets-f0ibZUIq.mjs} +46 -43
- package/dist/{wordpress-slugs-DHNR9LpG.mjs → wordpress-slugs-BhHJX8XE.mjs} +1 -1
- package/dist/{zod-generator-K91-g665.mjs → zod-generator-B7TMjyFJ.mjs} +41 -13
- package/package.json +30 -8
- package/src/components/Block.astro +50 -0
- package/src/components/Comments.astro +143 -1
- package/src/components/DinewayHead.astro +19 -2
- package/src/components/DinewayImage.astro +66 -33
- package/src/components/DinewayMedia.astro +1 -2
- package/src/components/Image.astro +85 -40
- package/src/components/InlinePortableTextEditor.tsx +12 -2
- package/src/components/JsonLdScript.astro +9 -0
- package/src/components/LiveSearch.astro +40 -4
- package/src/components/index.ts +4 -0
- package/src/components/live-search-routing.ts +30 -0
- package/src/components/portable-text-text-align.ts +15 -0
- package/src/ui.ts +2 -0
- package/dist/entity-aliases-4y93Yjuc.mjs +0 -51
- package/dist/import-4YBXbDkI.mjs +0 -684
- package/dist/runner-DzIpHGND.mjs +0 -2836
- package/dist/schema-Bsi-VpYv.mjs +0 -8
- package/dist/taxonomies-CZ-_DitR.mjs +0 -327
- package/dist/types-CuJOqHfM.d.mts +0 -758
- package/dist/version-C4gfn0PJ.mjs +0 -6
- /package/dist/{adapters-OQCImOL7.d.mts → adapters-NVSs4UH7.d.mts} +0 -0
- /package/dist/{api-tokens-CYUoFGo7.mjs → api-tokens-2r7OWi_I.mjs} +0 -0
- /package/dist/{challenge-store-DFxX0_15.mjs → challenge-store-Bjlepa2E.mjs} +0 -0
- /package/dist/{components--pg6zBvu.mjs → components-Bclf98Be.mjs} +0 -0
- /package/dist/{context-types-r8oFvyOq.mjs → context-types-DqTo6C79.mjs} +0 -0
- /package/dist/{default-B6iaLvP7.mjs → default--K40jqm0.mjs} +0 -0
- /package/dist/{email-console-BOVqIYpB.mjs → email-console-ChgKFO8-.mjs} +0 -0
- /package/dist/{escape-BDgouFFY.mjs → escape-Bd4P_xKg.mjs} +0 -0
- /package/dist/{experimental-workflows-CSMffP6q.mjs → experimental-workflows-BMsUnIAw.mjs} +0 -0
- /package/dist/{mime-CbKsKDCB.mjs → mime-CA7Lgovc.mjs} +0 -0
- /package/dist/{mode-CZqCF9dZ.mjs → mode-C4CIyjtR.mjs} +0 -0
- /package/dist/{oauth-state-store-qncPB_IU.mjs → oauth-state-store-CNoXafF7.mjs} +0 -0
- /package/dist/{oauth-user-lookup-BFjWF8wK.mjs → oauth-user-lookup-Ygw4bNyt.mjs} +0 -0
- /package/dist/{options-LsPjZlqD.mjs → options-DQPTH5n0.mjs} +0 -0
- /package/dist/{passkey-config-DzHQK90v.mjs → passkey-config-BUwu8BA3.mjs} +0 -0
- /package/dist/{patterns-DKAX6oqN.mjs → patterns-BhAvqO0S.mjs} +0 -0
- /package/dist/{provider-loader-DzUxejk7.mjs → provider-loader-D0w9dqjm.mjs} +0 -0
- /package/dist/{public-url-B_m9IwdV.mjs → public-url-BEz_sM9n.mjs} +0 -0
- /package/dist/{redirect-BjIBtDWY.mjs → redirect-wphRBv4y.mjs} +0 -0
- /package/dist/{request-cache-ho99schz.mjs → request-cache-D9GQBxMP.mjs} +0 -0
- /package/dist/{resolve-DTuDyYKs.mjs → resolve-Cb6Dbz-C.mjs} +0 -0
- /package/dist/{setup-nonce-pyGfc9hV.mjs → setup-nonce-CoyjILvW.mjs} +0 -0
- /package/dist/{sidecar-client-mJxwayYN.mjs → sidecar-client-C3mqXg4C.mjs} +0 -0
- /package/dist/{slugify-BqebcqBg.mjs → slugify-KSsVD_D3.mjs} +0 -0
- /package/dist/{ssrf-DiKqWd3N.mjs → ssrf-DWe8jwAp.mjs} +0 -0
- /package/dist/{tokens-SLmgowfd.mjs → tokens-1RK1n6ED.mjs} +0 -0
- /package/dist/{transaction-CFLhEOuH.mjs → transaction-C2EOMTJA.mjs} +0 -0
- /package/dist/{transport-BnsNxh2l.d.mts → transport-CcJu3Co8.d.mts} +0 -0
- /package/dist/{trusted-proxy-BgIIcbsN.mjs → trusted-proxy-DTXQ2IMv.mjs} +0 -0
- /package/dist/{types-CJ8DkL0q.mjs → types-B3t5cxhU.mjs} +0 -0
- /package/dist/{types-nP9vGUFq.d.mts → types-C46EvNdc.d.mts} +0 -0
- /package/dist/{types-Cg276-3z.mjs → types-C5CVgwsV.mjs} +0 -0
- /package/dist/{types-DZpT-PnG.d.mts → types-POH8PQZh.d.mts} +0 -0
- /package/dist/{types-Dryvv7LH.d.mts → types-Rc3gQqqw.d.mts} +0 -0
- /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-
|
|
4
|
-
import "../../../loader
|
|
5
|
-
import "../../../
|
|
6
|
-
import "../../../
|
|
7
|
-
import "../../../
|
|
8
|
-
import "../../../
|
|
9
|
-
import
|
|
10
|
-
import "../../../
|
|
11
|
-
import "../../../
|
|
12
|
-
import
|
|
13
|
-
import { t as
|
|
14
|
-
import "../../../
|
|
15
|
-
import "../../../
|
|
16
|
-
import "../../../
|
|
17
|
-
import
|
|
18
|
-
import "../../../
|
|
19
|
-
import "../../../
|
|
20
|
-
import "../../../
|
|
21
|
-
import
|
|
22
|
-
import
|
|
23
|
-
import "../../../
|
|
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 "../../../
|
|
26
|
-
import "../../../
|
|
27
|
-
import {
|
|
28
|
-
import {
|
|
29
|
-
import
|
|
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":
|
|
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
|
-
|
|
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
|
|
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).
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
2441
|
-
const { decodeCursor, encodeCursor } = await import("../../../types-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
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);
|