decocms 4.316.3 → 4.316.4
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-wcSqPJY6.js → AlertCircle-D9ruOTll.js} +1 -1
- package/dist/client/assets/{AreaChart-D6VgvALv.js → AreaChart-BUzAG-sY.js} +1 -1
- package/dist/client/assets/{ArrowLeft-WLfPi0mp.js → ArrowLeft-Cy2wtHjp.js} +1 -1
- package/dist/client/assets/{ArrowUp-DuZC5iV5.js → ArrowUp-IHvMe877.js} +1 -1
- package/dist/client/assets/{Check-bf_jS3TA.js → Check-CQfeFG0J.js} +1 -1
- package/dist/client/assets/{CheckCircle-BqQxgSfN.js → CheckCircle-DixvvXRD.js} +1 -1
- package/dist/client/assets/{ChevronDown-D2RyxW3i.js → ChevronDown-Bbw5EPde.js} +1 -1
- package/dist/client/assets/{ChevronRight-GRR3mbRS.js → ChevronRight-tjdYmgMU.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-DHThApL6.js → ChevronSelectorVertical-B4Cvz__S.js} +1 -1
- package/dist/client/assets/{ChevronUp-R3pSDqFU.js → ChevronUp-C1XvYJfE.js} +1 -1
- package/dist/client/assets/{Copy01-CDA0Ggj0.js → Copy01-DSb-jNps.js} +1 -1
- package/dist/client/assets/{CreditCard01-oYVxJcoG.js → CreditCard01-BIiFCQ9F.js} +1 -1
- package/dist/client/assets/{DotsVertical-rO3BkPH2.js → DotsVertical-CI2gmyko.js} +1 -1
- package/dist/client/assets/{Download01-DG4YxR8U.js → Download01-D-8foRIc.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-D4w4kv47.js → ErrorBarContext-DVWqFofm.js} +1 -1
- package/dist/client/assets/{Eye-CEqLGlGG.js → Eye-W4rwkQod.js} +1 -1
- package/dist/client/assets/{FilterLines-TPRFYanZ.js → FilterLines-BQjtHXf3.js} +1 -1
- package/dist/client/assets/{GitBranch01-DQ7mBKq5.js → GitBranch01-IBdYNZpQ.js} +1 -1
- package/dist/client/assets/{Globe01-Tg-2Apg9.js → Globe01-CG5k46z2.js} +1 -1
- package/dist/client/assets/{Globe04-BA1WqhYB.js → Globe04-Cpd4FTh9.js} +1 -1
- package/dist/client/assets/{HardDrive-CMtXWFji.js → HardDrive-Dv0xaiIp.js} +1 -1
- package/dist/client/assets/{Image01-vwEuG0om.js → Image01-CdbCiwl_.js} +1 -1
- package/dist/client/assets/{Key01-BY8K2Ozc.js → Key01-qRuP-y6n.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BLN8DEDZ.js → LinkExternal01-BoEtmXN6.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-CV8Zc5Em.js → LockUnlocked01-C-NC7nce.js} +1 -1
- package/dist/client/assets/{LogOut01-4Dsn9Dc8.js → LogOut01-OdlfriP6.js} +1 -1
- package/dist/client/assets/{Monitor01-fdsaJSPc.js → Monitor01-C7fqdG0G.js} +1 -1
- package/dist/client/assets/{Package-CKfpEh0_.js → Package-DaZUmOo6.js} +1 -1
- package/dist/client/assets/{Palette-BzMby0WS.js → Palette-DB3A9DRA.js} +1 -1
- package/dist/client/assets/{Play-BfA_FBIX.js → Play-1v7tfvf5.js} +1 -1
- package/dist/client/assets/{Plus-D-J4xWDE.js → Plus-BmEJZgvj.js} +1 -1
- package/dist/client/assets/{SearchLg-BHbinsbV.js → SearchLg-BzXCBCB7.js} +1 -1
- package/dist/client/assets/{SearchMd-CY2l8lvB.js → SearchMd-D_1cxfW2.js} +1 -1
- package/dist/client/assets/{Sector-Ddp29QOQ.js → Sector-BNrI_A0-.js} +1 -1
- package/dist/client/assets/{Settings02-CumraKTs.js → Settings02-BnXnky7g.js} +1 -1
- package/dist/client/assets/{Share07-rOsJbVfh.js → Share07-DFfisNQu.js} +1 -1
- package/dist/client/assets/{Shield01-BTNC3kSK.js → Shield01-QdmwV08k.js} +1 -1
- package/dist/client/assets/{Stars01-7Zz7jJ2E.js → Stars01-DwWfuZpa.js} +1 -1
- package/dist/client/assets/{Stars02-BJF7uN5h.js → Stars02-C13c8s2f.js} +1 -1
- package/dist/client/assets/{Sun-B3TGlz0S.js → Sun-th_JVwGQ.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BpcMPG02.js → SwitchHorizontal01-y0UkSoQd.js} +1 -1
- package/dist/client/assets/{Tool01-DjYX-VCy.js → Tool01-Cb3TWMVF.js} +1 -1
- package/dist/client/assets/{Tool02-dYk2F0hU.js → Tool02-BsQeYqfO.js} +1 -1
- package/dist/client/assets/{Trash01-ZGtwIKNn.js → Trash01-D6D8Si9-.js} +1 -1
- package/dist/client/assets/{TrendUp01-DtKB09ez.js → TrendUp01-B7XaqaFq.js} +1 -1
- package/dist/client/assets/{Upload01-DwRwsi41.js → Upload01-B5EcOFoA.js} +1 -1
- package/dist/client/assets/{User01-CLlZ3_UL.js → User01-UWqtuaJ1.js} +1 -1
- package/dist/client/assets/{UserSquare-BKSRLbxS.js → UserSquare-DpnVyAcN.js} +1 -1
- package/dist/client/assets/{Users01-BYU2fsit.js → Users01-BNVtip1D.js} +1 -1
- package/dist/client/assets/{Users03-C6T2NW-8.js → Users03-C5_CkqFZ.js} +1 -1
- package/dist/client/assets/{XCircle-C0by-m0d.js → XCircle-BUE5dbkT.js} +1 -1
- package/dist/client/assets/{XClose-Fmp8VJZ3.js → XClose-Dw9C8IS-.js} +1 -1
- package/dist/client/assets/{YAxis-BBrzDm2a.js → YAxis-CGQx5XiU.js} +1 -1
- package/dist/client/assets/{Zap-Dpli1hax.js → Zap-k5BPVmw8.js} +1 -1
- package/dist/client/assets/{ZapSquare-68V0_X9Z.js → ZapSquare-CnjOplZY.js} +1 -1
- package/dist/client/assets/{ZoomOut-Bh6qbaI_.js → ZoomOut-DNYRpGPR.js} +1 -1
- package/dist/client/assets/{access-gate-B1X8rofP.js → access-gate-rN8hJ2BC.js} +1 -1
- package/dist/client/assets/{agent-icon-r3-7AUSF.js → agent-icon-DtPy5BOM.js} +1 -1
- package/dist/client/assets/{agents-list-Br_TZCEa.js → agents-list-BrQraPPx.js} +1 -1
- package/dist/client/assets/{ai-providers-CvCbacLp.js → ai-providers-CrntVWIC.js} +1 -1
- package/dist/client/assets/{alert-B2UaIE-C.js → alert-B0iVoAxb.js} +1 -1
- package/dist/client/assets/{alert-dialog-CXWDAdaB.js → alert-dialog-CXRYD7aV.js} +1 -1
- package/dist/client/assets/{analytics-tab-D-zL5dj9.js → analytics-tab-D7wRpZzo.js} +1 -1
- package/dist/client/assets/{api-keys-Dy9MM7Vf.js → api-keys-DWNDpYDc.js} +1 -1
- package/dist/client/assets/{app-editor-UwcYRV7K.js → app-editor-DBX38jcA.js} +1 -1
- package/dist/client/assets/{auth-JXfJ0FTL.js → auth-Cvz6-6jE.js} +1 -1
- package/dist/client/assets/{auth-catchall-DyyLtUvs.js → auth-catchall-BXbrhXJG.js} +1 -1
- package/dist/client/assets/{auth-entry-2iuRR6z6.js → auth-entry-BWGtwPK9.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CJbo647t.js → auth-split-layout-DB6jRZmg.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Diz6OiCy.js → authenticate-and-persist-oauth-Coxv7Vgr.js} +1 -1
- package/dist/client/assets/{automation-list-row-DwwihOs8.js → automation-list-row-619aCxg1.js} +1 -1
- package/dist/client/assets/{automation-runs-ZsFAnbXX.js → automation-runs-DdeGywzL.js} +1 -1
- package/dist/client/assets/{automations-BB6IeeYX.js → automations-DHrVclwA.js} +1 -1
- package/dist/client/assets/{avatar-BuK36bwO.js → avatar-CYo7q3VJ.js} +1 -1
- package/dist/client/assets/{badge-FbFVe30o.js → badge-BGLxBEab.js} +1 -1
- package/dist/client/assets/{block-document-BMsFyOCk.js → block-document-DNl5B-YS.js} +1 -1
- package/dist/client/assets/{breadcrumb-DT9MgNIZ.js → breadcrumb-CN3dLk0-.js} +1 -1
- package/dist/client/assets/{buckets-DBx2m_Jq.js → buckets-Do_V2F4R.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-t_5okjwO.js → bulk-category-panel-D80J7KPy.js} +1 -1
- package/dist/client/assets/{capability-load-error-5cpzdyqr.js → capability-load-error-BMijKekw.js} +1 -1
- package/dist/client/assets/{cards-B_LcSgI1.js → cards-DqLJKsZM.js} +1 -1
- package/dist/client/assets/{category-editor-JTSrdz0s.js → category-editor-ARAi32T4.js} +1 -1
- package/dist/client/assets/{cdn-tab-COXm_5xP.js → cdn-tab-Ci836QUi.js} +1 -1
- package/dist/client/assets/{chart-ptqkWTJc.js → chart-DOy4LkLY.js} +1 -1
- package/dist/client/assets/{chat-context-NlfWybmP.js → chat-context-CLMgqExR.js} +1 -1
- package/dist/client/assets/{checkbox-Ca8e-mtw.js → checkbox-CuJCy_Vf.js} +1 -1
- package/dist/client/assets/{choose-editor-BeK7mmcF.js → choose-editor-BJC-ZcCJ.js} +1 -1
- package/dist/client/assets/{cli-auth-success-ZmyTPxm_.js → cli-auth-success-iiKKuBLH.js} +1 -1
- package/dist/client/assets/{collection-detail-CZgm-1g-.js → collection-detail-BNSQJboW.js} +1 -1
- package/dist/client/assets/{collection-display-button-GPGjlvkY.js → collection-display-button-wnargDTj.js} +1 -1
- package/dist/client/assets/{collection-search-CpkkBxCV.js → collection-search-BxDEVMuN.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DZcPhwun.js → collection-table-wrapper-BJML7SJ-.js} +1 -1
- package/dist/client/assets/{collection-tabs-f71Gej6V.js → collection-tabs-DrZLYcAN.js} +1 -1
- package/dist/client/assets/{command-CpjmV2JM.js → command-Bj6a9l8j.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-B7wTQmnw.js → commerce-onboarding-_uSIdLHM.js} +1 -1
- package/dist/client/assets/{config-MqxF3WPI.js → config-WuJBof9E.js} +1 -1
- package/dist/client/assets/{connect-ClqdETmd.js → connect-CGkgA9mB.js} +1 -1
- package/dist/client/assets/{connection-CNzeGbtE.js → connection-CVX6uXJ8.js} +1 -1
- package/dist/client/assets/{connection-card-BP0Def7T.js → connection-card-BiQLvfag.js} +1 -1
- package/dist/client/assets/{connection-detail-DpxdHiUq.js → connection-detail-BcopXxZm.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-WEZI5EYR.js → connection-form-helpers-DQWFVV9n.js} +1 -1
- package/dist/client/assets/{connections-DtQUAfTZ.js → connections-BouBZ_Y0.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-DT2zxZy2.js → decopilot-sse-pool-EZGaJkSr.js} +1 -1
- package/dist/client/assets/{dialog-B-cKWArt.js → dialog-Dj-xdSDO.js} +1 -1
- package/dist/client/assets/{domain-settings-Dm-PrbDf.js → domain-settings-BUD8ZX7E.js} +1 -1
- package/dist/client/assets/{drawer-yJw_ykac.js → drawer-ogyN5q_L.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DId3deQJ.js → dropdown-menu-CF4GgpKK.js} +1 -1
- package/dist/client/assets/{e2e-tab-Dyd5FvQp.js → e2e-tab-BA3Ae8jA.js} +1 -1
- package/dist/client/assets/{editor-ddsr-VU9.js → editor-DFiYS9Mx.js} +1 -1
- package/dist/client/assets/{empty-state-DyjkzQB-.js → empty-state-Cmh4O3Bf.js} +1 -1
- package/dist/client/assets/{empty-state-nos9AlFO.js → empty-state-GMZSrtLl.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CCkYM8mQ.js → extract-connection-data-CFjodDOw.js} +1 -1
- package/dist/client/assets/{file-explorer-BE55VclL.js → file-explorer-Bz1Un3aB.js} +1 -1
- package/dist/client/assets/{file-type-icon-sQtVyrte.js → file-type-icon-4epoDao8.js} +1 -1
- package/dist/client/assets/{folder-icon-Do0Be5-g.js → folder-icon-0gqlHPg-.js} +1 -1
- package/dist/client/assets/{form-BLXnpcgm.js → form-DmDzWCLu.js} +1 -1
- package/dist/client/assets/{general-FkiTyEJ7.js → general-Bfjie_IC.js} +1 -1
- package/dist/client/assets/{github-repo-picker-Drvm_PI3.js → github-repo-picker-DShJABm7.js} +1 -1
- package/dist/client/assets/{hooks-BdQY5CRK.js → hooks-C66yn5wp.js} +1 -1
- package/dist/client/assets/{hosting-tab-Cl-cs2tA.js → hosting-tab-DdBy-5sn.js} +1 -1
- package/dist/client/assets/{index-XeVtLmpW.js → index-B-W0HK2G.js} +1 -1
- package/dist/client/assets/{index-CB_QwZIr.js → index-Bk8CYqch.js} +1 -1
- package/dist/client/assets/{index-DsKWWu2d.js → index-BtI0C6KC.js} +1 -1
- package/dist/client/assets/{index-CZ6hGy12.js → index-CvxaZPo3.js} +12 -12
- package/dist/client/assets/{index-CBMqqWZd.js → index-DJLuLHBf.js} +1 -1
- package/dist/client/assets/{index-DhFurIZX.js → index-DYOslw5Q.js} +3 -3
- package/dist/client/assets/{index-CYdsc8Tj.js → index-DmSW6I6t.js} +1 -1
- package/dist/client/assets/{index-C9RZMW9Q.js → index-DuWICrqj.js} +1 -1
- package/dist/client/assets/{index-C2pa2-ZD.js → index-S3NJ2KFn.js} +1 -1
- package/dist/client/assets/{index-redirect-CtTnwaRN.js → index-redirect-D5pWJ_3h.js} +1 -1
- package/dist/client/assets/{infra-billing-hKltGRQO.js → infra-billing-DozKOkUU.js} +1 -1
- package/dist/client/assets/{input-mV6UtNEq.js → input-D6L-RGRl.js} +1 -1
- package/dist/client/assets/{integration-icon-DxwUDXSK.js → integration-icon-DAy0CCoS.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CnAXd1Lw.js → invite-member-dialog-CziVCAHd.js} +1 -1
- package/dist/client/assets/{label-Cleava8a.js → label-Gnh2CI8N.js} +1 -1
- package/dist/client/assets/{layout-BHv7DWFI.js → layout-DzRZvkRs.js} +1 -1
- package/dist/client/assets/{login-Bl56m8gV.js → login-DJ9OQQ-e.js} +1 -1
- package/dist/client/assets/{markdown-CnJZovTX.js → markdown-CxLjyonQ.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Ch8gt_HN.js → mcp-oauth-CB5aGa3N.js} +1 -1
- package/dist/client/assets/{members-81BN_JPO.js → members-C8bOznoJ.js} +1 -1
- package/dist/client/assets/{monaco-editor-Bvgi2bWd.js → monaco-editor-BbJQVKJI.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-rGSD_aRE.js → monitoring-stats-row-C7XOK4N2.js} +1 -1
- package/dist/client/assets/{multi-select-DIuYaZrm.js → multi-select-BN02TEni.js} +1 -1
- package/dist/client/assets/{oauth-callback-DVCgZ6U2.js → oauth-callback-Bxt5SlC5.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-lZYrjv1X.js → oauth-callback-ai-provider-CjshtBEO.js} +1 -1
- package/dist/client/assets/{onboarding-_2cFNeAh.js → onboarding-Bx_EFLi9.js} +1 -1
- package/dist/client/assets/{org-layout-S7h925qi.js → org-layout-CQ-emg3u.js} +1 -1
- package/dist/client/assets/{organization-choice-DmxB8yvk.js → organization-choice-D5lfbPkS.js} +1 -1
- package/dist/client/assets/{orgs-CuaBeupy.js → orgs-Bl4egcU0.js} +1 -1
- package/dist/client/assets/{page-seo-form-Buk9NPMp.js → page-seo-form-BJn1LVgT.js} +1 -1
- package/dist/client/assets/{popover-bhUJ6CBU.js → popover-BktzUeKH.js} +1 -1
- package/dist/client/assets/{post-calendar-BoF_31vh.js → post-calendar-DA8iix9i.js} +1 -1
- package/dist/client/assets/{post-editor-Digrvk_M.js → post-editor-BS10Oi9x.js} +1 -1
- package/dist/client/assets/{primitives-DyUPL-8C.js → primitives-D3J-Nuxu.js} +1 -1
- package/dist/client/assets/{profile-BXk-TYvk.js → profile-Dat0KHTk.js} +1 -1
- package/dist/client/assets/{project-app-view-CbOevrkX.js → project-app-view-D33TX7di.js} +1 -1
- package/dist/client/assets/{prompts-CG-30YfN.js → prompts-Cxy99tGo.js} +1 -1
- package/dist/client/assets/record-editor-CmWPQ7VD.js +1 -0
- package/dist/client/assets/{redirect-editor-CZ6lX-tf.js → redirect-editor-BgZFzhsI.js} +1 -1
- package/dist/client/assets/registry-BPwvnSbS.js +2 -0
- package/dist/client/assets/{registry-layout-D7jTwTVX.js → registry-layout-DCPGN-rN.js} +1 -1
- package/dist/client/assets/{reports-QPRlUnTm.js → reports-DGRfHRjG.js} +1 -1
- package/dist/client/assets/{require-capability-DfVWJ93A.js → require-capability-DNyq9RmN.js} +1 -1
- package/dist/client/assets/{required-auth-layout-COB7VCNA.js → required-auth-layout-CpMF_AWS.js} +1 -1
- package/dist/client/assets/{reset-password-iXtDRW8i.js → reset-password-BCzC1n62.js} +1 -1
- package/dist/client/assets/{review-settings-BkZz7MXC.js → review-settings-OooYqKsc.js} +1 -1
- package/dist/client/assets/{roles-CVWwdmAa.js → roles-89nxDOLN.js} +1 -1
- package/dist/client/assets/{scroll-area-Dj0bD7yv.js → scroll-area-BfiNt3Gu.js} +1 -1
- package/dist/client/assets/{search-input-BcQ38T0w.js → search-input-Zbyq9Vp4.js} +1 -1
- package/dist/client/assets/{secrets-xFFXFryG.js → secrets-DrBMI_m3.js} +1 -1
- package/dist/client/assets/{sections-editor-IsU60lch.js → sections-editor-dzEhDCcS.js} +1 -1
- package/dist/client/assets/{select-DjrxeLc6.js → select-Da9AG8Rq.js} +1 -1
- package/dist/client/assets/{select-model-DWM1shj2.js → select-model-Dl-JD0uN.js} +1 -1
- package/dist/client/assets/{self-tool-result-C8JPZUCj.js → self-tool-result-_t4OeQip.js} +1 -1
- package/dist/client/assets/{seo-editor-D2I_XcqK.js → seo-editor-D8ewu2vq.js} +1 -1
- package/dist/client/assets/{settings-layout-DDlqeGm0.js → settings-layout-SQmMH0EL.js} +1 -1
- package/dist/client/assets/{shell-controls-oMA3JTcG.js → shell-controls-IwChUud1.js} +1 -1
- package/dist/client/assets/{shell-layout-DcdFPEo1.js → shell-layout-Bi6zvURF.js} +1 -1
- package/dist/client/assets/{skill-preview-CKL7YEqd.js → skill-preview-C4qvx_-G.js} +1 -1
- package/dist/client/assets/{skills-BRBt9oLf.js → skills-CEK2BAC3.js} +1 -1
- package/dist/client/assets/{spinner-C3Bf3PyH.js → spinner-aKyVW8uE.js} +1 -1
- package/dist/client/assets/{sso-BaxJF4p9.js → sso-2tYjaeLG.js} +1 -1
- package/dist/client/assets/{store-JEvqQxkC.js → store-Dy-L7OLb.js} +1 -1
- package/dist/client/assets/store-registry-NbrAimu1.js +2 -0
- package/dist/client/assets/{super-agent-icon-DZGWzPq-.js → super-agent-icon-PtmR11_R.js} +1 -1
- package/dist/client/assets/{switch-COSA7YiF.js → switch-tH1yEGPj.js} +1 -1
- package/dist/client/assets/{synced-repos-jpCk0jV0.js → synced-repos-BINS4SYX.js} +1 -1
- package/dist/client/assets/{table-BrU9j7iJ.js → table-DqB4exg1.js} +1 -1
- package/dist/client/assets/{tabs-DVQAXruC.js → tabs--rIfh7U4.js} +1 -1
- package/dist/client/assets/{task-board-B01yAe5j.js → task-board-DR8FTPNy.js} +1 -1
- package/dist/client/assets/{tasks-BDBVR_Sc.js → tasks-Da9WUGdB.js} +1 -1
- package/dist/client/assets/{textarea-CTS2-uzw.js → textarea-B_aqpcss.js} +1 -1
- package/dist/client/assets/{thread-route-DdUdeFQx.js → thread-route-BycCvjGF.js} +1 -1
- package/dist/client/assets/{toggle-group-lpYyL7BM.js → toggle-group-CeyxRJzP.js} +1 -1
- package/dist/client/assets/{toolbar-tx4iqHBp.js → toolbar-CEaUbMBR.js} +1 -1
- package/dist/client/assets/{track-B9E3gOKq.js → track-BenJIghR.js} +1 -1
- package/dist/client/assets/{types-BvFj4cyT.js → types-B_dO6YrH.js} +1 -1
- package/dist/client/assets/{use-ai-providers-3cxH2VVQ.js → use-ai-providers-D3DFy95w.js} +1 -1
- package/dist/client/assets/{use-api-keys-ZohbDpmB.js → use-api-keys-6EJlQz90.js} +1 -1
- package/dist/client/assets/{use-automations-Bpi0V0Y3.js → use-automations-DPRGvkjo.js} +1 -1
- package/dist/client/assets/{use-autosave-CB38t4Xg.js → use-autosave-CZk6Nlxa.js} +1 -1
- package/dist/client/assets/{use-connection-CQ7VmRbB.js → use-connection-BNx0jAMu.js} +1 -1
- package/dist/client/assets/{use-copy-BV2I17v6.js → use-copy-ByAMMrM3.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-BS-P4n4V.js → use-create-virtual-mcp-BuyVIjmO.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-BCHxsazj.js → use-debounced-autosave-DA4ngFfM.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BzzLhnm1.js → use-debounced-value-DM88ZEQe.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-7Gn91QZI.js → use-decopilot-events-BMclxq3p.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CMFmDi-E.js → use-delete-connection-DlJUpJgG.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-O5465QGH.js → use-deployment-admin-B8q5gs2q.js} +1 -1
- package/dist/client/assets/{use-destination-route-DgdSGOiA.js → use-destination-route-BVcGigft.js} +1 -1
- package/dist/client/assets/{use-file-configs-BZpehwq9.js → use-file-configs-BBiX_rW7.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DvUClNlP.js → use-infinite-scroll-wTVDLwdt.js} +1 -1
- package/dist/client/assets/{use-join-requests-iweodQfU.js → use-join-requests-CZ1Xzi2I.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DJkrllMo.js → use-mcp-auth-status-DiAuPZ9T.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B_jYO9rk.js → use-mcp-client-Ce3cfHbK.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Cm0QrXv6.js → use-mcp-tools-WIUmxDJn.js} +1 -1
- package/dist/client/assets/{use-members-CecUh0On.js → use-members-32jU1kMZ.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BLlfPCa8.js → use-navigate-to-agent-C9f76ihW.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-C0BSFS7r.js → use-org-auth-client-BUE6zZ8l.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-jsQQzsNM.js → use-org-repo-syncs-Bj3YOdNR.js} +1 -1
- package/dist/client/assets/{use-org-sso-C8kNNb43.js → use-org-sso-esXD-2bN.js} +1 -1
- package/dist/client/assets/{use-organization-roles-CTcWtnYP.js → use-organization-roles-DdTGnxZc.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Bzym3R8N.js → use-organization-settings-cgMmvYyU.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BX95qtdU.js → use-panel-navigate-DlT-5qzN.js} +1 -1
- package/dist/client/assets/{use-registry-connections-ICYsLO5c.js → use-registry-connections-BQz0A_uq.js} +1 -1
- package/dist/client/assets/{use-secrets-CacBJCzP.js → use-secrets-DFz4U8Qv.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-Cq-32dKt.js → use-section-preview-base-DatgoTcg.js} +1 -1
- package/dist/client/assets/{use-status-sounds-D9NkXFCb.js → use-status-sounds-BI85ENEg.js} +1 -1
- package/dist/client/assets/{use-tags-Bp9eGPF_.js → use-tags-DFsaqCAq.js} +1 -1
- package/dist/client/assets/{use-view-mode-DjYA6GCt.js → use-view-mode-DjYB7S_h.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-D9yvcTOO.js → use-virtual-mcp-CsyLzuFI.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-CWy6_EvT.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-BNn8QDf2.js +1 -0
- package/dist/client/assets/{users-UmxBnaKD.js → users-LZUPdPoK.js} +1 -1
- package/dist/client/assets/{variant-calendar-Bl8kF89S.js → variant-calendar-BAXaau2d.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CudeGlWh.js → view-mode-toggle-SbW-zKtZ.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-CAmah3YT.js +0 -1
- package/dist/client/assets/registry-DEh5CWka.js +0 -2
- package/dist/client/assets/store-registry-C-B0CyV_.js +0 -2
- package/dist/client/assets/useInfiniteQuery-aCkGnvxQ.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DXFVDY05.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2981,7 +2981,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
2981
2981
|
${G.join(`
|
|
2982
2982
|
`)}`:Y}function CB6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2983
2983
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var rd$=200,PB6=12,TB6,IB6=300,KX1=3;var HX1=D(()=>{QL();yT0();TB6={aheadBy:0,behindBy:0,files:[]}});function vB6($){if(!$||$.includes(".."))return!1;return _B6.test($)}function ad$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!vB6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function ed$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var _B6;var $m$=D(()=>{_B6=/^[\w./@-]+$/});function fa($,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 Zm$($,Z,X,Q){if(!Q.connectionId)throw new kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new kv(K9);await cO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:K9;throw new kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await bK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=j9$(F instanceof Error?F.message:String(F));throw N?new kv(U):F}),K=Jl($),H=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(!H.ok){let F=await lO(H,fB6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var fB6=10485760,kv;var FX1=D(()=>{FJ();qT0();Tn();mi0();dy();kv=class kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function xB6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!bB6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Vv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(gB6)])}async function uB6($,Z){let X=$.var.studioContext,Q=KJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=kC(J?.metadata?.runtime);if(W)return W;let K=OD0(Z.virtualMcpMetadata),H=K==="cms"?await m71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)en(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function lB6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WQ($.var.studioContext)}catch{return null}}function Sv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Nl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=fa(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return MT0(Q,G.id,Y)}function NX1($,Z){if(Z instanceof SA0)return $.json({error:Z.message},429,{...T5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,T5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,T5)}async function Ym$($,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 Gm$($){try{let Z=await Nl($),X=await gT0(Z,$.get("vmClaim").branch);return $.json(X,200,T5)}catch(Z){return NX1($,Z)}}function ba($,Z){let Q=(lT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return lT0.set($,Y),Y.finally(()=>{if(lT0.get($)===Y)lT0.delete($)}),Q}async function X7($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,T5);let Q=X?.runner??Sv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...T5}})}}let O=await B.text(),L=X?.redactRepoDir?cB6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...T5}})};try{if(F){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function cB6($){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 cT0($,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 dB6($){return Jm$.includes($)}var bB6,Xm$=524288,yB6=65536,gB6=1e4,Qm$=2000,hB6,lT0,T5,Jm$,Wm$=()=>{let $=new K1;$.use("/:virtualMcpId/:branch/*",hB6),$.post("/:virtualMcpId/:branch/write",(X)=>X7(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>X7(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>X7(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>X7(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>X7(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>X7(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>X7(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Vv(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 X7(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 X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!dB6(Q))return X.json({error:`step must be one of: ${Jm$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await m71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await lB6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,T5);if(Q==="start"){let J=n(X.var.studioContext),W=ly(Y.virtualMcpMetadata);try{await S70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return X7(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return XU(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 Wd$(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").runtime==="cms")return Gm$(X);return Z(X)});let Z=(X)=>X7(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Qm$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Gm$(X);return X7(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Qm$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Nl(X),J=await hT0(G,Q.branch,Y.base);return X.json(J,200,T5)}catch(Y){return NX1(X,Y)}return X7(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,T5);let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return ba(Y,async()=>{try{await i71(W,Q,Y);let K=fa(G,J);if(K)await Zm$(W,Q,Y,K)}catch(K){if(K instanceof kv)return X.json({error:K.message},403,T5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,T5)}return X7(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ba(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,T5);try{let J=await Nl(X);return await sd$(J,Q.branch,G),X.json({ok:!0},200,T5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,T5)}});return ba(Q.claimName,()=>X7(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return ba(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Nl(X),H=W.base??await K.getDefaultBranch();return await uT0(K,Q.branch,H),X.json({ok:!0},200,T5)}catch(W){return NX1(X,W)}});let Y=Sv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return ba(G,async()=>{try{await i71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,T5)}return X7(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",o5({maxSize:Xm$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=t71(F)&&U?[F,N]:Y?await Promise.all([cT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),cT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Nl(X);return Promise.all([gT0(w,Q.branch),hT0(w,Q.branch)])})(),L=await Ud$(K,B,O);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",o5({maxSize:Xm$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=t71(F)&&U?[F,N]:Y?await Promise.all([cT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),cT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Nl(X);return Promise.all([gT0(w,Q.branch),hT0(w,Q.branch)])})(),L=await Od$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Sv(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(/\/+$/,"");return Ym$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",o5({maxSize:yB6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Sv(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=ad$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=ed$(G,W.resolveType);return Ym$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Km$=D(()=>{Q8();kH();Gl();d71();En();Yd$();n3();Jg();Gd$();a3();Jd$();Kd$();li0();Pn();s71();Dd$();e71();QL();HX1();$m$();FX1();bB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;hB6=IT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(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{xB6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},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=Ln({orgId:Y.id,virtualMcpId:G,branch:J}),H=await bi0(X,J),F=xi0(H,Q),N=Qd$({userId:F,projectRef:K}),U=W.metadata??null,B=await uB6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await WQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});lT0=new Map;T5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Jm$=["clone","install","start"]});function Hm$($,Z,X){let Q=UX1.get($);if(!Q)Q={pending:null,running:!1},UX1.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)iB6($,Q);return G}async function iB6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await pB6(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)UX1.delete($)}}async function pB6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Fl(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=JX1(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=WX1(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2984
|
-
`,j=await Z.createBlob(E);await nd$(Z.owner,Z.repo,j,E);let z=w[0]??`${xT0(Q)}/${ZX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of WX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Sa(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:nB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=mB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function nB6($){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 Vi0(Q,$.deps.coAuthor)}var mB6=3,UX1;var Fm$=D(()=>{KD0();VT0();W4();QL();yT0();UX1=new Map});import{createHmac as Nm$,randomBytes as tB6,timingSafeEqual as oB6}from"crypto";function Um$(){if(dT0)return dT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dT0=$?Buffer.from($):tB6(32),dT0}function BX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+rB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Nm$("sha256",Um$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bm$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Nm$("sha256",Um$()).update(Q).digest("base64url"));if(Y.length!==G.length||!oB6(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 rB6=21600000,dT0=null;var Om$=D(()=>{E$()});import{z as Ul}from"zod";function aB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&sB6.test($)}function jm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function xa($){let Z=$.get("decofileScope");return MT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ya($,Z){if(Z instanceof h4){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 zm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Em$),$.use("/:virtualMcpId/:branch/*",Em$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(Z),Y=await td$(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=BX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(jm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ya(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await xa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ya(Z,Y)}}),$.patch("/:virtualMcpId/:branch",$O6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=ZO6.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{kT0(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);if($X1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await xa(Z),W=await Hm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jl(Q)},G),K=BX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:jm$(Z)})}catch(J){return ya(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(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 h4&&W.status===409))throw W;await uT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&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 ya(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ya(Z,Q)}}),$}var sB6,Dm$=500,Lm$=1048576,wm$=1024,eB6=8388608,$O6,ZO6,Em$;var Pm$=D(()=>{Ut0();VT0();Q8();kH();d71();qT0();FX1();e71();Fm$();Om$();HX1();QL();yT0();sB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$O6=o5({maxSize:eB6,onError:($)=>$.json({error:"Payload too large"},413)}),ZO6=Ul.object({set:Ul.record(Ul.string(),Ul.unknown()).optional(),delete:Ul.array(Ul.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Dm$,{message:`Patch cannot touch more than ${Dm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Lm$),{message:`Each block must be at most ${Lm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=wm$),{message:`Each block key must be at most ${wm$} characters`}),Em$=IT0(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(!aB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Bm$(B,{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(!BD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=fa(K,F);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 Am$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",uA0()),Z.route("/",gh$()),Z.route("/",mc$()),Z.route("/",lc$()),Z.route("/",AT0()),Z.route("/tools",sc$()),Z.route("/",tc$()),Z.route("/",zc$({kvStorage:$.kvStorage})),Z.route("/",Ec$()),Z.route("/fs",fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wm$()),Z.route("/decofile",zm$()),Z.route("/",gc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",Mh$()),Z.route("/monitor",fh$()),Z.route("/sso",fA0()),Z.route("/",TT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",zh$()),$.mountDevAssets)Z.route("/dev-assets",iA0({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("/",lx$()),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",xc$()),Z.route("/mcp",mw0()),Z.route("/mcp/self",PT0()),Z.route("/mcp",nw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Tm$=D(()=>{Q8();HZ1();Ph$();BZ1();kh$();bh$();pA0();Xa();WZ1();jc$();Pc$();bc$();Ho();ZZ1();tw0();x71();yc$();hc$();cc$();ic$();oc$();g71();ac$();h71();iw0();Km$();Pm$()});function XO6($){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 QO6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Rm$=()=>{let $=new K1;return $.use("*",QO6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:XO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Im$=D(()=>{Q8();E$();gP0()});import{z as k1}from"zod";function fH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function BO6($){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 OO6($,Z,X){try{return JSON.parse($)}catch{throw new km$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function DO6($){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:OO6(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 LO6($){let Z=$.map((X)=>{let Q=X.function.parameters?eY(X.function.parameters):eY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function wO6($){if(!$)return;return{openai:{response_format:$}}}function EO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qm$($,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 Mm$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var YO6=256,GO6,JO6,WO6,KO6,HO6,FO6,NO6,UO6,km$,Vm$,Sm$;var Cm$=D(()=>{c4();Q8();Gl();bN();GO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),JO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),WO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(JO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),KO6=k1.object({type:k1.literal("text")}),HO6=k1.object({type:k1.literal("json_object")}),FO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),NO6=k1.union([KO6,HO6,FO6]),UO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(WO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(GO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:NO6.optional(),user:k1.string().optional()});km$=class km$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vm$=new K1;Vm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(fH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(fH("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(fH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=UO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(fH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=BO6(G.model);if(!J)return $.json(fH("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)=>jw(j.providerId));if(!E)return $.json(fH("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 H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(fH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=DO6(G.messages),U=G.tools?LO6(G.tools):void 0,B=wO6(G.response_format),O=EO6(),L=Math.floor(Date.now()/1000);if(G.stream)return XU($,async(w)=>{let E=qm$(F,N,U,G,B,$.req.raw.signal);try{let j=xO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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>=YO6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Mm$(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 w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=qm$(F,N,U,G,B,$.req.raw.signal),E=await fO(w),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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Mm$(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(fH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(fH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(fH(Y.message,"server_error"),500)}});Sm$=Vm$});function jO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function _m$(){let $=new K1;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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!QJ(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 H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(re1(N)!==G)continue;if(!jO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var vm$=D(()=>{Q8();LO()});var bm$;var fm$=D(()=>{bm$={name:"decocms",version:"4.316.3",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","@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 AO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??PO6}}var xm$,PO6="https://ph.studio.decocms.com",ym$;var gm$=D(()=>{Q8();K90();aC();Q9();E$();p91();fm$();xm$=new K1;xm$.get("/",($)=>{let Z={version:bm$.version,theme:Up1(),...fF().logo&&{logo:fF().logo},...AN()&&{internalUrl:c_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Sg$(),posthog:AO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ia()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ym$=xm$});function Bl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function OX1($){return(Bl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function um$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Bl($))}&sz=${Z}`}function hm$($,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 lm$($){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()?hm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,TO6,RO6,IO6,qO6,cm$;var dm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),TO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),RO6=c0.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},c0.array(TO6)),IO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},qO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(RO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),cm$=c0.object({...IO6,template:qO6})});function mT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=cm$.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 DX1=D(()=>{dm$()});import{join as mm$}from"path";async function kO6($){try{let Z=await fetch(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(MO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=mT0(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()||OX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function AG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function VO6($,Z){let X=Bl($),Q=Z?.brand?.trim()||OX1(X),Y=um$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=lm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${AG(W)}</title>`,`<meta name="description" content="${AG(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="${AG(W)}" />`,`<meta property="og:description" content="${AG(K)}" />`,`<meta property="og:url" content="${AG(J)}" />`,`<meta property="og:image" content="${AG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${AG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${AG(W)}" />`,`<meta name="twitter:description" content="${AG(K)}" />`,`<meta name="twitter:image" content="${AG(H)}" />`,`<meta name="twitter:image:alt" content="${AG(F)}" />`,`<link rel="canonical" href="${AG(J)}" />`,`<link rel="icon" href="${AG(Y)}" sizes="any" />`].join(`
|
|
2984
|
+
`,j=await Z.createBlob(E);await nd$(Z.owner,Z.repo,j,E);let z=w[0]??`${xT0(Q)}/${ZX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of WX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Sa(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:nB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=mB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function nB6($){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 Vi0(Q,$.deps.coAuthor)}var mB6=3,UX1;var Fm$=D(()=>{KD0();VT0();W4();QL();yT0();UX1=new Map});import{createHmac as Nm$,randomBytes as tB6,timingSafeEqual as oB6}from"crypto";function Um$(){if(dT0)return dT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return dT0=$?Buffer.from($):tB6(32),dT0}function BX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+rB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Nm$("sha256",Um$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Bm$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Nm$("sha256",Um$()).update(Q).digest("base64url"));if(Y.length!==G.length||!oB6(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 rB6=21600000,dT0=null;var Om$=D(()=>{E$()});import{z as Ul}from"zod";function aB6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&sB6.test($)}function jm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function xa($){let Z=$.get("decofileScope");return MT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function ya($,Z){if(Z instanceof h4){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 zm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",Em$),$.use("/:virtualMcpId/:branch/*",Em$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(Z),Y=await td$(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=BX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(jm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return ya(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await xa(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return ya(Z,Y)}}),$.patch("/:virtualMcpId/:branch",$O6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=ZO6.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{kT0(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);if($X1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await xa(Z),W=await Hm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Jl(Q)},G),K=BX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:jm$(Z)})}catch(J){return ya(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(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 h4&&W.status===409))throw W;await uT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&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 ya(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await xa(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return ya(Z,Q)}}),$}var sB6,Dm$=500,Lm$=1048576,wm$=1024,eB6=8388608,$O6,ZO6,Em$;var Pm$=D(()=>{Ut0();VT0();Q8();kH();d71();qT0();FX1();e71();Fm$();Om$();HX1();QL();yT0();sB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;$O6=o5({maxSize:eB6,onError:($)=>$.json({error:"Payload too large"},413)}),ZO6=Ul.object({set:Ul.record(Ul.string(),Ul.unknown()).optional(),delete:Ul.array(Ul.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Dm$,{message:`Patch cannot touch more than ${Dm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Lm$),{message:`Each block must be at most ${Lm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=wm$),{message:`Each block key must be at most ${wm$} characters`}),Em$=IT0(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(!aB6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Bm$(B,{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(!BD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=fa(K,F);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 Am$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",uA0()),Z.route("/",gh$()),Z.route("/",mc$()),Z.route("/",lc$()),Z.route("/",AT0()),Z.route("/tools",sc$()),Z.route("/",tc$()),Z.route("/",zc$({kvStorage:$.kvStorage})),Z.route("/",Ec$()),Z.route("/fs",fc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Wm$()),Z.route("/decofile",zm$()),Z.route("/",gc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",Mh$()),Z.route("/monitor",fh$()),Z.route("/sso",fA0()),Z.route("/",TT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",zh$()),$.mountDevAssets)Z.route("/dev-assets",iA0({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("/",lx$()),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",xc$()),Z.route("/mcp",mw0()),Z.route("/mcp/self",PT0()),Z.route("/mcp",nw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Tm$=D(()=>{Q8();HZ1();Ph$();BZ1();kh$();bh$();pA0();Xa();WZ1();jc$();Pc$();bc$();Ho();ZZ1();tw0();x71();yc$();hc$();cc$();ic$();oc$();g71();ac$();h71();iw0();Km$();Pm$()});function XO6($){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 QO6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Rm$=()=>{let $=new K1;return $.use("*",QO6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:XO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Im$=D(()=>{Q8();E$();gP0()});import{z as k1}from"zod";function fH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function BO6($){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 OO6($,Z,X){try{return JSON.parse($)}catch{throw new km$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function DO6($){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:OO6(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 LO6($){let Z=$.map((X)=>{let Q=X.function.parameters?eY(X.function.parameters):eY({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function wO6($){if(!$)return;return{openai:{response_format:$}}}function EO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function qm$($,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 Mm$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var YO6=256,GO6,JO6,WO6,KO6,HO6,FO6,NO6,UO6,km$,Vm$,Sm$;var Cm$=D(()=>{c4();Q8();Gl();bN();GO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),JO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),WO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(JO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),KO6=k1.object({type:k1.literal("text")}),HO6=k1.object({type:k1.literal("json_object")}),FO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),NO6=k1.union([KO6,HO6,FO6]),UO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(WO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(GO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:NO6.optional(),user:k1.string().optional()});km$=class km$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Vm$=new K1;Vm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(fH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(fH("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(fH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=UO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(fH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=BO6(G.model);if(!J)return $.json(fH("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)=>jw(j.providerId));if(!E)return $.json(fH("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 H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(fH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=DO6(G.messages),U=G.tools?LO6(G.tools):void 0,B=wO6(G.response_format),O=EO6(),L=Math.floor(Date.now()/1000);if(G.stream)return XU($,async(w)=>{let E=qm$(F,N,U,G,B,$.req.raw.signal);try{let j=xO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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>=YO6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Mm$(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 w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=qm$(F,N,U,G,B,$.req.raw.signal),E=await fO(w),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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Mm$(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(fH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(fH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(fH(Y.message,"server_error"),500)}});Sm$=Vm$});function jO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function _m$(){let $=new K1;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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!QJ(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 H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(re1(N)!==G)continue;if(!jO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var vm$=D(()=>{Q8();LO()});var bm$;var fm$=D(()=>{bm$={name:"decocms",version:"4.316.4",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","@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 AO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??PO6}}var xm$,PO6="https://ph.studio.decocms.com",ym$;var gm$=D(()=>{Q8();K90();aC();Q9();E$();p91();fm$();xm$=new K1;xm$.get("/",($)=>{let Z={version:bm$.version,theme:Up1(),...fF().logo&&{logo:fF().logo},...AN()&&{internalUrl:c_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Sg$(),posthog:AO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ia()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ym$=xm$});function Bl($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function OX1($){return(Bl($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function um$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Bl($))}&sz=${Z}`}function hm$($,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 lm$($){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()?hm$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):hm$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,TO6,RO6,IO6,qO6,cm$;var dm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),TO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.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 $})),RO6=c0.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},c0.array(TO6)),IO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},qO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(RO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),cm$=c0.object({...IO6,template:qO6})});function mT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=cm$.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 DX1=D(()=>{dm$()});import{join as mm$}from"path";async function kO6($){try{let Z=await fetch(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(MO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=mT0(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()||OX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function AG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function VO6($,Z){let X=Bl($),Q=Z?.brand?.trim()||OX1(X),Y=um$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=lm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${AG(W)}</title>`,`<meta name="description" content="${AG(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="${AG(W)}" />`,`<meta property="og:description" content="${AG(K)}" />`,`<meta property="og:url" content="${AG(J)}" />`,`<meta property="og:image" content="${AG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${AG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${AG(W)}" />`,`<meta name="twitter:description" content="${AG(K)}" />`,`<meta name="twitter:image" content="${AG(H)}" />`,`<meta name="twitter:image:alt" content="${AG(F)}" />`,`<link rel="canonical" href="${AG(J)}" />`,`<link rel="icon" href="${AG(Y)}" sizes="any" />`].join(`
|
|
2985
2985
|
`)}function SO6($,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}
|
|
2986
2986
|
</head>`)}function im$($){let Z=new K1;return Z.get("/:domain/og.png",async(X)=>{let Q=Bl(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(mm$($,"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(`${LK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(CO6)}),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=$?mm$($,"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 kO6(Bl(Q)),K=VO6(Q,W);return X.html(SO6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var MO6=2500,CO6=1e4;var pm$=D(()=>{Q8();DX1();AE();E$()});function ga($,Z){return fetch(`${LK({})}${$}`,Z)}async function _O6($,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 ga(`/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}=mT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var vO6,YU,nm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},tm$;var om$=D(()=>{Q8();oY();AE();DX1();vO6=new Set(["complete","errored","terminated","unknown"]),YU=new K1;YU.use("*",async($,Z)=>{let X=await e$.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});YU.use("/link-token/*",nm$);YU.use("/suggest",nm$);YU.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 _O6(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)}});YU.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 ga("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PE({})}`},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)}});YU.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await ga(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:vO6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});YU.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await ga(`/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)}});YU.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await ga(`/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:[]})}});tm$=YU});import{createHmac as fO6,timingSafeEqual as bO6}from"crypto";function sm$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+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)>xO6)return!1;let W=fO6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&bO6(K,F)})}function am$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mJ(Z),Q=mJ(mJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:bH(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 em$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function bH($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function iT0($){return typeof $==="number"?new Date($*1000):null}function EX1($){return bH($)??bH(mJ($)?.id)}function yO6($){return EX1($.subscription)??bH(mJ(mJ($.parent)?.subscription_details)?.subscription)}function gO6($){let Z=iT0($.current_period_end);if(Z)return Z;let X=mJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function LX1($,Z){let X=iT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function wX1($,Z){let X=iT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function hO6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=bH(mJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(bH(mJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(bH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=bH(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(mJ(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:mJ(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(bH(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=EX1(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(LX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:EX1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:wX1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=bH(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&&LX1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":em$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:gO6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:wX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=yO6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(LX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:iT0(X.period_end),lastStripeEventAt:wX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function uO6($,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:em$(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 rm$($,Z){let X=uO6($,Z);if(!X)return;iY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:zt1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function $i$($){let Z=new UK(r8().db),X=await hO6(Z,$);if(!(X.handled&&X.topUp))rm$($,X);if(X.handled&&X.topUp)await Nz$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),rm$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await t0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof rY&&(Q.status===400||Q.status===404)))throw Q}return X}var xO6=300;var Zi$=D(()=>{rG();S4();l50();_E();q11()});var lO6=1048576,jX1;var Xi$=D(()=>{Q8();kH();E$();Zi$();jX1=new K1;jX1.post("/webhook",o5({maxSize:lO6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=C0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!sm$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=am$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await $i$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as cO6}from"crypto";function mO6($,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 cO6(Buffer.from(Y),Buffer.from(Q))}var dO6=5242880,zX1;var Qi$=D(()=>{Q8();kH();a3();zX1=new K1;zX1.post("/webhook",o5({maxSize:dO6,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(!mO6(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 Ft0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Yi$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Gi$,iO6,pO6,Ji$;var Wi$=D(()=>{Q8();S3();_g();zy();Gi$=new K1,iO6=["range","if-none-match","if-modified-since"],pO6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Gi$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(hu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await ft(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&$J()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Yi$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of iO6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(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 Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of pO6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Yi$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Ji$=Gi$});var ha=_((_v)=>{var nO6=_v&&_v.__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]}),tO6=_v&&_v.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))nO6(Z,$,X)};Object.defineProperty(_v,"__esModule",{value:!0});tO6(SY(),_v)});var Fi$=_((Ki$)=>{Object.defineProperty(Ki$,"__esModule",{value:!0});Ki$.version=void 0;Ki$.version="3.4.0"});var Bi$=_((xH)=>{var oO6=xH&&xH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(xH,"__esModule",{value:!0});xH.NodeTransport=xH.VERSION=void 0;xH.nodeResolveHost=ZD6;var $5=ha(),rO6=A0("net"),PX1=A0("tls"),sO6=A0("path"),Ni$=A0("fs"),aO6=oO6(A0("dns")),eO6=Fi$();xH.VERSION=eO6.version;var $D6="nats.js";class Ui${socket;version;lang;yields=[];signal=(0,$5.deferred)();closedNotification=(0,$5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=$D6,this.version=xH.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,$5.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 $5.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 $5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new $5.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,$5.deferred)(),X,Q=(0,rO6.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,$5.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=$5.DataBuffer.concat(...this.yields),Y=(0,$5.extractProtocolMessage)(Q);if(Y!=="")try{let G=$5.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,$5.deferred)();try{if($=(0,sO6.resolve)($),!(0,Ni$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Ni$.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,$5.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new $5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,$5.deferred)();try{let Y=(0,PX1.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 $5.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,$5.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new $5.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,$5.deferred)();try{let Q=(0,PX1.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 $5.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,$5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,$5.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 PX1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,$5.render)($)}`);let Z=(0,$5.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,$5.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,$5.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}}xH.NodeTransport=Ui$;function ZD6($){let Z=(0,$5.deferred)();return aO6.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 Ei$=_((wi$)=>{Object.defineProperty(wi$,"__esModule",{value:!0});wi$.connect=XD6;var Oi$=Bi$(),Di$=ha(),Li$=ha();function XD6($={}){if((0,Li$.hasWsProtocol)($))return Promise.reject(Li$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Di$.setTransportFactory)({factory:()=>{return new Oi$.NodeTransport},dnsResolveFn:Oi$.nodeResolveHost}),Di$.NatsConnectionImpl.connect($)}});var ji$=_((GU)=>{var YD6=GU&&GU.__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]}),GD6=GU&&GU.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))YD6(Z,$,X)};Object.defineProperty(GU,"__esModule",{value:!0});GU.connect=void 0;var JD6=Ei$();Object.defineProperty(GU,"connect",{enumerable:!0,get:function(){return JD6.connect}});GD6(ha(),GU)});function Ti$($){let Z=$?.connectFn??FD6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:HD6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=G7(KD6,WD6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?zi$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Ai$.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 FD6($){return Pi$.connect($)}var zi$,Pi$,Ai$,WD6=100,KD6=3000,HD6=3000;var Ri$=D(()=>{W4();zi$=V(gl(),1),Pi$=V(ji$(),1),Ai$=V(LU(),1)});function AX1($,Z){return`${$}.${Z}`}class TX1{cache;constructor($){this.cache=zu({ttlMs:$?.ttlMs??ND6,maxSize:$?.maxSize??UD6})}async get($,Z){return this.cache.get(AX1($,Z))??null}async set($,Z,X){this.cache.set(AX1($,Z),X)}async invalidate($,Z){this.cache.delete(AX1($,Z))}teardown(){this.cache.clear()}}var ND6=600000,UD6=5000;var Ii$=()=>{};function pT0($,Z){return`${$}:${Z}`}function RX1($){let Z=zu({ttlMs:$?.ttlMs??BD6,maxSize:$?.maxSize??OD6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(qi$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(pT0(K,H))},set(K,H,F){Z.set(pT0(K,H),F)},invalidate(K,H){Z.delete(pT0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(qi$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(pT0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var qi$="studio.ai-provider-keys.invalidate",BD6=30000,OD6=5000;var Mi$=()=>{};class IX1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)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}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var ki$=($)=>{let Z;return()=>Z??=$()},qX1,MX1;var Vi$=D(()=>{G6();qX1=ki$(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),MX1=ki$(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function PD6($=_i$){return{name:ZH,subjects:[`${xs0}.>`],storage:IW.StorageType.File,max_age:wD6,max_bytes:jD6,max_msgs_per_subject:zD6,discard:IW.DiscardPolicy.Old,retention:IW.RetentionPolicy.Limits,duplicate_window:ED6,num_replicas:$}}class vi${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 Si$($){let Z=Ci$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function ID6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,LD6().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 qD6($,Z){return $.info?.cluster?Z:1}function MD6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class kX1{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=async(Q,Y)=>{let G=PD6(Y);try{await Q.streams.info(ZH),await Q.streams.update(ZH,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(ZH,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(ZH),await Q.streams.add(G);else throw J}},X=await h6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await IW.jetstreamManager($),Y=qD6($,_i$);try{await Z(Q,Y)}catch(G){if(Y<=1||!MD6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:dg});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=ID6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=sO$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=gs0(H,{runId:Z}),U=performance.now()-F;qX1().record(U),MX1().add(1,{"org.id":Q??"unknown"}),RD6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Si$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),TD6)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 publishSerialized($,Z){try{return await h6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Si$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:dg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=gs0(Z,{runId:$,dedup:X});qX1().record(performance.now()-Y),MX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=rO$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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"?IW.DeliverPolicy.New:IW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=jD($),W;try{W=await h6(async()=>{return(await Q.consumers.get(ZH,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:dg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Rw0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(zw0()).pipeThrough(Pw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(ZH,{filter:jD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var IW,Ci$,DD6=($)=>{let Z;return()=>Z??=$()},LD6,wD6=86400000000000,ED6=120000000000,jD6=4294967296,_i$,zD6=500000,AD6,TD6,RD6;var fi$=D(()=>{W4();hs0();Iw0();Aw0();G6();Vi$();IW=V(LU(),1),Ci$=V(gl(),1),LD6=DD6(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),_i$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);AD6=process.env.STREAM_ENCODE_TRACE==="1",TD6=process.env.DECOPILOT_STREAM_TRACE==="1";RD6=AD6?new vi$:null});function nT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,tW(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 bi$=D(()=>{_8()});class VX1{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 xi$($,Z,X){let Q=Z.organizationId;if(!XY(Z,(await N9($,Q)).review))return!1;if(!cC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=qK(Y?.flags),J=await t6($,Q),W=await $.storage.taskBoard.update(Z.id,Q,OJ(J,G),Z.updatedBy);return await A6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var yi$=D(()=>{j6();BX();Ig();v5();pK();z5()});function fD6($){return $ instanceof $Q}function bD6($,Z){return Z-$>=_D6}class SX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??kD6;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??SD6,X=this.options.itemIntervalMs??VD6,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()-Zo0),Er0);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()-vD6));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 Dr0(this.taskBoard,Y,Q,await HN(this.db,Q)),await Lr0(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!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await jN(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),fD6(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()+CD6),(await HN(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await HN(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x$(Z,G)}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(!bD6(iF(X,Z.reviewCycleStartedAt),Date.now()))return;await tK($,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;let Y=await HN(this.db,Z);if(!XY(Q,Y.review))return!1;let G=Q.assigneeId===Y8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await Mg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await xi$(W,Q,K))return!0;if(await cD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!Xr0(K))return!1;return await kL0(W,Q,{previewMatchesHead:Qr0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await ND($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var kD6=60000,VD6=300000,SD6=50,CD6=60000,_D6=900000,vD6=120000;var gi$=D(()=>{v5();j6();to0();zN();Zo();pK();yi$();z5();GJ();jr0();QY();St();qg()});import{readdir as xD6,rm as tT0}from"fs/promises";import{join as oT0}from"path";async function rT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-yD6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await vv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await hi$($,Y,Z);else if(!Y.startsWith(".")){let G=oT0($,Y),J=await vv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await hi$(G,K,Z)}if((await vv(G)).length===0)await tT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function hi$($,Z,X){let Q=0,Y=oT0($,Z),G=await vv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=oT0(Y,W),H=await vv(K);for(let N of H){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 B=oT0(K,N);await tT0(B,{recursive:!0,force:!0}),Q++}}if((await vv(K)).length===0)await tT0(K,{recursive:!0,force:!0})}if((await vv(Y)).length===0)await tT0(Y,{recursive:!0,force:!0});return Q}async function vv($){try{return(await xD6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var yD6=30;var CX1=()=>{};import{DBOS as _X1,SchedulerMode as gD6}from"@dbos-inc/dbos-sdk";async function uD6(){let $=[nJ(),fv(),uH()],Z=0;for(let X of $)try{Z+=await rT0(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 lD6($,Z){await _X1.runStep(()=>uD6(),{name:"monitoringRetention"})}function li$(){if(ui$)return;ui$=!0;let $=_X1.registerWorkflow(lD6,{name:"monitoringRetentionWorkflow"});_X1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:hD6,mode:gD6.ExactlyOncePerIntervalWhenActive})}var hD6="23 4 * * *",ui$=!1;var ci$=D(()=>{qY();CX1()});function di$($){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 EJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await gt($.db,Z,Q.role);return Y.boundAuth=V91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new JE(X,void 0,Y.boundAuth,Q.role,"self"),KD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var mi$=D(()=>{nB();HD()});function cD6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function dD6(){return{services:cD6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function iD6(){for(let $ of mD6)$()}function ii$($){let Z=[...vX1.logs,$];vX1={...vX1,logs:Z.length>500?Z.slice(-500):Z},iD6()}function fX1(){return pD6}var vX1,mD6,pD6=!1;var bX1=D(()=>{vX1=dD6(),mD6=new Set});import{EventEmitter as nD6}from"events";var xX1;var pi$=D(()=>{bX1();xX1=new nD6;xX1.on("request",($)=>{ii$($)})});function ni$(){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 B=Ol(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Ol(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${K5.tool}${B}${K5.dim}(${w})${K5.reset}`}else if(U.method)G=`${K5.dim}${Ol(U.method)}${K5.reset}`}}catch{}}let W=Ol(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${K5.mcp}${Ol(F.slice(0,12))}\u2026${K5.reset}`}else if(Y==="/mcp")W=`${K5.mcp}/mcp${K5.reset}`;else if(Y==="/mcp/registry")W=`${K5.mcp}/mcp/registry${K5.reset}`;let K=oD6(Q),H=J?"\u25C0":"\u2190";if(!fX1())console.log(`${K5.dim}${H}${K5.reset} ${K}${Q}${K5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=tD6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!fX1())console.log(`${K5.dim}${O}${K5.reset} ${K}${Q}${K5.reset} ${W}${G?` ${G}`:""} ${U}${N}${K5.reset} ${K5.duration}${B}${K5.reset}`);xX1.emit("request",{method:Q,path:Ol(Y),status:N,duration:F,timestamp:new Date})}}}var K5,tD6=($)=>{if($>=500)return K5.serverError;if($>=400)return K5.clientError;if($>=300)return K5.redirect;return K5.ok},oD6=($)=>{return K5[$]||K5.reset},Ol=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var ti$=D(()=>{bX1();pi$();K5={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 ai$}from"crypto";import{mkdir as rD6,readdir as sD6,rm as oi$,stat as ei$}from"fs/promises";import{join as gX1,relative as aD6}from"path";import{z as T$}from"zod";function Zp$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return gX1(eD6,Z)}function Xp$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function yX1($,Z){let X=Zp$($),Q=Xp$(Z);return gX1(X,Q)}function $L6($,Z,X,Q){let Y=C0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ai$("sha256",Y).update(G).digest("hex")}function si$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=$L6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Xp$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Qp$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ai$("md5","etag").update(Q).digest("hex")}"`}async function Yp$($,Z,X,Q,Y){try{let G=await sD6($,{withFileTypes:!0});for(let J of G){let W=gX1($,J.name),H=aD6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Yp$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await ei$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Qp$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Gp$($,Z){let Q=n($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:T$.object({prefix:T$.string().optional(),maxKeys:T$.number().optional().default(1000),continuationToken:T$.string().optional(),delimiter:T$.string().optional()}),outputSchema:T$.object({objects:T$.array(T$.object({key:T$.string(),size:T$.number(),lastModified:T$.string(),etag:T$.string()})),nextContinuationToken:T$.string().optional(),isTruncated:T$.boolean(),commonPrefixes:T$.array(T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Zp$(Q);await rD6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Yp$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({contentType:T$.string().optional(),contentLength:T$.number(),lastModified:T$.string(),etag:T$.string(),metadata:T$.record(T$.string(),T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=yX1(Q,G.key),W=await ei$(J);return{contentType:wZ1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Qp$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ri$;return{url:si$(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:T$.object({key:T$.string(),expiresIn:T$.number().optional(),contentType:T$.string().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??ri$;return{url:si$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({success:T$.boolean(),key:T$.string()}),handler:async(Y)=>{let G=Y,J=yX1(Q,G.key);try{return await oi$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:T$.object({keys:T$.array(T$.string()).max(1000)}),outputSchema:T$.object({deleted:T$.array(T$.string()),errors:T$.array(T$.object({key:T$.string(),message:T$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=yX1(Q,K);try{await oi$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function hX1($,Z,X){let Q=Gp$(Z,X),Y=new XK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:B5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:T$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:T$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new FQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),MJ(Y,G,$,"mcp:dev-assets")}async function Jp$($,Z,X,Q){let G=Gp$(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 eD6="./data/assets",ri$=3600,$p$,Wp$;var Kp$=D(()=>{E$();rg();Q8();Wm();L_();mX();pA0();$p$=new K1;$p$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return hX1($.req.raw,Z,Q)});Wp$=$p$});var Hp$={};J4(Hp$,{mountDevRoutes:()=>ZL6});function ZL6($,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 hX1(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(),H=await Jp$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Wp$);let X=new K1;X.use("*",TW({mountPath:"/api/dev-assets"})),X.route("/",iA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Fp$=D(()=>{Q8();KZ1();pA0();Kp$()});import{sql as XL6}from"kysely";import{randomUUID as Np$}from"crypto";import{z as QL6}from"zod";async function GL6($){let Z=new Date().toISOString(),X=Np$(),Q=C8.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:Np$(),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 XL6`SELECT
|
|
2987
2987
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,b as L,j as r}from"./index-DhFurIZX.js";import{I as z}from"./input-mV6UtNEq.js";import{L as F}from"./label-Cleava8a.js";import{S as A,a as R,b as O,c as V,d as D}from"./select-DjrxeLc6.js";import{T as J}from"./textarea-CTS2-uzw.js";import{g as M,x as $,k as q,z as G,K as H}from"./index-CZ6hGy12.js";import{s as P}from"./primitives-DyUPL-8C.js";import{u as Q}from"./use-autosave-CB38t4Xg.js";import"./Check-bf_jS3TA.js";import"./ChevronDown-D2RyxW3i.js";import"./ChevronUp-R3pSDqFU.js";import"./ArrowUp-DuZC5iV5.js";import"./chat-context-NlfWybmP.js";import"./use-panel-navigate-BX95qtdU.js";import"./use-destination-route-DgdSGOiA.js";import"./thread-route-DdUdeFQx.js";import"./dialog-B-cKWArt.js";import"./Copy01-CDA0Ggj0.js";import"./Download01-DG4YxR8U.js";import"./constants-dLUUoWH7.js";import"./session-runtime-C-KTDVeQ.js";import"./slugify-CEUa2lfQ.js";import"./hooks-BdQY5CRK.js";import"./use-mcp-client-B_jYO9rk.js";import"./auth-JXfJ0FTL.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-DT2zxZy2.js";import"./task-board-B01yAe5j.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-D9yvcTOO.js";import"./use-ai-providers-3cxH2VVQ.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-7Gn91QZI.js";import"./use-organization-settings-Bzym3R8N.js";import"./automation-runs-ZsFAnbXX.js";import"./agent-icon-r3-7AUSF.js";import"./AlertCircle-wcSqPJY6.js";import"./UserSquare-BKSRLbxS.js";import"./Tool01-DjYX-VCy.js";import"./ArrowLeft-WLfPi0mp.js";import"./Tool02-dYk2F0hU.js";import"./XCircle-C0by-m0d.js";import"./TrendUp01-DtKB09ez.js";import"./ZapSquare-68V0_X9Z.js";import"./ZoomOut-Bh6qbaI_.js";import"./Users03-C6T2NW-8.js";import"./CheckCircle-BqQxgSfN.js";import"./ChevronRight-GRR3mbRS.js";import"./ChevronSelectorVertical-DHThApL6.js";import"./DotsVertical-rO3BkPH2.js";import"./Stars02-BJF7uN5h.js";import"./CreditCard01-oYVxJcoG.js";import"./Settings02-CumraKTs.js";import"./Eye-CEqLGlGG.js";import"./FilterLines-TPRFYanZ.js";import"./Share07-rOsJbVfh.js";import"./GitBranch01-DQ7mBKq5.js";import"./Globe01-Tg-2Apg9.js";import"./Globe04-BA1WqhYB.js";import"./SwitchHorizontal01-BpcMPG02.js";import"./HardDrive-CMtXWFji.js";import"./Image01-vwEuG0om.js";import"./Key01-BY8K2Ozc.js";import"./LinkExternal01-BLN8DEDZ.js";import"./LockUnlocked01-CV8Zc5Em.js";import"./LogOut01-4Dsn9Dc8.js";import"./Monitor01-fdsaJSPc.js";import"./Sun-B3TGlz0S.js";import"./Package-CKfpEh0_.js";import"./Palette-BzMby0WS.js";import"./Play-BfA_FBIX.js";import"./Plus-D-J4xWDE.js";import"./SearchLg-BHbinsbV.js";import"./SearchMd-CY2l8lvB.js";import"./Shield01-BTNC3kSK.js";import"./Stars01-7Zz7jJ2E.js";import"./Trash01-ZGtwIKNn.js";import"./Upload01-DwRwsi41.js";import"./User01-CLlZ3_UL.js";import"./Users01-BYU2fsit.js";import"./XClose-Fmp8VJZ3.js";import"./Zap-Dpli1hax.js";import"./useInfiniteQuery-aCkGnvxQ.js";import"./use-infinite-scroll-DvUClNlP.js";import"./use-connection-CQ7VmRbB.js";import"./table-BrU9j7iJ.js";import"./empty-state-DyjkzQB-.js";import"./use-members-CecUh0On.js";import"./use-org-auth-client-C0BSFS7r.js";import"./use-automations-Bpi0V0Y3.js";import"./useSuspenseInfiniteQuery-DXFVDY05.js";import"./avatar-BuK36bwO.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BV2I17v6.js";import"./markdown-CnJZovTX.js";import"./monaco-editor-Bvgi2bWd.js";import"./spinner-C3Bf3PyH.js";import"./editor-ddsr-VU9.js";import"./types-BvFj4cyT.js";import"./shell-layout-DcdFPEo1.js";import"./required-auth-layout-COB7VCNA.js";import"./use-org-sso-C8kNNb43.js";import"./integration-icon-DxwUDXSK.js";import"./use-navigate-to-agent-BLlfPCa8.js";import"./chart-ptqkWTJc.js";import"./index-XeVtLmpW.js";import"./AreaChart-D6VgvALv.js";import"./form-BLXnpcgm.js";import"./file-type-icon-sQtVyrte.js";import"./drawer-yJw_ykac.js";import"./collection-search-CpkkBxCV.js";import"./tabs-DVQAXruC.js";import"./toggle-group-lpYyL7BM.js";import"./super-agent-icon-DZGWzPq-.js";import"./self-tool-result-C8JPZUCj.js";import"./alert-dialog-CXWDAdaB.js";import"./extract-connection-data-CCkYM8mQ.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-BzzLhnm1.js";import"./authenticate-and-persist-oauth-Diz6OiCy.js";import"./mcp-oauth-Ch8gt_HN.js";import"./track-B9E3gOKq.js";import"./popover-bhUJ6CBU.js";import"./toolbar-tx4iqHBp.js";import"./github-repo-picker-Drvm_PI3.js";import"./use-mcp-tools-Cm0QrXv6.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-BP0Def7T.js";import"./use-registry-connections-ICYsLO5c.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-WEZI5EYR.js";import"./collection-tabs-f71Gej6V.js";import"./badge-FbFVe30o.js";import"./select-model-DWM1shj2.js";import"./checkbox-Ca8e-mtw.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-Do0Be5-g.js";import"./dropdown-menu-DId3deQJ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-D9NkXFCb.js";import"./skill-preview-CKL7YEqd.js";import"./use-file-configs-BZpehwq9.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-BCHxsazj.js";import"./scroll-area-Dj0bD7yv.js";import"./search-input-BcQ38T0w.js";import"./use-mcp-auth-status-DJkrllMo.js";import"./switch-COSA7YiF.js";import"./use-secrets-CacBJCzP.js";import"./config-MqxF3WPI.js";import"./command-CpjmV2JM.js";import"./index-DsKWWu2d.js";import"./get-initials-D-f_fDFw.js";import"./breadcrumb-DT9MgNIZ.js";import"./use-tags-Bp9eGPF_.js";import"./automation-list-row-DwwihOs8.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-jsQQzsNM.js";import"./cards-B_LcSgI1.js";const U={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function Zr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=$(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(A,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(R,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(J,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(z,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Zr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-D7jTwTVX.js","assets/index-DhFurIZX.js","assets/index-DZ3ZDC5F.css","assets/Tool02-dYk2F0hU.js","assets/CheckCircle-BqQxgSfN.js","assets/Settings02-CumraKTs.js","assets/use-mcp-client-B_jYO9rk.js","assets/constants-dLUUoWH7.js","assets/auth-JXfJ0FTL.js","assets/useInfiniteQuery-aCkGnvxQ.js","assets/use-infinite-scroll-DvUClNlP.js","assets/badge-FbFVe30o.js","assets/input-mV6UtNEq.js","assets/dropdown-menu-DId3deQJ.js","assets/Check-bf_jS3TA.js","assets/ChevronRight-GRR3mbRS.js","assets/DotsVertical-rO3BkPH2.js","assets/table-BrU9j7iJ.js","assets/toggle-group-lpYyL7BM.js","assets/use-view-mode-DjYA6GCt.js","assets/FilterLines-TPRFYanZ.js","assets/Globe01-Tg-2Apg9.js","assets/SearchMd-CY2l8lvB.js","assets/dialog-B-cKWArt.js","assets/AlertCircle-wcSqPJY6.js","assets/Download01-DG4YxR8U.js","assets/Upload01-DwRwsi41.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CXWDAdaB.js","assets/Trash01-ZGtwIKNn.js","assets/label-Cleava8a.js","assets/select-DjrxeLc6.js","assets/ChevronDown-D2RyxW3i.js","assets/ChevronUp-R3pSDqFU.js","assets/switch-COSA7YiF.js","assets/textarea-CTS2-uzw.js","assets/ArrowLeft-WLfPi0mp.js","assets/XCircle-C0by-m0d.js","assets/checkbox-Ca8e-mtw.js","assets/Eye-CEqLGlGG.js","assets/LinkExternal01-BLN8DEDZ.js","assets/use-copy-BV2I17v6.js","assets/Copy01-CDA0Ggj0.js","assets/Key01-BY8K2Ozc.js","assets/Plus-D-J4xWDE.js","assets/mcp-oauth-Ch8gt_HN.js","assets/Play-BfA_FBIX.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,bq as o}from"./index-DhFurIZX.js";import{R as n}from"./require-capability-DfVWJ93A.js";import"./access-gate-B1X8rofP.js";import"./capability-load-error-5cpzdyqr.js";const c=s.lazy(()=>o(()=>import("./registry-layout-D7jTwTVX.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-D7jTwTVX.js","assets/index-DhFurIZX.js","assets/index-DZ3ZDC5F.css","assets/Tool02-dYk2F0hU.js","assets/CheckCircle-BqQxgSfN.js","assets/Settings02-CumraKTs.js","assets/use-mcp-client-B_jYO9rk.js","assets/constants-dLUUoWH7.js","assets/auth-JXfJ0FTL.js","assets/useInfiniteQuery-aCkGnvxQ.js","assets/use-infinite-scroll-DvUClNlP.js","assets/badge-FbFVe30o.js","assets/input-mV6UtNEq.js","assets/dropdown-menu-DId3deQJ.js","assets/Check-bf_jS3TA.js","assets/ChevronRight-GRR3mbRS.js","assets/DotsVertical-rO3BkPH2.js","assets/table-BrU9j7iJ.js","assets/toggle-group-lpYyL7BM.js","assets/use-view-mode-DjYA6GCt.js","assets/FilterLines-TPRFYanZ.js","assets/Globe01-Tg-2Apg9.js","assets/SearchMd-CY2l8lvB.js","assets/dialog-B-cKWArt.js","assets/AlertCircle-wcSqPJY6.js","assets/Download01-DG4YxR8U.js","assets/Upload01-DwRwsi41.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CXWDAdaB.js","assets/Trash01-ZGtwIKNn.js","assets/label-Cleava8a.js","assets/select-DjrxeLc6.js","assets/ChevronDown-D2RyxW3i.js","assets/ChevronUp-R3pSDqFU.js","assets/switch-COSA7YiF.js","assets/textarea-CTS2-uzw.js","assets/ArrowLeft-WLfPi0mp.js","assets/XCircle-C0by-m0d.js","assets/checkbox-Ca8e-mtw.js","assets/Eye-CEqLGlGG.js","assets/LinkExternal01-BLN8DEDZ.js","assets/use-copy-BV2I17v6.js","assets/Copy01-CDA0Ggj0.js","assets/Key01-BY8K2Ozc.js","assets/Plus-D-J4xWDE.js","assets/mcp-oauth-Ch8gt_HN.js","assets/Play-BfA_FBIX.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as n,d as c,f as m,j as t,k as f,r as l,bq as p}from"./index-DhFurIZX.js";import{R as u}from"./require-capability-DfVWJ93A.js";import"./access-gate-B1X8rofP.js";import"./capability-load-error-5cpzdyqr.js";const g=l.lazy(()=>p(()=>import("./registry-layout-D7jTwTVX.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-DvUClNlP.js";import{fg as i}from"./index-DhFurIZX.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-DvUClNlP.js";import{fg as u,b$ as n}from"./index-DhFurIZX.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|