decocms 4.214.1 → 4.214.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-C-Q5FvBC.js → AlertCircle-BsSIeM74.js} +1 -1
- package/dist/client/assets/{AreaChart-CXO6rIpy.js → AreaChart-BNacPNiu.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DSnBCsVs.js → ArrowLeft-5tV722KZ.js} +1 -1
- package/dist/client/assets/{ArrowUp-Bf9Vxvyd.js → ArrowUp-BgPjCFzS.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DXrusE9r.js → ArrowUpRight-CqQ-eR1a.js} +1 -1
- package/dist/client/assets/{Check-Bv1QLovy.js → Check-CjZQ1fxj.js} +1 -1
- package/dist/client/assets/{CheckCircle-Dcle0kYd.js → CheckCircle-R1e_9MrF.js} +1 -1
- package/dist/client/assets/{ChevronDown-BzuKwYR-.js → ChevronDown-BgiuAled.js} +1 -1
- package/dist/client/assets/{ChevronRight-BoBkNqAA.js → ChevronRight-WnXAR36y.js} +1 -1
- package/dist/client/assets/{ChevronUp-DsY1P-qW.js → ChevronUp-BVyfuiQ9.js} +1 -1
- package/dist/client/assets/{Copy01-rMlbfVLN.js → Copy01-BMNhrQHF.js} +1 -1
- package/dist/client/assets/{CpuChip01-DQ-h7uSN.js → CpuChip01-OhJG8Y3N.js} +1 -1
- package/dist/client/assets/{CreditCard01-DEwSFIxs.js → CreditCard01-Borqkdnw.js} +1 -1
- package/dist/client/assets/{DotsVertical-BDf9H1Z1.js → DotsVertical-BVYb7Txy.js} +1 -1
- package/dist/client/assets/{Eye-BGg9pENP.js → Eye-CkVo8evT.js} +1 -1
- package/dist/client/assets/{FilterLines-DG4s25qh.js → FilterLines-DNbgzwzz.js} +1 -1
- package/dist/client/assets/{Globe01-C6L81Hz8.js → Globe01-D53Bin3K.js} +1 -1
- package/dist/client/assets/{Globe04-CtTzBEnf.js → Globe04-m-3S2YX0.js} +1 -1
- package/dist/client/assets/{HardDrive-6JjtQUi3.js → HardDrive-DawsXPkP.js} +1 -1
- package/dist/client/assets/{Key01-l_Q5BfVr.js → Key01-BWy2c3hx.js} +1 -1
- package/dist/client/assets/{LayoutLeft-BWXVEPFQ.js → LayoutLeft-DGHgpCnw.js} +1 -1
- package/dist/client/assets/{LinkExternal01-C-4mB7F4.js → LinkExternal01-Cw7h07U3.js} +1 -1
- package/dist/client/assets/{LogOut01-BH2d3IaU.js → LogOut01-Be35CrII.js} +1 -1
- package/dist/client/assets/{Monitor01-WcmbOpaM.js → Monitor01-C-5ochHz.js} +1 -1
- package/dist/client/assets/{Palette-CA9GgQW8.js → Palette-Cw7P1Ej1.js} +1 -1
- package/dist/client/assets/{Play-D7Gil5g6.js → Play-BqgEZb63.js} +1 -1
- package/dist/client/assets/{Plus-CWzMrWmv.js → Plus-zyzoueDA.js} +1 -1
- package/dist/client/assets/{SearchLg-CP5T38T4.js → SearchLg-BVVfecLQ.js} +1 -1
- package/dist/client/assets/{SearchMd-DgMMeVDw.js → SearchMd-B4KFnOWp.js} +1 -1
- package/dist/client/assets/{Settings02-DNthSMZc.js → Settings02-DdrYCa6h.js} +1 -1
- package/dist/client/assets/{Share07-CJ5L0mT9.js → Share07-Df66YqkV.js} +1 -1
- package/dist/client/assets/{Shield01-C5NHTKl8.js → Shield01-hWotU_hR.js} +1 -1
- package/dist/client/assets/{Star01-B7Htd5C4.js → Star01-Duq9V7lZ.js} +1 -1
- package/dist/client/assets/{Stars01-C9981xAX.js → Stars01-BWTtNtj3.js} +1 -1
- package/dist/client/assets/{Stars02-CWeiqPd-.js → Stars02-DE-LXLWj.js} +1 -1
- package/dist/client/assets/{Sun-JTbDw04X.js → Sun-CTyym6yL.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DkmWUnZN.js → SwitchHorizontal01-DDWYXcv-.js} +1 -1
- package/dist/client/assets/{Tool01-C936Ee21.js → Tool01-CzJUPFsT.js} +1 -1
- package/dist/client/assets/{Tool02-DXitDFTe.js → Tool02-BiMVq5jR.js} +1 -1
- package/dist/client/assets/{Trash01-DFjipCuk.js → Trash01-BWuSaae_.js} +1 -1
- package/dist/client/assets/{TrendUp01-B0j34Wzk.js → TrendUp01-DfCBpD87.js} +1 -1
- package/dist/client/assets/{Upload01-BfWE5rr_.js → Upload01-Cp4rvfN3.js} +1 -1
- package/dist/client/assets/{User01-DrUKeQHD.js → User01-BF-sTnEL.js} +1 -1
- package/dist/client/assets/{Users01-J0gbT70X.js → Users01-jx4IRVsm.js} +1 -1
- package/dist/client/assets/{Users03-DTAdJVzA.js → Users03-DD13tf3l.js} +1 -1
- package/dist/client/assets/{X-CjKmFgcH.js → X-CtnQpAls.js} +1 -1
- package/dist/client/assets/{XCircle-gu4fRLje.js → XCircle-BY8XrEjo.js} +1 -1
- package/dist/client/assets/{XClose-C4Me5xS9.js → XClose-Csg83d3Z.js} +1 -1
- package/dist/client/assets/{Zap-D2SD4cNE.js → Zap-B51LTWyw.js} +1 -1
- package/dist/client/assets/{ZapSquare-D1cyLPJZ.js → ZapSquare-mft67z5P.js} +1 -1
- package/dist/client/assets/{access-gate-D-FbwLID.js → access-gate-Beb6RxwA.js} +1 -1
- package/dist/client/assets/{agent-icon-DrUrkhe6.js → agent-icon-C-jSQ5na.js} +1 -1
- package/dist/client/assets/{agents-list-C-Q2Luv2.js → agents-list-BgkVGNEi.js} +1 -1
- package/dist/client/assets/{ai-providers-DEU0NPoL.js → ai-providers-CznuYbup.js} +1 -1
- package/dist/client/assets/{alert-DFfPG0Z2.js → alert-61uvXXZJ.js} +1 -1
- package/dist/client/assets/{alert-dialog-DWZuaK8I.js → alert-dialog-CYBdw70O.js} +1 -1
- package/dist/client/assets/{app-editor-CGMMgscK.js → app-editor-XfjitpNn.js} +1 -1
- package/dist/client/assets/{auth--tm9bCVC.js → auth-BDILfgAW.js} +1 -1
- package/dist/client/assets/{auth-catchall-BufjjqmR.js → auth-catchall-CR9lnU02.js} +1 -1
- package/dist/client/assets/{auth-entry-cse0V0Ss.js → auth-entry-DmfxhCV3.js} +1 -1
- package/dist/client/assets/{auth-split-layout-Bg0G4CPN.js → auth-split-layout-iDn2Gy30.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C0Exkm5e.js → authenticate-and-persist-oauth-DLbV2X4X.js} +1 -1
- package/dist/client/assets/{automation-list-row-C2wf5bYW.js → automation-list-row-C-cuDujW.js} +1 -1
- package/dist/client/assets/{automation-runs-DAN4OwX1.js → automation-runs-BbyS7guw.js} +1 -1
- package/dist/client/assets/{automations-CLTQtKzY.js → automations-BzGPaxSn.js} +1 -1
- package/dist/client/assets/{avatar-CnzC-xyP.js → avatar-WYWIIsNL.js} +1 -1
- package/dist/client/assets/{badge-aLvlAbI8.js → badge-DzS1tYrV.js} +1 -1
- package/dist/client/assets/{billing-CHoSxKXW.js → billing-CI_8gSde.js} +1 -1
- package/dist/client/assets/{block-document-LtI-OnCR.js → block-document-CKfQ7EPL.js} +1 -1
- package/dist/client/assets/{brand-context-CQ8T72Ml.js → brand-context-DeJ-mwvN.js} +1 -1
- package/dist/client/assets/{buckets-CWI6D5s9.js → buckets-wwEFu59U.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-CxDUGuCW.js → bulk-category-panel-DPZyvqLd.js} +1 -1
- package/dist/client/assets/{capability-load-error-Cq1UtDaY.js → capability-load-error-D7nPEFlh.js} +1 -1
- package/dist/client/assets/{card-Be95OgoJ.js → card-BCAkKfmH.js} +1 -1
- package/dist/client/assets/{cards-BGFq-dY2.js → cards-R88fjbQ6.js} +1 -1
- package/dist/client/assets/{category-editor-iXMX5WVK.js → category-editor-DLOPOiTi.js} +1 -1
- package/dist/client/assets/{chat-context-BsuvyX6k.js → chat-context-et5Hu8c1.js} +1 -1
- package/dist/client/assets/{checkbox-Baov0rWD.js → checkbox-BPEPZaS_.js} +1 -1
- package/dist/client/assets/{cli-auth-success-DvYMEjVA.js → cli-auth-success-B9kaRYT8.js} +1 -1
- package/dist/client/assets/{collection-detail-DyzZw-Ng.js → collection-detail-B8c7skni.js} +1 -1
- package/dist/client/assets/{collection-display-button-CDaMQQGp.js → collection-display-button-BcTzQDu3.js} +1 -1
- package/dist/client/assets/{collection-search-BrfCWqVZ.js → collection-search-B9iKxOGU.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-DA1Sv76p.js → collection-table-wrapper-CAV9XCrc.js} +1 -1
- package/dist/client/assets/{collection-tabs-Bxg4AqWv.js → collection-tabs-CwUfPCt1.js} +1 -1
- package/dist/client/assets/{command-wblXHsVH.js → command-BlU-LCp8.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-BIwNIM3K.js → commerce-onboarding-C8aZKgQL.js} +1 -1
- package/dist/client/assets/{connect-C1xfUDor.js → connect-ODIOL1Ni.js} +1 -1
- package/dist/client/assets/{connection-gkQW0H6w.js → connection-C1KBcsL0.js} +1 -1
- package/dist/client/assets/{connection-card-Bj44awTs.js → connection-card-DPtGNfyh.js} +1 -1
- package/dist/client/assets/{connection-detail-Cf4ZepQd.js → connection-detail-q2I29VFe.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-D8eGeLMF.js → connection-form-helpers-CLihksRG.js} +1 -1
- package/dist/client/assets/{connections-DeMRC-16.js → connections-D4MbUwYz.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-5C4bdI3H.js → decopilot-sse-pool-BpR7ZbbQ.js} +1 -1
- package/dist/client/assets/{dialog-B9q3iv3g.js → dialog-Ck75PYu2.js} +1 -1
- package/dist/client/assets/{domain-settings-B-nMydaQ.js → domain-settings-D0y0Vl_M.js} +1 -1
- package/dist/client/assets/{drawer-B3Ox1_lQ.js → drawer-D3gyLNyG.js} +1 -1
- package/dist/client/assets/{dropdown-menu-alyBkCa0.js → dropdown-menu-BK8UM22e.js} +1 -1
- package/dist/client/assets/{empty-state-D-z5hxuF.js → empty-state-DcYnayz2.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DJoabmII.js → extract-connection-data-j12skE4h.js} +1 -1
- package/dist/client/assets/{file-explorer-BUGn6Hw-.js → file-explorer-JCg7NEll.js} +1 -1
- package/dist/client/assets/{file-type-icon-Cds3zG3Y.js → file-type-icon-u7eaq5io.js} +1 -1
- package/dist/client/assets/{form-CSnrn2N6.js → form-CMzKe4VI.js} +1 -1
- package/dist/client/assets/{general-LqWRk_6p.js → general-5d2s9ysV.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DdBirXEe.js → github-repo-picker-CJYjCCfq.js} +1 -1
- package/dist/client/assets/{hooks-Bdfhd1nY.js → hooks-BMseDKuX.js} +1 -1
- package/dist/client/assets/{index-Cw6X3dkt.js → index-C02864TA.js} +3 -3
- package/dist/client/assets/{index-CtjCHirP.js → index-C15X56K3.js} +1 -1
- package/dist/client/assets/{index-BDWaS3wJ.js → index-C3-_lGCM.js} +1 -1
- package/dist/client/assets/{index-CUnvt7Qz.js → index-CBZgbrxw.js} +1 -1
- package/dist/client/assets/{index-DpO2M7aV.js → index-CSrynco3.js} +1 -1
- package/dist/client/assets/{index-B2rHtP5f.js → index-CXUh9IAc.js} +5 -5
- package/dist/client/assets/{index-UInDjVLE.js → index-DVEW-7dp.js} +1 -1
- package/dist/client/assets/{index-DqsbKnXe.js → index-DWtPjOIc.js} +1 -1
- package/dist/client/assets/{index-DUOxnAEk.js → index-DsJmX5jt.js} +1 -1
- package/dist/client/assets/{index-CQQHMee7.js → index-V2hAdu9H.js} +1 -1
- package/dist/client/assets/{index-redirect-5vwH_yNL.js → index-redirect-8uK5P7k4.js} +1 -1
- package/dist/client/assets/{input-BMI7sy0P.js → input--o85lWXP.js} +1 -1
- package/dist/client/assets/{integration-icon-E1ocII3D.js → integration-icon-CYv0-4bb.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-Rj-Tj1zK.js → invite-member-dialog-9vlfPthH.js} +1 -1
- package/dist/client/assets/{label-DKyumRgF.js → label-BvYguadN.js} +1 -1
- package/dist/client/assets/{layout-CjXju09r.js → layout-BeFtajlM.js} +1 -1
- package/dist/client/assets/{login-C59J5QJR.js → login-DF5ITzDd.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DGynsxkq.js → mcp-oauth-DpxNaSV2.js} +1 -1
- package/dist/client/assets/{members-flvExcuF.js → members-BUxAOqqu.js} +1 -1
- package/dist/client/assets/{monaco-editor-NHE1hAhj.js → monaco-editor-D8rt-Qj7.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-BRPn86IA.js → monitoring-stats-row-BvkL2lpu.js} +1 -1
- package/dist/client/assets/{multi-select-CIbBKc4q.js → multi-select-Dt6IxzBk.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-C_kI3u0-.js → oauth-callback-ai-provider-BR1fgxU0.js} +1 -1
- package/dist/client/assets/{oauth-callback-BYbE8-3P.js → oauth-callback-yBoF8Lj6.js} +1 -1
- package/dist/client/assets/{onboarding-zNQh391l.js → onboarding-CzosdS4K.js} +1 -1
- package/dist/client/assets/{org-layout-IiyY6ta2.js → org-layout-CWB-qSbW.js} +1 -1
- package/dist/client/assets/{organization-choice-Bi4DpjuI.js → organization-choice-CnlE-3mm.js} +1 -1
- package/dist/client/assets/{orgs-DJhOIO2X.js → orgs-w7Tc77GA.js} +1 -1
- package/dist/client/assets/{page-seo-form-DyDsIl2Q.js → page-seo-form-DGUAYihy.js} +1 -1
- package/dist/client/assets/{popover-m6RPBuGe.js → popover-D7_r7LD9.js} +1 -1
- package/dist/client/assets/{post-editor-C0_Jki_E.js → post-editor-CwE5YNJ-.js} +1 -1
- package/dist/client/assets/{primitives-DNu3pUMl.js → primitives-CTU8HbNQ.js} +1 -1
- package/dist/client/assets/{profile-BWw6Sd_f.js → profile-CwrR0s_o.js} +1 -1
- package/dist/client/assets/{project-app-view-DJV_OLLe.js → project-app-view-jzz32HtP.js} +1 -1
- package/dist/client/assets/record-editor-COHj7xyr.js +1 -0
- package/dist/client/assets/redirect-editor-DTM9W4rQ.js +1 -0
- package/dist/client/assets/registry-C4fRWMXj.js +2 -0
- package/dist/client/assets/{registry-layout-Cidvga7O.js → registry-layout-D9jsnDAn.js} +1 -1
- package/dist/client/assets/{reports-Ch82XuVg.js → reports-FxPq8ybF.js} +1 -1
- package/dist/client/assets/{require-capability-DsdnQdRJ.js → require-capability-D69UcUMk.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Bdan642o.js → required-auth-layout-BJSE9ZHz.js} +1 -1
- package/dist/client/assets/{reset-password-YRS01L7H.js → reset-password-DlPAbZsB.js} +1 -1
- package/dist/client/assets/{roles-C13zxsqD.js → roles-kTA-6bE0.js} +1 -1
- package/dist/client/assets/{search-input-BY5NcAG5.js → search-input-D2UVK1hB.js} +1 -1
- package/dist/client/assets/{secrets-BRCqBJzn.js → secrets-C4gmqkn3.js} +1 -1
- package/dist/client/assets/{sections-editor-986DPDzX.js → sections-editor-B-xzConU.js} +1 -1
- package/dist/client/assets/{select-C9xcbH-E.js → select-D_LaA7Zt.js} +1 -1
- package/dist/client/assets/{select-model-BjjS3EDC.js → select-model-Bpzda5LR.js} +1 -1
- package/dist/client/assets/{self-tool-result-WknO6REq.js → self-tool-result-DGwlA63Y.js} +1 -1
- package/dist/client/assets/{seo-editor-Y0O17g58.js → seo-editor-DLWz2YVI.js} +1 -1
- package/dist/client/assets/{settings-layout-BjbFkqZs.js → settings-layout-DBGcSOzp.js} +1 -1
- package/dist/client/assets/{settings-section-BHgAovn_.js → settings-section-D990Bbsb.js} +1 -1
- package/dist/client/assets/{shell-controls-DXpoa89_.js → shell-controls-BEIYOUWo.js} +1 -1
- package/dist/client/assets/{shell-layout-DZixRapy.js → shell-layout-D8weoRRD.js} +1 -1
- package/dist/client/assets/{sidebar-CyFPwMhC.js → sidebar-C0kOAs4D.js} +1 -1
- package/dist/client/assets/{skeleton-DJb3aaGz.js → skeleton-C2Oc9Dkb.js} +1 -1
- package/dist/client/assets/{spinner-DVcg_-Cv.js → spinner-Ssg6962s.js} +1 -1
- package/dist/client/assets/{sso-C1JCEZ87.js → sso-ZqmHeFbw.js} +1 -1
- package/dist/client/assets/{store-ClPWmhiD.js → store-4ov4zSi2.js} +1 -1
- package/dist/client/assets/store-registry-CkOULGfX.js +2 -0
- package/dist/client/assets/{studio-tools-CP3xCItZ.js → studio-tools-BYUzmUea.js} +1 -1
- package/dist/client/assets/{switch-CZJ7HE3w.js → switch-BFIiAvo3.js} +1 -1
- package/dist/client/assets/{synced-repos-BAVqiXJx.js → synced-repos-D8dOOxmd.js} +1 -1
- package/dist/client/assets/{tab-id-U8x84WMI.js → tab-id-BYacfgvY.js} +1 -1
- package/dist/client/assets/{table-BIEFFUNo.js → table-D9C5SZFi.js} +1 -1
- package/dist/client/assets/{tabs-PJiAduqL.js → tabs-P-XNIpgH.js} +1 -1
- package/dist/client/assets/{textarea-H0WykNWG.js → textarea-klKop_2H.js} +1 -1
- package/dist/client/assets/{toggle-group-RM1nES4o.js → toggle-group-BQJ8FjDB.js} +1 -1
- package/dist/client/assets/{toolbar-BQaiABV_.js → toolbar-yY1Yl8m5.js} +1 -1
- package/dist/client/assets/{tooltip-DXelSitz.js → tooltip-CVO3N7-N.js} +1 -1
- package/dist/client/assets/{track-CY5ZMl6H.js → track-grIApihe.js} +1 -1
- package/dist/client/assets/{use-ai-providers-EuhLPffl.js → use-ai-providers-xqrjYAUs.js} +1 -1
- package/dist/client/assets/{use-automations-CZEATS3Z.js → use-automations-DYNa7hMo.js} +1 -1
- package/dist/client/assets/{use-autosave-DFCBrWPo.js → use-autosave-B54cDZBf.js} +1 -1
- package/dist/client/assets/{use-capability-BykgYm9c.js → use-capability-BuDfivDO.js} +1 -1
- package/dist/client/assets/{use-clock-tick-VVMnnBbl.js → use-clock-tick-ChNqYpSq.js} +1 -1
- package/dist/client/assets/{use-connection-JK88cNLE.js → use-connection-BeuQWv43.js} +1 -1
- package/dist/client/assets/{use-copy-DaioDYGx.js → use-copy-Cv4rHVI1.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-91kxbBVu.js → use-create-virtual-mcp-CqV7j4fR.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-C8dmZjR6.js → use-debounced-autosave-X1RPSwft.js} +1 -1
- package/dist/client/assets/{use-debounced-value-CQ9n5OvI.js → use-debounced-value-InAeuCgK.js} +1 -1
- package/dist/client/assets/{use-deco-credits-gi_MymzL.js → use-deco-credits-DhLTEwNV.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Cxs1YWP7.js → use-decopilot-events-DYnCHFkr.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DRJJFc88.js → use-delete-connection-BUalfdU0.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Om2ltZrc.js → use-deployment-admin-q-0naChL.js} +1 -1
- package/dist/client/assets/{use-file-configs-852wnDwu.js → use-file-configs-DLsWgjeK.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-C0GAtyD2.js → use-infinite-scroll-B8QM__1P.js} +1 -1
- package/dist/client/assets/{use-join-requests-Dc1eJnuw.js → use-join-requests-CRsKhbk9.js} +1 -1
- package/dist/client/assets/{use-mcp-client-D4LZPG6h.js → use-mcp-client-C--hxpN_.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-C9HhUXbr.js → use-mcp-tools-CzWP_ziY.js} +1 -1
- package/dist/client/assets/{use-members-CTwpCvCb.js → use-members-DQKDTqpi.js} +1 -1
- package/dist/client/assets/{use-mobile-D2z4Y_ya.js → use-mobile-BXxNbAJx.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BBhM0Vmr.js → use-navigate-to-agent-DhMdFxy6.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-CXQZwREN.js → use-open-billing-url-C9cff-wF.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CGBqXXoZ.js → use-org-auth-client-C_hVO9yn.js} +1 -1
- package/dist/client/assets/{use-org-sso-D6LJVU9o.js → use-org-sso-KaVeKFzK.js} +1 -1
- package/dist/client/assets/{use-organization-roles-wah2ZKGd.js → use-organization-roles-CIxzsW9q.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DYKvJrFn.js → use-organization-settings-D3XeRHm9.js} +1 -1
- package/dist/client/assets/{use-registry-connections-CT74HqKu.js → use-registry-connections-cERWxPbr.js} +1 -1
- package/dist/client/assets/{use-secrets-DqYa04tO.js → use-secrets-BP_VVQGj.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-BWMLBuql.js → use-section-preview-base-uvYPvyEv.js} +1 -1
- package/dist/client/assets/{use-status-sounds-D8s7dVjj.js → use-status-sounds-C8Z8Qj8h.js} +1 -1
- package/dist/client/assets/{use-tags-D6plArQy.js → use-tags-CHtfB34Z.js} +1 -1
- package/dist/client/assets/{use-view-mode-Cx1z2NzD.js → use-view-mode-BCMGKP8x.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-Bwm6g-Vg.js → use-virtual-mcp-DZ9v19jI.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-ByMZwOd9.js +1 -0
- package/dist/client/assets/{useRouterState-B1BIGlgL.js → useRouterState-c_iapPPx.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dt7mX6sE.js +1 -0
- package/dist/client/assets/{users-CHMij7Em.js → users-BsKC_Zoi.js} +1 -1
- package/dist/client/assets/{variant-calendar-B7YFB8lh.js → variant-calendar-hjd11wgk.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CekKDEJh.js → view-mode-toggle-kSjusEu0.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/record-editor-BAyPxO0m.js +0 -1
- package/dist/client/assets/redirect-editor-D-7AVgII.js +0 -1
- package/dist/client/assets/registry-BTaUnI73.js +0 -2
- package/dist/client/assets/store-registry-B148kuy_.js +0 -2
- package/dist/client/assets/useInfiniteQuery-D4yzT25a.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DBMaGUmM.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1509,7 +1509,7 @@ ${Z.description}
|
|
|
1509
1509
|
`),D=cU4(Z.id,X,Q,Y),L=lU4(D),{isNew:E}=await un($,Z,{runClass:"reviewer",title:`${eb[X]}: ${Z.title}`,prompt:w,temperature:0.3,...H?{harnessId:"claude-code",agent:{instructions:O,disallowedTools:bU4[X]}}:{},...K?{repo:K}:{},fence:{threadId:L,workflowID:D}}).catch(async(z)=>{throw await $.storage.threads.delete(L).catch((A)=>console.error(`[task-board] ${X} fence thread cleanup failed`,A)),z});if(!E)return;await R5($,{taskBoardItemId:Z.id,action:"review_requested",actorId:null,data:{reviewer:X}});let j=await $.storage.taskBoard.getById(Z.id,G);if(j)j4(G,j)}var TK$,bU4,xU4,hp0=2;var cp0=B(()=>{kZ();xY();v9();fp0();bp0();yp0();TK$=new Set(["completed","failed","expired"]);bU4={qa:["Edit","NotebookEdit"],code_review:["Write","Edit","NotebookEdit"]},xU4={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes, check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, "+"not the diff \u2014 and NEVER approve on inspection alone: an approval must be "+`backed by evidence you actually exercised the change.
|
|
1510
1510
|
Exercise the change on the PR's deploy preview, deep-linked to the specific page/route the task affects (not just its root). For any VISUAL change, capture the affected view BEFORE (the current production / base-branch site) and AFTER (the preview) so the two can be compared, and for a responsive change capture BOTH a desktop and a real mobile view (a phone viewport AND a `+"mobile user-agent \u2014 not a narrowed desktop). The How-to steps below name the "+`exact screenshot tool for your run.
|
|
1511
1511
|
If the preview will not render (303s, hangs, blank) or you otherwise cannot exercise the change, do NOT approve: request changes stating what is blocking and what is needed to unblock. An unverified preview is not a pass.
|
|
1512
|
-
`+"RECORD your QA pass as a task comment BEFORE the decision \u2014 a durable record, "+"separate from the short decision summary. Structure it: the acceptance "+"criteria / scenarios you checked with a pass/fail on each, a before\u2192after "+"pointer to the screenshots, the exact URL(s) and viewport you exercised, and anything you could not verify and why.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function mU4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=IK$}async function Qy($,Z,X,Q){if(X.status!=="in_review")return!1;if(X.assigneeId!==M4)return!1;if(Q.conflict!==!0)return!1;let G=(await $.storage.organizationSettings.get(Z))?.flags??{};if(G.auto_merge!==!0)return!1;let J=ZN(G),W=await $.storage.taskBoard.listActivity(X.id,Z);if(!DO(W,J,{verifiedOnly:!0}))return!1;if(mU4(W))return console.warn(`[task-board] conflict auto-resolve cap (${IK$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let K=Q.pr,H=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!H)return!1;await R5($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),j4(Z,H);try{await kN($,H,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(N){throw await $.storage.taskBoard.update(H.id,Z,{status:"in_review"},"system").then((F)=>j4(Z,F)).catch((F)=>console.error("[task-board] conflict-resolution status revert failed",F)),N}return!0}var IK$=3;var Tw0=B(()=>{kZ();xY();v9();Fw()});async function Rw0($,Z){let X=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!X)return null;let Q=await dG.create();return Q.organization={id:X.id,slug:X.slug,name:X.name},Uw(Q,{id:X.id,slug:X.slug}),Q}var lp0=B(()=>{cV()});import{DBOS as ip0}from"@dbos-inc/dbos-sdk";function MK$($){dp0=$}async function tU4($,Z){if(!dp0)throw Error("[task-board-github-read] runtime not initialized \u2014 setTaskBoardGithubReadRuntime() must run before the workflow fires");let X=await Rw0(dp0.db,$);if(!X)return mp0;return await SK$(X,$,Z)}async function oU4($,Z){return await ip0.runStep(()=>tU4($,Z),{name:"readPrState"})}function kK$(){if(Iw0)return;Iw0=ip0.registerWorkflow(oU4,{name:"taskBoardGithubReadWorkflow"})}async function Yy($,Z){if(!Iw0)return mp0;try{return await(await ip0.startWorkflow(Iw0,{queueName:YB,timeoutMS:pU4})($,Z)).getResult()}catch(X){return console.error("[task-board-github-read] throttled PR read failed",X),mp0}}var iU4=20,nU4=4,pU4=60000,qK$,dp0=null,mp0,Iw0=null;var cn=B(()=>{lp0();Ow();qK$={concurrency:nU4,rateLimit:{limitPerPeriod:iU4,periodSec:60}};mp0={state:null,merged:null}});import{z as qw0}from"zod";function Sw0($){let Z=$ instanceof Error?$.message:String($);return/too many requests|rate limit|\b429\b/i.test(Z)}function CK$($){VK$.invalidate($)}async function dn($,Z,X,Q,Y,G){try{let J=await VK$.fetch({type:"tools/call",connectionId:Z,scope:{kind:"org"},params:{name:X,arguments:Q},fetchLive:()=>lZ(async()=>{let W=await $.callTool({name:X,arguments:Q},void 0,{timeout:kw0});if(W&&typeof W==="object"&&W.isError)throw Error(W.content?.[0]?.text??`${X} returned isError`);return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1,isRetriable:(W)=>!Sw0(W)}),onRevalidation:(W)=>G.push(W)});return Vw0(J)}catch(J){let W=J instanceof UJ?J.cause:J;return console.error(`[task-board] ${X} failed for ${Y}:`,W),null}}async function lV($,Z,X,Q){if(X){let G=await $.storage.connections.findById(X,Z);if(G&&G.status==="active")return G}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"});return rU4(Y.filter((G)=>G.status==="active"),Q)}function rU4($,Z){let X=$.find((Y)=>z5(Y)===null)??null;if(!Z)return X??$[0]??null;return $.find((Y)=>{let G=z5(Y);return G?.owner===Z.owner&&G?.repo===Z.name})??X}function Vw0($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((Q)=>Q.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function Mw0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")||Z.endsWith(".vercel.app")||Z.endsWith(".preview.vtex.app")}function aU4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&Mw0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function sU4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[],X=(Y)=>{let G=Y;return Date.parse(G?.updated_at)||Date.parse(G?.created_at)},Q=Z.map((Y,G)=>({c:Y,index:G})).sort((Y,G)=>{let J=X(Y.c),W=X(G.c);if(Number.isNaN(J)||Number.isNaN(W))return Y.index-G.index;return W-J}).map(({c:Y})=>Y);for(let Y of Q){let G=Y&&typeof Y.body==="string"?Y.body:"";if(!G)continue;let J=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(J?.[1]&&Mw0(J[1]))return J[1];let W=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((K)=>Mw0(K));if(W)return W}return null}function eU4($){let Z=$&&typeof $.environmentUrl==="string"?$.environmentUrl:null;return Z&&Mw0(Z)?Z:null}function _K$($){return typeof $==="string"&&/^[0-9a-fA-F]{7,40}$/.test($)?$:null}function $O4($){let Z=$?.head;return _K$(Z?.sha)}function ZO4($){return _K$($?.sha)}function vK$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function bK$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,Q=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:G,conclusion:J}=Y;if(G!=="completed")Q=!0;else if(typeof J==="string"&&fK$.has(J))X=!0}if(X)return"failing";if(Q)return"pending";return"passing"}function xK$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function XO4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let Q of Z){if(!Q||typeof Q!=="object")continue;let Y=Q;X.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return X}function QO4($){return $.status==="completed"&&$.conclusion!=null&&fK$.has($.conclusion)}async function YO4($,Z,X,Q,Y){let J=(await dn($,Z,"GET_CHECK_RUN",{owner:X.repoOwner,repo:X.repoName,checkRunId:Q},`${ln(X)} check-run ${Q}`,Y))?.output,W=typeof J?.summary==="string"?J.summary:null,K=typeof J?.text==="string"?J.text:null;return W??K??null}async function yK$($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0),G=async(J)=>Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0}));try{let J=null;try{J=vK$(await G("get_status"))}catch{}try{J=xK$(J,bK$(await G("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function gK$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function Cw0($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0);try{return gK$(Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function GO4($,Z,X,Q,Y){let G=(U)=>dn($,Z,"pull_request_read",{method:U,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (${U})`,Q),[J,W,K]=await Promise.all([G("get_status"),G("get_check_runs"),G("get_comments")]),H=xK$(vK$(J),bK$(W)),N=aU4(J)??sU4(K);if(!N){let U=$O4(await Y)??ZO4(J);if(U)N=eU4(await dn($,Z,"GET_PREVIEW_DEPLOYMENT",{owner:X.repoOwner,repo:X.repoName,sha:U},`${ln(X)} (deployment preview)`,Q))}let F=await Promise.all(XO4(W).map(async(U)=>({name:U.name,status:U.status,conclusion:U.conclusion,detailsUrl:U.detailsUrl,summary:QO4(U)&&U.id!=null?await YO4($,Z,X,U.id,Q):null})));return{checksStatus:H,checks:F,previewUrl:N}}async function JO4($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return pp0;let Y=await W5(Q,$,!0),G=[];try{let J=dn(Y,Q.id,"pull_request_read",{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (get)`,G),[W,K]=await Promise.all([J,GO4(Y,Q.id,X,G,J)]);if(!W)return pp0;let H=W.state,N=H==="open";return{title:typeof W.title==="string"?W.title:null,body:typeof W.body==="string"?W.body:null,state:H==="closed"?"closed":N?"open":null,draft:typeof W.draft==="boolean"?W.draft:null,merged:typeof W.merged==="boolean"?W.merged:null,mergeable:N&&typeof W.mergeable==="boolean"?W.mergeable:null,checksStatus:N?K.checksStatus:null,checks:N?K.checks:[],previewUrl:N?K.previewUrl:null}}catch{return pp0}finally{Promise.allSettled(G).then(()=>Y.close().catch(()=>{}))}}async function hK$($,Z,X,Q){let Y=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Y)return null;let G=await W5(Y,$,!0),J=[];try{return await dn(G,Y.id,"pull_request_read",{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (${Q})`,J)}catch{return null}finally{Promise.allSettled(J).then(()=>G.close().catch(()=>{}))}}async function uK$($,Z,X){let Q=await hK$($,Z,X,"merged");return typeof Q?.merged==="boolean"?Q.merged:null}async function SK$($,Z,X){let Q=await hK$($,Z,X,"candidate");return{state:Q?.state==="closed"?"closed":Q?.state==="open"?"open":null,merged:typeof Q?.merged==="boolean"?Q.merged:null}}function WO4($){let Z=$.findIndex((X)=>X!=="closed");return Z===-1?0:Z}async function Gy($,Z,X){if(X.length<=1)return X[0];let Q=[];for(let Y of X){let{state:G}=await Yy(Z,Y);if(Q.push(G),G!=="closed")break}return X[WO4(Q)]}async function cK$($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0);try{let G=Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0}));if(!G||G.state!=="open")return null;let J=G.head?.ref;return typeof J==="string"&&J.length>0?J:null}catch{return null}finally{await Y.close().catch(()=>{})}}var kw0=8000,np0,VK$,ln=($)=>`${$.repoOwner}/${$.repoName}#${$.number}`,pp0,fK$,tp0=($)=>$.some((Z)=>Z.state!=="closed"&&Z.merged!==!0),op0;var Ow=B(()=>{v0();tH();DQ();kZ();t4();gm();JK();xY();v9();cp0();Tw0();cn();np0={revalidateAfterMs:55000,maxStaleMs:1800000,maxValueBytes:524288},VK$=new J50({"tools/call":np0,"resources/read":np0,"prompts/get":np0});pp0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};fK$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);op0=m({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:qw0.object({taskBoardItemId:qw0.string()}),outputSchema:qw0.object({prs:qw0.array(TX$)}),handler:async({taskBoardItemId:$},Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X),Y=await Z.storage.taskBoard.listPrs($,X),G=await Promise.all(Y.map(async(K)=>{let H=await JO4(Z,X,K);return{url:K.url,number:K.number,repoOwner:K.repoOwner,repoName:K.repoName,createdAt:K.createdAt,...H}})),J=G.find((K)=>K.state==="open"&&!K.merged);if(Q&&Q.status==="in_review"&&Q.assigneeId===M4&&tp0(G))await Aw0(Z,Q).catch((K)=>{console.error("[task-board] reviewer auto-handoff failed",K)});let W=J?gK$({state:J.state,mergeable:J.mergeable}):null;if(Q&&Q.status==="in_review"&&Q.assigneeId===M4&&J&&W===!0)await Qy(Z,X,Q,{pr:{number:J.number,url:J.url},conflict:!0}).catch((K)=>{console.error("[task-board] conflict auto-resolve failed",K)});if(G.some((K)=>K.merged))try{if(Q&&Q.status!=="done"&&Q.status!=="archived"){let K=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);await R5(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}}),j4(X,K)}}catch(K){console.error("[task-board] merge\u2192done reconcile failed",K)}return{prs:G}}})});async function Jy($,Z,X){if(Z.assigneeId!==M4)return;await kN($,Z,X).catch((Q)=>{if(Q instanceof PQ)throw Q;console.error("[task-board] Super Agent enqueue failed",Q)})}function KO4($,Z){return["You've been assigned this task. Complete it.","","You are running AUTONOMOUSLY \u2014 no human is watching this run, so drive it "+"to completion on your own. Use `user_ask` ONLY for a genuine, unresolvable blocker a human must clear (a missing credential/secret, or "+"a decision so ambiguous you truly cannot proceed) \u2014 that should be rare. "+"Do not ask for confirmation of a reasonable choice; make it and move on.","",`Title: ${$.title}`,$.description?`
|
|
1512
|
+
`+"RECORD your QA pass as a task comment BEFORE the decision \u2014 a durable record, "+"separate from the short decision summary. Structure it: the acceptance "+"criteria / scenarios you checked with a pass/fail on each, a before\u2192after "+"pointer to the screenshots, the exact URL(s) and viewport you exercised, and anything you could not verify and why.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function mU4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=IK$}async function Qy($,Z,X,Q){if(X.status!=="in_review")return!1;if(X.assigneeId!==M4)return!1;if(Q.conflict!==!0)return!1;let G=(await $.storage.organizationSettings.get(Z))?.flags??{};if(G.auto_merge!==!0)return!1;let J=ZN(G),W=await $.storage.taskBoard.listActivity(X.id,Z);if(!DO(W,J,{verifiedOnly:!0}))return!1;if(mU4(W))return console.warn(`[task-board] conflict auto-resolve cap (${IK$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let K=Q.pr,H=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!H)return!1;await R5($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),j4(Z,H);try{await kN($,H,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(N){throw await $.storage.taskBoard.update(H.id,Z,{status:"in_review"},"system").then((F)=>j4(Z,F)).catch((F)=>console.error("[task-board] conflict-resolution status revert failed",F)),N}return!0}var IK$=3;var Tw0=B(()=>{kZ();xY();v9();Fw()});async function Rw0($,Z){let X=await $.selectFrom("organization").select(["id","slug","name"]).where("id","=",Z).executeTakeFirst();if(!X)return null;let Q=await dG.create();return Q.organization={id:X.id,slug:X.slug,name:X.name},Uw(Q,{id:X.id,slug:X.slug}),Q}var lp0=B(()=>{cV()});import{DBOS as ip0}from"@dbos-inc/dbos-sdk";function MK$($){dp0=$}async function tU4($,Z){if(!dp0)throw Error("[task-board-github-read] runtime not initialized \u2014 setTaskBoardGithubReadRuntime() must run before the workflow fires");let X=await Rw0(dp0.db,$);if(!X)return mp0;return await SK$(X,$,Z)}async function oU4($,Z){return await ip0.runStep(()=>tU4($,Z),{name:"readPrState"})}function kK$(){if(Iw0)return;Iw0=ip0.registerWorkflow(oU4,{name:"taskBoardGithubReadWorkflow"})}async function Yy($,Z){if(!Iw0)return mp0;try{return await(await ip0.startWorkflow(Iw0,{queueName:YB,timeoutMS:pU4})($,Z)).getResult()}catch(X){return console.error("[task-board-github-read] throttled PR read failed",X),mp0}}var iU4=20,nU4=4,pU4=60000,qK$,dp0=null,mp0,Iw0=null;var cn=B(()=>{lp0();Ow();qK$={concurrency:nU4,rateLimit:{limitPerPeriod:iU4,periodSec:60}};mp0={state:null,merged:null}});import{z as qw0}from"zod";function Sw0($){let X=($ instanceof Error?$.message:String($)).replace(/https?:\/\/\S+/gi," ");return/too many requests|rate limit|\b429\b/i.test(X)}function CK$($){VK$.invalidate($)}async function dn($,Z,X,Q,Y,G){try{let J=await VK$.fetch({type:"tools/call",connectionId:Z,scope:{kind:"org"},params:{name:X,arguments:Q},fetchLive:()=>lZ(async()=>{let W=await $.callTool({name:X,arguments:Q},void 0,{timeout:kw0});if(W&&typeof W==="object"&&W.isError)throw Error(W.content?.[0]?.text??`${X} returned isError`);return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1,isRetriable:(W)=>!Sw0(W)}),onRevalidation:(W)=>G.push(W)});return Vw0(J)}catch(J){let W=J instanceof UJ?J.cause:J;return console.error(`[task-board] ${X} failed for ${Y}:`,W),null}}async function lV($,Z,X,Q){if(X){let G=await $.storage.connections.findById(X,Z);if(G&&G.status==="active")return G}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"});return rU4(Y.filter((G)=>G.status==="active"),Q)}function rU4($,Z){let X=$.find((Y)=>z5(Y)===null)??null;if(!Z)return X??$[0]??null;return $.find((Y)=>{let G=z5(Y);return G?.owner===Z.owner&&G?.repo===Z.name})??X}function Vw0($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((Q)=>Q.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function Mw0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")||Z.endsWith(".vercel.app")||Z.endsWith(".preview.vtex.app")}function aU4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&Mw0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function sU4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[],X=(Y)=>{let G=Y;return Date.parse(G?.updated_at)||Date.parse(G?.created_at)},Q=Z.map((Y,G)=>({c:Y,index:G})).sort((Y,G)=>{let J=X(Y.c),W=X(G.c);if(Number.isNaN(J)||Number.isNaN(W))return Y.index-G.index;return W-J}).map(({c:Y})=>Y);for(let Y of Q){let G=Y&&typeof Y.body==="string"?Y.body:"";if(!G)continue;let J=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(J?.[1]&&Mw0(J[1]))return J[1];let W=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((K)=>Mw0(K));if(W)return W}return null}function eU4($){let Z=$&&typeof $.environmentUrl==="string"?$.environmentUrl:null;return Z&&Mw0(Z)?Z:null}function _K$($){return typeof $==="string"&&/^[0-9a-fA-F]{7,40}$/.test($)?$:null}function $O4($){let Z=$?.head;return _K$(Z?.sha)}function ZO4($){return _K$($?.sha)}function vK$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function bK$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,Q=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:G,conclusion:J}=Y;if(G!=="completed")Q=!0;else if(typeof J==="string"&&fK$.has(J))X=!0}if(X)return"failing";if(Q)return"pending";return"passing"}function xK$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function XO4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let Q of Z){if(!Q||typeof Q!=="object")continue;let Y=Q;X.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return X}function QO4($){return $.status==="completed"&&$.conclusion!=null&&fK$.has($.conclusion)}async function YO4($,Z,X,Q,Y){let J=(await dn($,Z,"GET_CHECK_RUN",{owner:X.repoOwner,repo:X.repoName,checkRunId:Q},`${ln(X)} check-run ${Q}`,Y))?.output,W=typeof J?.summary==="string"?J.summary:null,K=typeof J?.text==="string"?J.text:null;return W??K??null}async function yK$($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0),G=async(J)=>Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0}));try{let J=null;try{J=vK$(await G("get_status"))}catch{}try{J=xK$(J,bK$(await G("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function gK$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function Cw0($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0);try{return gK$(Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function GO4($,Z,X,Q,Y){let G=(U)=>dn($,Z,"pull_request_read",{method:U,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (${U})`,Q),[J,W,K]=await Promise.all([G("get_status"),G("get_check_runs"),G("get_comments")]),H=xK$(vK$(J),bK$(W)),N=aU4(J)??sU4(K);if(!N){let U=$O4(await Y)??ZO4(J);if(U)N=eU4(await dn($,Z,"GET_PREVIEW_DEPLOYMENT",{owner:X.repoOwner,repo:X.repoName,sha:U},`${ln(X)} (deployment preview)`,Q))}let F=await Promise.all(XO4(W).map(async(U)=>({name:U.name,status:U.status,conclusion:U.conclusion,detailsUrl:U.detailsUrl,summary:QO4(U)&&U.id!=null?await YO4($,Z,X,U.id,Q):null})));return{checksStatus:H,checks:F,previewUrl:N}}async function JO4($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return pp0;let Y=await W5(Q,$,!0),G=[];try{let J=dn(Y,Q.id,"pull_request_read",{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (get)`,G),[W,K]=await Promise.all([J,GO4(Y,Q.id,X,G,J)]);if(!W)return pp0;let H=W.state,N=H==="open";return{title:typeof W.title==="string"?W.title:null,body:typeof W.body==="string"?W.body:null,state:H==="closed"?"closed":N?"open":null,draft:typeof W.draft==="boolean"?W.draft:null,merged:typeof W.merged==="boolean"?W.merged:null,mergeable:N&&typeof W.mergeable==="boolean"?W.mergeable:null,checksStatus:N?K.checksStatus:null,checks:N?K.checks:[],previewUrl:N?K.previewUrl:null}}catch{return pp0}finally{Promise.allSettled(G).then(()=>Y.close().catch(()=>{}))}}async function hK$($,Z,X,Q){let Y=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Y)return null;let G=await W5(Y,$,!0),J=[];try{return await dn(G,Y.id,"pull_request_read",{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number},`${ln(X)} (${Q})`,J)}catch{return null}finally{Promise.allSettled(J).then(()=>G.close().catch(()=>{}))}}async function uK$($,Z,X){let Q=await hK$($,Z,X,"merged");return typeof Q?.merged==="boolean"?Q.merged:null}async function SK$($,Z,X){let Q=await hK$($,Z,X,"candidate");return{state:Q?.state==="closed"?"closed":Q?.state==="open"?"open":null,merged:typeof Q?.merged==="boolean"?Q.merged:null}}function WO4($){let Z=$.findIndex((X)=>X!=="closed");return Z===-1?0:Z}async function Gy($,Z,X){if(X.length<=1)return X[0];let Q=[];for(let Y of X){let{state:G}=await Yy(Z,Y);if(Q.push(G),G!=="closed")break}return X[WO4(Q)]}async function cK$($,Z,X){let Q=await lV($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!Q)return null;let Y=await W5(Q,$,!0);try{let G=Vw0(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:kw0}));if(!G||G.state!=="open")return null;let J=G.head?.ref;return typeof J==="string"&&J.length>0?J:null}catch{return null}finally{await Y.close().catch(()=>{})}}var kw0=8000,np0,VK$,ln=($)=>`${$.repoOwner}/${$.repoName}#${$.number}`,pp0,fK$,tp0=($)=>$.some((Z)=>Z.state!=="closed"&&Z.merged!==!0),op0;var Ow=B(()=>{v0();tH();DQ();kZ();t4();gm();JK();xY();v9();cp0();Tw0();cn();np0={revalidateAfterMs:55000,maxStaleMs:1800000,maxValueBytes:524288},VK$=new J50({"tools/call":np0,"resources/read":np0,"prompts/get":np0});pp0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};fK$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);op0=m({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:qw0.object({taskBoardItemId:qw0.string()}),outputSchema:qw0.object({prs:qw0.array(TX$)}),handler:async({taskBoardItemId:$},Z)=>{Z0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let Q=await Z.storage.taskBoard.getById($,X),Y=await Z.storage.taskBoard.listPrs($,X),G=await Promise.all(Y.map(async(K)=>{let H=await JO4(Z,X,K);return{url:K.url,number:K.number,repoOwner:K.repoOwner,repoName:K.repoName,createdAt:K.createdAt,...H}})),J=G.find((K)=>K.state==="open"&&!K.merged);if(Q&&Q.status==="in_review"&&Q.assigneeId===M4&&tp0(G))await Aw0(Z,Q).catch((K)=>{console.error("[task-board] reviewer auto-handoff failed",K)});let W=J?gK$({state:J.state,mergeable:J.mergeable}):null;if(Q&&Q.status==="in_review"&&Q.assigneeId===M4&&J&&W===!0)await Qy(Z,X,Q,{pr:{number:J.number,url:J.url},conflict:!0}).catch((K)=>{console.error("[task-board] conflict auto-resolve failed",K)});if(G.some((K)=>K.merged))try{if(Q&&Q.status!=="done"&&Q.status!=="archived"){let K=await Z.storage.taskBoard.update($,X,{status:"done"},Q.updatedBy);await R5(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:Q.status,to:"done"}}),j4(X,K)}}catch(K){console.error("[task-board] merge\u2192done reconcile failed",K)}return{prs:G}}})});async function Jy($,Z,X){if(Z.assigneeId!==M4)return;await kN($,Z,X).catch((Q)=>{if(Q instanceof PQ)throw Q;console.error("[task-board] Super Agent enqueue failed",Q)})}function KO4($,Z){return["You've been assigned this task. Complete it.","","You are running AUTONOMOUSLY \u2014 no human is watching this run, so drive it "+"to completion on your own. Use `user_ask` ONLY for a genuine, unresolvable blocker a human must clear (a missing credential/secret, or "+"a decision so ambiguous you truly cannot proceed) \u2014 that should be rare. "+"Do not ask for confirmation of a reasonable choice; make it and move on.","",`Title: ${$.title}`,$.description?`
|
|
1513
1513
|
Description:
|
|
1514
1514
|
${$.description}
|
|
1515
1515
|
`:"",Z?.resolveConflict&&Z.pr?[`Your pull request #${Z.pr.number} (${Z.pr.url}) is approved but can't be merged \u2014 it has a MERGE CONFLICT with its base branch.`,`Load the repo, CHECK OUT that PR's branch (e.g. \`gh pr checkout ${Z.pr.number}\`), then merge (or rebase) the base branch into it and resolve the conflicts, and push to update the SAME pull request \u2014 do NOT open a new one or start a new branch. Resolve conflicts by preserving BOTH sides' intent; never blindly discard either side. Change only what resolving the conflict requires.`,""].join(`
|
|
@@ -2735,7 +2735,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2735
2735
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2736
2736
|
|
|
2737
2737
|
Respond with the structured verdict and a short reason.`,mf$;var nf$=B(()=>{C4();oO();I61();V96=q61.object({requiresReview:q61.boolean().describe("true if the changes should go through pull-request review"),reason:q61.string().describe("One short sentence explaining the decision (max ~120 chars)")});mf$={requiresReview:!1,reason:""}});function pf$($){let Z=$?.trim();if(!Z)return null;try{let X=new URL(Z);if(X.protocol!=="http:"&&X.protocol!=="https:")return null;return X.href}catch{return null}}function Dz0($){return pf$($?.previewServerUrl)??pf$($?.productionUrl)}function tf$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function of$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function rf$($){let Z=Uh.get($);if(!Z)return;Uh.delete($),M61-=Z.bytes}function x96($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(rf$($),Q>b96)return;Uh.set($,{etag:Z,body:X,bytes:Q}),M61+=Q;while(M61>f96||Uh.size>v96){let Y=Uh.keys().next().value;if(Y===void 0)break;rf$(Y)}}function af$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,N){let F=`${tf$()}${K}`,U=of$(W,K)?Uh.get(F):void 0,O=await fetch(F,{method:W,headers:{Accept:"application/vnd.github+json","User-Agent":"studio-decofile",Authorization:`token ${Q}`,...U?{"If-None-Match":U.etag}:{},...H!==void 0?{"content-type":"application/json"}:{}},body:H!==void 0?JSON.stringify(H):void 0,signal:AbortSignal.timeout(15000)});if(U&&O.status===304)return{status:200,json:U.body};if(!O.ok&&!N?.allow?.includes(O.status)){let D=await O.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new V6(O.status,W,K,L)}let w=O.status===204?void 0:await O.json();if(O.status===200&&of$(W,K)){let D=O.headers.get("etag");if(D)x96(F,D,w)}return{status:O.status,json:w}}return{owner:Z,repo:X,async getDefaultBranch(){if(G)return G;let{json:W}=await J("GET",Y);return G=W.default_branch,G},async getHeadSha(W){let{json:K}=await J("GET",`${Y}/git/ref/heads/${$_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${$_(W)}`,H=await fetch(`${tf$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let N=await H.text().catch(()=>"");throw new V6(H.status,"GET",K,N.slice(0,300))}if(!H.body)throw new V6(502,"GET",K,"tarball had no body");return H.body},async getCommitTreeSha(W){let{json:K}=await J("GET",`${Y}/git/commits/${W}`);return K.tree.sha},async getTreeRecursive(W){let{json:K}=await J("GET",`${Y}/git/trees/${W}?recursive=1`);if(K.truncated)throw new V6(502,"GET",`${Y}/git/trees/${W}`,"tree listing truncated by GitHub; repo too large for recursive read");return K.tree},async getBlobText(W){let{json:K}=await J("GET",`${Y}/git/blobs/${W}`);if(K.encoding!=="base64")throw new V6(502,"GET",`${Y}/git/blobs/${W}`,`unexpected blob encoding ${K.encoding}`);return Buffer.from(K.content,"base64").toString("utf-8")},async createBlob(W){let{json:K}=await J("POST",`${Y}/git/blobs`,{content:W,encoding:"utf-8"});return K.sha},async createTree(W,K){let{json:H}=await J("POST",`${Y}/git/trees`,{base_tree:W,tree:K});return H.sha},async createCommit({message:W,treeSha:K,parentShas:H}){let{json:N}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return N.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${$_(W)}`,{sha:K,force:!1})},async createRef(W,K){await J("POST",`${Y}/git/refs`,{ref:`refs/heads/${W}`,sha:K})},async mergeBranch(W,K,H){let{status:N,json:F}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return N===204?null:F?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:N}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:N.number,html_url:N.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),N=H[0];return N?{number:N.number,html_url:N.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${$_(W)}...${$_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((N)=>({filename:N.filename,status:N.status,sha:N.sha,...N.previous_filename?{previousFilename:N.previous_filename}:{}}))}}}}function $_($){return $.split("/").map(encodeURIComponent).join("/")}var v96=512,f96=8388608,b96=262144,Uh,M61=0,V6;var Z_=B(()=>{Uh=new Map;V6=class V6 extends Error{status;method;path;constructor($,Z,X,Q){super(`GitHub ${Z} ${X} failed (${$}): ${Q}`);this.status=$;this.method=Z;this.path=X;this.name="GitHubApiError"}}});async function Lz0($,Z,X){if(!X.connectionId)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Q=await $.storage.connections.findById(X.connectionId,Z);if(!Q)throw new V6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await y96($,Q);if(!Y)throw new V6(401,"AUTH","connection",VZ);return af$({owner:X.owner,repo:X.name,accessToken:Y})}async function y96($,Z){if(z5(Z)?.sourceConnectionId)return Bx($,Z);return(await SY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new R6($.db,$.vault)})).accessToken}var k61=B(()=>{DQ();J90();eW();TY();Z_()});function g96($){if(!$||$.includes("\\")||$.includes("..")||$.includes("\x00"))return!0;try{let Z=decodeURIComponent($);if(Z.includes("\\")||Z.includes("..")||Z.includes("\x00"))return!0;if(Z!==$&&Z.includes("/")){let X=($.match(/\//g)??[]).length;if((Z.match(/\//g)??[]).length>X)return!0}return!1}catch{return!0}}function Ez0($){if(g96($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function Or($){let Z=$;for(;;){let X;try{X=decodeURIComponent(Z)}catch{return Z}if(X===Z)return Z;Z=X}}function S61($){return Ez0($),encodeURIComponent($)}function wr($){let Z=[...$].sort((Y,G)=>{let J=`${Y.stem}.json`,W=`${G.stem}.json`;return J<W?-1:J>W?1:0}),X="{",Q=!0;for(let Y of Z){let G=Y.content.trim();if(G.length===0)continue;if(!Q)X+=",";Q=!1,X+=`${JSON.stringify(Or(Y.stem))}:${G}`}return`${X}}`}var sf$=()=>{};var jz0=B(()=>{sf$()});function h96($){return $.startsWith("merged/")?"merged":"blobs"}function V61($,Z){let X=new Map;for(let G of $){let J=X.get(G.path);if(!J||G.mtimeMs>=J.mtimeMs)X.set(G.path,{bytes:G.bytes,mtimeMs:G.mtimeMs})}let Q=[...X.entries()].sort((G,J)=>G[1].mtimeMs-J[1].mtimeMs),Y={config:Z,entries:new Map,totalBytes:0,areaBytes:{blobs:0,merged:0}};for(let[G,{bytes:J}]of Q){let W=h96(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function ef$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Oh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function $b$($,Z){let{path:X,bytes:Q,area:Y}=Z,{config:G}=$;if(!Number.isFinite(Q)||Q<0||Q>G.maxEntryBytes[Y]||Q>G.maxTotalBytes||Y==="merged"&&Q>G.maxMergedBytes)return{admitted:!1,evict:[]};let W=$.entries.get(X),K=$.totalBytes-(W?.bytes??0),H=$.areaBytes.merged-(W?.area==="merged"?W.bytes:0),N=[],F=new Set;if(Y==="merged")for(let[U,O]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||O.area!=="merged")continue;N.push(U),F.add(U),H-=O.bytes,K-=O.bytes}for(let[U,O]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||F.has(U))continue;N.push(U),F.add(U),K-=O.bytes}for(let U of N)Oh($,U);return Oh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:N}}function Br($){if($==="")throw TypeError("cache path segment must not be empty");let Z=$.toLowerCase(),X="";for(let Q of new TextEncoder().encode(Z)){let Y=String.fromCharCode(Q);X+=/[a-z0-9._-]/.test(Y)?Y:`%${Q.toString(16).padStart(2,"0")}`}if(X==="."||X==="..")X=X.replaceAll(".","%2e");return X}function C61($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as Jb$}from"crypto";import{mkdir as Dr,readdir as u96,readFile as c96,rename as l96,rm as Wb$,stat as Kb$,statfs as d96,unlink as m96,writeFile as i96}from"fs/promises";import{tmpdir as n96}from"os";import{dirname as p96,join as T7}from"path";function wh($,Z){let X=Bun.env[$];if(X===void 0||X==="")return Z;let Q=Number(X);return Number.isFinite(Q)&&Q>=0?Math.floor(Q):Z}function r96(){if(zz0)return zz0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?T7(n96(),"studio-fast-preview-cache"):$;return zz0={enabled:Z!=="",root:Z,index:{maxTotalBytes:wh("FAST_PREVIEW_CACHE_MAX_BYTES",2*Zb$),maxMergedBytes:wh("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*Pz0),maxEntryBytes:{blobs:wh("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",Pz0),merged:wh("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*Pz0)}},freeFloorBytes:wh("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Zb$),sweepIntervalMs:wh("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},zz0}function a96(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function s96(){if(XB)return;XB={hits:S$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:S$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:S$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:S$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:S$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},S$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!Bh)return;$.observe(Bh.index.areaBytes.blobs,{area:"blobs"}),$.observe(Bh.index.areaBytes.merged,{area:"merged"})}),S$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!Bh)return;let Z={blobs:0,merged:0};for(let X of Bh.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function e96($){X_.hits[$]+=1,XB?.hits.add(1,{area:$})}function Xb$($){X_.misses[$]+=1,XB?.misses.add(1,{area:$})}function _61(){X_.evictions+=1,XB?.evictions.add(1)}function WF($){X_.errors+=1,XB?.errors.add(1,{op:$})}function $Z6($){X_.invalidKeySkips+=1,XB?.errors.add(1,{op:`${$}_invalid_key`})}function v61(){return Qb$??=XZ6(),Qb$}async function XZ6(){let $=r96();if(!$.enabled)return null;s96();try{await Dr(T7($.root,"blobs"),{recursive:!0}),await Dr(T7($.root,"merged"),{recursive:!0}),await Dr(T7($.root,"tmp"),{recursive:!0})}catch{return WF("init"),null}let Z=[];try{Z=await Hb$($.root)}catch{WF("scan"),Z=[]}let X={root:$.root,index:V61(Z,$.index),cfg:$};return Bh=X,GZ6(X),X}async function Az0($){try{return await u96($)}catch{return[]}}async function Hb$($){let Z=[];for(let X of["blobs","merged"]){let Q=T7($,X);for(let Y of await Az0(Q)){let G=T7(Q,Y);for(let J of await Az0(G)){let W=T7(G,J);for(let K of await Az0(W))try{let H=await Kb$(T7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function Nb$($,Z,X){if(!C61(X))return null;try{return`blobs/${Br($)}/${Br(Z)}/${X}`}catch{return null}}function Fb$($,Z,X){if(!C61(X))return null;try{return`merged/${Br($)}/${Br(Z)}/${X}.json`}catch{return null}}async function Ub$($,Z){try{let X=await v61();if(!X)return null;if(Z===null)return Xb$($),null;try{let Q=await c96(T7(X.root,Z),"utf8");return ef$(X.index,Z),e96($),Q}catch{return Xb$($),null}}catch{return WF(`get_${$}`),null}}function Ob$($,Z,X){return Ub$("blobs",Nb$($,Z,X))}function wb$($,Z,X){return Ub$("merged",Fb$($,Z,X))}async function QZ6($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await d96($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function Tz0($){try{await m96($)}catch{}}async function YZ6($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Oh($.index,X.value),await Tz0(T7($.root,X.value)),_61()}}catch{WF("emergency_evict")}}async function Bb$($,Z,X,Q){try{let Y=await v61();if(!Y)return;if(X===null){$Z6(Z);return}if(!await QZ6(Y)){X_.floorSkips+=1,XB?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=$b$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){X_.admissionRefusals+=1;return}for(let K of J.evict)await Tz0(T7(Y.root,K)),_61();let W=T7(Y.root,"tmp",`stage-${Jb$()}`);try{await i96(W,Q,"utf8");let K=T7(Y.root,X);await Dr(p96(K),{recursive:!0}),await l96(W,K)}catch(K){if(Oh(Y.index,X),await Tz0(W),WF(Z),K?.code==="ENOSPC")await YZ6(Y)}}catch{WF(Z)}}function Rz0($,Z,X,Q){return Bb$("blobs","put_blob",Nb$($,Z,X),Q)}function Db$($,Z,X,Q){return Bb$("merged","put_merged",Fb$($,Z,X),Q)}async function Lb$(){try{let $=await v61();if(!$)return null;let Z=T7($.root,"tmp",Jb$());return await Dr(Z,{recursive:!0}),Z}catch{return WF("make_scratch"),null}}async function Eb$($){try{await Wb$($,{recursive:!0,force:!0})}catch{WF("remove_scratch")}}function GZ6($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;Yb$=new AbortController,R$(Math.random()*Z,{signal:Yb$.signal}).then(()=>{Gb$($);let X=setInterval(()=>void Gb$($),Z);X.unref?.(),ZZ6=X}).catch(()=>{})}async function Gb$($){try{let Z=V61(await Hb$($.root),$.cfg.index),X=$.cfg.index;for(let[G,J]of Z.entries){let W=Z.totalBytes>X.maxTotalBytes,K=Z.areaBytes.merged>X.maxMergedBytes;if(!W&&!K)break;if(!W&&K&&J.area!=="merged")continue;Oh(Z,G),await Tz0(T7($.root,G)),_61()}$.index=Z;let Q=T7($.root,"tmp"),Y=Date.now();for(let G of await Az0(Q)){let J=T7(Q,G);try{let W=await Kb$(J);if(Y-W.mtimeMs>o96)await Wb$(J,{recursive:!0,force:!0})}catch{}}}catch{WF("sweep")}}var t96=1024,Pz0,Zb$,o96=3600000,zz0=null,XB=null,X_,Qb$=null,Bh=null,ZZ6=null,Yb$=null;var jb$=B(()=>{t4();v6();Pz0=1024*t96,Zb$=1024*Pz0;X_=a96()});function zb$(){let $=new Map;return{run(Z,X){let Q=$.get(Z);if(Q)return Q;let Y=Promise.resolve().then(X).finally(()=>{$.delete(Z)});return $.set(Z,Y),Y}}}import{readdir as JZ6,stat as WZ6}from"fs/promises";import{join as Pb$}from"path";function KZ6($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function HZ6(){return Ab$??=(async()=>{try{let $=Bun.spawn(["tar","--version"],{stdin:"ignore",stdout:"pipe",stderr:"ignore"}),Z=await new Response($.stdout).text();return await $.exited,Z.includes("GNU")?"gnu":"bsd"}catch{return"bsd"}})(),Ab$}async function Tb$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new Lr(`invalid blocks path prefix: ${X}`);let Y=await HZ6(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...KZ6(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(F){throw new Lr("failed to spawn tar",{cause:F})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let F=(await K).trim().slice(0,500);throw new Lr(`tar exited with code ${H}${F?`: ${F}`:""}`)}let N=await NZ6(Z,Q);if(N.length===0)throw new Lr(`tar extracted no ${G} members into ${Z}`);return N}async function NZ6($,Z){let X=Pb$($,...Z.split("/")),Q;try{Q=await JZ6(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=Pb$(X,G);try{if(!(await WZ6(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var Lr,Ab$=null;var Rb$=B(()=>{Lr=class Lr extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as FZ6}from"crypto";import{readFile as UZ6}from"fs/promises";async function Er($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof V6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof V6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function wZ6(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return qb$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):qb$}function BZ6($){Mb$??=S$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),Mb$.add(1,{path:$})}async function Iz0($,Z,X){let Q=Array($.length),Y=0,G=Array.from({length:Math.min(Z,$.length)},async()=>{for(;;){let J=Y++;if(J>=$.length)return;Q[J]=await X($[J])}});return await Promise.all(G),Q}function qz0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function f61($,Z){let X=`${qz0(Z)}/`,Q=[];for(let Y of $){if(Y.type!=="blob"||!Y.path.startsWith(X))continue;let G=Y.path.slice(X.length);if(G.includes("/"))continue;if(!G.toLowerCase().endsWith(".json"))continue;Q.push({stem:G.slice(0,-5),sha:Y.sha,path:Y.path,size:Y.size})}return Q}function b61($,Z){return $.filter((X)=>Or(X.stem)===Z).map((X)=>X.path).sort()}function kb$($,Z,X,Q){return Rz0($,Z,X,Q)}function DZ6($,Z){if(!Z)return $;return FZ6("sha1").update(`${$}:${Z}`).digest("hex")}async function Sb$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await Er($,Z):await $.getHeadSha(Z);return LZ6.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>EZ6($,Y,X))}async function EZ6($,Z,X){let{owner:Q,repo:Y}=$,G=DZ6(Z,X),J=await wb$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=f61(K,X),N=new Map;if(await Iz0(H,Ib$,async(w)=>{let D=await Ob$(Q,Y,w.sha);if(D!==null)N.set(w.path,D)}),H.length-N.size>OZ6){let w=await jZ6($,Z,X,H);if(BZ6(w!==null?"tarball":"blobs"),w!==null)for(let[D,L]of w)N.set(D,L)}let U=await Iz0(H,Ib$,async(w)=>{let D=N.get(w.path);if(D!==void 0)return{stem:w.stem,content:D};let L=await $.getBlobText(w.sha);return await Rz0(Q,Y,w.sha,L),{stem:w.stem,content:L}}),O=wr(U);return await Db$(Q,Y,G,O),{sha:Z,decofile:O}}async function jZ6($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=wZ6(),J=0;for(let K of Q){if(K.size===void 0)return console.warn("decofile cold read: tarball skipped (tree entry missing size; cannot pre-validate)",{repo:Y,sha:Z,path:K.path}),null;J+=K.size}if(J>G)return console.warn("decofile cold read: tarball skipped (blocks over FAST_PREVIEW_COLD_TARBALL_MAX_BYTES)",{repo:Y,sha:Z,aggregateBytes:J,maxBytes:G}),null;let W=await Lb$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await Tb$(K,W,qz0(X)),N=new Map(Q.map((U)=>[U.path,U.sha])),F=new Map;for(let U of H){let O=N.get(U.path);if(O===void 0)continue;let w=await UZ6(U.diskPath,"utf8");await Rz0($.owner,$.repo,O,w),F.set(U.path,w)}return F}catch(K){return console.warn("decofile cold read: tarball path failed; falling back to blob fetches",{repo:Y,sha:Z,error:K instanceof Error?K.message:String(K)}),null}finally{await Eb$(W)}}var Ib$=12,OZ6=50,qb$=134217728,Mb$=null,LZ6;var Mz0=B(()=>{jz0();v6();jb$();Z_();Rb$();LZ6=zb$()});async function kz0($,Z){let X=await $.getDefaultBranch(),Q=await Er($,Z),Y=X===Z?{aheadBy:0,behindBy:0}:await $.compare(X,Z);return{not_added:[],conflicted:[],created:[],deleted:[],modified:[],renamed:[],files:[],staged:[],ahead:0,behind:0,current:Z,tracking:`origin/${Z}`,detached:!1,base:X,aheadOfBase:Y.aheadBy,behindBase:Y.behindBy,headSha:Q,unpushed:0}}async function Sz0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,zZ6),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((N)=>N.type==="blob").map((N)=>[N.path,N.sha])),H=await Iz0(G,PZ6,async(N)=>{let F=N.previousFilename??N.filename,U=N.status==="added"?void 0:K.get(F),O=U?await $.getBlobText(U):null,w=N.status==="removed"?null:await $.getBlobText(N.sha);return[N.filename,{from:O,to:w}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function Vb$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof V6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new V6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await RZ6($,Z,X)}async function RZ6($,Z,X){for(let Q=1;;Q++){let Y=await $.getHeadSha(Z),G=await $.getHeadSha(X),{files:J}=await $.compareDetailed(X,Z);if(J.length>=AZ6)throw new V6(409,"POST","merges",`Too many changed files on ${Z} to auto-merge (${J.length}); resolve on GitHub`);let W=await $.getTreeRecursive(await $.getCommitTreeSha(Y)),K=new Map(W.filter((U)=>U.type==="blob").map((U)=>[U.path,U])),H=[];for(let U of J){let O=K.get(U.filename);if(U.status==="removed"||!O)H.push({path:U.filename,mode:"100644",type:"blob",sha:null});else H.push({path:U.filename,mode:"100644",type:"blob",sha:O.sha});if(U.previousFilename&&U.previousFilename!==U.filename)H.push({path:U.previousFilename,mode:"100644",type:"blob",sha:null})}let N=await $.createTree(await $.getCommitTreeSha(G),H),F=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:N,parentShas:[Y,G]});try{await $.updateRef(Z,F);return}catch(U){if(U instanceof V6&&U.status===422&&Q<TZ6)continue;throw U}}}var zZ6=200,PZ6=12,AZ6=300,TZ6=3;var Cb$=B(()=>{Z_();Mz0()});function qZ6($){if(!$||$.includes(".."))return!1;return IZ6.test($)}function _b$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!qZ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function vb$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var IZ6;var fb$=B(()=>{IZ6=/^[\w./@-]+$/});function x61($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function jr($,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 bb$($,Z,X,Q){if(!Q.connectionId)throw new Q_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Q_(VZ);await SO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(N)=>{let F=N instanceof Error?N.message:VZ;throw new Q_(F)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await VO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((N)=>{let{code:F,message:U}=j$$(N instanceof Error?N.message:String(N));throw F?new Q_(U):N}),K=Fh($),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 N=await pO(H,MZ6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${N}`)}}var MZ6=10485760,Q_;var y61=B(()=>{eW();Bz0();Xn();Ml0();Dx();Q_=class Q_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function SZ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!kZ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Y_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(CZ6)])}function G_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function zr($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=jr(Z,X);if(!Y)throw new V6(404,"AUTH","repo","Project has no GitHub repository");let G=o(Q);return Lz0(Q,G.id,Y)}function g61($,Z){if(Z instanceof V6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,j9)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,j9)}async function gb$($){try{let Z=await zr($),X=await kz0(Z,$.get("vmClaim").branch);return $.json(X,200,j9)}catch(Z){return g61($,Z)}}function Cz0($,Z){let Q=(Vz0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return Vz0.set($,Y),Y.finally(()=>{if(Vz0.get($)===Y)Vz0.delete($)}),Q}async function gZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,j9);let Q=G_($);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 N=X?.signal,F={method:W,headers:H,body:K,...N?{signal:N}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,F);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...j9}})}}let w=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?vZ6(w):w,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...j9}})};try{if(N){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(N.aborted)return L(N.reason);N.addEventListener("abort",()=>L(N.reason),{once:!0})})])}return await U()}catch(O){let w=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${w}`},502)}}function vZ6($){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 _z0($,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 fZ6($){return hb$.includes($)}var kZ6,xb$=524288,VZ6=65536,CZ6=1e4,yb$=2000,_Z6,Vz0,j9,hb$,ub$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",_Z6),$.post("/:virtualMcpId/:branch/write",(X)=>gZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>gZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>gZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>gZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>gZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>gZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Y_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>gZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Y_(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 gZ(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 gZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>gZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!fZ6(Q))return X.json({error:`step must be one of: ${hb$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=o(X.var.studioContext),J=vx(Y.virtualMcpMetadata);try{await yU0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return gZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return JF(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 gf$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return gb$(X);return Z(X)});let Z=(X)=>gZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(yb$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return gb$(X);return gZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(yb$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await zr(X),J=await Sz0(G,Q.branch,Y.base);return X.json(J,200,j9)}catch(Y){return g61(X,Y)}return gZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,j9);let Q=G_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Cz0(Y,async()=>{try{await j61(W,Q,Y);let K=jr(G,J);if(K)await bb$(W,Q,Y,K)}catch(K){if(K instanceof Q_)return X.json({error:K.message},403,j9);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,j9)}return gZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let{claimName:Q,fastPreview:Y}=X.get("vmClaim");if(Y)return X.json({error:"Nothing to discard: Fast Preview projects have no working tree"},400,j9);return Cz0(Q,()=>gZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Cz0(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await zr(X),H=W.base??await K.getDefaultBranch();return await Vb$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,j9)}catch(W){return g61(X,W)}});let Y=G_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Cz0(G,async()=>{try{await j61(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,j9)}return gZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",FZ({maxSize:xb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=G_(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(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[O,w]=A61(N)&&U?[N,F]:Y?await Promise.all([_z0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),_z0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await zr(X);return Promise.all([kz0(L,Q.branch),Sz0(L,Q.branch)])})(),D=await df$(K,O,w);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",FZ({maxSize:xb$,onError:(X)=>X.json({error:"Payload too large"},413,j9)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=G_(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(()=>({})),N=H.status,F=H.diff,U=F!=null&&typeof F.diffs==="object"&&F.diffs!==null,[O,w]=A61(N)&&U?[N,F]:Y?await Promise.all([_z0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),_z0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await zr(X);return Promise.all([kz0(L,Q.branch),Sz0(L,Q.branch)])})(),D=await if$(K,O,w,typeof H.language==="string"?H.language:void 0);return X.json(D,200,j9)}catch(H){let N=H instanceof Error?H.message:String(H);if(N==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,j9);return X.json({error:N},502,j9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=G_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=x61(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",FZ({maxSize:VZ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=G_(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=_b$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=vb$(G,W.resolveType),H=x61(K),N;try{N=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await N.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var cb$=B(()=>{C8();aw();Nh();E61();WN();xf$();T3();dO();yf$();hf$();tm0();$n();I61();nf$();k61();Z_();Cb$();fb$();y61();kZ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;_Z6=wz0(async($,Z)=>{let X=$.var.studioContext;try{Z0(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=o(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{SZ6(J)}catch(O){let w=O instanceof Error?O.message:String(O);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=Ai({orgId:Y.id,virtualMcpId:G,branch:J}),H=await DN(X,J,Q),N=bf$({userId:H,projectRef:K}),F=W.metadata??null;if(F?.fastPreview===!0&&Dz0(F))return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await dX(X,{userId:H,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});Vz0=new Map;j9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};hb$=["clone","install","start"]});function lb$($,Z,X){let Q=h61.get($);if(!Q)Q={pending:null,running:!1},h61.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)xZ6($,Q);return G}async function xZ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await yZ6(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)h61.delete($)}}async function yZ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Er(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=f61(W,Q),H=[],N=new Map(K.map((w)=>[w.path,{stem:w.stem,sha:w.sha}]));for(let[w,D]of $.set){let L=b61(K,w),E=`${JSON.stringify(D,null,2)}
|
|
2738
|
-
`,j=await Z.createBlob(E);await kb$(Z.owner,Z.repo,j,E);let z=L[0]??`${qz0(Q)}/${S61(w)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let w of $.del)for(let D of b61(K,w))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((w)=>w.type==="blob"&&w.path===F)){let w=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(wr(w));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:gZ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(w){if(!(w instanceof V6&&w.status===422)||Y>=bZ6-1)throw w;await R$(cZ(2000,200,Y,2,0.5))}}}function gZ6($){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 El0(Q,$.deps.coAuthor)}var bZ6=3,h61;var db$=B(()=>{VU0();jz0();t4();Z_();Mz0();h61=new Map});import{createHmac as mb$,randomBytes as hZ6,timingSafeEqual as uZ6}from"crypto";function ib$(){if(vz0)return vz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return vz0=$?Buffer.from($):hZ6(32),vz0}function u61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+cZ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=mb$("sha256",ib$()).update(Q).digest("base64url");return`${Q}.${Y}`}function nb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(mb$("sha256",ib$()).update(Q).digest("base64url"));if(Y.length!==G.length||!uZ6(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 cZ6=21600000,vz0=null;var pb$=B(()=>{I$()});import{z as Dh}from"zod";function dZ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lZ6.test($)}function ob$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fz0($){let Z=$.get("decofileScope");return Lz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function bz0($,Z){if(Z instanceof V6){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 rb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",tb$),$.use("/:virtualMcpId/:branch/*",tb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Sb$(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=u61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ob$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=mZ6.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{Ez0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await fz0(Z),W=await lb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Fh(Q)},G),K=u61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ob$(Z)})}catch(J){return bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return bz0(Z,Q)}}),$}var lZ6,mZ6,tb$;var ab$=B(()=>{jz0();C8();E61();Bz0();y61();k61();db$();pb$();Z_();Mz0();lZ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;mZ6=Dh.object({set:Dh.record(Dh.string(),Dh.unknown()).optional(),delete:Dh.array(Dh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),tb$=wz0(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(!dZ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!nb$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Dz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((O)=>O.connection_id)??[],F=jr(K,N);if(!F)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:F,userId:J}),Z()})});var sb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Cj0()),Z.route("/",jC$()),Z.route("/",Af$()),Z.route("/",jf$()),Z.route("/",Fz0()),Z.route("/tools",Sf$()),Z.route("/",qf$()),Z.route("/",Zf$({kvStorage:$.kvStorage})),Z.route("/",ev$()),Z.route("/fs",Uf$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ub$()),Z.route("/decofile",rb$()),Z.route("/",Df$()),Z.route("/deco-sites",vj0()),Z.route("/sso",Ij0()),Z.route("/",Uz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",FC$()),$.mountDevAssets)Z.route("/dev-assets",fj0({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("/",XS$()),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",wf$()),Z.route("/mcp",pw0()),Z.route("/mcp/self",Nz0()),Z.route("/mcp",rw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var eb$=B(()=>{C8();h81();UC$();m81();bj0();ho();y81();$f$();Xf$();Of$();sn();S81();aw0();F61();Bf$();Lf$();zf$();Tf$();Mf$();O61();Vf$();w61();tw0();cb$();ab$()});function nZ6($){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}}))}async function pZ6($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(iZ6)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var iZ6=1e4,tZ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$x$=()=>{let $=new U1;return $.use("*",tZ6),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await pZ6(Q,Y);return Z.json({apps:nZ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zx$=B(()=>{C8();I$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Y76($){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 G76($,Z,X){try{return JSON.parse($)}catch{throw new Yx$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function J76($){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:G76(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 W76($){let Z=$.map((X)=>{let Q=X.function.parameters?MY(X.function.parameters):MY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function K76($){if(!$)return;return{openai:{response_format:$}}}function H76(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xx$($,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 Qx$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var oZ6=256,rZ6,aZ6,sZ6,eZ6,$76,Z76,X76,Q76,Yx$,Gx$,Jx$;var Wx$=B(()=>{C4();C8();Nh();hN();rZ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),aZ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),sZ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(aZ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),eZ6=M1.object({type:M1.literal("text")}),$76=M1.object({type:M1.literal("json_object")}),Z76=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),X76=M1.union([eZ6,$76,Z76]),Q76=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(sZ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(rZ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:X76.optional(),user:M1.string().optional()});Yx$=class Yx$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gx$=new U1;Gx$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=Q76.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=Y76(G.model);if(!J)return $.json(lK("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)=>UD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=J76(G.messages),U=G.tools?W76(G.tools):void 0,O=K76(G.response_format),w=H76(),D=Math.floor(Date.now()/1000);if(G.stream)return JF($,async(L)=>{let E=Xx$(N,F,U,G,O,$.req.raw.signal);try{let j=MO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=oZ6)await q()}else if(k.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,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 q(),await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Qx$(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 q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Xx$(N,F,U,G,O,$.req.raw.signal),E=await IO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:w,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Qx$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Jx$=Gx$});var Hx$;var Kx$=B(()=>{Hx$={name:"decocms",version:"4.214.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function U76(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??F76}}var Nx$,F76="https://ph.studio.decocms.com",Fx$;var Ux$=B(()=>{C8();ey0();gV();PZ();I$();R81();Kx$();Nx$=new U1;Nx$.get("/",($)=>{let Z={version:Hx$.version,theme:yc1(),...XL().logo&&{logo:XL().logo},...wK()&&{internalUrl:Uk1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:SV$(),posthog:U76(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Fx$=Nx$});function Lh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function c61($){return(Lh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function wx$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Lh($))}&sz=${Z}`}function Ox$($,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 Bx$($){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()?Ox$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Ox$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var J_,O76,w76,B76,D76,Dx$;var Lx$=B(()=>{J_=c0.enum(["good","bad","neutral"]),O76=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:J_.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 $})),w76=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(O76)),B76={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()},D76=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:J_.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:J_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:J_.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:J_.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(w76).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:J_.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:J_.optional()})).min(1)})]),Dx$=c0.object({...B76,template:D76})});function xz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Dx$.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 l61=B(()=>{Lx$()});import{join as Ex$}from"path";async function E76($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(L76)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=xz0(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()||c61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function oY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function j76($,Z){let X=Lh($),Q=Z?.brand?.trim()||c61(X),Y=wx$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Bx$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${oY(W)}</title>`,`<meta name="description" content="${oY(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="${oY(W)}" />`,`<meta property="og:description" content="${oY(K)}" />`,`<meta property="og:url" content="${oY(J)}" />`,`<meta property="og:image" content="${oY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${oY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${oY(W)}" />`,`<meta name="twitter:description" content="${oY(K)}" />`,`<meta name="twitter:image" content="${oY(H)}" />`,`<meta name="twitter:image:alt" content="${oY(N)}" />`,`<link rel="canonical" href="${oY(J)}" />`,`<link rel="icon" href="${oY(Y)}" sizes="any" />`].join(`
|
|
2738
|
+
`,j=await Z.createBlob(E);await kb$(Z.owner,Z.repo,j,E);let z=L[0]??`${qz0(Q)}/${S61(w)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);N.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),N.delete(P)}for(let w of $.del)for(let D of b61(K,w))H.push({path:D,mode:"100644",type:"blob",sha:null}),N.delete(D);if(H.length===0)return G;let F=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((w)=>w.type==="blob"&&w.path===F)){let w=await Promise.all([...N.values()].map(async(L)=>({stem:L.stem,content:L.content??await Z.getBlobText(L.sha)}))),D=await Z.createBlob(wr(w));H.push({path:F,mode:"100644",type:"blob",sha:D})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:gZ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(w){if(!(w instanceof V6&&w.status===422)||Y>=bZ6-1)throw w;await R$(cZ(2000,200,Y,2,0.5))}}}function gZ6($){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 El0(Q,$.deps.coAuthor)}var bZ6=3,h61;var db$=B(()=>{VU0();jz0();t4();Z_();Mz0();h61=new Map});import{createHmac as mb$,randomBytes as hZ6,timingSafeEqual as uZ6}from"crypto";function ib$(){if(vz0)return vz0;let $;try{let Z=y0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return vz0=$?Buffer.from($):hZ6(32),vz0}function u61($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+cZ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=mb$("sha256",ib$()).update(Q).digest("base64url");return`${Q}.${Y}`}function nb$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(mb$("sha256",ib$()).update(Q).digest("base64url"));if(Y.length!==G.length||!uZ6(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 cZ6=21600000,vz0=null;var pb$=B(()=>{I$()});import{z as Dh}from"zod";function dZ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&lZ6.test($)}function ob$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function fz0($){let Z=$.get("decofileScope");return Lz0($.var.studioContext,Z.organizationId,Z.githubRepo)}function bz0($,Z){if(Z instanceof V6){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 rb$(){let $=new U1;return $.use("/:virtualMcpId/:branch",tb$),$.use("/:virtualMcpId/:branch/*",tb$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Sb$(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=u61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(ob$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return bz0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=mZ6.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{Ez0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await fz0(Z),W=await lb$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Fh(Q)},G),K=u61({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:ob$(Z)})}catch(J){return bz0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);try{let G=await Q.mergeBranch(Y,X.branch,`chore(decofile): publish ${X.branch}`);return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(G instanceof V6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof V6&&G.status===405){let W=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:W.number,url:W.html_url})}throw G}}catch(Q){return bz0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await fz0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof V6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return bz0(Z,Q)}}),$}var lZ6,mZ6,tb$;var ab$=B(()=>{jz0();C8();E61();Bz0();y61();k61();db$();pb$();Z_();Mz0();lZ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;mZ6=Dh.object({set:Dh.record(Dh.string(),Dh.unknown()).optional(),delete:Dh.array(Dh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),tb$=wz0(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(!dZ6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!nb$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!Dz0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let N=W.connections?.map((O)=>O.connection_id)??[],F=jr(K,N);if(!F)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:F,userId:J}),Z()})});var sb$=($)=>{let Z=new U1;if(Z.use("*",iC),Z.route("/",Cj0()),Z.route("/",jC$()),Z.route("/",Af$()),Z.route("/",jf$()),Z.route("/",Fz0()),Z.route("/tools",Sf$()),Z.route("/",qf$()),Z.route("/",Zf$({kvStorage:$.kvStorage})),Z.route("/",ev$()),Z.route("/fs",Uf$({getConnection:$.getNatsConnection})),Z.route("/sandbox",ub$()),Z.route("/decofile",rb$()),Z.route("/",Df$()),Z.route("/deco-sites",vj0()),Z.route("/sso",Ij0()),Z.route("/",Uz0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",FC$()),$.mountDevAssets)Z.route("/dev-assets",fj0({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("/",XS$()),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",wf$()),Z.route("/mcp",pw0()),Z.route("/mcp/self",Nz0()),Z.route("/mcp",rw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var eb$=B(()=>{C8();h81();UC$();m81();bj0();ho();y81();$f$();Xf$();Of$();sn();S81();aw0();F61();Bf$();Lf$();zf$();Tf$();Mf$();O61();Vf$();w61();tw0();cb$();ab$()});function nZ6($){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}}))}async function pZ6($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(iZ6)});if(!X.ok){let Q=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${Q.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var iZ6=1e4,tZ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},$x$=()=>{let $=new U1;return $.use("*",tZ6),$.get("/",async(Z)=>{let X=y0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await pZ6(Q,Y);return Z.json({apps:nZ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Zx$=B(()=>{C8();I$()});import{z as M1}from"zod";function lK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function Y76($){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 G76($,Z,X){try{return JSON.parse($)}catch{throw new Yx$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function J76($){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:G76(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 W76($){let Z=$.map((X)=>{let Q=X.function.parameters?MY(X.function.parameters):MY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function K76($){if(!$)return;return{openai:{response_format:$}}}function H76(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Xx$($,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 Qx$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var oZ6=256,rZ6,aZ6,sZ6,eZ6,$76,Z76,X76,Q76,Yx$,Gx$,Jx$;var Wx$=B(()=>{C4();C8();Nh();hN();rZ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),aZ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),sZ6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(aZ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),eZ6=M1.object({type:M1.literal("text")}),$76=M1.object({type:M1.literal("json_object")}),Z76=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),X76=M1.union([eZ6,$76,Z76]),Q76=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(sZ6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(rZ6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:X76.optional(),user:M1.string().optional()});Yx$=class Yx$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Gx$=new U1;Gx$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(lK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(lK("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(lK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=Q76.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(lK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=Y76(G.model);if(!J)return $.json(lK("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)=>UD(j.providerId));if(!E)return $.json(lK("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(lK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let N=H.aiSdk.languageModel(K),F=J76(G.messages),U=G.tools?W76(G.tools):void 0,O=K76(G.response_format),w=H76(),D=Math.floor(Date.now()/1000);if(G.stream)return JF($,async(L)=>{let E=Xx$(N,F,U,G,O,$.req.raw.signal);try{let j=MO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let k=P;P="",await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=oZ6)await q()}else if(k.type==="tool-call"){await q();let M=A++;await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,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 q(),await L.writeSSE({data:JSON.stringify({id:w,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:Qx$(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 q(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=Xx$(N,F,U,G,O,$.req.raw.signal),E=await IO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:w,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:Qx$(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(lK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(lK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(lK(Y.message,"server_error"),500)}});Jx$=Gx$});var Hx$;var Kx$=B(()=>{Hx$={name:"decocms",version:"4.214.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function U76(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??F76}}var Nx$,F76="https://ph.studio.decocms.com",Fx$;var Ux$=B(()=>{C8();ey0();gV();PZ();I$();R81();Kx$();Nx$=new U1;Nx$.get("/",($)=>{let Z={version:Hx$.version,theme:yc1(),...XL().logo&&{logo:XL().logo},...wK()&&{internalUrl:Uk1()},...y0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!y0().firecrawlApiKey,auth:SV$(),posthog:U76(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!wK()&&y0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Fx$=Nx$});function Lh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function c61($){return(Lh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function wx$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Lh($))}&sz=${Z}`}function Ox$($,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 Bx$($){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()?Ox$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Ox$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var J_,O76,w76,B76,D76,Dx$;var Lx$=B(()=>{J_=c0.enum(["good","bad","neutral"]),O76=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:J_.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 $})),w76=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(O76)),B76={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()},D76=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:J_.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:J_.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:J_.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:J_.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(w76).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:J_.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:J_.optional()})).min(1)})]),Dx$=c0.object({...B76,template:D76})});function xz0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Dx$.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 l61=B(()=>{Lx$()});import{join as Ex$}from"path";async function E76($){try{let Z=await fetch(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(L76)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=xz0(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()||c61($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function oY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function j76($,Z){let X=Lh($),Q=Z?.brand?.trim()||c61(X),Y=wx$(X,128),J=`${(y0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=Bx$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,N=`${Q} commerce report by decocms`;return[`<title>${oY(W)}</title>`,`<meta name="description" content="${oY(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="${oY(W)}" />`,`<meta property="og:description" content="${oY(K)}" />`,`<meta property="og:url" content="${oY(J)}" />`,`<meta property="og:image" content="${oY(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${oY(N)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${oY(W)}" />`,`<meta name="twitter:description" content="${oY(K)}" />`,`<meta name="twitter:image" content="${oY(H)}" />`,`<meta name="twitter:image:alt" content="${oY(N)}" />`,`<link rel="canonical" href="${oY(J)}" />`,`<link rel="icon" href="${oY(Y)}" sizes="any" />`].join(`
|
|
2739
2739
|
`)}function z76($,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}
|
|
2740
2740
|
</head>`)}function jx$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=Lh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Ex$($,"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(`${gW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(P76)}),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=$?Ex$($,"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 E76(Lh(Q)),K=j76(Q,W);return X.html(z76(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var L76=2500,P76=1e4;var zx$=B(()=>{C8();l61();DL();I$()});function Pr($,Z){return fetch(`${gW({})}${$}`,Z)}async function A76($,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 Pr(`/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}=xz0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var T76,KF,Px$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Ax$;var Tx$=B(()=>{C8();VG();DL();l61();T76=new Set(["complete","errored","terminated","unknown"]),KF=new U1;KF.use("*",async($,Z)=>{let X=await j8.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});KF.use("/link-token/*",Px$);KF.use("/suggest",Px$);KF.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 A76(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)}});KF.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 Pr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${BL({})}`},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)}});KF.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Pr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${BL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:T76.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});KF.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Pr(`/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)}});KF.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Pr(`/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:[]})}});Ax$=KF});import{createHmac as R76,timingSafeEqual as I76}from"crypto";function Ix$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let N=H.indexOf("=");if(N<=0)continue;let F=H.slice(0,N).trim(),U=H.slice(N+1).trim();if(F==="t")Y=U;else if(F==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>q76)return!1;let W=R76("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let N=Buffer.from(H,"hex");return K.length===N.length&&I76(K,N)})}function qx$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=NJ(Z),Q=NJ(NJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:dK(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 Mx$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function dK($){return typeof $==="string"?$:void 0}function NJ($){return typeof $==="object"&&$!==null?$:void 0}function yz0($){return typeof $==="number"?new Date($*1000):null}function i61($){return dK($)??dK(NJ($)?.id)}function M76($){return i61($.subscription)??dK(NJ(NJ($.parent)?.subscription_details)?.subscription)}function k76($){let Z=yz0($.current_period_end);if(Z)return Z;let X=NJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=NJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function d61($,Z){let X=yz0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function m61($,Z){let X=yz0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function S76($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=dK(NJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(dK(NJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(dK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=dK(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(NJ(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:NJ(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(dK(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=i61(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(d61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:i61(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:m61(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=dK(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&&d61(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Mx$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:k76(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:m61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=M76(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(d61(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:yz0(X.period_end),lastStripeEventAt:m61(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function V76($,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:Mx$(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 Rx$($,Z){let X=V76($,Z);if(!X)return;jY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:id1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function kx$($){let Z=new fW(m8().db),X=await S76(Z,$);if(!(X.handled&&X.topUp))Rx$($,X);if(X.handled&&X.topUp)await WO$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Rx$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Gr1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof K3&&(Q.status===400||Q.status===404)))throw Q}return X}var q76=300;var Sx$=B(()=>{RG();I4();T40();sm();La0()});var C76=1048576,n61;var Vx$=B(()=>{C8();aw();I$();Sx$();n61=new U1;n61.post("/webhook",FZ({maxSize:C76,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=y0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Ix$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=qx$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await kx$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as _76}from"crypto";function f76($,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 _76(Buffer.from(Y),Buffer.from(Q))}var v76=5242880,p61;var Cx$=B(()=>{C8();aw();ai();p61=new U1;p61.post("/webhook",FZ({maxSize:v76,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(!f76(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 lm0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function _x$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var vx$,b76,x76,fx$;var bx$=B(()=>{C8();sJ();px();pb();vx$=new U1,b76=["range","if-none-match","if-modified-since"],x76=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];vx$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(ig($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new e1(401,{message:"Authentication required"})}if(!X)throw new e1(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new e1(400,{message:"Missing file key"});let Y=await Sn(Q,Z);if(!Y)throw new e1(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&Q3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new e1(500,{message:"Invalid data URL from storage"});let[,H,N]=K,F=Buffer.from(N,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return _x$(U,H),new Response(F,{status:200,headers:U})}let G=new Headers;for(let K of b76){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 e1(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 e1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of x76){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),_x$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});fx$=vx$});var Ar=C((W_)=>{var y76=W_&&W_.__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]}),g76=W_&&W_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))y76(Z,$,X)};Object.defineProperty(W_,"__esModule",{value:!0});g76(YY(),W_)});var gx$=C((xx$)=>{Object.defineProperty(xx$,"__esModule",{value:!0});xx$.version=void 0;xx$.version="3.4.0"});var cx$=C((mK)=>{var h76=mK&&mK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(mK,"__esModule",{value:!0});mK.NodeTransport=mK.VERSION=void 0;mK.nodeResolveHost=i76;var n6=Ar(),u76=z0("net"),t61=z0("tls"),c76=z0("path"),hx$=z0("fs"),l76=h76(z0("dns")),d76=gx$();mK.VERSION=d76.version;var m76="nats.js";class ux${socket;version;lang;yields=[];signal=(0,n6.deferred)();closedNotification=(0,n6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=m76,this.version=mK.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,n6.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 n6.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 n6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new n6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,n6.deferred)(),X,Q=(0,u76.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,n6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=n6.DataBuffer.concat(...this.yields),Y=(0,n6.extractProtocolMessage)(Q);if(Y!=="")try{let G=n6.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,n6.deferred)();try{if($=(0,c76.resolve)($),!(0,hx$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,hx$.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,n6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new n6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,n6.deferred)();try{let Y=(0,t61.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 n6.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,n6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new n6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,n6.deferred)();try{let Q=(0,t61.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 n6.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,n6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,n6.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 t61.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,n6.render)($)}`);let Z=(0,n6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,n6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,n6.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}}mK.NodeTransport=ux$;function i76($){let Z=(0,n6.deferred)();return l76.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 nx$=C((ix$)=>{Object.defineProperty(ix$,"__esModule",{value:!0});ix$.connect=n76;var lx$=cx$(),dx$=Ar(),mx$=Ar();function n76($={}){if((0,mx$.hasWsProtocol)($))return Promise.reject(mx$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,dx$.setTransportFactory)({factory:()=>{return new lx$.NodeTransport},dnsResolveFn:lx$.nodeResolveHost}),dx$.NatsConnectionImpl.connect($)}});var px$=C((HF)=>{var t76=HF&&HF.__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]}),o76=HF&&HF.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))t76(Z,$,X)};Object.defineProperty(HF,"__esModule",{value:!0});HF.connect=void 0;var r76=nx$();Object.defineProperty(HF,"connect",{enumerable:!0,get:function(){return r76.connect}});o76(Ar(),HF)});function ax$($){let Z=$?.connectFn??$X6,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 N(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function F(U,O){let w=0;while(!G)try{X=await Z({servers:U,timeout:e76,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${w} attempt(s)`),Q=null,J=!1,N(X),H();return}catch{w++;let D=cZ(s76,a76,w-1,2,0.5);await R$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let w=O?.creds?tx$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;F(U,w).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=rx$.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 $X6($){return ox$.connect($)}var tx$,ox$,rx$,a76=100,s76=3000,e76=3000;var sx$=B(()=>{t4();tx$=S(lh(),1),ox$=S(px$(),1),rx$=S(zB(),1)});function o61($,Z){return`${$}.${Z}`}class r61{cache;constructor($){this.cache=vg({ttlMs:$?.ttlMs??ZX6,maxSize:$?.maxSize??XX6})}async get($,Z){return this.cache.get(o61($,Z))??null}async set($,Z,X){this.cache.set(o61($,Z),X)}async invalidate($,Z){this.cache.delete(o61($,Z))}teardown(){this.cache.clear()}}var ZX6=600000,XX6=5000;var ex$=()=>{};function gz0($,Z){return`${$}:${Z}`}function a61($){let Z=vg({ttlMs:$?.ttlMs??QX6,maxSize:$?.maxSize??YX6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let N=X?.();if(!N)return;try{N.publish($y$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,H){return Z.get(gz0(K,H))},set(K,H,N){Z.set(gz0(K,H),N)},invalidate(K,H){Z.delete(gz0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe($y$),(async()=>{for await(let H of J)try{let N=JSON.parse(G.decode(H.data));if(N.originId===Q)continue;Z.delete(gz0(N.organizationId,N.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var $y$="studio.ai-provider-keys.invalidate",QX6=30000,YX6=5000;var Zy$=()=>{};class s61{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=Xy$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of Xy$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var Xy$;var Qy$=B(()=>{Xy$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var Yy$=($)=>{let Z;return()=>Z??=$()},e61,$51;var Gy$=B(()=>{v6();e61=Yy$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),$51=Yy$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function FX6(){return{name:MN,subjects:[`${Nw0}.>`],storage:o3.StorageType.File,max_age:WX6,max_bytes:HX6,max_msgs_per_subject:NX6,discard:o3.DiscardPolicy.Old,retention:o3.RetentionPolicy.Limits,duplicate_window:KX6,num_replicas:1}}class Ky${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 Jy$($){let Z=Wy$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function BX6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,JX6().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 DX6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class Z51{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=FX6(),X=await lZ(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await o3.jetstreamManager($);try{await Q.streams.info(MN),await Q.streams.update(MN,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(MN),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:DX6});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=BX6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=hW$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let N=performance.now(),F=Op0(H,{runId:Z}),U=performance.now()-N;if(e61().record(U),$51().add(1,{"org.id":Q??"unknown"}),wX6?.record(U,F.reduce((O,w)=>O+w.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of F)G.publish(Y,O.subject,O.data,O.headers?Jy$(O.headers):void 0)};return(async()=>{let H=$.getReader(),N=0,F=0,U;try{while(!0){let{done:O,value:w}=await H.read();if(O)break;if(K(w),F++,++N>=64)N=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),OX6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Op0(Z,{runId:$,dedup:X});if(e61().record(performance.now()-Y),$51().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:Jy$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=gW$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?o3.DeliverPolicy.New:o3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=Nw($),W;try{W=await(await Q.consumers.get(MN,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let N=Bw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Fw0()).pipeThrough(Uw0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{N.releaseLock()}catch{}},O=!1,w=()=>{if(O)return;O=!0,W.stop(),N.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",w,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await N.read();if(L){w(),D.close();return}let j=E;if(j.kind==="done"){if(G){w(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){w()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(MN,{filter:Nw($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var o3,Wy$,GX6=($)=>{let Z;return()=>Z??=$()},JX6,WX6=86400000000000,KX6=120000000000,HX6=4294967296,NX6=500000,UX6,OX6,wX6;var Hy$=B(()=>{t4();wp0();Dw0();Ow0();v6();Gy$();o3=S(zB(),1),Wy$=S(lh(),1),JX6=GX6(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));UX6=process.env.STREAM_ENCODE_TRACE==="1",OX6=process.env.DECOPILOT_STREAM_TRACE==="1";wX6=UX6?new Ky$:null});function hz0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,LW(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 Ny$=B(()=>{L8()});class X51{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}}function TX6($){return $ instanceof PQ}function RX6($,Z){return Z-$>=PX6}class Q51{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??LX6;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??jX6,X=this.options.itemIntervalMs??EX6,Q=await this.taskBoard.listItemsPendingReview(Z,this.cursor,new Date(Date.now()-X)),Y=Q.at(-1);this.cursor=Q.length===Z&&Y?{updatedAt:Y.updatedAt,id:Y.id}:null;for(let{id:G,organizationId:J}of Q)try{if(await this.reconcileItem(G,J))$++}catch(W){console.error(`[task-board-review-sweeper] ${G} failed`,W)}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()-bJ$),ap0);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()-AX6));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 xn0(this.taskBoard,Y,Q),await yn0(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!==M4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await kN(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),TX6(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()+zX6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),j4(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!RX6(IL(X),Date.now()))return;await Gw($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;if(X.status!=="in_review")return!1;let Q=X.assigneeId===M4;await this.taskBoard.markSwept($,Z);let Y=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!G)return!1;if(Y.length===0){if(Q)await this.handOffReviewWithoutPr(G,X);return!1}if(await sK$(G,X))return!0;if(!Q)return!1;let J=await Promise.all(Y.map(async(W)=>({...W,...await Yy(Z,W)})));if(J.every((W)=>W.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${J.length} PR(s)) \u2014 proceeding on unknown`);if(!tp0(J))return!1;return await Aw0(G,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var LX6=60000,EX6=300000,jX6=50,zX6=60000,PX6=900000,AX6=120000;var Fy$=B(()=>{kZ();cp0();Fw();pn();v9();H3();sp0();Ow();cn()});import{readdir as IX6,rm as uz0}from"fs/promises";import{join as cz0}from"path";async function lz0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-qX6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await K_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Uy$($,Y,Z);else if(!Y.startsWith(".")){let G=cz0($,Y),J=await K_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Uy$(G,K,Z)}if((await K_(G)).length===0)await uz0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Uy$($,Z,X){let Q=0,Y=cz0($,Z),G=await K_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=cz0(Y,W),H=await K_(K);for(let F of H){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=cz0(K,F);await uz0(O,{recursive:!0,force:!0}),Q++}}if((await K_(K)).length===0)await uz0(K,{recursive:!0,force:!0})}if((await K_(Y)).length===0)await uz0(Y,{recursive:!0,force:!0});return Q}async function K_($){try{return(await IX6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var qX6=30;var Y51=()=>{};import{DBOS as G51,SchedulerMode as MX6}from"@dbos-inc/dbos-sdk";async function SX6(){let $=[BJ(),N_(),pK()],Z=0;for(let X of $)try{Z+=await lz0(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 VX6($,Z){await G51.runStep(()=>SX6(),{name:"monitoringRetention"})}function wy$(){if(Oy$)return;Oy$=!0;let $=G51.registerWorkflow(VX6,{name:"monitoringRetentionWorkflow"});G51.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:kX6,mode:MX6.ExactlyOncePerIntervalWhenActive})}var kX6="23 4 * * *",Oy$=!1;var By$=B(()=>{$Y();Y51()});function Dy$($){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 dG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await H81($.db,Z,Q.role);return Y.boundAuth=K81({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new sD(X,void 0,Y.boundAuth,Q.role,"self"),Uw(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Ly$=B(()=>{eD();cV()});function CX6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function vX6(){for(let $ of _X6)$()}function Ey$($){let Z=[...J51.logs,$];J51={...J51,logs:Z.length>500?Z.slice(-500):Z},vX6()}function W51(){return fX6}var J51,_X6,fX6=!1;var K51=B(()=>{J51=CX6(),_X6=new Set});import{EventEmitter as bX6}from"events";var H51;var jy$=B(()=>{K51();H51=new bX6;H51.on("request",($)=>{Ey$($)})});function zy$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=Eh(U.params.name),w=U.params.arguments||{},D=Object.keys(w).map((E)=>Eh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Z5.tool}${O}${Z5.dim}(${L})${Z5.reset}`}else if(U.method)G=`${Z5.dim}${Eh(U.method)}${Z5.reset}`}}catch{}}let W=Eh(Y);if(Y.startsWith("/mcp/conn_")){let N=Y.split("/")[2]??"";W=`/mcp/${Z5.mcp}${Eh(N.slice(0,12))}\u2026${Z5.reset}`}else if(Y==="/mcp")W=`${Z5.mcp}/mcp${Z5.reset}`;else if(Y==="/mcp/registry")W=`${Z5.mcp}/mcp/registry${Z5.reset}`;let K=yX6(Q),H=J?"\u25C0":"\u2190";if(!W51())console.log(`${Z5.dim}${H}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let N=Date.now()-X,F=$.res.status,U=xX6(F),O=N<1000?`${N}ms`:`${(N/1000).toFixed(1)}s`,w=J?"\u25B6":"\u2192";if(!W51())console.log(`${Z5.dim}${w}${Z5.reset} ${K}${Q}${Z5.reset} ${W}${G?` ${G}`:""} ${U}${F}${Z5.reset} ${Z5.duration}${O}${Z5.reset}`);H51.emit("request",{method:Q,path:Eh(Y),status:F,duration:N,timestamp:new Date})}}}var Z5,xX6=($)=>{if($>=500)return Z5.serverError;if($>=400)return Z5.clientError;if($>=300)return Z5.redirect;return Z5.ok},yX6=($)=>{return Z5[$]||Z5.reset},Eh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Py$=B(()=>{K51();jy$();Z5={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 Iy$}from"crypto";import{mkdir as gX6,readdir as hX6,rm as Ay$,stat as qy$}from"fs/promises";import{join as F51,relative as uX6}from"path";import{z as E$}from"zod";function ky$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return F51(cX6,Z)}function Sy$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function N51($,Z){let X=ky$($),Q=Sy$(Z);return F51(X,Q)}function lX6($,Z,X,Q){let Y=y0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Iy$("sha256",Y).update(G).digest("hex")}function Ry$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=lX6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Sy$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Vy$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Iy$("md5","etag").update(Q).digest("hex")}"`}async function Cy$($,Z,X,Q,Y){try{let G=await hX6($,{withFileTypes:!0});for(let J of G){let W=F51($,J.name),H=uX6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let N=H+"/";if(!X||N.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(N)}}else await Cy$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let N=H.slice(X.length);if(N.includes(Q)){let F=N.indexOf(Q),U=X+N.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let N=await qy$(W);Y.objects.push({key:H,size:N.size,lastModified:N.mtime.toISOString(),etag:Vy$(W,N.mtime,N.size)})}catch{}}}}catch{}}function _y$($,Z){let Q=o($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:E$.object({prefix:E$.string().optional(),maxKeys:E$.number().optional().default(1000),continuationToken:E$.string().optional(),delimiter:E$.string().optional()}),outputSchema:E$.object({objects:E$.array(E$.object({key:E$.string(),size:E$.number(),lastModified:E$.string(),etag:E$.string()})),nextContinuationToken:E$.string().optional(),isTruncated:E$.boolean(),commonPrefixes:E$.array(E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,N=ky$(Q);await gX6(N,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await Cy$(N,N,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=F.objects.findIndex((L)=>L.key>H),U===-1)U=F.objects.length}let O=F.objects.slice(U,U+W),w=U+W<F.objects.length,D=w?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:w,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({contentType:E$.string().optional(),contentLength:E$.number(),lastModified:E$.string(),etag:E$.string(),metadata:E$.record(E$.string(),E$.string()).optional()}),handler:async(Y)=>{let G=Y,J=N51(Q,G.key),W=await qy$(J);return{contentType:n81(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Vy$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:E$.object({key:E$.string(),expiresIn:E$.number().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ty$;return{url:Ry$(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:E$.object({key:E$.string(),expiresIn:E$.number().optional(),contentType:E$.string().optional()}),outputSchema:E$.object({url:E$.string(),expiresIn:E$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ty$;return{url:Ry$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:E$.object({key:E$.string()}),outputSchema:E$.object({success:E$.boolean(),key:E$.string()}),handler:async(Y)=>{let G=Y,J=N51(Q,G.key);try{return await Ay$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:E$.object({keys:E$.array(E$.string()).max(1000)}),outputSchema:E$.object({deleted:E$.array(E$.string()),errors:E$.array(E$.object({key:E$.string(),message:E$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=N51(Q,K);try{await Ay$(H),J.push(K)}catch(N){W.push({key:K,message:N instanceof Error?N.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function U51($,Z,X){let Q=_y$(Z,X),Y=new RW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:J5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:E$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:E$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let N=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(N)}],structuredContent:N}}catch(N){return{content:[{type:"text",text:`Error: ${N.message}`}],isError:!0}}})}let G=new iX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),oG(Y,G,$,"mcp:dev-assets")}async function vy$($,Z,X,Q){let G=_y$(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 cX6="./data/assets",Ty$=3600,My$,fy$;var by$=B(()=>{I$();Ny();C8();Ol();nV();MX();bj0();My$=new U1;My$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return U51($.req.raw,Z,Q)});fy$=My$});var xy$={};N4(xy$,{mountDevRoutes:()=>dX6});function dX6($,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 U51(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 vy$(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",fy$);let X=new U1;X.use("*",p3({mountPath:"/api/dev-assets"})),X.route("/",fj0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var yy$=B(()=>{C8();g81();bj0();by$()});import{sql as mX6}from"kysely";import{randomUUID as gy$}from"crypto";import{z as iX6}from"zod";async function pX6($){let Z=new Date().toISOString(),X=gy$(),Q=u4.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:gy$(),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 mX6`SELECT
|
|
2741
2741
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as L,b as R,j as r}from"./index-Cw6X3dkt.js";import{I as A}from"./input-BMI7sy0P.js";import{L as I}from"./label-DKyumRgF.js";import{S as z,a as J,b as O,c as V,d as $}from"./select-C9xcbH-E.js";import{T as D}from"./textarea-H0WykNWG.js";import{R as M,T as U,U as W,J as q,W as G,$ as H}from"./index-B2rHtP5f.js";import{s as F}from"./primitives-DNu3pUMl.js";import{u as Q}from"./use-autosave-DFCBrWPo.js";import"./tooltip-DXelSitz.js";import"./Check-Bv1QLovy.js";import"./ChevronDown-BzuKwYR-.js";import"./ChevronUp-DsY1P-qW.js";import"./ArrowUp-Bf9Vxvyd.js";import"./chat-context-BsuvyX6k.js";import"./tab-id-U8x84WMI.js";import"./dialog-B9q3iv3g.js";import"./X-CjKmFgcH.js";import"./Copy01-rMlbfVLN.js";import"./hooks-Bdfhd1nY.js";import"./use-mcp-client-D4LZPG6h.js";import"./auth--tm9bCVC.js";import"./decopilot-sse-pool-5C4bdI3H.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-Bwm6g-Vg.js";import"./use-ai-providers-EuhLPffl.js";import"./studio-tools-CP3xCItZ.js";import"./use-decopilot-events-Cxs1YWP7.js";import"./use-organization-settings-DYKvJrFn.js";import"./automation-runs-DAN4OwX1.js";import"./agent-icon-DrUrkhe6.js";import"./AlertCircle-C-Q5FvBC.js";import"./Tool01-C936Ee21.js";import"./ArrowLeft-DSnBCsVs.js";import"./Tool02-DXitDFTe.js";import"./XCircle-gu4fRLje.js";import"./ArrowUpRight-DXrusE9r.js";import"./TrendUp01-B0j34Wzk.js";import"./ZapSquare-D1cyLPJZ.js";import"./Users03-DTAdJVzA.js";import"./CheckCircle-Dcle0kYd.js";import"./ChevronRight-BoBkNqAA.js";import"./DotsVertical-BDf9H1Z1.js";import"./Stars02-CWeiqPd-.js";import"./CpuChip01-DQ-h7uSN.js";import"./CreditCard01-DEwSFIxs.js";import"./Globe01-C6L81Hz8.js";import"./Settings02-DNthSMZc.js";import"./Eye-BGg9pENP.js";import"./FilterLines-DG4s25qh.js";import"./Share07-CJ5L0mT9.js";import"./Star01-B7Htd5C4.js";import"./Globe04-CtTzBEnf.js";import"./SwitchHorizontal01-DkmWUnZN.js";import"./HardDrive-6JjtQUi3.js";import"./Key01-l_Q5BfVr.js";import"./LayoutLeft-BWXVEPFQ.js";import"./LinkExternal01-C-4mB7F4.js";import"./LogOut01-BH2d3IaU.js";import"./Monitor01-WcmbOpaM.js";import"./Sun-JTbDw04X.js";import"./Palette-CA9GgQW8.js";import"./Play-D7Gil5g6.js";import"./Plus-CWzMrWmv.js";import"./SearchLg-CP5T38T4.js";import"./SearchMd-DgMMeVDw.js";import"./Shield01-C5NHTKl8.js";import"./Stars01-C9981xAX.js";import"./Trash01-DFjipCuk.js";import"./Upload01-BfWE5rr_.js";import"./User01-DrUKeQHD.js";import"./Users01-J0gbT70X.js";import"./XClose-C4Me5xS9.js";import"./Zap-D2SD4cNE.js";import"./useInfiniteQuery-D4yzT25a.js";import"./use-infinite-scroll-C0GAtyD2.js";import"./use-connection-JK88cNLE.js";import"./card-Be95OgoJ.js";import"./sidebar-CyFPwMhC.js";import"./use-mobile-D2z4Y_ya.js";import"./table-BIEFFUNo.js";import"./empty-state-D-z5hxuF.js";import"./use-members-CTwpCvCb.js";import"./use-org-auth-client-CGBqXXoZ.js";import"./use-clock-tick-VVMnnBbl.js";import"./use-automations-CZEATS3Z.js";import"./useSuspenseInfiniteQuery-DBMaGUmM.js";import"./avatar-CnzC-xyP.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DaioDYGx.js";import"./monaco-editor-NHE1hAhj.js";import"./spinner-DVcg_-Cv.js";import"./index-UInDjVLE.js";import"./shell-layout-DZixRapy.js";import"./required-auth-layout-Bdan642o.js";import"./use-org-sso-D6LJVU9o.js";import"./integration-icon-E1ocII3D.js";import"./use-navigate-to-agent-BBhM0Vmr.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-CXO6rIpy.js";import"./form-CSnrn2N6.js";import"./file-type-icon-Cds3zG3Y.js";import"./drawer-B3Ox1_lQ.js";import"./collection-search-BrfCWqVZ.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-PJiAduqL.js";import"./toggle-group-RM1nES4o.js";import"./use-deco-credits-gi_MymzL.js";import"./popover-m6RPBuGe.js";import"./self-tool-result-WknO6REq.js";import"./alert-dialog-DWZuaK8I.js";import"./extract-connection-data-DJoabmII.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-CQ9n5OvI.js";import"./authenticate-and-persist-oauth-C0Exkm5e.js";import"./mcp-oauth-DGynsxkq.js";import"./track-CY5ZMl6H.js";import"./toolbar-BQaiABV_.js";import"./skeleton-DJb3aaGz.js";import"./github-repo-picker-DdBirXEe.js";import"./use-mcp-tools-C9HhUXbr.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-Bj44awTs.js";import"./use-registry-connections-CT74HqKu.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-D8eGeLMF.js";import"./collection-tabs-Bxg4AqWv.js";import"./badge-aLvlAbI8.js";import"./use-open-billing-url-CXQZwREN.js";import"./select-model-BjjS3EDC.js";import"./checkbox-Baov0rWD.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-BHgAovn_.js";import"./cards-BGFq-dY2.js";import"./dropdown-menu-alyBkCa0.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-D8s7dVjj.js";import"./use-capability-BykgYm9c.js";import"./pt-BR-CLy76QW2.js";import"./switch-CZJ7HE3w.js";import"./use-debounced-autosave-C8dmZjR6.js";import"./index-DqsbKnXe.js";import"./search-input-BY5NcAG5.js";import"./index-CUnvt7Qz.js";import"./use-secrets-DqYa04tO.js";import"./use-tags-D6plArQy.js";import"./get-initials-D-f_fDFw.js";import"./command-wblXHsVH.js";import"./index-CtjCHirP.js";import"./use-file-configs-852wnDwu.js";import"./automation-list-row-C2wf5bYW.js";const X={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"}]},Y={authors:"sandbox.recordEditor.titleAuthor"};function qr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=R(),P=M(h);let b;t[0]!==w||t[1]!==K||t[2]!==P||t[3]!==h?(b={orgSlug:K,virtualMcpId:h,branch:w,packagePath:P},t[0]=w,t[1]=K,t[2]=P,t[3]=h,t[4]=b):b=t[4];const p=U(b);let k;t[5]!==f||t[6]!==a?(k=W(f,a),t[5]=f,t[6]=a,t[7]=k):k=t[7];const B=k;let v;t[8]!==g||t[9]!==a||t[10]!==p?(v=l=>{p.mutate({blockKey:g,data:G(g,a,l)})},t[8]=g,t[9]=a,t[10]=p,t[11]=v):v=t[11];const[e,S]=Q(B,v);let j;t[12]!==e||t[13]!==S?(j=(l,o)=>S({...e,[l]:o}),t[12]=e,t[13]=S,t[14]=j):j=t[14];const s=j,T=Y[a];let n;t[15]!==i||t[16]!==T?(n=i(T),t[15]=i,t[16]=T,t[17]=n):n=t[17];let c;t[18]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[18]=n,t[19]=c):c=t[19];let d;t[20]!==p.isError||t[21]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[20]=p.isError,t[21]=p.isPending,t[22]=d):d=t[22];let y;t[23]!==c||t[24]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[23]=c,t[24]=d,t[25]=y):y=t[25];const N=X[a];let x;if(t[26]!==e||t[27]!==s||t[28]!==i||t[29]!==N){let l;t[31]!==e||t[32]!==s||t[33]!==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(I,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(z,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(J,{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($,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(I,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(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[31]=e,t[32]=s,t[33]=i,t[34]=l):l=t[34],x=N.map(l),t[26]=e,t[27]=s,t[28]=i,t[29]=N,t[30]=x}else x=t[30];let u;t[35]!==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[35]=x,t[36]=u):u=t[36];let E;return t[37]!==y||t[38]!==u?(E=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[37]=y,t[38]=u,t[39]=E):E=t[39],E}export{qr as RecordEditor};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as pt,b as at,j as r}from"./index-Cw6X3dkt.js";import{C as ct}from"./checkbox-Baov0rWD.js";import{I as rt}from"./input-BMI7sy0P.js";import{L as et}from"./label-DKyumRgF.js";import{d as dt,a as nt,b as ft,c as xt,S as ht}from"./select-C9xcbH-E.js";import{F as ut,bw as bt,J as yt,bx as jt,by as vt}from"./index-B2rHtP5f.js";import{u as gt}from"./use-autosave-DFCBrWPo.js";import"./Check-Bv1QLovy.js";import"./tooltip-DXelSitz.js";import"./ChevronDown-BzuKwYR-.js";import"./ChevronUp-DsY1P-qW.js";import"./ArrowUp-Bf9Vxvyd.js";import"./chat-context-BsuvyX6k.js";import"./tab-id-U8x84WMI.js";import"./dialog-B9q3iv3g.js";import"./X-CjKmFgcH.js";import"./Copy01-rMlbfVLN.js";import"./hooks-Bdfhd1nY.js";import"./use-mcp-client-D4LZPG6h.js";import"./auth--tm9bCVC.js";import"./decopilot-sse-pool-5C4bdI3H.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-Bwm6g-Vg.js";import"./use-ai-providers-EuhLPffl.js";import"./studio-tools-CP3xCItZ.js";import"./use-decopilot-events-Cxs1YWP7.js";import"./use-organization-settings-DYKvJrFn.js";import"./automation-runs-DAN4OwX1.js";import"./agent-icon-DrUrkhe6.js";import"./AlertCircle-C-Q5FvBC.js";import"./Tool01-C936Ee21.js";import"./ArrowLeft-DSnBCsVs.js";import"./Tool02-DXitDFTe.js";import"./XCircle-gu4fRLje.js";import"./ArrowUpRight-DXrusE9r.js";import"./TrendUp01-B0j34Wzk.js";import"./ZapSquare-D1cyLPJZ.js";import"./Users03-DTAdJVzA.js";import"./CheckCircle-Dcle0kYd.js";import"./ChevronRight-BoBkNqAA.js";import"./DotsVertical-BDf9H1Z1.js";import"./Stars02-CWeiqPd-.js";import"./CpuChip01-DQ-h7uSN.js";import"./CreditCard01-DEwSFIxs.js";import"./Globe01-C6L81Hz8.js";import"./Settings02-DNthSMZc.js";import"./Eye-BGg9pENP.js";import"./FilterLines-DG4s25qh.js";import"./Share07-CJ5L0mT9.js";import"./Star01-B7Htd5C4.js";import"./Globe04-CtTzBEnf.js";import"./SwitchHorizontal01-DkmWUnZN.js";import"./HardDrive-6JjtQUi3.js";import"./Key01-l_Q5BfVr.js";import"./LayoutLeft-BWXVEPFQ.js";import"./LinkExternal01-C-4mB7F4.js";import"./LogOut01-BH2d3IaU.js";import"./Monitor01-WcmbOpaM.js";import"./Sun-JTbDw04X.js";import"./Palette-CA9GgQW8.js";import"./Play-D7Gil5g6.js";import"./Plus-CWzMrWmv.js";import"./SearchLg-CP5T38T4.js";import"./SearchMd-DgMMeVDw.js";import"./Shield01-C5NHTKl8.js";import"./Stars01-C9981xAX.js";import"./Trash01-DFjipCuk.js";import"./Upload01-BfWE5rr_.js";import"./User01-DrUKeQHD.js";import"./Users01-J0gbT70X.js";import"./XClose-C4Me5xS9.js";import"./Zap-D2SD4cNE.js";import"./useInfiniteQuery-D4yzT25a.js";import"./use-infinite-scroll-C0GAtyD2.js";import"./use-connection-JK88cNLE.js";import"./card-Be95OgoJ.js";import"./sidebar-CyFPwMhC.js";import"./use-mobile-D2z4Y_ya.js";import"./table-BIEFFUNo.js";import"./empty-state-D-z5hxuF.js";import"./use-members-CTwpCvCb.js";import"./use-org-auth-client-CGBqXXoZ.js";import"./use-clock-tick-VVMnnBbl.js";import"./use-automations-CZEATS3Z.js";import"./useSuspenseInfiniteQuery-DBMaGUmM.js";import"./avatar-CnzC-xyP.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DaioDYGx.js";import"./monaco-editor-NHE1hAhj.js";import"./spinner-DVcg_-Cv.js";import"./index-UInDjVLE.js";import"./shell-layout-DZixRapy.js";import"./required-auth-layout-Bdan642o.js";import"./use-org-sso-D6LJVU9o.js";import"./integration-icon-E1ocII3D.js";import"./use-navigate-to-agent-BBhM0Vmr.js";import"./reusable-new-chat-CouMjkYR.js";import"./AreaChart-CXO6rIpy.js";import"./form-CSnrn2N6.js";import"./file-type-icon-Cds3zG3Y.js";import"./drawer-B3Ox1_lQ.js";import"./collection-search-BrfCWqVZ.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-PJiAduqL.js";import"./toggle-group-RM1nES4o.js";import"./use-deco-credits-gi_MymzL.js";import"./popover-m6RPBuGe.js";import"./self-tool-result-WknO6REq.js";import"./alert-dialog-DWZuaK8I.js";import"./extract-connection-data-DJoabmII.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-CQ9n5OvI.js";import"./authenticate-and-persist-oauth-C0Exkm5e.js";import"./mcp-oauth-DGynsxkq.js";import"./track-CY5ZMl6H.js";import"./toolbar-BQaiABV_.js";import"./skeleton-DJb3aaGz.js";import"./github-repo-picker-DdBirXEe.js";import"./use-mcp-tools-C9HhUXbr.js";import"./agent-capabilities-cXfbMfjV.js";import"./connection-card-Bj44awTs.js";import"./use-registry-connections-CT74HqKu.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./textarea-H0WykNWG.js";import"./connection-form-helpers-D8eGeLMF.js";import"./collection-tabs-Bxg4AqWv.js";import"./badge-aLvlAbI8.js";import"./use-open-billing-url-CXQZwREN.js";import"./select-model-BjjS3EDC.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-BHgAovn_.js";import"./cards-BGFq-dY2.js";import"./dropdown-menu-alyBkCa0.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-D8s7dVjj.js";import"./use-capability-BykgYm9c.js";import"./pt-BR-CLy76QW2.js";import"./switch-CZJ7HE3w.js";import"./use-debounced-autosave-C8dmZjR6.js";import"./index-DqsbKnXe.js";import"./search-input-BY5NcAG5.js";import"./index-CUnvt7Qz.js";import"./use-secrets-DqYa04tO.js";import"./use-tags-D6plArQy.js";import"./get-initials-D-f_fDFw.js";import"./command-wblXHsVH.js";import"./index-CtjCHirP.js";import"./use-file-configs-852wnDwu.js";import"./automation-list-row-C2wf5bYW.js";const Et=[{value:"temporary",labelKey:"sandbox.redirectEditor.typeTemporary"},{value:"permanent",labelKey:"sandbox.redirectEditor.typePermanent"}];function hi(it){const t=pt.c(106),{orgSlug:G,virtualMcpId:H,branch:W,blockKey:X,block:Z}=it,e=at();let V;t[0]!==W||t[1]!==G||t[2]!==H?(V={orgSlug:G,virtualMcpId:H,branch:W},t[0]=W,t[1]=G,t[2]=H,t[3]=V):V=t[3];const s=ut(V);let J;t[4]!==Z?(J=bt(Z),t[4]=Z,t[5]=J):J=t[5];const ot=J;let M;t[6]!==X||t[7]!==s?(M=i=>{s.mutate({blockKey:X,data:vt(i)})},t[6]=X,t[7]=s,t[8]=M):M=t[8];const[o,tt]=gt(ot,M);let Y;t[9]!==o||t[10]!==tt?(Y=i=>tt({...o,...i}),t[9]=o,t[10]=tt,t[11]=Y):Y=t[11];const m=Y;let l;t[12]!==e?(l=e("sandbox.redirectEditor.title"),t[12]=e,t[13]=l):l=t[13];let p;t[14]!==l?(p=r.jsx("span",{className:"text-sm font-medium",children:l}),t[14]=l,t[15]=p):p=t[15];let a;t[16]!==s.isError||t[17]!==s.isPending?(a=r.jsx(yt,{isPending:s.isPending,isError:s.isError}),t[16]=s.isError,t[17]=s.isPending,t[18]=a):a=t[18];let c;t[19]!==p||t[20]!==a?(c=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[p,a]}),t[19]=p,t[20]=a,t[21]=c):c=t[21];let d;t[22]!==e?(d=e("sandbox.redirectEditor.fromLabel"),t[22]=e,t[23]=d):d=t[23];let n;t[24]!==d?(n=r.jsx(et,{htmlFor:"redirect-from",children:d}),t[24]=d,t[25]=n):n=t[25];const mt=o.from;let f;t[26]!==e?(f=e("sandbox.redirectEditor.fromPlaceholder"),t[26]=e,t[27]=f):f=t[27];let x;t[28]!==m?(x=i=>m({from:i.target.value}),t[28]=m,t[29]=x):x=t[29];let h;t[30]!==o.from||t[31]!==f||t[32]!==x?(h=r.jsx(rt,{id:"redirect-from",value:mt,placeholder:f,onChange:x,className:"h-10"}),t[30]=o.from,t[31]=f,t[32]=x,t[33]=h):h=t[33];let u;t[34]!==e?(u=e("sandbox.redirectEditor.fromDescription"),t[34]=e,t[35]=u):u=t[35];let b;t[36]!==u?(b=r.jsx("p",{className:"text-xs text-muted-foreground",children:u}),t[36]=u,t[37]=b):b=t[37];let y;t[38]!==n||t[39]!==h||t[40]!==b?(y=r.jsxs("div",{className:"space-y-2",children:[n,h,b]}),t[38]=n,t[39]=h,t[40]=b,t[41]=y):y=t[41];let j;t[42]!==e?(j=e("sandbox.redirectEditor.toLabel"),t[42]=e,t[43]=j):j=t[43];let v;t[44]!==j?(v=r.jsx(et,{htmlFor:"redirect-to",children:j}),t[44]=j,t[45]=v):v=t[45];const st=o.to;let g;t[46]!==e?(g=e("sandbox.redirectEditor.toPlaceholder"),t[46]=e,t[47]=g):g=t[47];let E;t[48]!==m?(E=i=>m({to:i.target.value}),t[48]=m,t[49]=E):E=t[49];let P;t[50]!==o.to||t[51]!==g||t[52]!==E?(P=r.jsx(rt,{id:"redirect-to",value:st,placeholder:g,onChange:E,className:"h-10"}),t[50]=o.to,t[51]=g,t[52]=E,t[53]=P):P=t[53];let N;t[54]!==e?(N=e("sandbox.redirectEditor.toDescription"),t[54]=e,t[55]=N):N=t[55];let S;t[56]!==N?(S=r.jsx("p",{className:"text-xs text-muted-foreground",children:N}),t[56]=N,t[57]=S):S=t[57];let C;t[58]!==v||t[59]!==P||t[60]!==S?(C=r.jsxs("div",{className:"space-y-2",children:[v,P,S]}),t[58]=v,t[59]=P,t[60]=S,t[61]=C):C=t[61];let T;t[62]!==e?(T=e("sandbox.redirectEditor.typeLabel"),t[62]=e,t[63]=T):T=t[63];let k;t[64]!==T?(k=r.jsx(et,{htmlFor:"redirect-type",children:T}),t[64]=T,t[65]=k):k=t[65];const lt=o.type;let w;t[66]!==m?(w=i=>m({type:i}),t[66]=m,t[67]=w):w=t[67];let R;t[68]!==e?(R=e("sandbox.redirectEditor.typePlaceholder"),t[68]=e,t[69]=R):R=t[69];let I;t[70]!==R?(I=r.jsx(nt,{id:"redirect-type",className:"h-10 w-full",children:r.jsx(ft,{placeholder:R})}),t[70]=R,t[71]=I):I=t[71];let _;t[72]!==e?(_=Et.map(i=>r.jsx(dt,{value:i.value,children:e(i.labelKey,{status:jt[i.value]})},i.value)),t[72]=e,t[73]=_):_=t[73];let F;t[74]!==_?(F=r.jsx(xt,{children:_}),t[74]=_,t[75]=F):F=t[75];let L;t[76]!==o.type||t[77]!==w||t[78]!==I||t[79]!==F?(L=r.jsxs(ht,{value:lt,onValueChange:w,children:[I,F]}),t[76]=o.type,t[77]=w,t[78]=I,t[79]=F,t[80]=L):L=t[80];let $;t[81]===Symbol.for("react.memo_cache_sentinel")?($=r.jsx("strong",{children:"Temporary"}),t[81]=$):$=t[81];let q;t[82]===Symbol.for("react.memo_cache_sentinel")?(q=r.jsxs("p",{className:"text-xs text-muted-foreground",children:["Use ",$," when the redirect may change;"," ",r.jsx("strong",{children:"Permanent"})," lets browsers cache it."]}),t[82]=q):q=t[82];let Q;t[83]!==k||t[84]!==L?(Q=r.jsxs("div",{className:"space-y-2",children:[k,L,q]}),t[83]=k,t[84]=L,t[85]=Q):Q=t[85];let K;t[86]!==m?(K=i=>m({discardQueryParameters:i===!0}),t[86]=m,t[87]=K):K=t[87];let D;t[88]!==o.discardQueryParameters||t[89]!==K?(D=r.jsx(ct,{checked:o.discardQueryParameters,onCheckedChange:K}),t[88]=o.discardQueryParameters,t[89]=K,t[90]=D):D=t[90];let A;t[91]!==e?(A=e("sandbox.redirectEditor.discardQueryParameters"),t[91]=e,t[92]=A):A=t[92];let B;t[93]!==A?(B=r.jsx("span",{className:"text-sm",children:A}),t[93]=A,t[94]=B):B=t[94];let O;t[95]!==D||t[96]!==B?(O=r.jsxs("label",{className:"flex cursor-pointer items-center gap-2.5",children:[D,B]}),t[95]=D,t[96]=B,t[97]=O):O=t[97];let U;t[98]!==y||t[99]!==C||t[100]!==Q||t[101]!==O?(U=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsxs("div",{className:"mx-auto max-w-xl space-y-6",children:[y,C,Q,O]})}),t[98]=y,t[99]=C,t[100]=Q,t[101]=O,t[102]=U):U=t[102];let z;return t[103]!==U||t[104]!==c?(z=r.jsxs("div",{className:"flex h-full flex-col",children:[c,U]}),t[103]=U,t[104]=c,t[105]=z):z=t[105],z}export{hi as RedirectEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-Cidvga7O.js","assets/index-Cw6X3dkt.js","assets/index-DJP7bbyy.css","assets/Tool02-DXitDFTe.js","assets/CheckCircle-Dcle0kYd.js","assets/Settings02-DNthSMZc.js","assets/use-mcp-client-D4LZPG6h.js","assets/auth--tm9bCVC.js","assets/useInfiniteQuery-D4yzT25a.js","assets/use-infinite-scroll-C0GAtyD2.js","assets/studio-tools-CP3xCItZ.js","assets/badge-aLvlAbI8.js","assets/input-BMI7sy0P.js","assets/dropdown-menu-alyBkCa0.js","assets/Check-Bv1QLovy.js","assets/ChevronRight-BoBkNqAA.js","assets/DotsVertical-BDf9H1Z1.js","assets/table-BIEFFUNo.js","assets/toggle-group-RM1nES4o.js","assets/use-view-mode-Cx1z2NzD.js","assets/use-mobile-D2z4Y_ya.js","assets/FilterLines-DG4s25qh.js","assets/Globe01-C6L81Hz8.js","assets/SearchMd-DgMMeVDw.js","assets/dialog-B9q3iv3g.js","assets/X-CjKmFgcH.js","assets/AlertCircle-C-Q5FvBC.js","assets/Upload01-BfWE5rr_.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-DWZuaK8I.js","assets/card-Be95OgoJ.js","assets/Trash01-DFjipCuk.js","assets/label-DKyumRgF.js","assets/select-C9xcbH-E.js","assets/tooltip-DXelSitz.js","assets/ChevronDown-BzuKwYR-.js","assets/ChevronUp-DsY1P-qW.js","assets/switch-CZJ7HE3w.js","assets/textarea-H0WykNWG.js","assets/ArrowLeft-DSnBCsVs.js","assets/XCircle-gu4fRLje.js","assets/checkbox-Baov0rWD.js","assets/Eye-BGg9pENP.js","assets/LinkExternal01-C-4mB7F4.js","assets/use-copy-DaioDYGx.js","assets/Copy01-rMlbfVLN.js","assets/Key01-l_Q5BfVr.js","assets/Plus-CWzMrWmv.js","assets/mcp-oauth-DGynsxkq.js","assets/Play-D7Gil5g6.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aG as o}from"./index-Cw6X3dkt.js";import{R as m}from"./require-capability-DsdnQdRJ.js";import"./use-capability-BykgYm9c.js";import"./access-gate-D-FbwLID.js";import"./capability-load-error-Cq1UtDaY.js";const n=s.lazy(()=>o(()=>import("./registry-layout-Cidvga7O.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,47,48,49])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{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(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-Cidvga7O.js","assets/index-Cw6X3dkt.js","assets/index-DJP7bbyy.css","assets/Tool02-DXitDFTe.js","assets/CheckCircle-Dcle0kYd.js","assets/Settings02-DNthSMZc.js","assets/use-mcp-client-D4LZPG6h.js","assets/auth--tm9bCVC.js","assets/useInfiniteQuery-D4yzT25a.js","assets/use-infinite-scroll-C0GAtyD2.js","assets/studio-tools-CP3xCItZ.js","assets/badge-aLvlAbI8.js","assets/input-BMI7sy0P.js","assets/dropdown-menu-alyBkCa0.js","assets/Check-Bv1QLovy.js","assets/ChevronRight-BoBkNqAA.js","assets/DotsVertical-BDf9H1Z1.js","assets/table-BIEFFUNo.js","assets/toggle-group-RM1nES4o.js","assets/use-view-mode-Cx1z2NzD.js","assets/use-mobile-D2z4Y_ya.js","assets/FilterLines-DG4s25qh.js","assets/Globe01-C6L81Hz8.js","assets/SearchMd-DgMMeVDw.js","assets/dialog-B9q3iv3g.js","assets/X-CjKmFgcH.js","assets/AlertCircle-C-Q5FvBC.js","assets/Upload01-BfWE5rr_.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-DWZuaK8I.js","assets/card-Be95OgoJ.js","assets/Trash01-DFjipCuk.js","assets/label-DKyumRgF.js","assets/select-C9xcbH-E.js","assets/tooltip-DXelSitz.js","assets/ChevronDown-BzuKwYR-.js","assets/ChevronUp-DsY1P-qW.js","assets/switch-CZJ7HE3w.js","assets/textarea-H0WykNWG.js","assets/ArrowLeft-DSnBCsVs.js","assets/XCircle-gu4fRLje.js","assets/checkbox-Baov0rWD.js","assets/Eye-BGg9pENP.js","assets/LinkExternal01-C-4mB7F4.js","assets/use-copy-DaioDYGx.js","assets/Copy01-rMlbfVLN.js","assets/Key01-l_Q5BfVr.js","assets/Plus-CWzMrWmv.js","assets/mcp-oauth-DGynsxkq.js","assets/Play-D7Gil5g6.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aG as p}from"./index-Cw6X3dkt.js";import{R as u}from"./require-capability-DsdnQdRJ.js";import"./use-capability-BykgYm9c.js";import"./access-gate-D-FbwLID.js";import"./capability-load-error-Cq1UtDaY.js";const g=l.lazy(()=>p(()=>import("./registry-layout-Cidvga7O.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,47,48,49])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(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{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-C0GAtyD2.js";import{e6 as i}from"./index-Cw6X3dkt.js";function t(e,r){return i(e,u,r)}export{t as u};
|