decocms 4.252.1 → 4.252.2
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/client/assets/{AlertCircle-D4I48y5J.js → AlertCircle-Bnr28fb8.js} +1 -1
- package/dist/client/assets/{AreaChart-BLjpow_n.js → AreaChart-DfUtnrKf.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BPGDKw1r.js → ArrowLeft-DorhM8Ih.js} +1 -1
- package/dist/client/assets/{ArrowUp-CoBseIcU.js → ArrowUp-t8LQN6gd.js} +1 -1
- package/dist/client/assets/{Check-58LInJoO.js → Check-BqDuCigg.js} +1 -1
- package/dist/client/assets/{CheckCircle-DzHHDZDI.js → CheckCircle-Dad5fmcF.js} +1 -1
- package/dist/client/assets/{ChevronDown-BJDiwX8t.js → ChevronDown-ocfswZC4.js} +1 -1
- package/dist/client/assets/{ChevronRight-Dm5CaTh6.js → ChevronRight-C_ZZ-2v-.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-BoA-7ZqV.js → ChevronSelectorVertical-D6-EuKnT.js} +1 -1
- package/dist/client/assets/{ChevronUp-CQiZDW0L.js → ChevronUp-BbXItFRn.js} +1 -1
- package/dist/client/assets/{Copy01-h0cnGtaD.js → Copy01-Cw6Sd5Bg.js} +1 -1
- package/dist/client/assets/{CreditCard01-ClUiBLJo.js → CreditCard01-Cddpk-xz.js} +1 -1
- package/dist/client/assets/{DotsVertical-BHwT0cOZ.js → DotsVertical-v2wiLcXq.js} +1 -1
- package/dist/client/assets/{Download01-_fceW6-t.js → Download01-CB1EIJ2T.js} +1 -1
- package/dist/client/assets/{Eye-2Vp9I1x2.js → Eye-TbKnZZBg.js} +1 -1
- package/dist/client/assets/{FilterLines-DJw8GTMA.js → FilterLines-BBKB0Qiy.js} +1 -1
- package/dist/client/assets/{Globe01-BiutvAMn.js → Globe01-6DKOujmG.js} +1 -1
- package/dist/client/assets/{Globe04-Cfm_wAz0.js → Globe04-C4BB5b53.js} +1 -1
- package/dist/client/assets/{HardDrive-CLzEExre.js → HardDrive-Fxg8ZXxb.js} +1 -1
- package/dist/client/assets/{Key01-DjLQxGNa.js → Key01-BdQOWi37.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DYgjakHv.js → LinkExternal01-qcv9Rx1r.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-cojPUOtX.js → LockUnlocked01-zoea0jQA.js} +1 -1
- package/dist/client/assets/{LogOut01-u2xiMdj2.js → LogOut01-B5pr8nnx.js} +1 -1
- package/dist/client/assets/{Monitor01-BG0hKvly.js → Monitor01-B4E1NKTR.js} +1 -1
- package/dist/client/assets/{Palette-rX_oDI0d.js → Palette-B1DvHXkY.js} +1 -1
- package/dist/client/assets/{Play-CVdLpp7y.js → Play-CJ3hE7Zo.js} +1 -1
- package/dist/client/assets/{Plus-CA2L6mrG.js → Plus-CY75YMMu.js} +1 -1
- package/dist/client/assets/{SearchLg-Ck1zNJx4.js → SearchLg-CK2s3LfY.js} +1 -1
- package/dist/client/assets/{SearchMd-DqKNqOHz.js → SearchMd-C6aJBhGP.js} +1 -1
- package/dist/client/assets/{Settings02-DZoInVyg.js → Settings02-CLu0lzZh.js} +1 -1
- package/dist/client/assets/{Share07-DeYayUvj.js → Share07-BVg_-Cof.js} +1 -1
- package/dist/client/assets/{Shield01-AMVc8Ovo.js → Shield01-Cq5b_uDd.js} +1 -1
- package/dist/client/assets/{Stars01-rn2va4Zv.js → Stars01-D2Au2q3d.js} +1 -1
- package/dist/client/assets/{Stars02-gk072wDK.js → Stars02-CqekDLlY.js} +1 -1
- package/dist/client/assets/{Sun-Bljf8-ds.js → Sun-BAn2BcaF.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BllYzvwW.js → SwitchHorizontal01-D8sTYJWI.js} +1 -1
- package/dist/client/assets/{Tool01-BtnP2CiV.js → Tool01-CGvIbuoW.js} +1 -1
- package/dist/client/assets/{Tool02-1-lrS-_2.js → Tool02-s-S4tqlv.js} +1 -1
- package/dist/client/assets/{Trash01-Cm80BnMx.js → Trash01-Bk8bjODY.js} +1 -1
- package/dist/client/assets/{TrendUp01-UsBs7MTP.js → TrendUp01-yCCqbsc7.js} +1 -1
- package/dist/client/assets/{Upload01-BpApyojA.js → Upload01-Bwfz5CCn.js} +1 -1
- package/dist/client/assets/{User01-BBnxjmrr.js → User01-CP5QYTMP.js} +1 -1
- package/dist/client/assets/{UserSquare-BCNb9sa5.js → UserSquare-BkxKf623.js} +1 -1
- package/dist/client/assets/{Users01-DhOH-9KR.js → Users01-BM5ntfbL.js} +1 -1
- package/dist/client/assets/{Users03-BeP4NL40.js → Users03-CFMD85JG.js} +1 -1
- package/dist/client/assets/{XCircle-Dd_ZbujN.js → XCircle-BwgKoNYK.js} +1 -1
- package/dist/client/assets/{XClose-BvF48htf.js → XClose-B6pO61g8.js} +1 -1
- package/dist/client/assets/{YAxis-p94WAV0q.js → YAxis-s2vLg68w.js} +1 -1
- package/dist/client/assets/{Zap-JJv4umkV.js → Zap-BIeAiik0.js} +1 -1
- package/dist/client/assets/{ZapSquare-BvpKU_Mt.js → ZapSquare-C5qbbFT9.js} +1 -1
- package/dist/client/assets/{access-gate-BMTQUYfz.js → access-gate-BJ4ujkiB.js} +1 -1
- package/dist/client/assets/{agent-icon-Cf3IJ9r0.js → agent-icon-Dfk0QbQB.js} +1 -1
- package/dist/client/assets/{agents-list-BLqli_5K.js → agents-list-qDRjSKhf.js} +1 -1
- package/dist/client/assets/{ai-providers-DzpPhXyu.js → ai-providers-C31nqAMN.js} +1 -1
- package/dist/client/assets/{alert-BI7FCOjj.js → alert-GJxxU-lS.js} +1 -1
- package/dist/client/assets/{alert-dialog-DdMnTrcr.js → alert-dialog-C9GbChGA.js} +1 -1
- package/dist/client/assets/{api-keys-CcBtsUY9.js → api-keys-BdDd8iks.js} +1 -1
- package/dist/client/assets/{app-editor-FXflFKEa.js → app-editor-DOrulgWS.js} +1 -1
- package/dist/client/assets/{auth-DCh12kI5.js → auth-DWc9JFDj.js} +1 -1
- package/dist/client/assets/{auth-catchall-CPINvlmj.js → auth-catchall-D-GZfNTF.js} +1 -1
- package/dist/client/assets/{auth-entry-DQXpTT7Q.js → auth-entry-9Kah2CHG.js} +1 -1
- package/dist/client/assets/{auth-split-layout-9Iit67Ip.js → auth-split-layout-DAHZtzWW.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DkTA6kon.js → authenticate-and-persist-oauth-rQDQjB7-.js} +1 -1
- package/dist/client/assets/{automation-list-row-DaucD5XY.js → automation-list-row-uIjJkDpj.js} +1 -1
- package/dist/client/assets/{automation-runs-BzHttj7h.js → automation-runs-CMA-xEP0.js} +1 -1
- package/dist/client/assets/{automations-BK_uvZ-Y.js → automations-CNIkV3JS.js} +1 -1
- package/dist/client/assets/{avatar-BhT4k0V3.js → avatar-BfvGrczM.js} +1 -1
- package/dist/client/assets/{badge-4ZfvLEBs.js → badge-B8J2tK8d.js} +1 -1
- package/dist/client/assets/{block-document-SHxk_Dih.js → block-document-C2YASfvT.js} +1 -1
- package/dist/client/assets/{buckets-CVEBhXy9.js → buckets-D1czCP0z.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BfXxCxXg.js → bulk-category-panel-T17-QlHh.js} +1 -1
- package/dist/client/assets/{capability-load-error-CuKB4tpd.js → capability-load-error-DJW7lW8U.js} +1 -1
- package/dist/client/assets/{cards-Y42-BwDg.js → cards-C-kuxrX_.js} +1 -1
- package/dist/client/assets/{category-editor-DhBSVlfU.js → category-editor-D-P3VPBo.js} +1 -1
- package/dist/client/assets/{chart-D84gyKeC.js → chart-BKf_aabQ.js} +1 -1
- package/dist/client/assets/{chat-context-DQEBNjDd.js → chat-context-SooOjctr.js} +1 -1
- package/dist/client/assets/{checkbox-Dbd4RPLR.js → checkbox-Dtiz7WxR.js} +1 -1
- package/dist/client/assets/{choose-editor-CaVjbT3s.js → choose-editor-DZi0LtZ_.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DavHs7OZ.js → cli-auth-success-DaDVk56m.js} +1 -1
- package/dist/client/assets/{collection-detail-CPw5695O.js → collection-detail-BwezBBtj.js} +1 -1
- package/dist/client/assets/{collection-display-button-BFZtFR3B.js → collection-display-button-C5c_Iqdn.js} +1 -1
- package/dist/client/assets/{collection-search-5pZKO-Y8.js → collection-search-DhHqhbOG.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CIwM-HGO.js → collection-table-wrapper-BzFa3RCj.js} +1 -1
- package/dist/client/assets/{collection-tabs-Ckd1bD_j.js → collection-tabs-zmA-z62k.js} +1 -1
- package/dist/client/assets/{command-auni77oT.js → command-BDWHV2dt.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-Cx2qLsuE.js → commerce-onboarding-ItMQFHLd.js} +1 -1
- package/dist/client/assets/{connect-DTApB1Nf.js → connect-DzdEtPLV.js} +1 -1
- package/dist/client/assets/{connection-D7uw_s5C.js → connection-Cbfka8FW.js} +1 -1
- package/dist/client/assets/{connection-card-dDDTaGi2.js → connection-card-CgQVICWX.js} +1 -1
- package/dist/client/assets/{connection-detail-DWi_wxA7.js → connection-detail-DfyRuBA2.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BK6Wi9f3.js → connection-form-helpers-Dqf9EtHu.js} +1 -1
- package/dist/client/assets/{connections-CvVfP-Yc.js → connections-BaXoYaGW.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-M_uuXAmw.js → decopilot-sse-pool-C1pyw7xZ.js} +1 -1
- package/dist/client/assets/{dialog-D2liwBSe.js → dialog-w38EyvlH.js} +1 -1
- package/dist/client/assets/{domain-settings-DVoe06A8.js → domain-settings-X3FYgVgS.js} +1 -1
- package/dist/client/assets/{drawer-BjG9iRbF.js → drawer-P9vwZi_t.js} +1 -1
- package/dist/client/assets/{dropdown-menu-C4wpxqbF.js → dropdown-menu-BUklTtam.js} +1 -1
- package/dist/client/assets/{empty-state-Dglbaqe4.js → empty-state-CRk1phZz.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CCFj-QQL.js → extract-connection-data-qXT_UxfF.js} +1 -1
- package/dist/client/assets/{file-explorer-DhzXjUo9.js → file-explorer-bKnPJCVH.js} +1 -1
- package/dist/client/assets/{file-type-icon-CuQcdgOK.js → file-type-icon-DqxDAAqr.js} +1 -1
- package/dist/client/assets/{form-C4JyiLrY.js → form-DHQsxeIU.js} +1 -1
- package/dist/client/assets/{general-CXK_tw3s.js → general-qTVLQ6SU.js} +1 -1
- package/dist/client/assets/{github-repo-picker-bSrJ8QJW.js → github-repo-picker-YXkXtj6c.js} +1 -1
- package/dist/client/assets/{hooks-CiE7WGef.js → hooks-BEKjDxuk.js} +1 -1
- package/dist/client/assets/{index-Bo85Fhee.js → index-9lFSAsvA.js} +3 -3
- package/dist/client/assets/{index-BQryhkTE.js → index-BA4XRKv1.js} +1 -1
- package/dist/client/assets/{index-D-3M9-WQ.js → index-BKBgDwdE.js} +56 -56
- package/dist/client/assets/{index-BFtR7lhv.js → index-BYsJvMtt.js} +1 -1
- package/dist/client/assets/{index-WLZYqRTT.js → index-BkgV9B0X.js} +1 -1
- package/dist/client/assets/{index-Dc6U7TTB.js → index-CdqKBeu4.js} +1 -1
- package/dist/client/assets/{index-CFi3VxAp.js → index-CtNguKBn.js} +1 -1
- package/dist/client/assets/{index-Dg3iK3u8.js → index-DQZZV969.js} +1 -1
- package/dist/client/assets/{index-Cl_4RKGY.js → index-DWY6FWhf.js} +1 -1
- package/dist/client/assets/{index-CLZwOc_D.js → index-WwYyNFyl.js} +1 -1
- package/dist/client/assets/{index-redirect-C6E4HXbz.js → index-redirect-CnU1dJNn.js} +1 -1
- package/dist/client/assets/{infra-billing-Bur4bqfp.js → infra-billing-DC1r6lrM.js} +1 -1
- package/dist/client/assets/{input-727QaP4W.js → input-Hcv0Pv9v.js} +1 -1
- package/dist/client/assets/{integration-icon-CwD7zbrw.js → integration-icon-WBJKqNjQ.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-4666gSFY.js → invite-member-dialog-B6OITE1l.js} +1 -1
- package/dist/client/assets/{label-BAXKk9Ax.js → label-B8EIoJyG.js} +1 -1
- package/dist/client/assets/{layout-eQragVeV.js → layout-BFscYvYI.js} +1 -1
- package/dist/client/assets/{login-CzVUHzBI.js → login-CBY2IReA.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CN29vno5.js → mcp-oauth-DcF0nrgU.js} +1 -1
- package/dist/client/assets/{members-D6IhCAZd.js → members-DQY7fvBZ.js} +1 -1
- package/dist/client/assets/{monaco-editor-V82wiYgv.js → monaco-editor-B3AqrCBG.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-BwDkH4uc.js → monitoring-stats-row-iN58jlsr.js} +1 -1
- package/dist/client/assets/{multi-select-Bg9GQ0Lt.js → multi-select-CT91-ntx.js} +1 -1
- package/dist/client/assets/{oauth-callback-BnCFrFiq.js → oauth-callback-EmZnRYGg.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-BHUPeXUC.js → oauth-callback-ai-provider-_Bih-MYo.js} +1 -1
- package/dist/client/assets/{onboarding-DAocc03x.js → onboarding-CfCGrQ7a.js} +1 -1
- package/dist/client/assets/{org-layout-BYkkFwr-.js → org-layout-T0GIa-kr.js} +1 -1
- package/dist/client/assets/{organization-choice-ChFJPG8z.js → organization-choice-D52ZO3ck.js} +1 -1
- package/dist/client/assets/{orgs-C_Cm9XhB.js → orgs-3NDcTZI4.js} +1 -1
- package/dist/client/assets/{page-seo-form-v_cnLtum.js → page-seo-form-DnFxRt5x.js} +1 -1
- package/dist/client/assets/{popover-ByvD4r3D.js → popover-BhSqbMgj.js} +1 -1
- package/dist/client/assets/{post-editor-DMLBpu__.js → post-editor-DFfQ_T9X.js} +1 -1
- package/dist/client/assets/{primitives-DKvCGD5W.js → primitives-cGQA6lT7.js} +1 -1
- package/dist/client/assets/{profile-b2O-7Ko_.js → profile-BM8w5Slo.js} +1 -1
- package/dist/client/assets/{project-app-view-DRU0PzDV.js → project-app-view-qJiV5TJU.js} +1 -1
- package/dist/client/assets/record-editor-C-NXmm7L.js +1 -0
- package/dist/client/assets/{redirect-editor-BnJMLmJo.js → redirect-editor-C_YEZyVn.js} +1 -1
- package/dist/client/assets/registry-DvCXmRV6.js +2 -0
- package/dist/client/assets/{registry-layout-D0R7xD2f.js → registry-layout-QnMXWbux.js} +1 -1
- package/dist/client/assets/{reports-CyQ708jQ.js → reports-hb9Z4FeR.js} +1 -1
- package/dist/client/assets/{require-capability-CHlmY3oJ.js → require-capability-DvFQMUOk.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CSUU-dF5.js → required-auth-layout-F7wWVAMR.js} +1 -1
- package/dist/client/assets/{reset-password-v1TgCKs1.js → reset-password-B6w8QZ31.js} +1 -1
- package/dist/client/assets/{roles-BINWqeV1.js → roles-_S4G6-sI.js} +1 -1
- package/dist/client/assets/{search-input-Du4odUEN.js → search-input-BOOtoukK.js} +1 -1
- package/dist/client/assets/{secrets-JQvntK7k.js → secrets-CBOGTFkI.js} +1 -1
- package/dist/client/assets/{sections-editor-TJ8-gQQ2.js → sections-editor-C3QsQATF.js} +1 -1
- package/dist/client/assets/{select-CPWLCIT-.js → select-DYwYUVKJ.js} +1 -1
- package/dist/client/assets/{select-model-B2uNSbdb.js → select-model-DbUUGBqA.js} +1 -1
- package/dist/client/assets/{self-tool-result-HHe25oAs.js → self-tool-result-Tlh__-__.js} +1 -1
- package/dist/client/assets/{seo-editor-QNk2FWqG.js → seo-editor-DmSijpcc.js} +1 -1
- package/dist/client/assets/{settings-layout-Tp4LN3Ft.js → settings-layout-Cwp7qczK.js} +1 -1
- package/dist/client/assets/{shell-controls-_5MkeLZz.js → shell-controls-BhMYHOrW.js} +1 -1
- package/dist/client/assets/{shell-layout-C-GokL5r.js → shell-layout-C1DsidQ0.js} +1 -1
- package/dist/client/assets/{spinner-D1IEFhuQ.js → spinner-Dx6Lt4SG.js} +1 -1
- package/dist/client/assets/{sso-DSy-HR79.js → sso-DAOfvciM.js} +1 -1
- package/dist/client/assets/{store-Cz_S74TE.js → store-7MuTtcsq.js} +1 -1
- package/dist/client/assets/store-registry-Dp7o79Um.js +2 -0
- package/dist/client/assets/{switch-CCi9_uoe.js → switch-BBH6I6F1.js} +1 -1
- package/dist/client/assets/{synced-repos-D20Kb5zg.js → synced-repos-DleY9cAi.js} +1 -1
- package/dist/client/assets/{tab-id-5d7l-tQv.js → tab-id-CaxSSrJx.js} +1 -1
- package/dist/client/assets/{table-kZYHaLp5.js → table-DDdpAN0g.js} +1 -1
- package/dist/client/assets/{tabs-CHm4F0qD.js → tabs-Dkw2P3y6.js} +1 -1
- package/dist/client/assets/{task-key-DONV8mn-.js → task-key-C_w6e6uJ.js} +1 -1
- package/dist/client/assets/{tasks-C9XYoc_u.js → tasks-DGM_vNzD.js} +1 -1
- package/dist/client/assets/{textarea-DqOS3b_k.js → textarea-CKs_XbCz.js} +1 -1
- package/dist/client/assets/{toggle-group-D4qNoj6R.js → toggle-group-513ZJMSk.js} +1 -1
- package/dist/client/assets/{toolbar-DoQnMnDp.js → toolbar-tRiEOoHn.js} +1 -1
- package/dist/client/assets/{track-DVDdVaGv.js → track-R7B-SVuw.js} +1 -1
- package/dist/client/assets/{types-CasepMvn.js → types-uSYNRJQ-.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CTYUNVMo.js → use-ai-providers-CcA7ggbg.js} +1 -1
- package/dist/client/assets/{use-api-keys-Cx670uLa.js → use-api-keys-CpXQL--M.js} +1 -1
- package/dist/client/assets/{use-automations-BL4wQu9O.js → use-automations-DDqDhO39.js} +1 -1
- package/dist/client/assets/{use-autosave-jRxO_xRv.js → use-autosave-BLquE0Lp.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DWDrqaJE.js → use-clock-tick-B6LZ11Pu.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-C6bKcprD.js → use-commerce-diagnostic-D6CCOJzQ.js} +1 -1
- package/dist/client/assets/{use-connection-D_jiuxmk.js → use-connection-C4z7SPou.js} +1 -1
- package/dist/client/assets/{use-copy-DPeVlo4I.js → use-copy-DhOEXaja.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CExsWMzw.js → use-create-virtual-mcp-BOLJAU7l.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-C-XNIvxT.js → use-debounced-autosave-2sOwQm10.js} +1 -1
- package/dist/client/assets/{use-debounced-value-u1V4fOQL.js → use-debounced-value-B0Z12s_0.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DLqXcxEq.js → use-decopilot-events-DGkHph0P.js} +1 -1
- package/dist/client/assets/{use-delete-connection-9DJxN8L1.js → use-delete-connection-DmmUdH3P.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BNzTJ-Qm.js → use-deployment-admin-B5Vig0pA.js} +1 -1
- package/dist/client/assets/{use-file-configs-CB7cS1yB.js → use-file-configs-XT6G9GKa.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Ik6Ubh50.js → use-infinite-scroll-DbEyFh_h.js} +1 -1
- package/dist/client/assets/{use-join-requests-DXn8Pnuw.js → use-join-requests-jE25HhuW.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B1GO49Pn.js → use-mcp-client-B04PZCRn.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Calm3sSX.js → use-mcp-tools-458kLPAl.js} +1 -1
- package/dist/client/assets/{use-members-BxlZX_vd.js → use-members-kj_Cgguh.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-Donao3RB.js → use-navigate-to-agent-CmayLl2-.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CokyeBev.js → use-org-auth-client-UyzggsGs.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-Do8piJ-5.js → use-org-repo-syncs-Ma8AzctB.js} +1 -1
- package/dist/client/assets/{use-org-sso-Dk6hqQri.js → use-org-sso-0EoOYdrn.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BQe3dROi.js → use-organization-roles-CNxZqQnf.js} +1 -1
- package/dist/client/assets/{use-organization-settings-KcM-xoUn.js → use-organization-settings-BoyV6PU5.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DwGTmfQV.js → use-registry-connections-DQBoGnfT.js} +1 -1
- package/dist/client/assets/{use-secrets-EYebZwOs.js → use-secrets-BjbKerYf.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CggU_dlN.js → use-section-preview-base-qv3ITHdt.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Cca1_uP4.js → use-status-sounds-CZRs8TrD.js} +1 -1
- package/dist/client/assets/{use-tags-BnSdBJuH.js → use-tags-D2Rv4kt4.js} +1 -1
- package/dist/client/assets/{use-view-mode-DJRK9xJy.js → use-view-mode-DHTi9SYM.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-FOGBLusn.js → use-virtual-mcp-DvJ6vFk5.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BOOyb6y7.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CE3CdFRH.js +1 -0
- package/dist/client/assets/{users-DIW5DXgM.js → users-D--nF3i9.js} +1 -1
- package/dist/client/assets/{variant-calendar-D89TM-0r.js → variant-calendar-BhP4bcuu.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DFlhwqoC.js → view-mode-toggle-B7SiIdAv.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-CD8nJhnG.js +0 -1
- package/dist/client/assets/registry-B58_i3Y6.js +0 -2
- package/dist/client/assets/store-registry-C9A7iyYL.js +0 -2
- package/dist/client/assets/useInfiniteQuery-Cc3o4SlW.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CRg54Q60.js +0 -1
package/dist/client/index.html
CHANGED
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
<meta name="twitter:description" content="Hire specialized agents, give them access to your tools, and let them deliver real projects — with planning, verification, and observability built in." />
|
|
51
51
|
<meta name="twitter:image" content="/og-image.png" />
|
|
52
52
|
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
53
|
-
<script type="module" crossorigin src="/assets/index-
|
|
53
|
+
<script type="module" crossorigin src="/assets/index-9lFSAsvA.js"></script>
|
|
54
54
|
<link rel="stylesheet" crossorigin href="/assets/index-DZ9B9lIh.css">
|
|
55
55
|
</head>
|
|
56
56
|
<body>
|
package/dist/server/cli.js
CHANGED
|
@@ -1384,7 +1384,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var Ci1=L(()=>{zf()});f
|
|
|
1384
1384
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${J}/${K}, keeping in old table`);continue}}await tb`
|
|
1385
1385
|
DELETE FROM kysely_migration WHERE name = ${X}
|
|
1386
1386
|
`.execute($)}}async function ro1($){await Et6($),await jt6($);let Z=new to1({db:$,provider:{getMigrations:()=>Promise.resolve(ci0)}}),{error:X,results:Q}=await Z.migrateToLatest(),Y=0;if(Q?.forEach((G)=>{if(G.status==="Success")Y++;else if(G.status==="Error")console.error(`Failed to execute migration "${G.migrationName}"`)}),X)throw console.error("Failed to migrate"),console.error(X),X;return Y}async function zt6($){let{keepOpen:Z=!1,database:X,skipBetterAuth:Q=!1}=$??{},Y="skipped";if(!Q&&!X)Y=await Hl0();let G=X??K6(),J=async()=>{if(!Z&&!X)await cB(G).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await ro1(G.db);return await J(),{betterAuth:Y,kysely:K}}catch(K){throw await J(),K}}async function Pt6(){let $=K6(),Z=new to1({db:$.db,provider:{getMigrations:()=>Promise.resolve(ci0)}}),{error:X,results:Q}=await Z.migrateDown();if(Q?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),X)throw console.error("Failed to rollback migration"),console.error(X),X}var so1=L(()=>{po1();Fl0();YX()});async function xZ0($){let Z={...process.env},X=I80($,Z);console.log(Nw1(X.settings.encryptionKey));let Q=X.settings.betterAuthSecret||(X.settings.localMode?Kp1(X.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (l90(),c90)),{outputs:G,services:J}=await Y({home:X.settings.dataDir,externalDatabaseUrl:X.externalDatabaseUrl,externalNatsUrl:X.externalNatsUrl});if(!X.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Fl0(),Hp1));await W(G.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (YX(),qn1)),{migrateToLatest:F}=await Promise.resolve().then(() => (so1(),ao1)),N=H(G.databaseUrl);await F({keepOpen:!0,database:N,skipBetterAuth:!0})}let K={...X.settings,betterAuthSecret:Q,databaseUrl:G.databaseUrl,natsUrls:G.natsUrls,...G.s3?{s3Endpoint:G.s3.endpoint,s3Bucket:G.s3.bucket,s3AccessKeyId:G.s3.accessKeyId,s3SecretAccessKey:G.s3.secretAccessKey,s3ForcePathStyle:G.s3.forcePathStyle}:{},...G.natsTunnel?{natsPublicUrl:G.natsTunnel.publicUrl,natsAccountJwt:G.natsTunnel.accountJwt,natsAccountSigningKey:G.natsTunnel.accountSigningKey,natsOperatorJwt:G.natsTunnel.operatorJwt,natsTunnelPublicEnabled:!0,natsCredsPath:G.natsTunnel.credsPath}:{}};return _i1(K),{settings:K,services:J.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:J.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var li0=L(()=>{zf();Wp1();_8()});var Zr1={};U0(Zr1,{updateService:()=>TE,subscribeCliState:()=>ii0,setTuiConsoleIntercepted:()=>fZ0,setServerUrl:()=>gi,setMigrationsDone:()=>yi,setDevMode:()=>Rt6,resetCliStateForTests:()=>At6,isTuiConsoleIntercepted:()=>bZ0,getCliState:()=>mi0,addLogEntry:()=>nB});function eo1(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function At6(){nQ=eo1()}function Tt6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function bi(){for(let $ of di0)$()}function mi0(){return nQ}function ii0($){return di0.add($),()=>di0.delete($)}function TE($){nQ={...nQ,services:nQ.services.map((Z)=>Z.name===$.name?$:Z)},bi()}function yi(){nQ={...nQ,migrationsStatus:"done"},bi()}function gi($){nQ={...nQ,serverUrl:$},bi()}function nB($){let Z=[...nQ.logs,$];nQ={...nQ,logs:Z.length>500?Z.slice(-500):Z},bi()}function Rt6(){nQ={...nQ,services:[...Tt6(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},bi()}function fZ0($){$r1=$}function bZ0(){return $r1}var nQ,di0,$r1=!1;var RE=L(()=>{nQ=eo1();di0=new Set});import{createServer as Xr1}from"net";function It6($){return new Promise((Z)=>{let X=Xr1();X.once("error",()=>Z(!1)),X.listen($,"0.0.0.0",()=>{X.close(()=>Z(!0))})})}async function hi($){if(await It6($))return $;let Z=await new Promise((X,Q)=>{let Y=Xr1();Y.once("error",Q),Y.listen(0,"0.0.0.0",()=>{let G=Y.address(),J=typeof G==="object"&&G?G.port:0;Y.close(()=>X(J))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var ni0=()=>{};function ui($){return $.replace(/\x1b\[[0-9;]*m/g,"")}var pi0={};U0(pi0,{startDevServer:()=>Mt6});import{join as qt6}from"path";function Qr1($){let Z=$.getReader(),X=new TextDecoder,Q="";function Y(){let G=Q.split(`
|
|
1387
|
-
`);Q=G.pop()??"";for(let J of G){let K=ui(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=ui(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Mt6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await hi(Number(Y)+1):await hi(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await xZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)TE({name:w.name,status:"ready",port:w.port});yi();let F=qt6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Qr1(U.stdout),Qr1(U.stderr);gi(G),TE({name:"Vite",status:"ready",port:Number(Y)}),TE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (l90(),c90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var ti0=L(()=>{li0();RE();ni0()});var yZ0;var oi0=L(()=>{yZ0={name:"decocms",version:"4.252.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as kt6,Text as Yr1}from"ink";import{jsx as St6,jsxs as Gr1}from"react/jsx-runtime";function Jr1({version:$}){return Gr1(kt6,{flexDirection:"column",marginTop:1,children:[NZ0.map((Z,X)=>St6(Yr1,{color:UZ0[X],children:Z},X)),Gr1(Yr1,{dimColor:!0,children:[" v",$]})]})}var Kr1=L(()=>{Ii()});import{Box as IE,Text as pB}from"ink";import{Spinner as Ct6}from"@inkjs/ui";import{jsx as eY,jsxs as ob}from"react/jsx-runtime";function Wr1({status:$}){if($==="pending")return eY(Ct6,{label:""});return eY(pB,{color:"green",children:"\u2713"})}function _t6($){return`${$.name}: ${$.port||"...."}`}function Hr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return ob(IE,{flexDirection:"column",paddingBottom:1,children:[eY(Jr1,{version:yZ0.version}),eY(IE,{marginBottom:1,children:eY(pB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(IE,{children:ob(pB,{dimColor:!0,children:["Home: ",X]})}),ob(IE,{gap:2,children:[$.map((Y)=>ob(IE,{gap:1,children:[eY(pB,{children:_t6(Y)}),eY(Wr1,{status:Y.status})]},Y.name)),ob(IE,{gap:1,children:[eY(pB,{children:"Migrations"}),eY(Wr1,{status:Z})]})]}),eY(IE,{children:Q?ob(pB,{children:["Open in browser: ",eY(pB,{color:"cyan",children:Q})]}):eY(pB,{dimColor:!0,children:"Starting..."})})]})}var Fr1=L(()=>{oi0();Kr1()});import{Box as vt6,Text as ci}from"ink";import{jsx as ri0,jsxs as ai0}from"react/jsx-runtime";function xt6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Nr1({logs:$}){return ri0(vt6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return ri0(ci,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ai0(ci,{children:[ai0(ci,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ri0(ci,{color:xt6(Z.status),children:Z.status}),ai0(ci,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Ur1=()=>{};var si0={};U0(si0,{App:()=>yt6});import{Box as ft6}from"ink";import{useSyncExternalStore as bt6}from"react";import{jsx as Br1,jsxs as gt6}from"react/jsx-runtime";function yt6({home:$}){let Z=bt6(ii0,mi0);return gt6(ft6,{flexDirection:"column",children:[Br1(Hr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Br1(Nr1,{logs:Z.logs})]})}var ei0=L(()=>{Fr1();Ur1();RE()});var gJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",U3="automations",tB="background-tools",qE="task-board-github-reads",ME="jira-push";var Or1="7";function Lr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Or1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wr1=()=>{};function ht6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function $n0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Dr1(){let $=ht6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:$n0($,"--cpu-prof-dir")??process.cwd(),name:$n0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number($n0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Er1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=jE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),gZ0=setInterval(()=>void Z().catch(()=>{}),$),gZ0.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(gZ0)clearInterval(gZ0)}}var gZ0;var jr1=()=>{};import*as ut6 from"bun:jsc";function zr1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{ct6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=lt6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var ct6,lt6;var Pr1=L(()=>{({startSamplingProfiler:ct6,samplingProfilerStackTraces:lt6}=ut6)});function Ar1(){Dr1();let $=[Er1(),En1(),zr1()];return()=>{for(let Z of $)Z()}}var Tr1=L(()=>{ec0();jr1();Pr1()});var VE=_((Rr1)=>{Object.defineProperty(Rr1,"__esModule",{value:!0});Rr1.RepublishHeaders=Rr1.DirectMsgHeaders=Rr1.JsHeaders=Rr1.AdvisoryKind=void 0;Rr1.isOrderedPushConsumerOptions=dt6;Rr1.isPullConsumer=mt6;Rr1.isPushConsumer=it6;Rr1.isBoundPushConsumerOptions=nt6;function dt6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function mt6($){return $.isPullConsumer()}function it6($){return $.isPushConsumer()}function nt6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Rr1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Rr1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Rr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Rr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=_((qr1)=>{Object.defineProperty(qr1,"__esModule",{value:!0});qr1.TD=qr1.TE=qr1.Empty=void 0;qr1.encode=Zo6;qr1.decode=Xo6;qr1.Empty=new Uint8Array(0);qr1.TE=new TextEncoder;qr1.TD=new TextDecoder;function $o6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Zo6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(qr1.TE.encode($[X]));if(Z.length===0)return qr1.Empty;if(Z.length===1)return Z[0];return $o6(...Z)}function Xo6($){if(!$||$.length===0)return"";return qr1.TD.decode($)}});var ZG=_((kr1)=>{Object.defineProperty(kr1,"__esModule",{value:!0});kr1.errors=kr1.PermissionViolationError=kr1.NoRespondersError=kr1.TimeoutError=kr1.RequestError=kr1.ProtocolError=kr1.ConnectionError=kr1.DrainingConnectionError=kr1.ClosedConnectionError=kr1.AuthorizationError=kr1.UserAuthenticationExpiredError=kr1.InvalidOperationError=kr1.InvalidArgumentError=kr1.InvalidSubjectError=void 0;class Xn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}kr1.InvalidSubjectError=Xn0;class hZ0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new hZ0(`${$} ${Z}`,X)}}kr1.InvalidArgumentError=hZ0;class Qn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}kr1.InvalidOperationError=Qn0;class uZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new uZ0($);return null}}kr1.UserAuthenticationExpiredError=uZ0;class cZ0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new cZ0($);return null}}kr1.AuthorizationError=cZ0;class Yn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}kr1.ClosedConnectionError=Yn0;class Gn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}kr1.DrainingConnectionError=Gn0;class Jn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}kr1.ConnectionError=Jn0;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}kr1.ProtocolError=Kn0;class Wn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lZ0}}kr1.RequestError=Wn0;class Hn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}kr1.TimeoutError=Hn0;class lZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}kr1.NoRespondersError=lZ0;class dZ0 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new dZ0($,X,Q,Y)}}kr1.PermissionViolationError=dZ0;kr1.errors={AuthorizationError:cZ0,ClosedConnectionError:Yn0,ConnectionError:Jn0,DrainingConnectionError:Gn0,InvalidArgumentError:hZ0,InvalidOperationError:Qn0,InvalidSubjectError:Xn0,NoRespondersError:lZ0,PermissionViolationError:dZ0,ProtocolError:Kn0,RequestError:Wn0,TimeoutError:Hn0,UserAuthenticationExpiredError:uZ0}});var hJ=_((xr1)=>{Object.defineProperty(xr1,"__esModule",{value:!0});xr1.SimpleMutex=xr1.Perf=void 0;xr1.extend=jo6;xr1.render=zo6;xr1.timeout=Po6;xr1.delay=Ao6;xr1.deadline=To6;xr1.deferred=Nn0;xr1.debugDeferred=Ro6;xr1.shuffle=Io6;xr1.collect=qo6;xr1.jitter=vr1;xr1.backoff=Mo6;xr1.nanos=Vo6;xr1.millis=ko6;xr1.randomToken=_o6;var Eo6=$G(),Fn0=ZG();function jo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function zo6($){return Eo6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Po6($,Z=!0){let X=Z?new Fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function Ao6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function To6($,Z=1000){let X=Nn0(),Q=setTimeout(()=>{X.reject(new Fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Nn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Ro6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function Io6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function qo6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Cr1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}xr1.Perf=Cr1;class _r1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Nn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}xr1.SimpleMutex=_r1;function vr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function Mo6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return vr1(X>Z?$[Z]:$[X])}}}function Vo6($){return $*1e6}function ko6($){return Math.floor($/1e6)}var So6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=So6.charCodeAt($);var Co6=218340105584896;function _o6(){let $=Math.floor(Math.random()*Co6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var lr1=_((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.nuid=ur1.NuidImpl=void 0;var to6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oB=62,iZ0=12,gr1=10,br1=33,oo6=333,yr1=iZ0+gr1,Bn0=new Uint8Array(oB);for(let $=0;$<oB;$++)Bn0[$]=to6.charCodeAt($);var mZ0=4294967296,hr1=BigInt(oB)**BigInt(gr1),li=Number(hr1/(1n<<32n)),Un0=Number(hr1%(1n<<32n));function ro6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function ao6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else ro6($)}class On0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(yr1),this.cbuf=new Uint8Array(iZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(li+1)),this.seqLo=Math.floor(Math.random()*mZ0);while($++<8&&this.seqHi===li&&this.seqLo>=Un0);if(this.seqHi===li&&this.seqLo>=Un0)this.seqLo=0;this.inc=Math.random()*(oo6-br1)+br1|0}setPre(){ao6(this.cbuf);for(let $=0;$<iZ0;$++)this.buf[$]=Bn0[this.cbuf[$]%oB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=yr1-1;X>=iZ0;X--){let Q=Math.floor($/oB),G=($-Q*oB)*mZ0+Z,J=Math.floor(G/oB),K=G-J*oB;this.buf[X]=Bn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=mZ0)this.seqLo-=mZ0,this.seqHi+=1;if(this.seqHi>li||this.seqHi===li&&this.seqLo>=Un0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}ur1.NuidImpl=On0;ur1.nuid=new On0});var nr1=_((mr1)=>{Object.defineProperty(mr1,"__esModule",{value:!0});mr1.nuid=mr1.Nuid=void 0;var dr1=lr1();mr1.Nuid=dr1.NuidImpl;mr1.nuid=dr1.nuid});var pZ0=_((nZ0)=>{Object.defineProperty(nZ0,"__esModule",{value:!0});nZ0.nuid=nZ0.Nuid=void 0;var pr1=nr1();Object.defineProperty(nZ0,"Nuid",{enumerable:!0,get:function(){return pr1.Nuid}});Object.defineProperty(nZ0,"nuid",{enumerable:!0,get:function(){return pr1.nuid}})});var rB=_((tr1)=>{Object.defineProperty(tr1,"__esModule",{value:!0});tr1.DEFAULT_HOST=tr1.DEFAULT_PORT=tr1.Match=void 0;tr1.syncIterator=Qr6;tr1.createInbox=Yr6;var Zr6=pZ0(),Xr6=ZG();tr1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Qr6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Yr6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Xr6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Zr6.nuid.next()}`}tr1.DEFAULT_PORT=4222;tr1.DEFAULT_HOST="127.0.0.1"});var di=_((sr1)=>{Object.defineProperty(sr1,"__esModule",{value:!0});sr1.DataBuffer=void 0;var rr1=$G();class ar1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return rr1.TE.encode($)}static toAscii($){return rr1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}sr1.DataBuffer=ar1});var kE=_((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.LF=Za1.CR=Za1.CRLF=Za1.CR_LF_LEN=Za1.CR_LF=void 0;Za1.setTransportFactory=Ur6;Za1.defaultPort=Br6;Za1.getUrlParseFn=Or6;Za1.newTransport=Lr6;Za1.getResolveFn=wr6;Za1.protoLen=$a1;Za1.extractProtocolMessage=Dr6;var Hr6=$G(),Fr6=rB(),Nr6=di(),XG;function Ur6($){XG=$}function Br6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Fr6.DEFAULT_PORT}function Or6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function Lr6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function wr6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Za1.CR_LF=`\r
|
|
1387
|
+
`);Q=G.pop()??"";for(let J of G){let K=ui(J).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{for(;;){let{done:G,value:J}=await Z.read();if(G)break;Q+=X.decode(J,{stream:!0}),Y()}if(Q.trim()){let G=ui(Q).replace(/^\[\d+\]\s*/,"").trim();if(G)nB({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:G})}})()}async function Mt6($){let{baseUrl:Z,noTui:X}=$,Q=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=Q?process.env.PORT:$.vitePort,G=Z||`http://localhost:${Y}`,J=Q?await hi(Number(Y)+1):await hi(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await xZ0({port:String(J),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let w of W)TE({name:w.name,status:"ready",port:w.port});yi();let F=qt6(import.meta.dir,"..","..","..","..",".."),N=X===!0,U=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:G,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsPublicUrl&&K.natsAccountJwt&&K.natsAccountSigningKey?{NATS_PUBLIC_URL:K.natsPublicUrl,NATS_ACCOUNT_JWT:K.natsAccountJwt,NATS_ACCOUNT_SIGNING_KEY:K.natsAccountSigningKey,NATS_OPERATOR_JWT:K.natsOperatorJwt??"",NATS_TUNNEL_PUBLIC_ENABLED:"true",...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}}:{}},stdio:["inherit",N?"inherit":"pipe",N?"inherit":"pipe"]});if(!N)Qr1(U.stdout),Qr1(U.stderr);gi(G),TE({name:"Vite",status:"ready",port:Number(Y)}),TE({name:"API",status:"ready",port:Number(K.port)});let O=async(w)=>{if(U.kill(w),await U.exited,H.length>0){let{stopServices:D}=await Promise.resolve().then(() => (l90(),c90));await D(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:U}}var ti0=L(()=>{li0();RE();ni0()});var yZ0;var oi0=L(()=>{yZ0={name:"decocms",version:"4.252.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as kt6,Text as Yr1}from"ink";import{jsx as St6,jsxs as Gr1}from"react/jsx-runtime";function Jr1({version:$}){return Gr1(kt6,{flexDirection:"column",marginTop:1,children:[NZ0.map((Z,X)=>St6(Yr1,{color:UZ0[X],children:Z},X)),Gr1(Yr1,{dimColor:!0,children:[" v",$]})]})}var Kr1=L(()=>{Ii()});import{Box as IE,Text as pB}from"ink";import{Spinner as Ct6}from"@inkjs/ui";import{jsx as eY,jsxs as ob}from"react/jsx-runtime";function Wr1({status:$}){if($==="pending")return eY(Ct6,{label:""});return eY(pB,{color:"green",children:"\u2713"})}function _t6($){return`${$.name}: ${$.port||"...."}`}function Hr1({services:$,migrationsStatus:Z,home:X,serverUrl:Q}){return ob(IE,{flexDirection:"column",paddingBottom:1,children:[eY(Jr1,{version:yZ0.version}),eY(IE,{marginBottom:1,children:eY(pB,{dimColor:!0,children:"\u2500".repeat(80)})}),eY(IE,{children:ob(pB,{dimColor:!0,children:["Home: ",X]})}),ob(IE,{gap:2,children:[$.map((Y)=>ob(IE,{gap:1,children:[eY(pB,{children:_t6(Y)}),eY(Wr1,{status:Y.status})]},Y.name)),ob(IE,{gap:1,children:[eY(pB,{children:"Migrations"}),eY(Wr1,{status:Z})]})]}),eY(IE,{children:Q?ob(pB,{children:["Open in browser: ",eY(pB,{color:"cyan",children:Q})]}):eY(pB,{dimColor:!0,children:"Starting..."})})]})}var Fr1=L(()=>{oi0();Kr1()});import{Box as vt6,Text as ci}from"ink";import{jsx as ri0,jsxs as ai0}from"react/jsx-runtime";function xt6($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function Nr1({logs:$}){return ri0(vt6,{flexDirection:"column",children:$.map((Z,X)=>{if(Z.rawLine)return ri0(ci,{dimColor:!0,children:Z.rawLine},X);let Q=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return ai0(ci,{children:[ai0(ci,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),ri0(ci,{color:xt6(Z.status),children:Z.status}),ai0(ci,{dimColor:!0,children:[" ",Q.padStart(8)]})]},X)})})}var Ur1=()=>{};var si0={};U0(si0,{App:()=>yt6});import{Box as ft6}from"ink";import{useSyncExternalStore as bt6}from"react";import{jsx as Br1,jsxs as gt6}from"react/jsx-runtime";function yt6({home:$}){let Z=bt6(ii0,mi0);return gt6(ft6,{flexDirection:"column",children:[Br1(Hr1,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Br1(Nr1,{logs:Z.logs})]})}var ei0=L(()=>{Fr1();Ur1();RE()});var gJ="thread-gate",$N="decopilot-hosted-harness",ZN="decopilot-hosted-harness-sandboxed",U3="automations",tB="background-tools",qE="task-board-github-reads",ME="jira-push";var Or1="7";function Lr1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:Or1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var wr1=()=>{};function ht6(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function $n0($,Z){for(let X=0;X<$.length;X++){let Q=$[X];if(Q===void 0)continue;if(Q===Z)return $[X+1];if(Q.startsWith(`${Z}=`))return Q.slice(Z.length+1)}return}function Dr1(){let $=ht6();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:$n0($,"--cpu-prof-dir")??process.cwd(),name:$n0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number($n0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}function Er1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=jE();if(!X)return;let Q={};try{let{heapStats:Y}=await import("bun:jsc"),G=Y(),J=Object.entries(G.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);Q={objectCount:G.objectCount,heapSize:G.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...Q}))};return Z().catch(()=>{}),gZ0=setInterval(()=>void Z().catch(()=>{}),$),gZ0.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),Q=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,Q),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(gZ0)clearInterval(gZ0)}}var gZ0;var jr1=()=>{};import*as ut6 from"bun:jsc";function zr1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{ct6()}catch(G){return console.error("[stall-watchdog] failed to start sampling profiler:",G),()=>{}}let X,Q=performance.now()+Z,Y=()=>{let G=performance.now(),J=G-Q;Q=G+Z;let K=[];try{K=lt6()?.traces??[]}catch{}if(J>$&&K.length>0){let W=new Map;for(let F of K){let N=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!N)continue;let U=(N.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${N.name??"?"} @ ${U}:${N.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,N)=>N[1]-F[1]).slice(0,8).map(([F,N])=>({frame:F,count:N}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:K.length,top:H}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}var ct6,lt6;var Pr1=L(()=>{({startSamplingProfiler:ct6,samplingProfilerStackTraces:lt6}=ut6)});function Ar1(){Dr1();let $=[Er1(),En1(),zr1()];return()=>{for(let Z of $)Z()}}var Tr1=L(()=>{ec0();jr1();Pr1()});var VE=_((Rr1)=>{Object.defineProperty(Rr1,"__esModule",{value:!0});Rr1.RepublishHeaders=Rr1.DirectMsgHeaders=Rr1.JsHeaders=Rr1.AdvisoryKind=void 0;Rr1.isOrderedPushConsumerOptions=dt6;Rr1.isPullConsumer=mt6;Rr1.isPushConsumer=it6;Rr1.isBoundPushConsumerOptions=nt6;function dt6($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function mt6($){return $.isPullConsumer()}function it6($){return $.isPushConsumer()}function nt6($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}Rr1.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};Rr1.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};Rr1.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};Rr1.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var $G=_((qr1)=>{Object.defineProperty(qr1,"__esModule",{value:!0});qr1.TD=qr1.TE=qr1.Empty=void 0;qr1.encode=Zo6;qr1.decode=Xo6;qr1.Empty=new Uint8Array(0);qr1.TE=new TextEncoder;qr1.TD=new TextDecoder;function $o6(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}function Zo6(...$){let Z=[];for(let X=0;X<$.length;X++)Z.push(qr1.TE.encode($[X]));if(Z.length===0)return qr1.Empty;if(Z.length===1)return Z[0];return $o6(...Z)}function Xo6($){if(!$||$.length===0)return"";return qr1.TD.decode($)}});var ZG=_((kr1)=>{Object.defineProperty(kr1,"__esModule",{value:!0});kr1.errors=kr1.PermissionViolationError=kr1.NoRespondersError=kr1.TimeoutError=kr1.RequestError=kr1.ProtocolError=kr1.ConnectionError=kr1.DrainingConnectionError=kr1.ClosedConnectionError=kr1.AuthorizationError=kr1.UserAuthenticationExpiredError=kr1.InvalidOperationError=kr1.InvalidArgumentError=kr1.InvalidSubjectError=void 0;class Xn0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}kr1.InvalidSubjectError=Xn0;class hZ0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,X){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((Q)=>`'${Q}'`),$=$.join(",");else $=`'${$}'`;return new hZ0(`${$} ${Z}`,X)}}kr1.InvalidArgumentError=hZ0;class Qn0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}kr1.InvalidOperationError=Qn0;class uZ0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new uZ0($);return null}}kr1.UserAuthenticationExpiredError=uZ0;class cZ0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],X=$.toLowerCase();for(let Q=0;Q<Z.length;Q++)if(X.indexOf(Z[Q])!==-1)return new cZ0($);return null}}kr1.AuthorizationError=cZ0;class Yn0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}kr1.ClosedConnectionError=Yn0;class Gn0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}kr1.DrainingConnectionError=Gn0;class Jn0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}kr1.ConnectionError=Jn0;class Kn0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}kr1.ProtocolError=Kn0;class Wn0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof lZ0}}kr1.RequestError=Wn0;class Hn0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}kr1.TimeoutError=Hn0;class lZ0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}kr1.NoRespondersError=lZ0;class dZ0 extends Error{operation;subject;queue;constructor($,Z,X,Q,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=X,this.queue=Q}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let X="publish",Q="",Y=void 0,G=$.match(/(Publish|Subscription) to "(\S+)"/);if(G){if(X=G[1].toLowerCase(),Q=G[2],X==="subscription"){let J=$.match(/using queue "(\S+)"/);if(J)Y=J[1]}}return new dZ0($,X,Q,Y)}}kr1.PermissionViolationError=dZ0;kr1.errors={AuthorizationError:cZ0,ClosedConnectionError:Yn0,ConnectionError:Jn0,DrainingConnectionError:Gn0,InvalidArgumentError:hZ0,InvalidOperationError:Qn0,InvalidSubjectError:Xn0,NoRespondersError:lZ0,PermissionViolationError:dZ0,ProtocolError:Kn0,RequestError:Wn0,TimeoutError:Hn0,UserAuthenticationExpiredError:uZ0}});var hJ=_((xr1)=>{Object.defineProperty(xr1,"__esModule",{value:!0});xr1.SimpleMutex=xr1.Perf=void 0;xr1.extend=jo6;xr1.render=zo6;xr1.timeout=Po6;xr1.delay=Ao6;xr1.deadline=To6;xr1.deferred=Nn0;xr1.debugDeferred=Ro6;xr1.shuffle=Io6;xr1.collect=qo6;xr1.jitter=vr1;xr1.backoff=Mo6;xr1.nanos=Vo6;xr1.millis=ko6;xr1.randomToken=_o6;var Eo6=$G(),Fn0=ZG();function jo6($,...Z){for(let X=0;X<Z.length;X++){let Q=Z[X];Object.keys(Q).forEach(function(Y){$[Y]=Q[Y]})}return $}function zo6($){return Eo6.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function Po6($,Z=!0){let X=Z?new Fn0.TimeoutError:null,Q,Y,G=new Promise((J,K)=>{Q={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(X===null)K(new Fn0.TimeoutError);else K(X)},$)});return Object.assign(G,Q)}function Ao6($=0){let Z,X=new Promise((Q)=>{let Y=setTimeout(()=>{Q()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),Q()}}});return Object.assign(X,Z)}async function To6($,Z=1000){let X=Nn0(),Q=setTimeout(()=>{X.reject(new Fn0.TimeoutError)},Z);try{return await Promise.race([$,X])}finally{clearTimeout(Q)}}function Nn0(){let $={},Z=new Promise((X,Q)=>{$={resolve:X,reject:Q}});return Object.assign(Z,$)}function Ro6(){let $={},Z=new Promise((X,Q)=>{$={resolve:(Y)=>{console.trace("resolve",Y),X(Y)},reject:(Y)=>{console.trace("reject"),Q(Y)}}});return Object.assign(Z,$)}function Io6($){for(let Z=$.length-1;Z>0;Z--){let X=Math.floor(Math.random()*(Z+1));[$[Z],$[X]]=[$[X],$[Z]]}return $}async function qo6($){let Z=[];for await(let X of $)Z.push(X);return Z}class Cr1{timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,X){let Q=this.timers.get(Z);if(Q===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(X);if(Y===void 0)throw Error(`${X} is not defined`);this.measures.set($,Y-Q)}getEntries(){let $=[];return this.measures.forEach((Z,X)=>{$.push({name:X,duration:Z})}),$}}xr1.Perf=Cr1;class _r1{max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=Nn0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}xr1.SimpleMutex=_r1;function vr1($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function Mo6($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(X){return vr1(X>Z?$[Z]:$[X])}}}function Vo6($){return $*1e6}function ko6($){return Math.floor($/1e6)}var So6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",XN=new Uint8Array(62);for(let $=0;$<62;$++)XN[$]=So6.charCodeAt($);var Co6=218340105584896;function _o6(){let $=Math.floor(Math.random()*Co6),Z=$%62,X=XN[Z];$=($-Z)/62,Z=$%62;let Q=XN[Z];$=($-Z)/62,Z=$%62;let Y=XN[Z];$=($-Z)/62,Z=$%62;let G=XN[Z];$=($-Z)/62,Z=$%62;let J=XN[Z];$=($-Z)/62,Z=$%62;let K=XN[Z];$=($-Z)/62,Z=$%62;let W=XN[Z];$=($-Z)/62;let H=XN[$];return String.fromCharCode(X,Q,Y,G,J,K,W,H)}});var lr1=_((ur1)=>{Object.defineProperty(ur1,"__esModule",{value:!0});ur1.nuid=ur1.NuidImpl=void 0;var to6="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oB=62,iZ0=12,gr1=10,br1=33,oo6=333,yr1=iZ0+gr1,Bn0=new Uint8Array(oB);for(let $=0;$<oB;$++)Bn0[$]=to6.charCodeAt($);var mZ0=4294967296,hr1=BigInt(oB)**BigInt(gr1),li=Number(hr1/(1n<<32n)),Un0=Number(hr1%(1n<<32n));function ro6($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function ao6($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else ro6($)}class On0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(yr1),this.cbuf=new Uint8Array(iZ0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(li+1)),this.seqLo=Math.floor(Math.random()*mZ0);while($++<8&&this.seqHi===li&&this.seqLo>=Un0);if(this.seqHi===li&&this.seqLo>=Un0)this.seqLo=0;this.inc=Math.random()*(oo6-br1)+br1|0}setPre(){ao6(this.cbuf);for(let $=0;$<iZ0;$++)this.buf[$]=Bn0[this.cbuf[$]%oB]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let X=yr1-1;X>=iZ0;X--){let Q=Math.floor($/oB),G=($-Q*oB)*mZ0+Z,J=Math.floor(G/oB),K=G-J*oB;this.buf[X]=Bn0[K],$=Q,Z=J}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=mZ0)this.seqLo-=mZ0,this.seqHi+=1;if(this.seqHi>li||this.seqHi===li&&this.seqLo>=Un0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}ur1.NuidImpl=On0;ur1.nuid=new On0});var nr1=_((mr1)=>{Object.defineProperty(mr1,"__esModule",{value:!0});mr1.nuid=mr1.Nuid=void 0;var dr1=lr1();mr1.Nuid=dr1.NuidImpl;mr1.nuid=dr1.nuid});var pZ0=_((nZ0)=>{Object.defineProperty(nZ0,"__esModule",{value:!0});nZ0.nuid=nZ0.Nuid=void 0;var pr1=nr1();Object.defineProperty(nZ0,"Nuid",{enumerable:!0,get:function(){return pr1.Nuid}});Object.defineProperty(nZ0,"nuid",{enumerable:!0,get:function(){return pr1.nuid}})});var rB=_((tr1)=>{Object.defineProperty(tr1,"__esModule",{value:!0});tr1.DEFAULT_HOST=tr1.DEFAULT_PORT=tr1.Match=void 0;tr1.syncIterator=Qr6;tr1.createInbox=Yr6;var Zr6=pZ0(),Xr6=ZG();tr1.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function Qr6($){let Z=$[Symbol.asyncIterator]();return{async next(){let X=await Z.next();if(X.done)return Promise.resolve(null);return Promise.resolve(X.value)}}}function Yr6($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw Xr6.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${Zr6.nuid.next()}`}tr1.DEFAULT_PORT=4222;tr1.DEFAULT_HOST="127.0.0.1"});var di=_((sr1)=>{Object.defineProperty(sr1,"__esModule",{value:!0});sr1.DataBuffer=void 0;var rr1=$G();class ar1{buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let X=new Uint8Array(Z),Q=0;for(let Y=0;Y<$.length;Y++)X.set($[Y],Q),Q+=$[Y].length;return X}static fromAscii($){if(!$)$="";return rr1.TE.encode($)}static toAscii($){return rr1.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let X=0;X<this.buffers.length;X++)$.set(this.buffers[X],Z),Z+=this.buffers[X].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let X=this.byteLength;if($===void 0||$>X)$=X;let Q=Z.subarray(0,$);if(X>$)this.buffers.push(Z.subarray($));return this.byteLength=X-$,Q}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let X=0;X<Z.length;X++)if(Z[X]&&Z[X].length)this.buffers.push(Z[X]),this.byteLength+=Z[X].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}sr1.DataBuffer=ar1});var kE=_((Za1)=>{Object.defineProperty(Za1,"__esModule",{value:!0});Za1.LF=Za1.CR=Za1.CRLF=Za1.CR_LF_LEN=Za1.CR_LF=void 0;Za1.setTransportFactory=Ur6;Za1.defaultPort=Br6;Za1.getUrlParseFn=Or6;Za1.newTransport=Lr6;Za1.getResolveFn=wr6;Za1.protoLen=$a1;Za1.extractProtocolMessage=Dr6;var Hr6=$G(),Fr6=rB(),Nr6=di(),XG;function Ur6($){XG=$}function Br6(){return XG!==void 0&&XG.defaultPort!==void 0?XG.defaultPort:Fr6.DEFAULT_PORT}function Or6(){return XG!==void 0&&XG.urlParseFn?XG.urlParseFn:void 0}function Lr6(){if(!XG||typeof XG.factory!=="function")throw Error("transport fn is not set");return XG.factory()}function wr6(){return XG!==void 0&&XG.dnsResolveFn?XG.dnsResolveFn:void 0}Za1.CR_LF=`\r
|
|
1388
1388
|
`;Za1.CR_LF_LEN=Za1.CR_LF.length;Za1.CRLF=Nr6.DataBuffer.fromAscii(Za1.CR_LF);Za1.CR=new Uint8Array(Za1.CRLF)[0];Za1.LF=new Uint8Array(Za1.CRLF)[1];function $a1($){for(let Z=0;Z<$.length;Z++){let X=Z+1;if($.byteLength>X&&$[Z]===Za1.CR&&$[X]===Za1.LF)return X+1}return 0}function Dr6($){let Z=$a1($);if(Z>0){let Q=new Uint8Array($).slice(0,Z);return Hr6.TD.decode(Q)}return""}});var jn0=_((Ha1)=>{Object.defineProperty(Ha1,"__esModule",{value:!0});Ha1.ipV4=Ja1;Ha1.isIP=Vr6;Ha1.parseIP=Ka1;var mi=4,SE=16,tZ0=48,Ga1=57,Qa1=65,qr6=70,Ya1=97,Mr6=102,En0=16777215;function Ja1($,Z,X,Q){let Y=new Uint8Array(SE);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((J,K)=>{Y[K]=J}),Y[12]=$,Y[13]=Z,Y[14]=X,Y[15]=Q,Y}function Vr6($){return Ka1($)!==void 0}function Ka1($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return Wa1($);case":":return kr6($)}return}function Wa1($){let Z=new Uint8Array(mi);for(let X=0;X<mi;X++){if($.length===0)return;if(X>0){if($[0]!==".")return;$=$.substring(1)}let{n:Q,c:Y,ok:G}=Sr6($);if(!G||Q>255)return;$=$.substring(Y),Z[X]=Q}return Ja1(Z[0],Z[1],Z[2],Z[3])}function kr6($){let Z=new Uint8Array(SE),X=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(X=0,$=$.substring(2),$.length===0)return Z}let Q=0;while(Q<SE){let{n:Y,c:G,ok:J}=Cr6($);if(!J||Y>65535)return;if(G<$.length&&$[G]==="."){if(X<0&&Q!=SE-mi)return;if(Q+mi>SE)return;let K=Wa1($);if(K===void 0)return;Z[Q]=K[12],Z[Q+1]=K[13],Z[Q+2]=K[14],Z[Q+3]=K[15],$="",Q+=mi;break}if(Z[Q]=Y>>8,Z[Q+1]=Y,Q+=2,$=$.substring(G),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(X>=0)return;if(X=Q,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(Q<SE){if(X<0)return;let Y=SE-Q;for(let G=Q-1;G>=X;G--)Z[G+Y]=Z[G];for(let G=X+Y-1;G>=X;G--)Z[G]=0}else if(X>=0)return;return Z}function Sr6($){let Z=0,X=0;for(Z=0;Z<$.length&&tZ0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=Ga1;Z++)if(X=X*10+($.charCodeAt(Z)-tZ0),X>=En0)return{n:En0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:X,c:Z,ok:!0}}function Cr6($){let Z=0,X=0;for(X=0;X<$.length;X++){if(tZ0<=$.charCodeAt(X)&&$.charCodeAt(X)<=Ga1)Z*=16,Z+=$.charCodeAt(X)-tZ0;else if(Ya1<=$.charCodeAt(X)&&$.charCodeAt(X)<=Mr6)Z*=16,Z+=$.charCodeAt(X)-Ya1+10;else if(Qa1<=$.charCodeAt(X)&&$.charCodeAt(X)<=qr6)Z*=16,Z+=$.charCodeAt(X)-Qa1+10;else break;if(Z>=En0)return{n:0,c:X,ok:!1}}if(X===0)return{n:0,c:X,ok:!1};return{n:Z,c:X,ok:!0}}});var In0=_((Na1)=>{Object.defineProperty(Na1,"__esModule",{value:!0});Na1.Servers=Na1.ServerImpl=void 0;Na1.isIPV4OrHostname=Fa1;Na1.hostPort=Rn0;var zn0=kE(),Pn0=hJ(),An0=jn0(),fr6=rB(),br6=ZG();function Fa1($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Tn0($){return!Fa1($)}function yr6($){let X=$.toUpperCase().indexOf("::FFFF:");if(X!==-1&&$.indexOf(".")!==-1){let Q=$.substring(X+7);return Q=Q.replace("[",""),Q.replace("]","")}return $}function Rn0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=yr6($),Tn0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Tn0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),X=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):fr6.DEFAULT_PORT,Y=new URL(`${X===80?"https":"http"}://${$}`);Y.port=`${X}`;let G=Y.hostname;if(G.charAt(0)==="[")G=G.substring(1,G.length-1);return{listen:Y.host,hostname:G,port:X}}class rb{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let X=Rn0($);this.listen=X.listen,this.hostname=X.hostname,this.port=X.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,An0.isIP)(this.hostname))return[this];else{let X=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${X.join(",")}`);for(let Q of X){let Y=this.port===80?"https":"http",G=new URL(`${Y}://${Tn0(Q)?"["+Q+"]":Q}`);G.port=`${this.port}`;let J=new rb(G.host,!1);J.tlsName=this.hostname,Z.push(J)}}if($.randomize)(0,Pn0.shuffle)(Z);return this.resolves=Z,Z}}Na1.ServerImpl=rb;class oZ0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw br6.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,zn0.getUrlParseFn)(),X=new Map;for(let Y of this.servers)X.set(Y.listen,Y);let Q=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:G}=Rn0(Y),J=X.get(G);if(J)J.gossiped=!1,Q.push(J);else Q.push(new rb(Y))}if(this.randomize)(0,Pn0.shuffle)(Q);if(this.servers=Q,this.currentServer===void 0||!Q.includes(this.currentServer))this.currentServer=Q[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,An0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let X=(0,zn0.getUrlParseFn)();$=X?X($):$;let Q=new rb($,Z);if((0,An0.isIP)(Q.hostname))Q.tlsName=this.tlsName;this.servers.push(Q)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return oZ0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return oZ0.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let X=[],Q=[],Y=(0,zn0.getUrlParseFn)(),G=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new rb(K,!0);G.set(K,W)});let J=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&G.get(H)===void 0)J.push(W);G.delete(H)}),J.reverse(),J.forEach((K)=>{let W=this.servers.splice(K,1);Q=Q.concat(W[0].listen)}),G.forEach((K,W)=>{this.servers.push(K),X.push(W)}),this.randomize&&X.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Pn0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:X,deleted:Q}}}Na1.Servers=oZ0});var rZ0=_((La1)=>{Object.defineProperty(La1,"__esModule",{value:!0});La1.QueuedIteratorImpl=void 0;var qn0=hJ(),Ba1=ZG();class Oa1{inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,qn0.deferred)(),this.yields=[],this.iterClosed=(0,qn0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(X){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new Ba1.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new Ba1.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let Q=$[Z];try{Q()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let X=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-X:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,qn0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}La1.QueuedIteratorImpl=Oa1});var Mn0=_((ja1)=>{Object.defineProperty(ja1,"__esModule",{value:!0});ja1.MuxSubscription=void 0;var cr6=rB(),Da1=ZG();class Ea1{baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,cr6.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((X)=>{X.resolver(Z,{})}),!0;if(Z.operation==="publish"){let X=this.all().find((Q)=>{return Q.requestSubject===Z.subject});if(X)return X.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let X=this.getToken(Z);if(X){let Q=this.get(X);if(Q){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new Da1.NoRespondersError(Q.requestSubject):null;Q.resolver($,Z)}}}}close(){let $=new Da1.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}ja1.MuxSubscription=Ea1});var Vn0=_((Aa1)=>{Object.defineProperty(Aa1,"__esModule",{value:!0});Aa1.Heartbeat=void 0;var lr6=hJ();class Pa1{ph;interval;maxOut;timer;pendings;constructor($,Z,X){this.ph=$,this.interval=Z,this.maxOut=X,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,lr6.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}Aa1.Heartbeat=Pa1});var Cn0=_((Ma1)=>{Object.defineProperty(Ma1,"__esModule",{value:!0});Ma1.DenoBuffer=Ma1.MAX_SIZE=Ma1.AssertionError=void 0;Ma1.assert=Ia1;Ma1.concat=qa1;Ma1.append=mr6;Ma1.readAll=ir6;Ma1.writeAll=nr6;var dr6=$G();class kn0 extends Error{constructor($){super($);this.name="AssertionError"}}Ma1.AssertionError=kn0;function Ia1($,Z="Assertion failed."){if(!$)throw new kn0(Z)}var Ra1=32768;Ma1.MAX_SIZE=4294967294;function aZ0($,Z,X=0){let Q=Z.byteLength-X;if($.byteLength>Q)$=$.subarray(0,Q);return Z.set($,X),$.byteLength}function qa1($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let X=new Uint8Array($.length+Z.length);return X.set($,0),X.set(Z,$.length),X}function mr6($,Z){return qa1($,Uint8Array.of(Z))}class Sn0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){Ia1($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=aZ0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(dr6.TE.encode($))}write($){let Z=this._grow($.byteLength);return aZ0($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let X=this._tryGrowByReslice($);if(X>=0)return X;let Q=this.capacity;if($<=Math.floor(Q/2)-Z)aZ0(this._buf.subarray(this._off),this._buf);else if(Q+$>Ma1.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*Q+$,Ma1.MAX_SIZE));aZ0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,Ma1.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,X=new Uint8Array(Ra1);while(!0){let Q=this.capacity-this.length<Ra1,Y=Q?X:new Uint8Array(this._buf.buffer,this.length),G=$.read(Y);if(G===null)return Z;if(Q)this.write(Y.subarray(0,G));else this._reslice(this.length+G);Z+=G}}}Ma1.DenoBuffer=Sn0;function ir6($){let Z=new Sn0;return Z.readFrom($),Z.bytes()}function nr6($,Z){let X=0;while(X<Z.length)X+=$.write(Z.subarray(X))}});var xn0=_((_a1)=>{Object.defineProperty(_a1,"__esModule",{value:!0});_a1.cc=_a1.State=_a1.Parser=_a1.Kind=void 0;_a1.describe=er6;var _n0=Cn0(),vn0=$G();_a1.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function er6($){let Z,X="";switch($.kind){case _a1.Kind.MSG:Z="MSG";break;case _a1.Kind.OK:Z="OK";break;case _a1.Kind.ERR:Z="ERR",X=vn0.TD.decode($.data);break;case _a1.Kind.PING:Z="PING";break;case _a1.Kind.PONG:Z="PONG";break;case _a1.Kind.INFO:Z="INFO",X=vn0.TD.decode($.data)}return`${Z}: ${X}`}function ka1(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var Sa1=48,$a6=57,ab=67108864;class Ca1{dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=_a1.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let X=$[Z];switch(this.state){case _a1.State.OP_START:switch(X){case _a1.cc.M:case _a1.cc.m:this.state=_a1.State.OP_M,this.hdr=-1,this.ma=ka1();break;case _a1.cc.H:case _a1.cc.h:this.state=_a1.State.OP_H,this.hdr=0,this.ma=ka1();break;case _a1.cc.P:case _a1.cc.p:this.state=_a1.State.OP_P;break;case _a1.cc.PLUS:this.state=_a1.State.OP_PLUS;break;case _a1.cc.MINUS:this.state=_a1.State.OP_MINUS;break;case _a1.cc.I:case _a1.cc.i:this.state=_a1.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_H:switch(X){case _a1.cc.M:case _a1.cc.m:this.state=_a1.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_M:switch(X){case _a1.cc.S:case _a1.cc.s:this.state=_a1.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MS:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MSG:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MSG_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.MSG_ARG,this.as=Z}break;case _a1.State.MSG_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.cc.NL:{let Q=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(Q),this.drop=0,this.as=Z+1,this.state=_a1.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;case _a1.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let Q=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:_a1.Kind.MSG,msg:this.ma,data:Q}),this.argBuf=void 0,this.msgBuf=void 0,this.state=_a1.State.MSG_END}else{let Q=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<Q)Q=Y;if(Q>0)this.msgBuf.write($.subarray(Z,Z+Q)),Z=Z+Q-1;else this.msgBuf.writeByte(X)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:_a1.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=_a1.State.MSG_END;break;case _a1.State.MSG_END:switch(X){case _a1.cc.NL:this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break;default:continue}break;case _a1.State.OP_PLUS:switch(X){case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PLUS_O:switch(X){case _a1.cc.K:case _a1.cc.k:this.state=_a1.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PLUS_OK:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.OK}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_MINUS:switch(X){case _a1.cc.E:case _a1.cc.e:this.state=_a1.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_E:switch(X){case _a1.cc.R:case _a1.cc.r:this.state=_a1.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ER:switch(X){case _a1.cc.R:case _a1.cc.r:this.state=_a1.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ERR:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_MINUS_ERR_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.MINUS_ERR_ARG,this.as=Z}break;case _a1.State.MINUS_ERR_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:_a1.Kind.ERR,data:Q}),this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(X))}break;case _a1.State.OP_P:switch(X){case _a1.cc.I:case _a1.cc.i:this.state=_a1.State.OP_PI;break;case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PO:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PON:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PONG:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.PONG}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_PI:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PIN:switch(X){case _a1.cc.G:case _a1.cc.g:this.state=_a1.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_PING:switch(X){case _a1.cc.NL:this.dispatcher.push({kind:_a1.Kind.PING}),this.drop=0,this.state=_a1.State.OP_START;break}break;case _a1.State.OP_I:switch(X){case _a1.cc.N:case _a1.cc.n:this.state=_a1.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_IN:switch(X){case _a1.cc.F:case _a1.cc.f:this.state=_a1.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INF:switch(X){case _a1.cc.O:case _a1.cc.o:this.state=_a1.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INFO:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:this.state=_a1.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case _a1.State.OP_INFO_SPC:switch(X){case _a1.cc.SPACE:case _a1.cc.TAB:continue;default:this.state=_a1.State.INFO_ARG,this.as=Z}break;case _a1.State.INFO_ARG:switch(X){case _a1.cc.CR:this.drop=1;break;case _a1.cc.NL:{let Q;if(this.argBuf)Q=this.argBuf.bytes(),this.argBuf=void 0;else Q=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:_a1.Kind.INFO,data:Q}),this.drop=0,this.as=Z+1,this.state=_a1.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(X)}break;default:throw this.fail($.subarray(Z))}}if((this.state===_a1.State.MSG_ARG||this.state===_a1.State.MINUS_ERR_ARG||this.state===_a1.State.INFO_ARG)&&!this.argBuf)this.argBuf=new _n0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===_a1.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new _n0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,X=new Uint8Array($+Z);if(X.set(this.ma.subject),this.ma.reply)X.set(this.ma.reply,$);if(this.argBuf=new _n0.DenoBuffer(X),this.ma.subject=X.subarray(0,$),this.ma.reply)this.ma.reply=X.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case _a1.cc.SPACE:case _a1.cc.TAB:case _a1.cc.CR:case _a1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],ab);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],ab);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${vn0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],X=-1;for(let Q=0;Q<$.length;Q++)switch($[Q]){case _a1.cc.SPACE:case _a1.cc.TAB:case _a1.cc.CR:case _a1.cc.NL:if(X>=0)Z.push($.subarray(X,Q)),X=-1;break;default:if(X<0)X=Q}if(X>=0)Z.push($.subarray(X));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],ab),this.ma.size=this.protoParseInt(Z[3],ab);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],ab),this.ma.size=this.protoParseInt(Z[4],ab);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let X=0;for(let Q=0;Q<$.length;Q++){if($[Q]<Sa1||$[Q]>$a6)return-1;X=X*10+($[Q]-Sa1)}return Z!==void 0&&X>Z?-1:X}}_a1.Parser=Ca1;_a1.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};_a1.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var $70=_((xa1)=>{Object.defineProperty(xa1,"__esModule",{value:!0});xa1.MsgHdrsImpl=void 0;xa1.canonicalMIMEHeaderKey=bn0;xa1.headers=Qa6;var va1=$G(),uJ=rB(),eZ0=ZG();function bn0($){let F=!0,N=Array($.length);for(let U=0;U<$.length;U++){let B=$.charCodeAt(U);if(B===58||B<33||B>126)throw eZ0.InvalidArgumentError.format("header",`'${$[U]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;N[U]=B,F=B==45}return String.fromCharCode(...N)}function Qa6($=0,Z=""){if($===0&&Z!=="")throw eZ0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw eZ0.InvalidArgumentError.format("description","is required");return new sb($,Z)}var fn0="NATS/1.0";class sb{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,X]of this.headers){let Q=$.values(Z);if(X.length!==Q.length)return!1;let Y=[...X].sort(),G=[...Q].sort();for(let J=0;J<Y.length;J++)if(Y[J]!==G[J])return!1}return!0}return!1}static decode($){let Z=new sb,Q=va1.TD.decode($).split(`\r
|
|
1389
1389
|
`),Y=Q[0];if(Y!==fn0){let G=Y.replace(fn0,"").trim();if(G.length>0){if(Z._code=parseInt(G,10),isNaN(Z._code))Z._code=0;let J=Z._code.toString();G=G.replace(J,""),Z._description=G.trim()}}if(Q.length>=1)Q.slice(1).map((G)=>{if(G){let J=G.indexOf(":");if(J>-1){let K=G.slice(0,J),W=G.slice(J+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=fn0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,X]of this.headers)for(let Q=0;Q<X.length;Q++)$=`${$}\r
|
|
1390
1390
|
${Z}: ${X[Q]}`;return`${$}\r
|
package/dist/server/server.js
CHANGED
|
@@ -2910,7 +2910,7 @@ Respond with the structured verdict and a short reason.`,Ug$;var Bg$=w(()=>{v4()
|
|
|
2910
2910
|
${G.join(`
|
|
2911
2911
|
`)}`:Y}function xJ6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2912
2912
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var sg$=200,MJ6=12,VJ6,CJ6=300,x91=3;var y91=w(()=>{S_();$A0();VJ6={aheadBy:0,behindBy:0,files:[]}});function gJ6($){if(!$||$.includes(".."))return!1;return yJ6.test($)}function $h$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!gJ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Zh$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var yJ6;var Xh$=w(()=>{yJ6=/^[\w./@-]+$/});function g91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Ba($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Qh$($,Z,X,Q){if(!Q.connectionId)throw new __("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new __(Q9);await rO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Q9;throw new __(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await aO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=I4$(H instanceof Error?H.message:String(H));throw N?new __(U):H}),K=nh($),F=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!F.ok){let H=await wB(F,hJ6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var hJ6=10485760,__;var h91=w(()=>{mG();lP0();mp();Ym0();mx();__=class __ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function cJ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!uJ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function v_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(dJ6)])}function mJ6($,Z,X){let Q=w5($)[Z]?.[X];return!!Q&&Object.keys(IY(Q)).length>0}function f_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function eh($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ba(Z,X);if(!Y)throw new g4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return mP0(Q,G.id,Y)}function u91($,Z){if(Z instanceof dP0)return $.json({error:Z.message},429,{...C5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,C5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,C5)}async function Jh$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Wh$($){try{let Z=await eh($),X=await ZA0(Z,$.get("vmClaim").branch);return $.json(X,200,C5)}catch(Z){return u91($,Z)}}function wa($,Z){let Q=(YA0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return YA0.set($,Y),Y.finally(()=>{if(YA0.get($)===Y)YA0.delete($)}),Q}async function mZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,C5);let Q=f_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...C5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?pJ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...C5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function pJ6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function GA0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function nJ6($){return Kh$.includes($)}var uJ6,Yh$=524288,lJ6=65536,dJ6=1e4,Gh$=2000,iJ6,YA0,C5,Kh$,Fh$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",iJ6),$.post("/:virtualMcpId/:branch/write",(X)=>mZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>mZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>mZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>mZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>mZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>mZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>mZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:v_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return mZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>mZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!nJ6(Q))return X.json({error:`step must be one of: ${Kh$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Ky(Y.virtualMcpMetadata);try{await lO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return mZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return IN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Jg$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Wh$(X);return Z(X)});let Z=(X)=>mZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Gh$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Wh$(X);return mZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Gh$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await eh(X),J=await XA0(G,Q.branch,Y.base);return X.json(J,200,C5)}catch(Y){return u91(X,Y)}return mZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,C5);let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return wa(Y,async()=>{try{await L91(W,Q,Y);let K=Ba(G,J);if(K)await Qh$(W,Q,Y,K)}catch(K){if(K instanceof __)return X.json({error:K.message},403,C5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,C5)}return mZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,C5);try{let J=await eh(X);return await eg$(J,Q.branch,G),X.json({ok:!0},200,C5)}catch(J){let W=J instanceof g4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,C5)}});return wa(Q.claimName,()=>mZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return wa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await eh(X),F=W.base??await K.getDefaultBranch();return await QA0(K,Q.branch,F),X.json({ok:!0},200,C5)}catch(W){return u91(X,W)}});let Y=f_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return wa(G,async()=>{try{await L91(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,C5)}return mZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",k9({maxSize:Yh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Ng$(K,O,B);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",k9({maxSize:Yh$,onError:(X)=>X.json({error:"Payload too large"},413,C5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=f_(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=z91(H)&&U?[H,N]:Y?await Promise.all([GA0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),GA0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await eh(X);return Promise.all([ZA0(L,Q.branch),XA0(L,Q.branch)])})(),D=await Og$(K,O,B,typeof F.language==="string"?F.language:void 0);return X.json(D,200,C5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,C5);return X.json({error:H},502,C5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=g91(`${W}${G}`);return Jh$(X,K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}),$.post("/:virtualMcpId/:branch/preview-invoke",k9({maxSize:lJ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=f_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=$h$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Zh$(G,W.resolveType),F=g91(K);return Jh$(X,F?.url??K,{method:"POST",headers:{"content-type":"application/json",...F?{host:F.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Hh$=w(()=>{D8();DN();ph();D91();IH();Yg$();v3();pX();O8();lB0();NB();Gg$();Wg$();qp0();lp();T91();Bg$();k91();S_();y91();Xh$();h91();uJ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;iJ6=cP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{cJ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Gp({orgId:Y.id,virtualMcpId:G,branch:J}),F=await bH(X,J,Q),H=Qg$({userId:F,projectRef:K}),N=W.metadata??null;if(cW$(N).fastPreviewCapability&&!mJ6(N,F,J))return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await sX(X,{userId:F,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});YA0=new Map;C5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Kh$=["clone","install","start"]});function Nh$($,Z,X){let Q=c91.get($);if(!Q)Q={pending:null,running:!1},c91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)oJ6($,Q);return G}async function oJ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await rJ6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)c91.delete($)}}async function rJ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await sh(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=f91(W,Q),F=[],H=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=b91(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2913
|
-
`,j=await Z.createBlob(E);await og$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:aJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=tJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function aJ6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return od0(Q,$.deps.coAuthor)}var tJ6=3,c91;var Uh$=w(()=>{fO0();pP0();u4();S_();$A0();c91=new Map});import{createHmac as Oh$,randomBytes as sJ6,timingSafeEqual as eJ6}from"crypto";function Bh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):sJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+$36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Oh$("sha256",Bh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function wh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Oh$("sha256",Bh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!eJ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var $36=21600000,JA0=null;var Dh$=w(()=>{R$()});import{z as $u}from"zod";function X36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Z36.test($)}function Eh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function jh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lh$),$.use("/:virtualMcpId/:branch/*",Lh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await rg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Eh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=Q36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{iP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await WA0(Z),W=await Nh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Eh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var Z36,Q36,Lh$;var zh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Uh$();Dh$();y91();S_();$A0();Z36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q36=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lh$=cP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!X36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!wh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ph$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",YP0()),Z.route("/",cf$()),Z.route("/",my$()),Z.route("/",cy$()),Z.route("/",gP0()),Z.route("/tools",ay$()),Z.route("/",ty$()),Z.route("/",Ty$({kvStorage:$.kvStorage})),Z.route("/",Py$()),Z.route("/fs",fy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Fh$()),Z.route("/decofile",jh$()),Z.route("/",gy$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",B_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",xy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ah$=w(()=>{D8();g61();ff$();l61();KP0();xr();x61();Ay$();Ry$();by$();ln();k61();ND0();F91();yy$();hy$();ly$();iy$();oy$();N91();sy$();U91();KD0();Hh$();zh$()});function Y36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var G36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Th$=()=>{let $=new H1;return $.use("*",G36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Y36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Rh$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function w36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function D36($,Z,X){try{return JSON.parse($)}catch{throw new Mh$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function L36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:D36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function E36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function j36($){if(!$)return;return{openai:{response_format:$}}}function z36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ih$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function qh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var J36=256,W36,K36,F36,H36,N36,U36,O36,B36,Mh$,kh$,Vh$;var Sh$=w(()=>{v4();D8();ph();YN();W36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),K36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),F36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(K36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),H36=M1.object({type:M1.literal("text")}),N36=M1.object({type:M1.literal("json_object")}),U36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),O36=M1.union([H36,N36,U36]),B36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(F36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(W36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:O36.optional(),user:M1.string().optional()});Mh$=class Mh$ extends Error{constructor($){super($);this.name="MessageConversionError"}};kh$=new H1;kh$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=B36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=w36(G.model);if(!J)return $.json(GF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=L36(G.messages),U=G.tools?E36(G.tools):void 0,O=j36(G.response_format),B=z36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ih$(H,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=J36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:qh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Ih$(H,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:qh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});Vh$=kh$});function P36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Ch$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Oa1(N)!==G)continue;if(!P36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var _h$=w(()=>{D8();fO()});var fh$;var vh$=w(()=>{fh$={name:"decocms",version:"4.252.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function R36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??T36}}var bh$,T36="https://ph.studio.decocms.com",xh$;var yh$=w(()=>{D8();qh0();KC();f9();R$();T61();vh$();bh$=new H1;bh$.get("/",($)=>{let Z={version:fh$.version,theme:yd1(),...RL().logo&&{logo:RL().logo},...qK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:sv$(),posthog:R36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!qK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});xh$=bh$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function hh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function gh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function uh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?gh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):gh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,I36,q36,M36,k36,ch$;var lh$=w(()=>{b_=l0.enum(["good","bad","neutral"]),I36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:b_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),q36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(I36)),M36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},k36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:b_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(q36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:b_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:b_.optional()})).min(1)})]),ch$=l0.object({...M36,template:k36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ch$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var m91=w(()=>{lh$()});import{join as dh$}from"path";async function S36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(V36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function C36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=hh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=uh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2913
|
+
`,j=await Z.createBlob(E);await og$(Z.owner,Z.repo,j,E);let z=L[0]??`${eP0(Q)}/${V91(B)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of b91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Ha(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:aJ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof g4&&B.status===422)||Y>=tJ6-1)throw B;await M$(nZ(2000,200,Y,2,0.5))}}}function aJ6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return od0(Q,$.deps.coAuthor)}var tJ6=3,c91;var Uh$=w(()=>{fO0();pP0();u4();S_();$A0();c91=new Map});import{createHmac as Oh$,randomBytes as sJ6,timingSafeEqual as eJ6}from"crypto";function Bh$(){if(JA0)return JA0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return JA0=$?Buffer.from($):sJ6(32),JA0}function l91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+$36)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Oh$("sha256",Bh$()).update(Q).digest("base64url");return`${Q}.${Y}`}function wh$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Oh$("sha256",Bh$()).update(Q).digest("base64url"));if(Y.length!==G.length||!eJ6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var $36=21600000,JA0=null;var Dh$=w(()=>{R$()});import{z as $u}from"zod";function X36($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&Z36.test($)}function Eh$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function WA0($){let Z=$.get("decofileScope");return mP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function KA0($,Z){if(Z instanceof g4){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function jh$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Lh$),$.use("/:virtualMcpId/:branch/*",Lh$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await rg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Eh$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return KA0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=Q36.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{iP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await WA0(Z),W=await Nh$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:nh(Q)},G),K=l91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Eh$(Z)})}catch(J){return KA0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof g4&&W.status===409))throw W;await QA0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof g4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof g4&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return KA0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await WA0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof g4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return KA0(Z,Q)}}),$}var Z36,Q36,Lh$;var zh$=w(()=>{pP0();D8();D91();lP0();h91();k91();Uh$();Dh$();y91();S_();$A0();Z36=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Q36=$u.object({set:$u.record($u.string(),$u.unknown()).optional(),delete:$u.array($u.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Lh$=cP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!X36(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!wh$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!cB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ba(K,H);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Ph$=($)=>{let Z=new H1;if(Z.use("*",P_),Z.route("/",YP0()),Z.route("/",cf$()),Z.route("/",my$()),Z.route("/",cy$()),Z.route("/",gP0()),Z.route("/tools",ay$()),Z.route("/",ty$()),Z.route("/",Ty$({kvStorage:$.kvStorage})),Z.route("/",Py$()),Z.route("/fs",fy$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Fh$()),Z.route("/decofile",jh$()),Z.route("/",gy$()),Z.route("/deco-sites",JP0()),Z.route("/sso",sz0()),Z.route("/",hP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",vf$()),$.mountDevAssets)Z.route("/dev-assets",WP0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",B_$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",xy$()),Z.route("/mcp",WD0()),Z.route("/mcp/self",yP0()),Z.route("/mcp",HD0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Ah$=w(()=>{D8();g61();ff$();l61();KP0();xr();x61();Ay$();Ry$();by$();ln();k61();ND0();F91();yy$();hy$();ly$();iy$();oy$();N91();sy$();U91();KD0();Hh$();zh$()});function Y36($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var G36=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Th$=()=>{let $=new H1;return $.use("*",G36),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await dZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Y36(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Rh$=w(()=>{D8();R$();Zz0()});import{z as M1}from"zod";function GF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function w36($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function D36($,Z,X){try{return JSON.parse($)}catch{throw new Mh$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function L36($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:D36(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function E36($){let Z=$.map((X)=>{let Q=X.function.parameters?hY(X.function.parameters):hY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function j36($){if(!$)return;return{openai:{response_format:$}}}function z36(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Ih$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function qh$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var J36=256,W36,K36,F36,H36,N36,U36,O36,B36,Mh$,kh$,Vh$;var Sh$=w(()=>{v4();D8();ph();YN();W36=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),K36=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),F36=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(K36).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),H36=M1.object({type:M1.literal("text")}),N36=M1.object({type:M1.literal("json_object")}),U36=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),O36=M1.union([H36,N36,U36]),B36=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(F36),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(W36).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:O36.optional(),user:M1.string().optional()});Mh$=class Mh$ extends Error{constructor($){super($);this.name="MessageConversionError"}};kh$=new H1;kh$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(GF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(GF("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(GF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=B36.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(GF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=w36(G.model);if(!J)return $.json(GF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>fD(j.providerId));if(!E)return $.json(GF("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(GF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=L36(G.messages),U=G.tools?E36(G.tools):void 0,O=j36(G.response_format),B=z36(),D=Math.floor(Date.now()/1000);if(G.stream)return IN($,async(L)=>{let E=Ih$(H,N,U,G,O,$.req.raw.signal);try{let j=tO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=J36)await I()}else if(k.type==="tool-call"){await I();let q=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:qh$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Ih$(H,N,U,G,O,$.req.raw.signal),E=await pO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:qh$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(GF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(GF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(GF(Y.message,"server_error"),500)}});Vh$=kh$});function P36($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function Ch$(){let $=new H1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!uG(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||W7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Oa1(N)!==G)continue;if(!P36(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var _h$=w(()=>{D8();fO()});var fh$;var vh$=w(()=>{fh$={name:"decocms",version:"4.252.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function R36(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??T36}}var bh$,T36="https://ph.studio.decocms.com",xh$;var yh$=w(()=>{D8();qh0();KC();f9();R$();T61();vh$();bh$=new H1;bh$.get("/",($)=>{let Z={version:fh$.version,theme:yd1(),...RL().logo&&{logo:RL().logo},...qK()&&{internalUrl:BS1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:sv$(),posthog:R36(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!qK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});xh$=bh$});function Zu($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function d91($){return(Zu($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function hh$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zu($))}&sz=${Z}`}function gh$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function uh$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?gh$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):gh$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var b_,I36,q36,M36,k36,ch$;var lh$=w(()=>{b_=l0.enum(["good","bad","neutral"]),I36=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:b_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),q36=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(I36)),M36={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},k36=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:b_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:b_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:b_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(q36).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:b_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:b_.optional()})).min(1)})]),ch$=l0.object({...M36,template:k36})});function FA0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ch$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var m91=w(()=>{lh$()});import{join as dh$}from"path";async function S36($){try{let Z=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(V36)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=FA0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||d91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function WG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function C36($,Z){let X=Zu($),Q=Z?.brand?.trim()||d91(X),Y=hh$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=uh$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${WG(W)}</title>`,`<meta name="description" content="${WG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${WG(W)}" />`,`<meta property="og:description" content="${WG(K)}" />`,`<meta property="og:url" content="${WG(J)}" />`,`<meta property="og:image" content="${WG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${WG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${WG(W)}" />`,`<meta name="twitter:description" content="${WG(K)}" />`,`<meta name="twitter:image" content="${WG(F)}" />`,`<meta name="twitter:image:alt" content="${WG(H)}" />`,`<link rel="canonical" href="${WG(J)}" />`,`<link rel="icon" href="${WG(Y)}" sizes="any" />`].join(`
|
|
2914
2914
|
`)}function _36($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2915
2915
|
</head>`)}function mh$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=Zu(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(dh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${sW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(v36)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?dh$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await S36(Zu(Q)),K=C36(Q,W);return X.html(_36(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var V36=2500,v36=1e4;var ih$=w(()=>{D8();m91();gL();R$()});function Da($,Z){return fetch(`${sW({})}${$}`,Z)}async function f36($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Da(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=FA0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var b36,MN,ph$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},nh$;var th$=w(()=>{D8();bY();gL();m91();b36=new Set(["complete","errored","terminated","unknown"]),MN=new H1;MN.use("*",async($,Z)=>{let X=await F8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});MN.use("/link-token/*",ph$);MN.use("/suggest",ph$);MN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await f36(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});MN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Da("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${yL({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});MN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Da(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${yL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:b36.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});MN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Da(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});MN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Da(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});nh$=MN});import{createHmac as x36,timingSafeEqual as y36}from"crypto";function rh$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>g36)return!1;let W=x36("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&y36(K,H)})}function ah$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=IJ(Z),Q=IJ(IJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:JF(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function sh$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function JF($){return typeof $==="string"?$:void 0}function IJ($){return typeof $==="object"&&$!==null?$:void 0}function HA0($){return typeof $==="number"?new Date($*1000):null}function n91($){return JF($)??JF(IJ($)?.id)}function h36($){return n91($.subscription)??JF(IJ(IJ($.parent)?.subscription_details)?.subscription)}function u36($){let Z=HA0($.current_period_end);if(Z)return Z;let X=IJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=IJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function i91($,Z){let X=HA0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function p91($,Z){let X=HA0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function c36($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=JF(IJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(JF(IJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=JF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(IJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:IJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(JF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=n91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:n91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=JF(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&i91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":sh$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:u36(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=h36(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(i91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:HA0(X.period_end),lastStripeEventAt:p91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function l36($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:sh$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function oh$($,Z){let X=l36($,Z);if(!X)return;SY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:ii1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function eh$($){let Z=new tW(u8().db),X=await c36(Z,$);if(!(X.handled&&X.topUp))oh$($,X);if(X.handled&&X.topUp)await xw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),oh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Fs1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof xY&&(Q.status===400||Q.status===404)))throw Q}return X}var g36=300;var $u$=w(()=>{bG();k4();E60();nL();Ge0()});var d36=1048576,t91;var Zu$=w(()=>{D8();DN();R$();$u$();t91=new H1;t91.post("/webhook",k9({maxSize:d36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!rh$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=ah$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await eh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as m36}from"crypto";function p36($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return m36(Buffer.from(Y),Buffer.from(Q))}var i36=5242880,o91;var Xu$=w(()=>{D8();DN();hp();o91=new H1;o91.post("/webhook",k9({maxSize:i36,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!p36(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await zp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Qu$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Yu$,n36,t36,Gu$;var Ju$=w(()=>{D8();N3();Ry();Px();Yu$=new H1,n36=["range","if-none-match","if-modified-since"],t36=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Yu$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(kh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await wn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&D3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Qu$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of n36){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of t36){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),Qu$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Gu$=Yu$});var La=_((x_)=>{var o36=x_&&x_.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),r36=x_&&x_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))o36(Z,$,X)};Object.defineProperty(x_,"__esModule",{value:!0});r36(OY(),x_)});var Fu$=_((Wu$)=>{Object.defineProperty(Wu$,"__esModule",{value:!0});Wu$.version=void 0;Wu$.version="3.4.0"});var Uu$=_((WF)=>{var a36=WF&&WF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(WF,"__esModule",{value:!0});WF.NodeTransport=WF.VERSION=void 0;WF.nodeResolveHost=QW6;var r6=La(),s36=z0("net"),r91=z0("tls"),e36=z0("path"),Hu$=z0("fs"),$W6=a36(z0("dns")),ZW6=Fu$();WF.VERSION=ZW6.version;var XW6="nats.js";class Nu${socket;version;lang;yields=[];signal=(0,r6.deferred)();closedNotification=(0,r6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=XW6,this.version=WF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,r6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw r6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new r6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new r6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,r6.deferred)(),X,Q=(0,s36.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,r6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=r6.DataBuffer.concat(...this.yields),Y=(0,r6.extractProtocolMessage)(Q);if(Y!=="")try{let G=r6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,r6.deferred)();try{if($=(0,e36.resolve)($),!(0,Hu$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Hu$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,r6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,r6.deferred)();try{let Y=(0,r91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new r6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,r6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,r6.deferred)();try{let Q=(0,r91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new r6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,r6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,r6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof r91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,r6.render)($)}`);let Z=(0,r6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,r6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}WF.NodeTransport=Nu$;function QW6($){let Z=(0,r6.deferred)();return $W6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Lu$=_((Du$)=>{Object.defineProperty(Du$,"__esModule",{value:!0});Du$.connect=YW6;var Ou$=Uu$(),Bu$=La(),wu$=La();function YW6($={}){if((0,wu$.hasWsProtocol)($))return Promise.reject(wu$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Bu$.setTransportFactory)({factory:()=>{return new Ou$.NodeTransport},dnsResolveFn:Ou$.nodeResolveHost}),Bu$.NatsConnectionImpl.connect($)}});var Eu$=_((kN)=>{var JW6=kN&&kN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),WW6=kN&&kN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))JW6(Z,$,X)};Object.defineProperty(kN,"__esModule",{value:!0});kN.connect=void 0;var KW6=Lu$();Object.defineProperty(kN,"connect",{enumerable:!0,get:function(){return KW6.connect}});WW6(La(),kN)});function Au$($){let Z=$?.connectFn??UW6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:NW6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let D=nZ(HW6,FW6,B-1,2,0.5);await M$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?ju$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Pu$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function UW6($){return zu$.connect($)}var ju$,zu$,Pu$,FW6=100,HW6=3000,NW6=3000;var Tu$=w(()=>{u4();ju$=V(qu(),1),zu$=V(Eu$(),1),Pu$=V(uw(),1)});function a91($,Z){return`${$}.${Z}`}class s91{cache;constructor($){this.cache=Bh({ttlMs:$?.ttlMs??OW6,maxSize:$?.maxSize??BW6})}async get($,Z){return this.cache.get(a91($,Z))??null}async set($,Z,X){this.cache.set(a91($,Z),X)}async invalidate($,Z){this.cache.delete(a91($,Z))}teardown(){this.cache.clear()}}var OW6=600000,BW6=5000;var Ru$=()=>{};function NA0($,Z){return`${$}:${Z}`}function e91($){let Z=Bh({ttlMs:$?.ttlMs??wW6,maxSize:$?.maxSize??DW6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Iu$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(NA0(K,F))},set(K,F,H){Z.set(NA0(K,F),H)},invalidate(K,F){Z.delete(NA0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Iu$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(NA0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Iu$="studio.ai-provider-keys.invalidate",wW6=30000,DW6=5000;var qu$=()=>{};class $Z1{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Mu$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Mu$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Mu$;var ku$=w(()=>{Mu$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Vu$=($)=>{let Z;return()=>Z??=$()},ZZ1,XZ1;var Su$=w(()=>{R6();ZZ1=Vu$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),XZ1=Vu$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function TW6(){return{name:pH,subjects:[`${qw0}.>`],storage:KW.StorageType.File,max_age:jW6,max_bytes:PW6,max_msgs_per_subject:AW6,discard:KW.DiscardPolicy.Old,retention:KW.RetentionPolicy.Limits,duplicate_window:zW6,num_replicas:1}}class vu${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function Cu$($){let Z=_u$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function MW6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,EW6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function kW6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class QZ1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=TW6(),X=await v5(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await KW.jetstreamManager($);try{await Q.streams.info(pH),await Q.streams.update(pH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(pH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:kW6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=MW6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=BH$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Qo0(F,{runId:Z}),U=performance.now()-H;if(ZZ1().record(U),XZ1().add(1,{"org.id":Q??"unknown"}),qW6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?Cu$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(K(B),N++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),W(),IW6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Qo0(Z,{runId:$,dedup:X});if(ZZ1().record(performance.now()-Y),XZ1().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Cu$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=OH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?KW.DeliverPolicy.New:KW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=CB($),W;try{W=await(await Q.consumers.get(pH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=Cw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Mw0()).pipeThrough(kw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(pH,{filter:CB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var KW,_u$,LW6=($)=>{let Z;return()=>Z??=$()},EW6,jW6=86400000000000,zW6=120000000000,PW6=4294967296,AW6=500000,RW6,IW6,qW6;var fu$=w(()=>{u4();Yo0();_w0();Vw0();R6();Su$();KW=V(uw(),1),_u$=V(qu(),1),EW6=LW6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));RW6=process.env.STREAM_ENCODE_TRACE==="1",IW6=process.env.DECOPILOT_STREAM_TRACE==="1";qW6=RW6?new vu$:null});function UA0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,CW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var bu$=w(()=>{O8()});class YZ1{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function xu$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!Vr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await v6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),H8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var yu$=w(()=>{ZQ();Sr();l5()});function bW6($){return $ instanceof t7}function xW6($,Z){return Z-$>=vW6}class GZ1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??VW6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??CW6,X=this.options.itemIntervalMs??SW6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-tn0),uo0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-fW6));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await qt0(this.taskBoard,Y,Q),await Mt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==t8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await nH(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),bW6(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+_W6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),H8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!xW6(jH(X),Date.now()))return;await VK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===t8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await gy(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await xu$(J,Q,W.map((K)=>K.merged)))return!0;if(await qN$(J,Q))return!0;if(!Y)return!1;if(!xo0(W))return!1;return await gw0(J,Q,{previewMatchesHead:yo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var VW6=60000,SW6=300000,CW6=50,_W6=60000,vW6=900000,fW6=120000;var gu$=w(()=>{j9();ko0();dH();yn();yu$();l5();P3();co0();CK();Sn()});import{readdir as yW6,rm as OA0}from"fs/promises";import{join as BA0}from"path";async function wA0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-gW6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await y_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await hu$($,Y,Z);else if(!Y.startsWith(".")){let G=BA0($,Y),J=await y_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await hu$(G,K,Z)}if((await y_(G)).length===0)await OA0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function hu$($,Z,X){let Q=0,Y=BA0($,Z),G=await y_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=BA0(Y,W),F=await y_(K);for(let N of F){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=BA0(K,N);await OA0(O,{recursive:!0,force:!0}),Q++}}if((await y_(K)).length===0)await OA0(K,{recursive:!0,force:!0})}if((await y_(Y)).length===0)await OA0(Y,{recursive:!0,force:!0});return Q}async function y_($){try{return(await yW6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var gW6=30;var JZ1=()=>{};import{DBOS as WZ1,SchedulerMode as hW6}from"@dbos-inc/dbos-sdk";async function cW6(){let $=[VJ(),g_(),NF()],Z=0;for(let X of $)try{Z+=await wA0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function lW6($,Z){await WZ1.runStep(()=>cW6(),{name:"monitoringRetention"})}function cu$(){if(uu$)return;uu$=!0;let $=WZ1.registerWorkflow(lW6,{name:"monitoringRetentionWorkflow"});WZ1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:uW6,mode:hW6.ExactlyOncePerIntervalWhenActive})}var uW6="23 4 * * *",uu$=!1;var lu$=w(()=>{FY();JZ1()});function du$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await XJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await J61($.db,Z,Q.role);return Y.boundAuth=G61({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new zL(X,void 0,Y.boundAuth,Q.role,"self"),qB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var mu$=w(()=>{PL();FC()});function dW6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function iW6(){for(let $ of mW6)$()}function iu$($){let Z=[...KZ1.logs,$];KZ1={...KZ1,logs:Z.length>500?Z.slice(-500):Z},iW6()}function FZ1(){return pW6}var KZ1,mW6,pW6=!1;var HZ1=w(()=>{KZ1=dW6(),mW6=new Set});import{EventEmitter as nW6}from"events";var NZ1;var pu$=w(()=>{HZ1();NZ1=new nW6;NZ1.on("request",($)=>{iu$($)})});function nu$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Xu(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>Xu(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${G5.tool}${O}${G5.dim}(${L})${G5.reset}`}else if(U.method)G=`${G5.dim}${Xu(U.method)}${G5.reset}`}}catch{}}let W=Xu(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${G5.mcp}${Xu(H.slice(0,12))}\u2026${G5.reset}`}else if(Y==="/mcp")W=`${G5.mcp}/mcp${G5.reset}`;else if(Y==="/mcp/registry")W=`${G5.mcp}/mcp/registry${G5.reset}`;let K=oW6(Q),F=J?"\u25C0":"\u2190";if(!FZ1())console.log(`${G5.dim}${F}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=tW6(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!FZ1())console.log(`${G5.dim}${B}${G5.reset} ${K}${Q}${G5.reset} ${W}${G?` ${G}`:""} ${U}${N}${G5.reset} ${G5.duration}${O}${G5.reset}`);NZ1.emit("request",{method:Q,path:Xu(Y),status:N,duration:H,timestamp:new Date})}}}var G5,tW6=($)=>{if($>=500)return G5.serverError;if($>=400)return G5.clientError;if($>=300)return G5.redirect;return G5.ok},oW6=($)=>{return G5[$]||G5.reset},Xu=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var tu$=w(()=>{HZ1();pu$();G5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as su$}from"crypto";import{mkdir as rW6,readdir as aW6,rm as ou$,stat as eu$}from"fs/promises";import{join as OZ1,relative as sW6}from"path";import{z as P$}from"zod";function Zc$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return OZ1(eW6,Z)}function Xc$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function UZ1($,Z){let X=Zc$($),Q=Xc$(Z);return OZ1(X,Q)}function $K6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return su$("sha256",Y).update(G).digest("hex")}function au$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=$K6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Xc$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Qc$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${su$("md5","etag").update(Q).digest("hex")}"`}async function Yc$($,Z,X,Q,Y){try{let G=await aW6($,{withFileTypes:!0});for(let J of G){let W=OZ1($,J.name),F=sW6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await Yc$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await eu$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:Qc$(W,H.mtime,H.size)})}catch{}}}}catch{}}function Gc$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=Zc$(Q);await rW6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Yc$(H,H,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((L)=>L.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key),W=await eu$(J);return{contentType:m61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Qc$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ru$;return{url:au$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ru$;return{url:au$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=UZ1(Q,G.key);try{return await ou$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=UZ1(Q,K);try{await ou$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function BZ1($,Z,X){let Q=Gc$(Z,X),Y=new gW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new XQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),FJ(Y,G,$,"mcp:dev-assets")}async function Jc$($,Z,X,Q){let G=Gc$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var eW6="./data/assets",ru$=3600,$c$,Wc$;var Kc$=w(()=>{R$();my();D8();ol();zC();fX();KP0();$c$=new H1;$c$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return BZ1($.req.raw,Z,Q)});Wc$=$c$});var Fc$={};G4(Fc$,{mountDevRoutes:()=>ZK6});function ZK6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return BZ1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),F=await Jc$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Wc$);let X=new H1;X.use("*",JW({mountPath:"/api/dev-assets"})),X.route("/",WP0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Hc$=w(()=>{D8();y61();KP0();Kc$()});import{sql as XK6}from"kysely";import{randomUUID as Nc$}from"crypto";import{z as QK6}from"zod";async function GK6($){let Z=new Date().toISOString(),X=Nc$(),Q=m4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Nc$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await XK6`SELECT
|
|
2916
2916
|
pg_notify('studio_events', ${X}),
|