decocms 4.233.0 → 4.234.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DxhIVO8g.js → AlertCircle-_CxJ7Q3j.js} +1 -1
- package/dist/client/assets/{AreaChart-BcI5eQFQ.js → AreaChart-C6s3GNIi.js} +1 -1
- package/dist/client/assets/{ArrowLeft-Ctr3YgRa.js → ArrowLeft-BFkJhQUm.js} +1 -1
- package/dist/client/assets/{ArrowUp-DuZfapp-.js → ArrowUp-fKPXqEyK.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-DkDf0SlM.js → ArrowUpRight-C_udQ6Ct.js} +1 -1
- package/dist/client/assets/{Check-CB1wWN-R.js → Check-DdlLFKgM.js} +1 -1
- package/dist/client/assets/{CheckCircle-Brg9nQLu.js → CheckCircle-OWv1ZARg.js} +1 -1
- package/dist/client/assets/{ChevronDown-Bp5Bhuf2.js → ChevronDown-Dq9dRKf9.js} +1 -1
- package/dist/client/assets/{ChevronRight-DtQMDvdA.js → ChevronRight-DcRg92ix.js} +1 -1
- package/dist/client/assets/{ChevronUp-BVjoCk50.js → ChevronUp-DkZ56WMR.js} +1 -1
- package/dist/client/assets/{Copy01-BE6lBLyL.js → Copy01-N5OrbwI2.js} +1 -1
- package/dist/client/assets/{CpuChip01-BzZVCktF.js → CpuChip01-DsBNM6Kk.js} +1 -1
- package/dist/client/assets/{CreditCard01-UKXGOiwR.js → CreditCard01-DK9p12kr.js} +1 -1
- package/dist/client/assets/{DotsVertical-DgYMlIqK.js → DotsVertical-BojBvEkt.js} +1 -1
- package/dist/client/assets/{Eye-A563EIve.js → Eye-BzyqM3Bd.js} +1 -1
- package/dist/client/assets/{FilterLines-CujWJi10.js → FilterLines-BBjf83ZU.js} +1 -1
- package/dist/client/assets/{Globe01-DV0sA1fo.js → Globe01-CWSARvLx.js} +1 -1
- package/dist/client/assets/{Globe04-JphLmdwi.js → Globe04-Cjq0Cek_.js} +1 -1
- package/dist/client/assets/{HardDrive-CwKpXkTd.js → HardDrive-B0Lcp3M1.js} +1 -1
- package/dist/client/assets/{Key01-Bz0ywC7v.js → Key01-DrkrBgeu.js} +1 -1
- package/dist/client/assets/{LayoutLeft-p8Yokts4.js → LayoutLeft-CPBnArUo.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BVTQ7Txc.js → LinkExternal01-B93BzeSW.js} +1 -1
- package/dist/client/assets/{LogOut01-C9MR6h34.js → LogOut01-dWSkM0-X.js} +1 -1
- package/dist/client/assets/{Monitor01-FmytUe2y.js → Monitor01-PBbVeQgI.js} +1 -1
- package/dist/client/assets/{Palette-CdJ2ITyM.js → Palette-z27OCN9q.js} +1 -1
- package/dist/client/assets/{Play-DmyxnVaR.js → Play-BxQ4nSCf.js} +1 -1
- package/dist/client/assets/{Plus-g_F7sl0h.js → Plus-B-O6WDpw.js} +1 -1
- package/dist/client/assets/{SearchLg-t8oKB9F9.js → SearchLg-8rxKlhxL.js} +1 -1
- package/dist/client/assets/{SearchMd-CkTq-ZRU.js → SearchMd-DG4j0zTH.js} +1 -1
- package/dist/client/assets/{Settings02-rME5QkSv.js → Settings02-N8yO5Jkv.js} +1 -1
- package/dist/client/assets/{Share07-BB7t0OyK.js → Share07-BDWzhOeR.js} +1 -1
- package/dist/client/assets/{Shield01-gWgEwZw2.js → Shield01-h71c0Eg8.js} +1 -1
- package/dist/client/assets/{Star01-C2rjgGvG.js → Star01-CYKcveqb.js} +1 -1
- package/dist/client/assets/{Stars01-DRCR0Q3e.js → Stars01-KJxXu2ub.js} +1 -1
- package/dist/client/assets/{Stars02-NsTZY1yi.js → Stars02-CAcX78NQ.js} +1 -1
- package/dist/client/assets/{Sun-qDRgeJdQ.js → Sun-BVYVTSQr.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-Crz_Sn_d.js → SwitchHorizontal01-BSqDBFif.js} +1 -1
- package/dist/client/assets/{Tool01-iPvLGmnY.js → Tool01-ChM-27Qr.js} +1 -1
- package/dist/client/assets/{Tool02-CE1JrXOr.js → Tool02-B25ub_yn.js} +1 -1
- package/dist/client/assets/{Trash01-HCUcswMa.js → Trash01-CdPpLp25.js} +1 -1
- package/dist/client/assets/{TrendUp01-D58MKe4H.js → TrendUp01-DtC2unpq.js} +1 -1
- package/dist/client/assets/{Upload01-Xse5pAaQ.js → Upload01-pRl0QHs1.js} +1 -1
- package/dist/client/assets/{User01-Bdh9SztA.js → User01-C9cT9nPS.js} +1 -1
- package/dist/client/assets/{Users01-D6CpSEBQ.js → Users01-DvuFnbry.js} +1 -1
- package/dist/client/assets/{Users03-DMeS8kai.js → Users03-CjT4Dxco.js} +1 -1
- package/dist/client/assets/{X-Bf4dZPNS.js → X-DPglBjil.js} +1 -1
- package/dist/client/assets/{XCircle-Bv0g8j3q.js → XCircle-CaFvI3-v.js} +1 -1
- package/dist/client/assets/{XClose-CdAk_TcD.js → XClose-BuxoG3EL.js} +1 -1
- package/dist/client/assets/{YAxis-2uK8Ye_N.js → YAxis-BVjfV1ze.js} +1 -1
- package/dist/client/assets/{Zap-BxaU0A48.js → Zap-BnxW2ZVv.js} +1 -1
- package/dist/client/assets/{ZapSquare-CcpE9ru4.js → ZapSquare-BBNVgr-3.js} +1 -1
- package/dist/client/assets/{access-gate-BPZTU1dY.js → access-gate-BX2T8Jjr.js} +1 -1
- package/dist/client/assets/{agent-icon-CiNtbFvJ.js → agent-icon-9ER0zvH4.js} +1 -1
- package/dist/client/assets/{agents-list-CI8ARCvp.js → agents-list-q487OItC.js} +1 -1
- package/dist/client/assets/{ai-providers-DHvnyzI7.js → ai-providers-DVqPMFYX.js} +1 -1
- package/dist/client/assets/{alert-DKqVuc65.js → alert-BjIOvUDk.js} +1 -1
- package/dist/client/assets/{alert-dialog-BnAEWNTS.js → alert-dialog-COP9MEXT.js} +1 -1
- package/dist/client/assets/{api-keys-CQZvg8tK.js → api-keys-8I1YoDPA.js} +1 -1
- package/dist/client/assets/{app-editor-ime6FcVX.js → app-editor-DXMxg4tt.js} +1 -1
- package/dist/client/assets/{auth-DYv4QQwB.js → auth-DuIkiVde.js} +1 -1
- package/dist/client/assets/{auth-catchall-CerVY0BU.js → auth-catchall-BB7nVXTf.js} +1 -1
- package/dist/client/assets/{auth-entry-HJf6zk4u.js → auth-entry-C-n83tQG.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CBC1D8Gs.js → auth-split-layout-C2GL1wjt.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-CFZPtaIU.js → authenticate-and-persist-oauth-xiWYFiIz.js} +1 -1
- package/dist/client/assets/{automation-list-row-D4ePqY_K.js → automation-list-row-bpfo4Hsv.js} +1 -1
- package/dist/client/assets/{automation-runs-_EfKEIfo.js → automation-runs-FmW7tW6R.js} +1 -1
- package/dist/client/assets/{automations-DYq1KSP3.js → automations-loWdwK2n.js} +1 -1
- package/dist/client/assets/{avatar-Dxkbez_g.js → avatar-aelq5age.js} +1 -1
- package/dist/client/assets/{badge-B4yWfrsj.js → badge-Cp_V0yv_.js} +1 -1
- package/dist/client/assets/{billing-DTMjWQDJ.js → billing-79f0G1ki.js} +1 -1
- package/dist/client/assets/{block-document-CayYE8lz.js → block-document-DgLYOOYx.js} +1 -1
- package/dist/client/assets/{brand-context-BnkQqmhZ.js → brand-context-COKRlJ_J.js} +1 -1
- package/dist/client/assets/{buckets-Boi6JMSS.js → buckets-BB-usw2_.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-B303PSRk.js → bulk-category-panel-D4aDhQAC.js} +1 -1
- package/dist/client/assets/{capability-load-error-BIrLLyLV.js → capability-load-error-CLPHk-h0.js} +1 -1
- package/dist/client/assets/{card-DCdbjSt8.js → card-BH8pCcp6.js} +1 -1
- package/dist/client/assets/{cards-03SBwODD.js → cards-BEOMNEWK.js} +1 -1
- package/dist/client/assets/{category-editor-B6Lqoiik.js → category-editor-eOV5F3n4.js} +1 -1
- package/dist/client/assets/{chart-DoWHmsjN.js → chart-C8NxHvhT.js} +1 -1
- package/dist/client/assets/{chat-context-BuWQJAhV.js → chat-context-CciYi0Ay.js} +1 -1
- package/dist/client/assets/{checkbox-Cj6-6z11.js → checkbox-DO5EWy6w.js} +1 -1
- package/dist/client/assets/{cli-auth-success-C8d9QEXn.js → cli-auth-success-CKgb71k8.js} +1 -1
- package/dist/client/assets/{collection-detail-BlZwY2z4.js → collection-detail-VBT3x7q0.js} +1 -1
- package/dist/client/assets/{collection-display-button-fhpc0d_E.js → collection-display-button-hXrSA8G_.js} +1 -1
- package/dist/client/assets/{collection-search-DWHmJRTZ.js → collection-search-BRAG-f_9.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-0-aMN7kk.js → collection-table-wrapper-Bx0w35pA.js} +1 -1
- package/dist/client/assets/{collection-tabs--RWCnegb.js → collection-tabs-D0dHv5Wh.js} +1 -1
- package/dist/client/assets/{command-DpQjUH7C.js → command-BE4n7pJ8.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-75Xyj44m.js → commerce-onboarding-B2cbzeCC.js} +1 -1
- package/dist/client/assets/{connect-Pd0hGqfp.js → connect-BleaxWFI.js} +1 -1
- package/dist/client/assets/{connection-B8QUt5qf.js → connection-CnRC0dy7.js} +1 -1
- package/dist/client/assets/{connection-card-CYYHOn8G.js → connection-card-DppQzBHC.js} +1 -1
- package/dist/client/assets/{connection-detail-D8iAXD6d.js → connection-detail-DWu9aWSL.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DD1440zT.js → connection-form-helpers-BAmYHYG8.js} +1 -1
- package/dist/client/assets/{connections-DD2pKuZv.js → connections-DZjbFcBQ.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-PDts66Cw.js → decopilot-sse-pool-DN07Xnsu.js} +1 -1
- package/dist/client/assets/{dialog-D5JeNWji.js → dialog-bwPMyld_.js} +1 -1
- package/dist/client/assets/{domain-settings-C-VZXkWu.js → domain-settings-Btoq2sQ9.js} +1 -1
- package/dist/client/assets/{drawer-DZB9Ayaq.js → drawer-nTAsT1Cg.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DGab5gGv.js → dropdown-menu-r4VgB7vC.js} +1 -1
- package/dist/client/assets/{empty-state-CUpJlnEP.js → empty-state-CKuHE4Aq.js} +1 -1
- package/dist/client/assets/{extract-connection-data-HB0f7VhS.js → extract-connection-data-C9f6fqO4.js} +1 -1
- package/dist/client/assets/{file-explorer-CQM_wXjX.js → file-explorer-DWjgDeDl.js} +1 -1
- package/dist/client/assets/{file-type-icon-2Oy3oZAr.js → file-type-icon-DMLcKqB4.js} +1 -1
- package/dist/client/assets/{form-BnBmIKdR.js → form-6c4aldIl.js} +1 -1
- package/dist/client/assets/general-DeeVD3As.js +1 -0
- package/dist/client/assets/{github-repo-picker-gMQ7jslJ.js → github-repo-picker-BfzaWYKF.js} +1 -1
- package/dist/client/assets/{hooks-BwXOucYx.js → hooks-P1CA2dpT.js} +1 -1
- package/dist/client/assets/{index-RxUskJ2D.js → index-BHYQfuU2.js} +5 -5
- package/dist/client/assets/{index-CIZWixbA.js → index-BO74bSOb.js} +1 -1
- package/dist/client/assets/{index-CMxZ_WIu.js → index-BSXlQLL9.js} +30 -30
- package/dist/client/assets/{index-DLKO9DR4.js → index-BmFxsi-w.js} +1 -1
- package/dist/client/assets/{index-Bmx5aP9S.js → index-C-c6Ys3N.js} +1 -1
- package/dist/client/assets/{index-COwnzJ4s.js → index-C7S_RIiH.js} +1 -1
- package/dist/client/assets/{index-BVIvC2zN.js → index-CfA_TIaf.js} +1 -1
- package/dist/client/assets/{index-DlOIhlpa.js → index-DK9OkQkL.js} +1 -1
- package/dist/client/assets/{index-D3DyocAK.js → index-Dds_NL_a.js} +1 -1
- package/dist/client/assets/{index--dViOAZG.js → index-DyIWC7uZ.js} +1 -1
- package/dist/client/assets/{index-redirect-CApb8yxa.js → index-redirect-DUZ7Px8G.js} +1 -1
- package/dist/client/assets/{infra-billing-D1KoMmbQ.js → infra-billing-DHZViqOS.js} +1 -1
- package/dist/client/assets/{input-QUFhSscC.js → input-DyOTPx7n.js} +1 -1
- package/dist/client/assets/{integration-icon-LCPobrom.js → integration-icon-BTWhv3AC.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-wRttuYic.js → invite-member-dialog-DQ9aIMnN.js} +1 -1
- package/dist/client/assets/{label-D9i9PU0s.js → label-D8e9eyGZ.js} +1 -1
- package/dist/client/assets/{layout-DbjEtQZu.js → layout-Dlx5wCj5.js} +1 -1
- package/dist/client/assets/{login-ChSdmill.js → login-M0OdHh3q.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CB0oVlt7.js → mcp-oauth-x90veYZ2.js} +1 -1
- package/dist/client/assets/{members-GVgpYvJM.js → members-BTYWW3QC.js} +1 -1
- package/dist/client/assets/{monaco-editor-J99MCaCo.js → monaco-editor-5ybpySI3.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-CONHvv1x.js → monitoring-stats-row-Bhaxa6FP.js} +1 -1
- package/dist/client/assets/{multi-select--biO2XOR.js → multi-select-CEPbw12S.js} +1 -1
- package/dist/client/assets/{oauth-callback-DNmXa-sP.js → oauth-callback-ZPlYY2ln.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CimN18rl.js → oauth-callback-ai-provider-jjaKt0KR.js} +1 -1
- package/dist/client/assets/{onboarding-DX2vCW5K.js → onboarding-Dj8ZYzXV.js} +1 -1
- package/dist/client/assets/{org-layout-eaYK8wif.js → org-layout-Cpnz4kRb.js} +1 -1
- package/dist/client/assets/{organization-choice-B0EJOKA7.js → organization-choice-C9VcoaRw.js} +1 -1
- package/dist/client/assets/{orgs-B62ePsZB.js → orgs-CstjyOC9.js} +1 -1
- package/dist/client/assets/{page-seo-form-B3lpujiJ.js → page-seo-form-CWi1q5t-.js} +1 -1
- package/dist/client/assets/{popover-Ci4_tWvA.js → popover-CXuXytY3.js} +1 -1
- package/dist/client/assets/{post-editor-bZcgXLsB.js → post-editor-CcWIuHkU.js} +1 -1
- package/dist/client/assets/{primitives-D5_Ictax.js → primitives-7M0JmvRL.js} +1 -1
- package/dist/client/assets/{profile-B9ZHih05.js → profile-DGgWRHNN.js} +1 -1
- package/dist/client/assets/{project-app-view-CHfgPVtl.js → project-app-view-CYa0LAcR.js} +1 -1
- package/dist/client/assets/record-editor-sZ1-dWb9.js +1 -0
- package/dist/client/assets/{redirect-editor-CMCOfxAl.js → redirect-editor-B4O-zE_1.js} +1 -1
- package/dist/client/assets/registry-CRp_hOyA.js +2 -0
- package/dist/client/assets/{registry-layout-DYbhPHER.js → registry-layout-DKQwzlf7.js} +1 -1
- package/dist/client/assets/{reports-fk3a_hk-.js → reports-CbDUKvAj.js} +1 -1
- package/dist/client/assets/{require-capability-CFznm9Vo.js → require-capability-dhpF1J8l.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DDKLgrCs.js → required-auth-layout-I3vKg1Pd.js} +1 -1
- package/dist/client/assets/{reset-password-ucOxT5tW.js → reset-password-O3KG_qoT.js} +1 -1
- package/dist/client/assets/{roles-DOKChGgF.js → roles-BguTni2B.js} +1 -1
- package/dist/client/assets/{search-input-B3HainHg.js → search-input-CzCMYoIo.js} +1 -1
- package/dist/client/assets/{secrets-DiB6fpQO.js → secrets-MLfkhjsi.js} +1 -1
- package/dist/client/assets/{sections-editor-Ddhru0HH.js → sections-editor-CGrcJmdr.js} +1 -1
- package/dist/client/assets/{select-CAAExvF2.js → select-C1E4D2OH.js} +1 -1
- package/dist/client/assets/{select-model-COi00Qc2.js → select-model-DABhhA9w.js} +1 -1
- package/dist/client/assets/{self-tool-result-BCMn3-y-.js → self-tool-result-CUcBi0aX.js} +1 -1
- package/dist/client/assets/{seo-editor-DXYFwL39.js → seo-editor-D2J8ofVK.js} +1 -1
- package/dist/client/assets/{settings-layout-u8-eewgs.js → settings-layout-B7n4e_GZ.js} +1 -1
- package/dist/client/assets/{settings-section-B50_pbBL.js → settings-section-r7u8OI_Z.js} +1 -1
- package/dist/client/assets/{shell-controls-5FN2bOK2.js → shell-controls-CSmcjGI4.js} +1 -1
- package/dist/client/assets/{shell-layout-BzDcxKu_.js → shell-layout-CTBaAxNC.js} +1 -1
- package/dist/client/assets/{sidebar-BBjg9obt.js → sidebar-CNYTrG6l.js} +1 -1
- package/dist/client/assets/{skeleton-DaOsZD3E.js → skeleton-iHHjVwFs.js} +1 -1
- package/dist/client/assets/{spinner-BiEgTK64.js → spinner-D2zYtZbv.js} +1 -1
- package/dist/client/assets/{sso-CntWYR8q.js → sso-Yg4epchu.js} +1 -1
- package/dist/client/assets/{store-bcglShK-.js → store-D6TU6zEm.js} +1 -1
- package/dist/client/assets/store-registry-nPocWKCF.js +2 -0
- package/dist/client/assets/{studio-tools-BKQiiGm_.js → studio-tools-Dvq3Bgr8.js} +1 -1
- package/dist/client/assets/{switch-Cq8T9YU6.js → switch-MCptO9vq.js} +1 -1
- package/dist/client/assets/{synced-repos-CnW8V0RH.js → synced-repos-DJm4p-bn.js} +1 -1
- package/dist/client/assets/{tab-id-Dz9GTS6m.js → tab-id-BJrz0rCD.js} +1 -1
- package/dist/client/assets/{table-DuJxV7wG.js → table-CZlpExIa.js} +1 -1
- package/dist/client/assets/{tabs-DDz-V64-.js → tabs-COkiLCY9.js} +1 -1
- package/dist/client/assets/{textarea-DSK0cmwf.js → textarea-yM9B18DF.js} +1 -1
- package/dist/client/assets/{toggle-group-B-0po5Sm.js → toggle-group-D5DH-bv_.js} +1 -1
- package/dist/client/assets/{toolbar-BkeZkPG6.js → toolbar-Dftb6rlV.js} +1 -1
- package/dist/client/assets/{tooltip-CCw2rc-N.js → tooltip-BHmvg-d9.js} +1 -1
- package/dist/client/assets/{track-C_gZtHW2.js → track-Dtyn23ph.js} +1 -1
- package/dist/client/assets/{types-Bbiq9OF8.js → types-CSKGsB6e.js} +1 -1
- package/dist/client/assets/{use-ai-providers-CMHb8eeO.js → use-ai-providers-Dq_jtcCr.js} +1 -1
- package/dist/client/assets/{use-api-keys-B5XPjfBR.js → use-api-keys-B54XpPP4.js} +1 -1
- package/dist/client/assets/{use-automations-D281hCxS.js → use-automations-BF9sVxjr.js} +1 -1
- package/dist/client/assets/{use-autosave-Db4jyDfO.js → use-autosave-CurQ0uas.js} +1 -1
- package/dist/client/assets/{use-capability-DVlvH4nJ.js → use-capability-2V7F60Oa.js} +1 -1
- package/dist/client/assets/{use-clock-tick-C2aXJbpO.js → use-clock-tick-BIFZ7LnD.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-BkAPEKGQ.js → use-commerce-diagnostic-DPMmn4_G.js} +1 -1
- package/dist/client/assets/{use-connection-BOd54lqQ.js → use-connection-BG4zwPiv.js} +1 -1
- package/dist/client/assets/{use-copy-DvraSgSy.js → use-copy-D8KdSR5J.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-61GrIEL-.js → use-create-virtual-mcp-BOE-VCWz.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-CSirrWhJ.js → use-debounced-autosave-CyJFwVJs.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DT4rx-xW.js → use-debounced-value-C_wfnBUh.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DICjmIrV.js → use-decopilot-events-CIXhXkvz.js} +1 -1
- package/dist/client/assets/{use-delete-connection-HVhVPo-x.js → use-delete-connection-xNuQus0U.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Bxvx9x64.js → use-deployment-admin-bumqbfSm.js} +1 -1
- package/dist/client/assets/{use-file-configs-kjM_f61B.js → use-file-configs-CjQx0GMF.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-n_k4dNsE.js → use-infinite-scroll-BkqkLo9W.js} +1 -1
- package/dist/client/assets/{use-infra-billing-BQ6LJ8Q9.js → use-infra-billing-DKUXGwfT.js} +1 -1
- package/dist/client/assets/{use-join-requests-2zijd4LS.js → use-join-requests-CsCN5D3c.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CVI7A81s.js → use-mcp-client-CuL4cirC.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-CzrK_N4T.js → use-mcp-tools-BYJQ8AJZ.js} +1 -1
- package/dist/client/assets/{use-members-Cn0TjDfQ.js → use-members-jwOp9xRO.js} +1 -1
- package/dist/client/assets/{use-mobile-Doxs1lZc.js → use-mobile-BbX8Rt9A.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-5MjWsTRH.js → use-navigate-to-agent-BFUjcKHY.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-B-ct7bqk.js → use-open-billing-url-Dld4f6lc.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CnC_ZcfG.js → use-org-auth-client-DzyJ1wwI.js} +1 -1
- package/dist/client/assets/{use-org-sso-Cibpu5jE.js → use-org-sso-BFtz9cXt.js} +1 -1
- package/dist/client/assets/{use-organization-roles-BXaTnuLk.js → use-organization-roles-DxvpIHv9.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CpK185Z_.js → use-organization-settings-CFjyucwh.js} +1 -1
- package/dist/client/assets/{use-registry-connections-C-CW_lkr.js → use-registry-connections-Cl6vSuG1.js} +1 -1
- package/dist/client/assets/{use-secrets-M_k0-nDT.js → use-secrets-DEHV3YlZ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-D2ls-zqo.js → use-section-preview-base-DKXJw11a.js} +1 -1
- package/dist/client/assets/{use-status-sounds-CPMNTf96.js → use-status-sounds-DphyhC5Z.js} +1 -1
- package/dist/client/assets/{use-tags-D0LzO9P6.js → use-tags-B83z6YyT.js} +1 -1
- package/dist/client/assets/{use-view-mode-DjVTG-K-.js → use-view-mode-CHnOiBhy.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BTWH3swd.js → use-virtual-mcp-D9ByfZ-S.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-nVWf6tsM.js +1 -0
- package/dist/client/assets/{useRouterState-CJU9SxDD.js → useRouterState-za17M_-y.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Dp0inNDA.js +1 -0
- package/dist/client/assets/{users-jqcODjPg.js → users-Cu4R9awV.js} +1 -1
- package/dist/client/assets/{variant-calendar-DqKnSUCs.js → variant-calendar-DRSef3-M.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-ooqosrP6.js → view-mode-toggle-MgmHOblA.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/general-DPYF0KaF.js +0 -1
- package/dist/client/assets/record-editor-Dy4MmmwP.js +0 -1
- package/dist/client/assets/registry-BPoyeDb2.js +0 -2
- package/dist/client/assets/store-registry-3sr84HjS.js +0 -2
- package/dist/client/assets/useInfiniteQuery-Bn8GtXSi.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Bf9gAUxG.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2761,7 +2761,7 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2761
2761
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2762
2762
|
|
|
2763
2763
|
Respond with the structured verdict and a short reason.`,jx$;var Px$=w(()=>{C4();XB();C51();HX6=_51.object({requiresReview:_51.boolean().describe("true if the changes should go through pull-request review"),reason:_51.string().describe("One short sentence explaining the decision (max ~120 chars)")});jx$={requiresReview:!1,reason:""}});function Ax$(){return process.env.GITHUB_API_BASE_URL??"https://api.github.com"}function Tx$($,Z){return $==="GET"&&!Z.includes("/git/blobs/")&&!Z.includes("/git/trees/")&&!Z.includes("/tarball/")}function Rx$($){let Z=Sh.get($);if(!Z)return;Sh.delete($),v51-=Z.bytes}function wX6($,Z,X){let Q;try{Q=JSON.stringify(X)?.length??0}catch{return}if(Rx$($),Q>BX6)return;Sh.set($,{etag:Z,body:X,bytes:Q}),v51+=Q;while(v51>OX6||Sh.size>UX6){let Y=Sh.keys().next().value;if(Y===void 0)break;Rx$(Y)}}function Ix$($){let{owner:Z,repo:X,accessToken:Q}=$,Y=`/repos/${Z}/${X}`,G=null;async function J(W,K,H,F){let N=`${Ax$()}${K}`,U=Tx$(W,K)?Sh.get(N):void 0,O=await fetch(N,{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&&!F?.allow?.includes(O.status)){let D=await O.text().catch(()=>""),L=D;try{L=JSON.parse(D).message??D}catch{}throw new J6(O.status,W,K,L)}let B=O.status===204?void 0:await O.json();if(O.status===200&&Tx$(W,K)){let D=O.headers.get("etag");if(D)wX6(N,D,B)}return{status:O.status,json:B}}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/${H_(W)}`);return K.object.sha},async getTarballStream(W){let K=`${Y}/tarball/${H_(W)}`,H=await fetch(`${Ax$()}${K}`,{headers:{"User-Agent":"studio-decofile",Authorization:`token ${Q}`},signal:AbortSignal.timeout(60000)});if(!H.ok){let F=await H.text().catch(()=>"");throw new J6(H.status,"GET",K,F.slice(0,300))}if(!H.body)throw new J6(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 J6(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 J6(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:F}=await J("POST",`${Y}/git/commits`,{message:W,tree:K,parents:H});return F.sha},async updateRef(W,K){await J("PATCH",`${Y}/git/refs/heads/${H_(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:F,json:N}=await J("POST",`${Y}/merges`,{base:W,head:K,commit_message:H},{allow:[204]});return F===204?null:N?.sha??null},async createPullRequest({base:W,head:K,title:H}){let{json:F}=await J("POST",`${Y}/pulls`,{base:W,head:K,title:H});return{number:F.number,html_url:F.html_url}},async findOpenPullRequest(W,K){let{json:H}=await J("GET",`${Y}/pulls?state=open&base=${encodeURIComponent(W)}&head=${encodeURIComponent(`${Z}:${K}`)}`),F=H[0];return F?{number:F.number,html_url:F.html_url}:null},async compare(W,K){let{json:H}=await J("GET",`${Y}/compare/${H_(W)}...${H_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by}},async compareDetailed(W,K){let{json:H}=await J("GET",`${Y}/compare/${H_(W)}...${H_(K)}`);return{aheadBy:H.ahead_by,behindBy:H.behind_by,mergeBaseSha:H.merge_base_commit.sha,files:(H.files??[]).map((F)=>({filename:F.filename,status:F.status,sha:F.sha,...F.previous_filename?{previousFilename:F.previous_filename}:{}}))}}}}function H_($){return $.split("/").map(encodeURIComponent).join("/")}var UX6=512,OX6=8388608,BX6=262144,Sh,v51=0,J6;var F_=w(()=>{Sh=new Map;J6=class J6 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 KP0($,Z,X){if(!X.connectionId)throw new J6(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 J6(401,"AUTH","connection","Project's GitHub connection is missing \u2014 reconnect GitHub");let Y=await DX6($,Q);if(!Y)throw new J6(401,"AUTH","connection",_Z);return Ix$({owner:X.owner,repo:X.name,accessToken:Y})}async function DX6($,Z){if(T5(Z)?.sourceConnectionId)return Rx($,Z);return(await bY({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new M6($.db,$.vault)})).accessToken}var f51=w(()=>{zQ();b90();P3();kY();F_()});function LX6($){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 HP0($){if(LX6($))throw Error(`Invalid block key: ${$||"(empty)"}`)}function xr($){try{return decodeURIComponent($)}catch{return $}}function b51($){return HP0($),encodeURIComponent($)}function yr($){let Z=$.map((J)=>({file:J,name:`${J.stem}.json`})).sort((J,W)=>J.name<W.name?-1:J.name>W.name?1:0),X=[],Q=new Set,Y="{",G=!0;for(let{file:J}of Z){let W=J.content.trim();if(W.length===0)continue;let K=xr(J.stem);if(Q.has(K)){X.push({key:K,stem:J.stem,error:`duplicate block key "${K}" (another file already maps to it)`});continue}try{JSON.parse(W)}catch(H){X.push({key:K,stem:J.stem,error:H instanceof Error?H.message:String(H)});continue}if(Q.add(K),!G)Y+=",";G=!1,Y+=`${JSON.stringify(K)}:${W}`}return{decofile:`${Y}}`,skipped:X}}var qx$=()=>{};var FP0=w(()=>{qx$()});function EX6($){return $.startsWith("merged/")?"merged":"blobs"}function x51($,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=EX6(G);Y.entries.set(G,{bytes:J,area:W}),Y.totalBytes+=J,Y.areaBytes[W]+=J}return Y}function Mx$($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.entries.set(Z,X)}function Vh($,Z){let X=$.entries.get(Z);if(!X)return;$.entries.delete(Z),$.totalBytes-=X.bytes,$.areaBytes[X.area]-=X.bytes}function kx$($,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),F=[],N=new Set;if(Y==="merged")for(let[U,O]of $.entries){if(H+Q<=G.maxMergedBytes)break;if(U===X||O.area!=="merged")continue;F.push(U),N.add(U),H-=O.bytes,K-=O.bytes}for(let[U,O]of $.entries){if(K+Q<=G.maxTotalBytes)break;if(U===X||N.has(U))continue;F.push(U),N.add(U),K-=O.bytes}for(let U of F)Vh($,U);return Vh($,X),$.entries.set(X,{bytes:Q,area:Y}),$.totalBytes+=Q,$.areaBytes[Y]+=Q,{admitted:!0,evict:F}}function gr($){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 y51($){return/^[0-9a-f]{40}$/.test($)}import{randomUUID as fx$}from"crypto";import{mkdir as hr,readdir as jX6,readFile as zX6,rename as PX6,rm as bx$,stat as xx$,statfs as AX6,unlink as TX6,writeFile as RX6}from"fs/promises";import{tmpdir as IX6}from"os";import{dirname as qX6,join as R7}from"path";function Ch($,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 SX6(){if(NP0)return NP0;let $=Bun.env.FAST_PREVIEW_CACHE_DIR,Z=$===void 0?R7(IX6(),"studio-fast-preview-cache"):$;return NP0={enabled:Z!=="",root:Z,index:{maxTotalBytes:Ch("FAST_PREVIEW_CACHE_MAX_BYTES",2*Sx$),maxMergedBytes:Ch("FAST_PREVIEW_CACHE_MERGED_MAX_BYTES",512*UP0),maxEntryBytes:{blobs:Ch("FAST_PREVIEW_CACHE_MAX_BLOB_BYTES",UP0),merged:Ch("FAST_PREVIEW_CACHE_MAX_MERGED_BYTES",32*UP0)}},freeFloorBytes:Ch("FAST_PREVIEW_CACHE_FREE_FLOOR_BYTES",Sx$),sweepIntervalMs:Ch("FAST_PREVIEW_CACHE_SWEEP_INTERVAL_MS",600000)},NP0}function VX6(){return{hits:{blobs:0,merged:0},misses:{blobs:0,merged:0},evictions:0,errors:0,floorSkips:0,invalidKeySkips:0,admissionRefusals:0}}function CX6(){if(Ww)return;Ww={hits:q$.createCounter("fast_preview_cache_hits",{description:"Decofile disk cache hits by area",unit:"{reads}"}),misses:q$.createCounter("fast_preview_cache_misses",{description:"Decofile disk cache misses by area",unit:"{reads}"}),evictions:q$.createCounter("fast_preview_cache_evictions",{description:"Decofile disk cache entries evicted",unit:"{entries}"}),errors:q$.createCounter("fast_preview_cache_errors",{description:"Decofile disk cache swallowed errors by operation",unit:"{errors}"}),floorSkips:q$.createCounter("fast_preview_cache_floor_skips",{description:"Decofile disk cache writes skipped by the free-space floor",unit:"{writes}"})},q$.createObservableGauge("fast_preview_cache_bytes",{description:"Decofile disk cache bytes by area",unit:"By"}).addCallback(($)=>{if(!_h)return;$.observe(_h.index.areaBytes.blobs,{area:"blobs"}),$.observe(_h.index.areaBytes.merged,{area:"merged"})}),q$.createObservableGauge("fast_preview_cache_entries",{description:"Decofile disk cache entry count by area",unit:"{entries}"}).addCallback(($)=>{if(!_h)return;let Z={blobs:0,merged:0};for(let X of _h.index.entries.values())Z[X.area]+=1;$.observe(Z.blobs,{area:"blobs"}),$.observe(Z.merged,{area:"merged"})})}function _X6($){N_.hits[$]+=1,Ww?.hits.add(1,{area:$})}function Vx$($){N_.misses[$]+=1,Ww?.misses.add(1,{area:$})}function g51(){N_.evictions+=1,Ww?.evictions.add(1)}function BN($){N_.errors+=1,Ww?.errors.add(1,{op:$})}function vX6($){N_.invalidKeySkips+=1,Ww?.errors.add(1,{op:`${$}_invalid_key`})}function h51(){return Cx$??=bX6(),Cx$}async function bX6(){let $=SX6();if(!$.enabled)return null;CX6();try{await hr(R7($.root,"blobs"),{recursive:!0}),await hr(R7($.root,"merged"),{recursive:!0}),await hr(R7($.root,"tmp"),{recursive:!0})}catch{return BN("init"),null}let Z=[];try{Z=await yx$($.root)}catch{BN("scan"),Z=[]}let X={root:$.root,index:x51(Z,$.index),cfg:$};return _h=X,gX6(X),X}async function OP0($){try{return await jX6($)}catch{return[]}}async function yx$($){let Z=[];for(let X of["blobs","merged"]){let Q=R7($,X);for(let Y of await OP0(Q)){let G=R7(Q,Y);for(let J of await OP0(G)){let W=R7(G,J);for(let K of await OP0(W))try{let H=await xx$(R7(W,K));if(!H.isFile())continue;Z.push({path:`${X}/${Y}/${J}/${K}`,bytes:H.size,mtimeMs:H.mtimeMs})}catch{}}}}return Z}function gx$($,Z,X){if(!y51(X))return null;try{return`blobs/${gr($)}/${gr(Z)}/${X}`}catch{return null}}function hx$($,Z,X){if(!y51(X))return null;try{return`merged/${gr($)}/${gr(Z)}/${X}.json`}catch{return null}}async function ux$($,Z){try{let X=await h51();if(!X)return null;if(Z===null)return Vx$($),null;try{let Q=await zX6(R7(X.root,Z),"utf8");return Mx$(X.index,Z),_X6($),Q}catch{return Vx$($),null}}catch{return BN(`get_${$}`),null}}function cx$($,Z,X){return ux$("blobs",gx$($,Z,X))}function lx$($,Z,X){return ux$("merged",hx$($,Z,X))}async function xX6($){if($.cfg.freeFloorBytes<=0)return!0;try{let Z=await AX6($.root);return Z.bavail*Z.bsize>=$.cfg.freeFloorBytes}catch{return!0}}async function BP0($){try{await TX6($)}catch{}}async function yX6($){try{let Z=$.cfg.index.maxTotalBytes/2;while($.index.totalBytes>Z){let X=$.index.entries.keys().next();if(X.done)break;Vh($.index,X.value),await BP0(R7($.root,X.value)),g51()}}catch{BN("emergency_evict")}}async function dx$($,Z,X,Q){try{let Y=await h51();if(!Y)return;if(X===null){vX6(Z);return}if(!await xX6(Y)){N_.floorSkips+=1,Ww?.floorSkips.add(1);return}let G=Buffer.byteLength(Q,"utf8"),J=kx$(Y.index,{path:X,bytes:G,area:$});if(!J.admitted){N_.admissionRefusals+=1;return}for(let K of J.evict)await BP0(R7(Y.root,K)),g51();let W=R7(Y.root,"tmp",`stage-${fx$()}`);try{await RX6(W,Q,"utf8");let K=R7(Y.root,X);await hr(qX6(K),{recursive:!0}),await PX6(W,K)}catch(K){if(Vh(Y.index,X),await BP0(W),BN(Z),K?.code==="ENOSPC")await yX6(Y)}}catch{BN(Z)}}function wP0($,Z,X,Q){return dx$("blobs","put_blob",gx$($,Z,X),Q)}function mx$($,Z,X,Q){return dx$("merged","put_merged",hx$($,Z,X),Q)}async function ix$(){try{let $=await h51();if(!$)return null;let Z=R7($.root,"tmp",fx$());return await hr(Z,{recursive:!0}),Z}catch{return BN("make_scratch"),null}}async function px$($){try{await bx$($,{recursive:!0,force:!0})}catch{BN("remove_scratch")}}function gX6($){let Z=$.cfg.sweepIntervalMs;if(Z<=0)return;_x$=new AbortController,I$(Math.random()*Z,{signal:_x$.signal}).then(()=>{vx$($);let X=setInterval(()=>void vx$($),Z);X.unref?.(),fX6=X}).catch(()=>{})}async function vx$($){try{let Z=x51(await yx$($.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;Vh(Z,G),await BP0(R7($.root,G)),g51()}$.index=Z;let Q=R7($.root,"tmp"),Y=Date.now();for(let G of await OP0(Q)){let J=R7(Q,G);try{let W=await xx$(J);if(Y-W.mtimeMs>kX6)await bx$(J,{recursive:!0,force:!0})}catch{}}}catch{BN("sweep")}}var MX6=1024,UP0,Sx$,kX6=3600000,NP0=null,Ww=null,N_,Cx$=null,_h=null,fX6=null,_x$=null;var nx$=w(()=>{t4();f6();UP0=1024*MX6,Sx$=1024*UP0;N_=VX6()});function tx$(){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 hX6,stat as uX6}from"fs/promises";import{join as ox$}from"path";function cX6($,Z,X){let Q=["-xz","--strip-components=1","-C",Z];return $==="gnu"?[...Q,"--wildcards",X]:[...Q,X]}function lX6(){return rx$??=(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"}})(),rx$}async function ax$($,Z,X){let Q=X.replace(/^\.\//,"").replace(/^\/+/,"").replace(/\/+$/,"");if(Q===""||Q.split("/").includes(".."))throw new ur(`invalid blocks path prefix: ${X}`);let Y=await lX6(),G=`*/${Q}/*.json`,J=()=>Bun.spawn(["tar",...cX6(Y,Z,G)],{stdin:$,stdout:"ignore",stderr:"pipe"}),W;try{W=J()}catch(N){throw new ur("failed to spawn tar",{cause:N})}let K=new Response(W.stderr).text().catch(()=>""),H=await W.exited;if(H!==0){let N=(await K).trim().slice(0,500);throw new ur(`tar exited with code ${H}${N?`: ${N}`:""}`)}let F=await dX6(Z,Q);if(F.length===0)throw new ur(`tar extracted no ${G} members into ${Z}`);return F}async function dX6($,Z){let X=ox$($,...Z.split("/")),Q;try{Q=await hX6(X)}catch{return[]}let Y=[];for(let G of Q){if(!G.endsWith(".json"))continue;let J=ox$(X,G);try{if(!(await uX6(J)).isFile())continue}catch{continue}Y.push({path:`${Z}/${G}`,diskPath:J})}return Y.sort((G,J)=>G.path.localeCompare(J.path))}var ur,rx$=null;var sx$=w(()=>{ur=class ur extends Error{constructor($,Z){super($,Z);this.name="TarExtractError"}}});import{createHash as mX6}from"crypto";import{readFile as iX6}from"fs/promises";async function cr($,Z){try{return await $.getHeadSha(Z)}catch(Q){if(!(Q instanceof J6)||Q.status!==404)throw Q}let X=await $.getHeadSha(await $.getDefaultBranch());try{return await $.createRef(Z,X),X}catch(Q){if(Q instanceof J6&&Q.status===422)return $.getHeadSha(Z);throw Q}}function nX6(){let $=Bun.env.FAST_PREVIEW_COLD_TARBALL_MAX_BYTES;if($===void 0||$==="")return $y$;let Z=Number($);return Number.isFinite(Z)&&Z>=0?Math.floor(Z):$y$}function tX6($){Zy$??=q$.createCounter("decofile_cold_reads",{description:"Decofile cold snapshot reads by resolution path",unit:"{reads}"}),Zy$.add(1,{path:$})}function oX6($){Xy$??=q$.createCounter("decofile_skipped_blocks",{description:"Decofile blocks dropped from a merge for not being valid JSON",unit:"{blocks}"}),Xy$.add($)}async function DP0($,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 LP0($){return $?`${$}/.deco/blocks`:".deco/blocks"}function u51($,Z){let X=`${LP0(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 c51($,Z){return $.filter((X)=>xr(X.stem)===Z).map((X)=>X.path).sort()}function Qy$($,Z,X,Q){return wP0($,Z,X,Q)}function aX6($,Z){return mX6("sha1").update(`${rX6}:${$}:${Z??""}`).digest("hex")}async function Yy$($,Z,X,Q){let Y=Q?.createBranchIfMissing?await cr($,Z):await $.getHeadSha(Z);return sX6.run(`${$.owner}/${$.repo}@${Y}:${X??""}`,()=>eX6($,Y,X))}async function eX6($,Z,X){let{owner:Q,repo:Y}=$,G=aX6(Z,X),J=await lx$(Q,Y,G);if(J!==null)return{sha:Z,decofile:J};let W=await $.getCommitTreeSha(Z),K=await $.getTreeRecursive(W),H=u51(K,X),F=new Map;if(await DP0(H,ex$,async(D)=>{let L=await cx$(Q,Y,D.sha);if(L!==null)F.set(D.path,L)}),H.length-F.size>pX6){let D=await $Q6($,Z,X,H);if(tX6(D!==null?"tarball":"blobs"),D!==null)for(let[L,E]of D)F.set(L,E)}let U=await DP0(H,ex$,async(D)=>{let L=F.get(D.path);if(L!==void 0)return{stem:D.stem,content:L};let E=await $.getBlobText(D.sha);return await wP0(Q,Y,D.sha,E),{stem:D.stem,content:E}}),{decofile:O,skipped:B}=yr(U);if(B.length>0)oX6(B.length),console.warn("decofile read: dropped blocks that were not valid JSON",{repo:`${Q}/${Y}`,sha:Z,packagePath:X,blocks:B.map((D)=>D.key)});return await mx$(Q,Y,G,O),{sha:Z,decofile:O}}async function $Q6($,Z,X,Q){let Y=`${$.owner}/${$.repo}`,G=nX6(),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 ix$();if(W===null)return null;try{let K=await $.getTarballStream(Z),H=await ax$(K,W,LP0(X)),F=new Map(Q.map((U)=>[U.path,U.sha])),N=new Map;for(let U of H){let O=F.get(U.path);if(O===void 0)continue;let B=await iX6(U.diskPath,"utf8");await wP0($.owner,$.repo,O,B),N.set(U.path,B)}return N}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 px$(W)}}var ex$=12,pX6=50,$y$=134217728,Zy$=null,Xy$=null,rX6="3",sX6;var EP0=w(()=>{FP0();f6();nx$();F_();sx$();sX6=tx$()});async function jP0($,Z){let X=await $.getDefaultBranch(),Q=await cr($,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 zP0($,Z,X){let Q=X??await $.getDefaultBranch(),Y=await $.compareDetailed(Q,Z),G=Y.files.slice(0,ZQ6),J=await $.getCommitTreeSha(Y.mergeBaseSha),W=await $.getTreeRecursive(J),K=new Map(W.filter((F)=>F.type==="blob").map((F)=>[F.path,F.sha])),H=await DP0(G,XQ6,async(F)=>{let N=F.previousFilename??F.filename,U=F.status==="added"?void 0:K.get(N),O=U?await $.getBlobText(U):null,B=F.status==="removed"?null:await $.getBlobText(F.sha);return[F.filename,{from:O,to:B}]});return{diffs:Object.fromEntries(H),mergeBaseSha:Y.mergeBaseSha}}async function Gy$($,Z,X,Q="fail"){try{await $.mergeBranch(Z,X,`chore(decofile): merge ${X} into ${Z}`);return}catch(Y){if(!(Y instanceof J6&&Y.status===409))throw Y;if(Q!=="branch-wins")throw new J6(409,"POST","merges",`Merge conflict updating ${Z} from ${X} \u2014 resolve on GitHub`)}await GQ6($,Z,X)}function YQ6($,Z){let X=new Map;for(let Q of $){let Y=Z.get(Q.filename);X.set(Q.filename,{path:Q.filename,mode:"100644",type:"blob",sha:Q.status==="removed"||!Y?null:Y.sha})}for(let Q of $)if(Q.previousFilename&&Q.previousFilename!==Q.filename&&!X.has(Q.previousFilename))X.set(Q.previousFilename,{path:Q.previousFilename,mode:"100644",type:"blob",sha:null});return[...X.values()]}async function Wy$($,Z,X){if(X.length===0)return;let Q=await $.getDefaultBranch();for(let Y=1;;Y++){let G=await $.getHeadSha(Z),{mergeBaseSha:J}=await $.compareDetailed(Q,Z),[W,K]=await Promise.all([$.getTreeRecursive(await $.getCommitTreeSha(J)),$.getTreeRecursive(await $.getCommitTreeSha(G))]),H=new Map(W.filter((B)=>B.type==="blob").map((B)=>[B.path,B])),F=new Map(K.filter((B)=>B.type==="blob").map((B)=>[B.path,B])),N=[];for(let B of X){let D=H.get(B),L=F.get(B);if(D?.sha===L?.sha)continue;if(!D&&!L)continue;N.push({path:B,mode:"100644",type:"blob",sha:D?.sha??null})}if(N.length===0)return;let U=await $.createTree(await $.getCommitTreeSha(G),N),O=await $.createCommit({message:`chore(decofile): discard changes to ${N.length} file(s)`,treeSha:U,parentShas:[G]});try{await $.updateRef(Z,O);return}catch(B){if(B instanceof J6&&B.status===422&&Y<Jy$)continue;throw B}}}async function GQ6($,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>=QQ6)throw new J6(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=YQ6(J,K),F=await $.createTree(await $.getCommitTreeSha(G),H),N=await $.createCommit({message:`chore(decofile): merge ${X} into ${Z} (branch content wins)`,treeSha:F,parentShas:[Y,G]});try{await $.updateRef(Z,N);return}catch(U){if(U instanceof J6&&U.status===422&&Q<Jy$)continue;throw U}}}var ZQ6=200,XQ6=12,QQ6=300,Jy$=3;var Ky$=w(()=>{F_();EP0()});function WQ6($){if(!$||$.includes(".."))return!1;return JQ6.test($)}function Hy$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!WQ6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Fy$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var JQ6;var Ny$=w(()=>{JQ6=/^[\w./@-]+$/});function l51($){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 lr($,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 Uy$($,Z,X,Q){if(!Q.connectionId)throw new U_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new U_(_Z);await xO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:_Z;throw new U_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await yO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=T8$(F instanceof Error?F.message:String(F));throw N?new U_(U):F}),K=kh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await $B(H,KQ6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var KQ6=10485760,U_;var d51=w(()=>{P3();WP0();zp();Ed0();Ix();U_=class U_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function FQ6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!HQ6.test(Z))throw Error(`Invalid branch name: ${$}`)}function O_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(UQ6)])}function OQ6($,Z,X){let Q=O5($)[Z]?.[X];return!!Q&&Object.keys(jY(Q)).length>0}function B_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function vh($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=lr(Z,X);if(!Y)throw new J6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return KP0(Q,G.id,Y)}function m51($,Z){if(Z instanceof J6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,d5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,d5)}async function wy$($){try{let Z=await vh($),X=await jP0(Z,$.get("vmClaim").branch);return $.json(X,200,d5)}catch(Z){return m51($,Z)}}function dr($,Z){let Q=(PP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return PP0.set($,Y),Y.finally(()=>{if(PP0.get($)===Y)PP0.delete($)}),Q}async function cZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,d5);let Q=B_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...d5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?wQ6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...d5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function wQ6($){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 AP0($,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 DQ6($){return Dy$.includes($)}var HQ6,Oy$=524288,NQ6=65536,UQ6=1e4,By$=2000,BQ6,PP0,d5,Dy$,Ly$=()=>{let $=new U1;$.use("/:virtualMcpId/:branch/*",BQ6),$.post("/:virtualMcpId/:branch/write",(X)=>cZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>cZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>cZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>cZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>cZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>cZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:O_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>cZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:O_(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 cZ(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 cZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>cZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!DQ6(Q))return X.json({error:`step must be one of: ${Dy$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=lx(Y.virtualMcpMetadata);try{await OO0({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 cZ(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 ON(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 Ox$(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 wy$(X);return Z(X)});let Z=(X)=>cZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(By$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return wy$(X);return cZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(By$)])})}),$.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 vh(X),J=await zP0(G,Q.branch,Y.base);return X.json(J,200,d5)}catch(Y){return m51(X,Y)}return cZ(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,d5);let Q=B_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return dr(Y,async()=>{try{await I51(W,Q,Y);let K=lr(G,J);if(K)await Uy$(W,Q,Y,K)}catch(K){if(K instanceof U_)return X.json({error:K.message},403,d5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,d5)}return cZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return dr(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,d5);try{let J=await vh(X);return await Wy$(J,Q.branch,G),X.json({ok:!0},200,d5)}catch(J){let W=J instanceof J6&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,d5)}});return dr(Q.claimName,()=>cZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return dr(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await vh(X),H=W.base??await K.getDefaultBranch();return await Gy$(K,Q.branch,H,W.onConflict==="branch-wins"?"branch-wins":"fail"),X.json({ok:!0},200,d5)}catch(W){return m51(X,W)}});let Y=B_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return dr(G,async()=>{try{await I51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,d5)}return cZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",wZ({maxSize:Oy$,onError:(X)=>X.json({error:"Payload too large"},413,d5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=B_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=k51(F)&&U?[F,N]:Y?await Promise.all([AP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),AP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await vh(X);return Promise.all([jP0(L,Q.branch),zP0(L,Q.branch)])})(),D=await Ex$(K,O,B);return X.json(D,200,d5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,d5);return X.json({error:F},502,d5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",wZ({maxSize:Oy$,onError:(X)=>X.json({error:"Payload too large"},413,d5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=B_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=k51(F)&&U?[F,N]:Y?await Promise.all([AP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),AP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await vh(X);return Promise.all([jP0(L,Q.branch),zP0(L,Q.branch)])})(),D=await zx$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,d5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,d5);return X.json({error:F},502,d5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=B_(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=l51(`${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 F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",wZ({maxSize:NQ6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=B_(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=Hy$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Fy$(G,W.resolveType),H=l51(K),F;try{F=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 N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var Ey$=w(()=>{C8();Xw();Mh();R51();BF();Nx$();M3();lX();F8();LB0();rO();Ux$();Bx$();gi0();Ep();C51();Px$();f51();F_();Ky$();Ny$();d51();HQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;BQ6=JP0(async($,Z)=>{let X=$.var.studioContext;try{s(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=W1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{FQ6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=hi({orgId:Y.id,virtualMcpId:G,branch:J}),H=await RF(X,J,Q),F=Fx$({userId:H,projectRef:K}),N=W.metadata??null;if(u3$(N).fastPreviewCapability&&!OQ6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await tX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});PP0=new Map;d5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Dy$=["clone","install","start"]});function jy$($,Z,X){let Q=i51.get($);if(!Q)Q={pending:null,running:!1},i51.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)EQ6($,Q);return G}async function EQ6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await jQ6(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)i51.delete($)}}async function jQ6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await cr(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=u51(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=c51(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2764
|
-
`,j=await Z.createBlob(E);await Qy$(Z.owner,Z.repo,j,E);let z=L[0]??`${LP0(Q)}/${b51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of c51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=yr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:zQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof J6&&B.status===422)||Y>=LQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function zQ6($){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 Hd0(Q,$.deps.coAuthor)}var LQ6=3,i51;var zy$=w(()=>{GO0();FP0();t4();F_();EP0();i51=new Map});import{createHmac as Py$,randomBytes as PQ6,timingSafeEqual as AQ6}from"crypto";function Ay$(){if(TP0)return TP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return TP0=$?Buffer.from($):PQ6(32),TP0}function p51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+TQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Py$("sha256",Ay$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ty$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Py$("sha256",Ay$()).update(Q).digest("base64url"));if(Y.length!==G.length||!AQ6(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 TQ6=21600000,TP0=null;var Ry$=w(()=>{A$()});import{z as fh}from"zod";function IQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&RQ6.test($)}function qy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function RP0($){let Z=$.get("decofileScope");return KP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function IP0($,Z){if(Z instanceof J6){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 My$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Iy$),$.use("/:virtualMcpId/:branch/*",Iy$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(Z),Y=await Yy$(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=p51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(qy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return IP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=qQ6.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{HP0(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 RP0(Z),W=await jy$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:kh(Q)},G),K=p51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:qy$(Z)})}catch(J){return IP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(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 J6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof J6&&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 IP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(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 J6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return IP0(Z,Q)}}),$}var RQ6,qQ6,Iy$;var ky$=w(()=>{FP0();C8();R51();WP0();d51();f51();zy$();Ry$();F_();EP0();RQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;qQ6=fh.object({set:fh.record(fh.string(),fh.unknown()).optional(),delete:fh.array(fh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Iy$=JP0(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(!IQ6(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||!Ty$(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(!DB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=lr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Sy$=($)=>{let Z=new U1;if(Z.use("*",X_),Z.route("/",Tz0()),Z.route("/",a_$()),Z.route("/",ab$()),Z.route("/",tb$()),Z.route("/",QP0()),Z.route("/tools",Yx$()),Z.route("/",Zx$()),Z.route("/",Vb$({kvStorage:$.kvStorage})),Z.route("/",kb$()),Z.route("/fs",cb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ly$()),Z.route("/decofile",My$()),Z.route("/",ib$()),Z.route("/deco-sites",Iz0()),Z.route("/sso",Lz0()),Z.route("/",YP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",d_$()),$.mountDevAssets)Z.route("/dev-assets",qz0({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("/",MV$()),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",db$()),Z.route("/mcp",Cw0()),Z.route("/mcp/self",XP0()),Z.route("/mcp",fw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Vy$=w(()=>{C8();p41();m_$();r41();Mz0();Hr();m41();Sb$();Cb$();lb$();Ln();x41();bw0();L51();mb$();pb$();ob$();sb$();Xx$();j51();Gx$();z51();_w0();Ey$();ky$()});function MQ6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var kQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Cy$=()=>{let $=new U1;return $.use("*",kQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:MQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var _y$=w(()=>{C8();A$();Ij0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function gQ6($){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 hQ6($,Z,X){try{return JSON.parse($)}catch{throw new by$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function uQ6($){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:hQ6(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 cQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function lQ6($){if(!$)return;return{openai:{response_format:$}}}function dQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function vy$($,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 fy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var SQ6=256,VQ6,CQ6,_Q6,vQ6,fQ6,bQ6,xQ6,yQ6,by$,xy$,yy$;var gy$=w(()=>{C4();C8();Mh();nF();VQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),CQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),_Q6=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(CQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),vQ6=M1.object({type:M1.literal("text")}),fQ6=M1.object({type:M1.literal("json_object")}),bQ6=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()})}),xQ6=M1.union([vQ6,fQ6,bQ6]),yQ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(_Q6),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(VQ6).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:xQ6.optional(),user:M1.string().optional()});by$=class by$ extends Error{constructor($){super($);this.name="MessageConversionError"}};xy$=new U1;xy$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=yQ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=gQ6(G.model);if(!J)return $.json(tK("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)=>ED(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=uQ6(G.messages),U=G.tools?cQ6(G.tools):void 0,O=lQ6(G.response_format),B=dQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=vy$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=SQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:fy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.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=vy$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:fy$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});yy$=xy$});var uy$;var hy$=w(()=>{uy$={name:"decocms",version:"4.233.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function pQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??iQ6}}var cy$,iQ6="https://ph.studio.decocms.com",ly$;var dy$=w(()=>{C8();dg0();iV();r9();A$();C41();hy$();cy$=new U1;cy$.get("/",($)=>{let Z={version:uy$.version,theme:ll1(),...KL().logo&&{logo:KL().logo},...LK()&&{internalUrl:ES1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:J_$(),posthog:pQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ly$=cy$});function bh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function n51($){return(bh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function iy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(bh($))}&sz=${Z}`}function my$($,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 py$($){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()?my$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):my$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var w_,nQ6,tQ6,oQ6,rQ6,ny$;var ty$=w(()=>{w_=l0.enum(["good","bad","neutral"]),nQ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:w_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),tQ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(nQ6)),oQ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},rQ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:w_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:w_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:w_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:w_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(tQ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:w_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:w_.optional()})).min(1)})]),ny$=l0.object({...oQ6,template:rQ6})});function qP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ny$.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 t51=w(()=>{ty$()});import{join as oy$}from"path";async function sQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(aQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=qP0(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()||n51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function eQ6($,Z){let X=bh($),Q=Z?.brand?.trim()||n51(X),Y=iy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=py$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(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="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
|
|
2764
|
+
`,j=await Z.createBlob(E);await Qy$(Z.owner,Z.repo,j,E);let z=L[0]??`${LP0(Q)}/${b51(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of c51(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=yr(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:zQ6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof J6&&B.status===422)||Y>=LQ6-1)throw B;await I$(mZ(2000,200,Y,2,0.5))}}}function zQ6($){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 Hd0(Q,$.deps.coAuthor)}var LQ6=3,i51;var zy$=w(()=>{GO0();FP0();t4();F_();EP0();i51=new Map});import{createHmac as Py$,randomBytes as PQ6,timingSafeEqual as AQ6}from"crypto";function Ay$(){if(TP0)return TP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return TP0=$?Buffer.from($):PQ6(32),TP0}function p51($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+TQ6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Py$("sha256",Ay$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Ty$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Py$("sha256",Ay$()).update(Q).digest("base64url"));if(Y.length!==G.length||!AQ6(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 TQ6=21600000,TP0=null;var Ry$=w(()=>{A$()});import{z as fh}from"zod";function IQ6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&RQ6.test($)}function qy$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function RP0($){let Z=$.get("decofileScope");return KP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function IP0($,Z){if(Z instanceof J6){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 My$(){let $=new U1;return $.use("/:virtualMcpId/:branch",Iy$),$.use("/:virtualMcpId/:branch/*",Iy$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(Z),Y=await Yy$(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=p51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(qy$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return IP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=qQ6.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{HP0(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 RP0(Z),W=await jy$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:kh(Q)},G),K=p51({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:qy$(Z)})}catch(J){return IP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(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 J6&&G.status===409)return Z.json({error:"merge-conflict"},409);if(G instanceof J6&&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 IP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await RP0(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 J6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return IP0(Z,Q)}}),$}var RQ6,qQ6,Iy$;var ky$=w(()=>{FP0();C8();R51();WP0();d51();f51();zy$();Ry$();F_();EP0();RQ6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;qQ6=fh.object({set:fh.record(fh.string(),fh.unknown()).optional(),delete:fh.array(fh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Iy$=JP0(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(!IQ6(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||!Ty$(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(!DB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=lr(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Sy$=($)=>{let Z=new U1;if(Z.use("*",X_),Z.route("/",Tz0()),Z.route("/",a_$()),Z.route("/",ab$()),Z.route("/",tb$()),Z.route("/",QP0()),Z.route("/tools",Yx$()),Z.route("/",Zx$()),Z.route("/",Vb$({kvStorage:$.kvStorage})),Z.route("/",kb$()),Z.route("/fs",cb$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Ly$()),Z.route("/decofile",My$()),Z.route("/",ib$()),Z.route("/deco-sites",Iz0()),Z.route("/sso",Lz0()),Z.route("/",YP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",d_$()),$.mountDevAssets)Z.route("/dev-assets",qz0({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("/",MV$()),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",db$()),Z.route("/mcp",Cw0()),Z.route("/mcp/self",XP0()),Z.route("/mcp",fw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Vy$=w(()=>{C8();p41();m_$();r41();Mz0();Hr();m41();Sb$();Cb$();lb$();Ln();x41();bw0();L51();mb$();pb$();ob$();sb$();Xx$();j51();Gx$();z51();_w0();Ey$();ky$()});function MQ6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var kQ6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Cy$=()=>{let $=new U1;return $.use("*",kQ6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await uZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:MQ6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var _y$=w(()=>{C8();A$();Ij0()});import{z as M1}from"zod";function tK($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function gQ6($){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 hQ6($,Z,X){try{return JSON.parse($)}catch{throw new by$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function uQ6($){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:hQ6(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 cQ6($){let Z=$.map((X)=>{let Q=X.function.parameters?vY(X.function.parameters):vY({type:"object",properties:{}});return[X.function.name,f$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function lQ6($){if(!$)return;return{openai:{response_format:$}}}function dQ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function vy$($,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 fy$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var SQ6=256,VQ6,CQ6,_Q6,vQ6,fQ6,bQ6,xQ6,yQ6,by$,xy$,yy$;var gy$=w(()=>{C4();C8();Mh();nF();VQ6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),CQ6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),_Q6=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(CQ6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),vQ6=M1.object({type:M1.literal("text")}),fQ6=M1.object({type:M1.literal("json_object")}),bQ6=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()})}),xQ6=M1.union([vQ6,fQ6,bQ6]),yQ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(_Q6),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(VQ6).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:xQ6.optional(),user:M1.string().optional()});by$=class by$ extends Error{constructor($){super($);this.name="MessageConversionError"}};xy$=new U1;xy$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(tK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(tK("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(tK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=yQ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(tK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=gQ6(G.model);if(!J)return $.json(tK("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)=>ED(j.providerId));if(!E)return $.json(tK("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(tK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=uQ6(G.messages),U=G.tools?cQ6(G.tools):void 0,O=lQ6(G.response_format),B=dQ6(),D=Math.floor(Date.now()/1000);if(G.stream)return ON($,async(L)=>{let E=vy$(F,N,U,G,O,$.req.raw.signal);try{let j=fO(E),z=!1,A=0,P="",q=async()=>{if(P.length===0)return;let M=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:M},finish_reason:null}]})})};for await(let M of j.fullStream){if(!z&&(M.type==="text-delta"||M.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(M.type==="text-delta"){if(P+=M.text,P.length>=SQ6)await q()}else if(M.type==="tool-call"){await q();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:M.toolCallId,type:"function",function:{name:M.toolName,arguments:JSON.stringify(M.input)}}]},finish_reason:null}]})})}else if(M.type==="finish")await q(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:fy$(M.finishReason)}],usage:M.totalUsage?{prompt_tokens:M.totalUsage.inputTokens??0,completion_tokens:M.totalUsage.outputTokens??0,total_tokens:M.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=vy$(F,N,U,G,O,$.req.raw.signal),E=await _O(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:fy$(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(tK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(tK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(tK(Y.message,"server_error"),500)}});yy$=xy$});var uy$;var hy$=w(()=>{uy$={name:"decocms",version:"4.234.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function pQ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??iQ6}}var cy$,iQ6="https://ph.studio.decocms.com",ly$;var dy$=w(()=>{C8();dg0();iV();r9();A$();C41();hy$();cy$=new U1;cy$.get("/",($)=>{let Z={version:uy$.version,theme:ll1(),...KL().logo&&{logo:KL().logo},...LK()&&{internalUrl:ES1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:J_$(),posthog:pQ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!LK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ly$=cy$});function bh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function n51($){return(bh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function iy$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(bh($))}&sz=${Z}`}function my$($,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 py$($){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()?my$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):my$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var w_,nQ6,tQ6,oQ6,rQ6,ny$;var ty$=w(()=>{w_=l0.enum(["good","bad","neutral"]),nQ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:w_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),tQ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(nQ6)),oQ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},rQ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:w_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:w_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:w_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:w_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(tQ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:w_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:w_.optional()})).min(1)})]),ny$=l0.object({...oQ6,template:rQ6})});function qP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=ny$.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 t51=w(()=>{ty$()});import{join as oy$}from"path";async function sQ6($){try{let Z=await fetch(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(aQ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=qP0(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()||n51($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function XG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function eQ6($,Z){let X=bh($),Q=Z?.brand?.trim()||n51(X),Y=iy$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=py$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${XG(W)}</title>`,`<meta name="description" content="${XG(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="${XG(W)}" />`,`<meta property="og:description" content="${XG(K)}" />`,`<meta property="og:url" content="${XG(J)}" />`,`<meta property="og:image" content="${XG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${XG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${XG(W)}" />`,`<meta name="twitter:description" content="${XG(K)}" />`,`<meta name="twitter:image" content="${XG(H)}" />`,`<meta name="twitter:image:alt" content="${XG(F)}" />`,`<link rel="canonical" href="${XG(J)}" />`,`<link rel="icon" href="${XG(Y)}" sizes="any" />`].join(`
|
|
2765
2765
|
`)}function $Y6($,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}
|
|
2766
2766
|
</head>`)}function ry$($){let Z=new U1;return Z.get("/:domain/og.png",async(X)=>{let Q=bh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(oy$($,"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(`${lW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(ZY6)}),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=$?oy$($,"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 sQ6(bh(Q)),K=eQ6(Q,W);return X.html($Y6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var aQ6=2500,ZY6=1e4;var ay$=w(()=>{C8();t51();AL();A$()});function mr($,Z){return fetch(`${lW({})}${$}`,Z)}async function XY6($,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 mr(`/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}=qP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var QY6,wN,sy$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},ey$;var $g$=w(()=>{C8();xG();AL();t51();QY6=new Set(["complete","errored","terminated","unknown"]),wN=new U1;wN.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});wN.use("/link-token/*",sy$);wN.use("/suggest",sy$);wN.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 XY6(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)}});wN.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 mr("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PL({})}`},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)}});wN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await mr(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PL({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:QY6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});wN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await mr(`/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)}});wN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await mr(`/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:[]})}});ey$=wN});import{createHmac as YY6,timingSafeEqual as GY6}from"crypto";function Xg$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>JY6)return!1;let W=YY6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&GY6(K,F)})}function Qg$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=LJ(Z),Q=LJ(LJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:oK(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 Yg$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function oK($){return typeof $==="string"?$:void 0}function LJ($){return typeof $==="object"&&$!==null?$:void 0}function MP0($){return typeof $==="number"?new Date($*1000):null}function a51($){return oK($)??oK(LJ($)?.id)}function WY6($){return a51($.subscription)??oK(LJ(LJ($.parent)?.subscription_details)?.subscription)}function KY6($){let Z=MP0($.current_period_end);if(Z)return Z;let X=LJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=LJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function o51($,Z){let X=MP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function r51($,Z){let X=MP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function HY6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=oK(LJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(oK(LJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(oK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=oK(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(LJ(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:LJ(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(oK(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=a51(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(o51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:a51(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:r51(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=oK(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&&o51(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Yg$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:KY6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:r51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=WY6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(o51(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:MP0(X.period_end),lastStripeEventAt:r51(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function FY6($,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:Yg$(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 Zg$($,Z){let X=FY6($,Z);if(!X)return;RY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:rm1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Gg$($){let Z=new gW(m8().db),X=await HY6(Z,$);if(!(X.handled&&X.topUp))Zg$($,X);if(X.handled&&X.topUp)await BB$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Zg$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await Ha1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof VY&&(Q.status===400||Q.status===404)))throw Q}return X}var JY6=300;var Jg$=w(()=>{CG();q4();p40();CL();Ns0()});var NY6=1048576,s51;var Wg$=w(()=>{C8();Xw();A$();Jg$();s51=new U1;s51.post("/webhook",wZ({maxSize:NY6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Xg$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Qg$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Gg$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as UY6}from"crypto";function BY6($,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 UY6(Buffer.from(Y),Buffer.from(Q))}var OY6=5242880,e51;var Kg$=w(()=>{C8();Xw();wp();e51=new U1;e51.post("/webhook",wZ({maxSize:OY6,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(!BY6(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 _i0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Hg$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Fg$,wY6,DY6,Ng$;var Ug$=w(()=>{C8();Y3();Yy();Xx();Fg$=new U1,wY6=["range","if-none-match","if-modified-since"],DY6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Fg$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Hh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await pp(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&H3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Hg$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of wY6){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 $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of DY6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Hg$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Ng$=Fg$});var ir=C((D_)=>{var LY6=D_&&D_.__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]}),EY6=D_&&D_.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))LY6(Z,$,X)};Object.defineProperty(D_,"__esModule",{value:!0});EY6(KY(),D_)});var wg$=C((Og$)=>{Object.defineProperty(Og$,"__esModule",{value:!0});Og$.version=void 0;Og$.version="3.4.0"});var Eg$=C((rK)=>{var jY6=rK&&rK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(rK,"__esModule",{value:!0});rK.NodeTransport=rK.VERSION=void 0;rK.nodeResolveHost=IY6;var n6=ir(),zY6=z0("net"),$91=z0("tls"),PY6=z0("path"),Dg$=z0("fs"),AY6=jY6(z0("dns")),TY6=wg$();rK.VERSION=TY6.version;var RY6="nats.js";class Lg${socket;version;lang;yields=[];signal=(0,n6.deferred)();closedNotification=(0,n6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=RY6,this.version=rK.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,zY6.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,PY6.resolve)($),!(0,Dg$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Dg$.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,$91.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,$91.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 $91.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}}rK.NodeTransport=Lg$;function IY6($){let Z=(0,n6.deferred)();return AY6.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 Tg$=C((Ag$)=>{Object.defineProperty(Ag$,"__esModule",{value:!0});Ag$.connect=qY6;var jg$=Eg$(),zg$=ir(),Pg$=ir();function qY6($={}){if((0,Pg$.hasWsProtocol)($))return Promise.reject(Pg$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,zg$.setTransportFactory)({factory:()=>{return new jg$.NodeTransport},dnsResolveFn:jg$.nodeResolveHost}),zg$.NatsConnectionImpl.connect($)}});var Rg$=C((DN)=>{var kY6=DN&&DN.__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]}),SY6=DN&&DN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))kY6(Z,$,X)};Object.defineProperty(DN,"__esModule",{value:!0});DN.connect=void 0;var VY6=Tg$();Object.defineProperty(DN,"connect",{enumerable:!0,get:function(){return VY6.connect}});SY6(ir(),DN)});function kg$($){let Z=$?.connectFn??fY6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let 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 N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:vY6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=mZ(_Y6,CY6,B-1,2,0.5);await I$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Ig$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Mg$.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 fY6($){return qg$.connect($)}var Ig$,qg$,Mg$,CY6=100,_Y6=3000,vY6=3000;var Sg$=w(()=>{t4();Ig$=S(Ju(),1),qg$=S(Rg$(),1),Mg$=S(Iw(),1)});function Z91($,Z){return`${$}.${Z}`}class X91{cache;constructor($){this.cache=rg({ttlMs:$?.ttlMs??bY6,maxSize:$?.maxSize??xY6})}async get($,Z){return this.cache.get(Z91($,Z))??null}async set($,Z,X){this.cache.set(Z91($,Z),X)}async invalidate($,Z){this.cache.delete(Z91($,Z))}teardown(){this.cache.clear()}}var bY6=600000,xY6=5000;var Vg$=()=>{};function kP0($,Z){return`${$}:${Z}`}function Q91($){let Z=rg({ttlMs:$?.ttlMs??yY6,maxSize:$?.maxSize??gY6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Cg$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(kP0(K,H))},set(K,H,F){Z.set(kP0(K,H),F)},invalidate(K,H){Z.delete(kP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Cg$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(kP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Cg$="studio.ai-provider-keys.invalidate",yY6=30000,gY6=5000;var _g$=()=>{};class Y91{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=vg$.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 vg$)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 vg$;var fg$=w(()=>{vg$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var bg$=($)=>{let Z;return()=>Z??=$()},G91,J91;var xg$=w(()=>{f6();G91=bg$(()=>q$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),J91=bg$(()=>q$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function iY6(){return{name:bF,subjects:[`${oB0}.>`],storage:e3.StorageType.File,max_age:cY6,max_bytes:dY6,max_msgs_per_subject:mY6,discard:e3.DiscardPolicy.Old,retention:e3.RetentionPolicy.Limits,duplicate_window:lY6,num_replicas:1}}class hg${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 yg$($){let Z=gg$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function oY6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,uY6().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 rY6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class W91{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=iY6(),X=await m9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await e3.jetstreamManager($);try{await Q.streams.info(bF),await Q.streams.update(bF,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(bF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:rY6});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=oY6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=mK$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=Gt0(H,{runId:Z}),U=performance.now()-F;if(G91().record(U),J91().add(1,{"org.id":Q??"unknown"}),tY6?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?yg$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=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(),nY6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Gt0(Z,{runId:$,dedup:X});if(G91().record(performance.now()-Y),J91().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:yg$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=dK$({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"?e3.DeliverPolicy.New:e3.DeliverPolicy.All,G=X?.closeOnDone??!1,J=BB($),W;try{W=await(await Q.consumers.get(bF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=$w0({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(rB0()).pipeThrough(aB0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(bF,{filter:BB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var e3,gg$,hY6=($)=>{let Z;return()=>Z??=$()},uY6,cY6=86400000000000,lY6=120000000000,dY6=4294967296,mY6=500000,pY6,nY6,tY6;var ug$=w(()=>{t4();Jt0();Zw0();sB0();f6();xg$();e3=S(Iw(),1),gg$=S(Ju(),1),uY6=hY6(()=>q$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));pY6=process.env.STREAM_ENCODE_TRACE==="1",nY6=process.env.DECOPILOT_STREAM_TRACE==="1";tY6=pY6?new hg$:null});function SP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,PW(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 cg$=w(()=>{F8()});class K91{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 QG6($){return $ instanceof p7}function YG6($,Z){return Z-$>=ZG6}class H91{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??aY6;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??eY6,X=this.options.itemIntervalMs??sY6,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Wn0),it0);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()-XG6));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 Mn0(this.taskBoard,Y,Q),await kn0(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!==E4)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await xF(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),QG6(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()+$G6)).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(()=>{}),n8(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(!YG6(KF(X),Date.now()))return;await EK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===E4,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}if(await YF$(J,Q))return!0;if(!Y)return!1;let W=await Promise.all(G.map(async(K)=>({...K,...await Ey(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(!ct0(W))return!1;return await Ww0(J,Q,{previewMatchesHead:lt0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var aY6=60000,sY6=300000,eY6=50,$G6=60000,ZG6=900000,XG6=120000;var lg$=w(()=>{v9();vt0();wB();Un();A9();B3();pt0();zK();Jn()});import{readdir as GG6,rm as VP0}from"fs/promises";import{join as CP0}from"path";async function _P0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-JG6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await L_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await dg$($,Y,Z);else if(!Y.startsWith(".")){let G=CP0($,Y),J=await L_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await dg$(G,K,Z)}if((await L_(G)).length===0)await VP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function dg$($,Z,X){let Q=0,Y=CP0($,Z),G=await L_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=CP0(Y,W),H=await L_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=CP0(K,N);await VP0(O,{recursive:!0,force:!0}),Q++}}if((await L_(K)).length===0)await VP0(K,{recursive:!0,force:!0})}if((await L_(Y)).length===0)await VP0(Y,{recursive:!0,force:!0});return Q}async function L_($){try{return(await GG6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var JG6=30;var F91=()=>{};import{DBOS as N91,SchedulerMode as WG6}from"@dbos-inc/dbos-sdk";async function HG6(){let $=[AJ(),j_(),eK()],Z=0;for(let X of $)try{Z+=await _P0(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 FG6($,Z){await N91.runStep(()=>HG6(),{name:"monitoringRetention"})}function ig$(){if(mg$)return;mg$=!0;let $=N91.registerWorkflow(FG6,{name:"monitoringRetentionWorkflow"});N91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:KG6,mode:WG6.ExactlyOncePerIntervalWhenActive})}var KG6="23 4 * * *",mg$=!1;var pg$=w(()=>{YY();F91()});function ng$($){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 rG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await O41($.db,Z,Q.role);return Y.boundAuth=U41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new YL(X,void 0,Y.boundAuth,Q.role,"self"),DB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var tg$=w(()=>{GL();oV()});function NG6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function OG6(){for(let $ of UG6)$()}function og$($){let Z=[...U91.logs,$];U91={...U91,logs:Z.length>500?Z.slice(-500):Z},OG6()}function O91(){return BG6}var U91,UG6,BG6=!1;var B91=w(()=>{U91=NG6(),UG6=new Set});import{EventEmitter as wG6}from"events";var w91;var rg$=w(()=>{B91();w91=new wG6;w91.on("request",($)=>{og$($)})});function ag$(){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=xh(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>xh(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Q5.tool}${O}${Q5.dim}(${L})${Q5.reset}`}else if(U.method)G=`${Q5.dim}${xh(U.method)}${Q5.reset}`}}catch{}}let W=xh(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Q5.mcp}${xh(F.slice(0,12))}\u2026${Q5.reset}`}else if(Y==="/mcp")W=`${Q5.mcp}/mcp${Q5.reset}`;else if(Y==="/mcp/registry")W=`${Q5.mcp}/mcp/registry${Q5.reset}`;let K=LG6(Q),H=J?"\u25C0":"\u2190";if(!O91())console.log(`${Q5.dim}${H}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=DG6(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!O91())console.log(`${Q5.dim}${B}${Q5.reset} ${K}${Q}${Q5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Q5.reset} ${Q5.duration}${O}${Q5.reset}`);w91.emit("request",{method:Q,path:xh(Y),status:N,duration:F,timestamp:new Date})}}}var Q5,DG6=($)=>{if($>=500)return Q5.serverError;if($>=400)return Q5.clientError;if($>=300)return Q5.redirect;return Q5.ok},LG6=($)=>{return Q5[$]||Q5.reset},xh=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var sg$=w(()=>{B91();rg$();Q5={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 Xh$}from"crypto";import{mkdir as EG6,readdir as jG6,rm as eg$,stat as Qh$}from"fs/promises";import{join as L91,relative as zG6}from"path";import{z as j$}from"zod";function Gh$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return L91(PG6,Z)}function Jh$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function D91($,Z){let X=Gh$($),Q=Jh$(Z);return L91(X,Q)}function AG6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Xh$("sha256",Y).update(G).digest("hex")}function Zh$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=AG6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Jh$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Wh$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Xh$("md5","etag").update(Q).digest("hex")}"`}async function Kh$($,Z,X,Q,Y){try{let G=await jG6($,{withFileTypes:!0});for(let J of G){let W=L91($,J.name),H=zG6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Kh$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Qh$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Wh$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Hh$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:j$.object({prefix:j$.string().optional(),maxKeys:j$.number().optional().default(1000),continuationToken:j$.string().optional(),delimiter:j$.string().optional()}),outputSchema:j$.object({objects:j$.array(j$.object({key:j$.string(),size:j$.number(),lastModified:j$.string(),etag:j$.string()})),nextContinuationToken:j$.string().optional(),isTruncated:j$.boolean(),commonPrefixes:j$.array(j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Gh$(Q);await EG6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Kh$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({contentType:j$.string().optional(),contentLength:j$.number(),lastModified:j$.string(),etag:j$.string(),metadata:j$.record(j$.string(),j$.string()).optional()}),handler:async(Y)=>{let G=Y,J=D91(Q,G.key),W=await Qh$(J);return{contentType:s41(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Wh$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:j$.object({key:j$.string(),expiresIn:j$.number().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$h$;return{url:Zh$(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:j$.object({key:j$.string(),expiresIn:j$.number().optional(),contentType:j$.string().optional()}),outputSchema:j$.object({url:j$.string(),expiresIn:j$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??$h$;return{url:Zh$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:j$.object({key:j$.string()}),outputSchema:j$.object({success:j$.boolean(),key:j$.string()}),handler:async(Y)=>{let G=Y,J=D91(Q,G.key);try{return await eg$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:j$.object({keys:j$.array(j$.string()).max(1000)}),outputSchema:j$.object({deleted:j$.array(j$.string()),errors:j$.array(j$.object({key:j$.string(),message:j$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=D91(Q,K);try{await eg$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function E91($,Z,X){let Q=Hh$(Z,X),Y=new kW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:K5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:j$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:j$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new rX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),XJ(Y,G,$,"mcp:dev-assets")}async function Fh$($,Z,X,Q){let G=Hh$(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 PG6="./data/assets",$h$=3600,Yh$,Nh$;var Uh$=w(()=>{A$();Iy();C8();Vl();$C();VX();Mz0();Yh$=new U1;Yh$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return E91($.req.raw,Z,Q)});Nh$=Yh$});var Oh$={};N4(Oh$,{mountDevRoutes:()=>TG6});function TG6($,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 E91(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 Fh$(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",Nh$);let X=new U1;X.use("*",a3({mountPath:"/api/dev-assets"})),X.route("/",qz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Bh$=w(()=>{C8();i41();Mz0();Uh$()});import{sql as RG6}from"kysely";import{randomUUID as wh$}from"crypto";import{z as IG6}from"zod";async function MG6($){let Z=new Date().toISOString(),X=wh$(),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:wh$(),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 RG6`SELECT
|
|
2767
2767
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as C,F as ee,r as Y,j as i,B as se,L as pe,X as xe,Z as oe,b as D,o as he,$ as je,a0 as ve,e as le,p as ne,t as w,K as re,a3 as Se,G as ae,bY as _e,bZ as be,w as ye}from"./index-CMxZ_WIu.js";import{P as J}from"./index-D3DyocAK.js";import{A as ze,b as Ae}from"./alert-DKqVuc65.js";import{i as we}from"./XCircle-Bv0g8j3q.js";import{n as Ce}from"./LinkExternal01-BVTQ7Txc.js";import{s as Oe}from"./XClose-CdAk_TcD.js";import{u as De}from"./use-org-auth-client-CnC_ZcfG.js";import{u as Ne}from"./use-debounced-autosave-CSirrWhJ.js";import{A as Te}from"./avatar-Dxkbez_g.js";import{I as ce}from"./input-QUFhSscC.js";import{S as W,a as H,b as $,c as Fe}from"./settings-section-B50_pbBL.js";import{d as me,S as ke,a as Pe,b as Ee,c as $e}from"./select-CAAExvF2.js";import{S as Re}from"./skeleton-DaOsZD3E.js";import{A as ge,t as Ke,a_ as Me,a8 as Le,a5 as Ie,a$ as Ve}from"./agent-icon-CiNtbFvJ.js";import{a as qe,i as Be,f as Ge}from"./use-mcp-client-CVI7A81s.js";import{u as Ue}from"./use-virtual-mcp-BTWH3swd.js";import{b as Qe}from"./agent-capabilities-C4tLW0Za.js";import{f as Ze,i as Ye,u as We,j as de,b as He}from"./use-organization-settings-CpK185Z_.js";import{S as fe}from"./switch-Cq8T9YU6.js";import{i as Xe}from"./LayoutLeft-p8Yokts4.js";import{D as Je}from"./domain-settings-C-VZXkWu.js";import{u as et}from"./studio-tools-BKQiiGm_.js";import{c as tt,d as it,b as st,f as nt,g as ot,e as rt,a as at,A as lt}from"./alert-dialog-BnAEWNTS.js";import{R as ct}from"./require-capability-CFznm9Vo.js";import"./sidebar-BBjg9obt.js";import"./use-mobile-Doxs1lZc.js";import"./X-Bf4dZPNS.js";import"./tooltip-CCw2rc-N.js";import"./User01-Bdh9SztA.js";import"./card-DCdbjSt8.js";import"./ArrowUpRight-DkDf0SlM.js";import"./Check-CB1wWN-R.js";import"./ChevronDown-Bp5Bhuf2.js";import"./ChevronUp-BVjoCk50.js";import"./AlertCircle-DxhIVO8g.js";import"./Tool01-iPvLGmnY.js";import"./ArrowUp-DuZfapp-.js";import"./ArrowLeft-Ctr3YgRa.js";import"./Tool02-CE1JrXOr.js";import"./TrendUp01-D58MKe4H.js";import"./ZapSquare-CcpE9ru4.js";import"./Users03-DMeS8kai.js";import"./CheckCircle-Brg9nQLu.js";import"./ChevronRight-DtQMDvdA.js";import"./DotsVertical-DgYMlIqK.js";import"./Stars02-NsTZY1yi.js";import"./Copy01-BE6lBLyL.js";import"./CpuChip01-BzZVCktF.js";import"./CreditCard01-UKXGOiwR.js";import"./Globe01-DV0sA1fo.js";import"./Settings02-rME5QkSv.js";import"./Eye-A563EIve.js";import"./FilterLines-CujWJi10.js";import"./Share07-BB7t0OyK.js";import"./Star01-C2rjgGvG.js";import"./Globe04-JphLmdwi.js";import"./SwitchHorizontal01-Crz_Sn_d.js";import"./HardDrive-CwKpXkTd.js";import"./Key01-Bz0ywC7v.js";import"./LogOut01-C9MR6h34.js";import"./Monitor01-FmytUe2y.js";import"./Sun-qDRgeJdQ.js";import"./Palette-CdJ2ITyM.js";import"./Play-DmyxnVaR.js";import"./Plus-g_F7sl0h.js";import"./SearchLg-t8oKB9F9.js";import"./SearchMd-CkTq-ZRU.js";import"./Shield01-gWgEwZw2.js";import"./Stars01-DRCR0Q3e.js";import"./Trash01-HCUcswMa.js";import"./Upload01-Xse5pAaQ.js";import"./Users01-D6CpSEBQ.js";import"./Zap-BxaU0A48.js";import"./auth-DYv4QQwB.js";import"./badge-B4yWfrsj.js";import"./use-capability-DVlvH4nJ.js";import"./access-gate-BPZTU1dY.js";import"./capability-load-error-BIrLLyLV.js";function ue(e){return`connect-banner-dismissed:${e}`}function mt(e){if(typeof window>"u")return!0;try{return localStorage.getItem(ue(e))==="1"}catch{return!1}}function gt(){const e=C.c(17),{org:t}=ee();let s;e[0]!==t.id?(s=()=>mt(t.id),e[0]=t.id,e[1]=s):s=e[1];const[l,a]=Y.useState(s);if(l)return null;let c;e[2]!==t.id?(c=()=>{a(!0);try{localStorage.setItem(ue(t.id),"1")}catch{}},e[2]=t.id,e[3]=c):c=e[3];const r=c;let m;e[4]===Symbol.for("react.memo_cache_sentinel")?(m=i.jsx(Ce,{}),e[4]=m):m=e[4];let n;e[5]===Symbol.for("react.memo_cache_sentinel")?(n=i.jsx("span",{children:"Use Studio MCP anywhere — paste a command into Claude Code, Cursor, Codex, or any MCP client."}),e[5]=n):n=e[5];let u;e[6]!==t.slug?(u={org:t.slug},e[6]=t.slug,e[7]=u):u=e[7];let o;e[8]===Symbol.for("react.memo_cache_sentinel")?(o=i.jsx(we,{size:12}),e[8]=o):o=e[8];let d;e[9]!==u?(d=i.jsx(se,{asChild:!0,size:"sm",variant:"ghost",className:"text-xs gap-1",children:i.jsxs(pe,{to:"/$org/settings/connect",params:u,children:["Connect to clients ",o]})}),e[9]=u,e[10]=d):d=e[10];let g;e[11]===Symbol.for("react.memo_cache_sentinel")?(g=i.jsx(Oe,{size:14}),e[11]=g):g=e[11];let f;e[12]!==r?(f=i.jsx(se,{variant:"ghost",size:"icon",className:"size-7",onClick:r,"aria-label":"Dismiss",children:g}),e[12]=r,e[13]=f):f=e[13];let p;return e[14]!==d||e[15]!==f?(p=i.jsxs(ze,{variant:"info",className:"items-center",children:[m,i.jsxs(Ae,{className:"flex-1 flex items-center justify-between gap-2 text-sm",children:[n,i.jsxs("div",{className:"flex items-center gap-1 shrink-0",children:[d,f]})]})]}),e[14]=d,e[15]=f,e[16]=p):p=e[16],p}const dt=xe({name:oe().min(1,"Name is required").max(255,"Name is too long"),logo:oe().optional()});function ft(e){const t=C.c(17),{value:s,onChange:l,name:a,disabled:c}=e,r=D(),m=Y.useRef(null);let n;t[0]===Symbol.for("react.memo_cache_sentinel")?(n=()=>m.current?.click(),t[0]=n):n=t[0];const u=n;let o;t[1]!==l||t[2]!==r?(o=N=>{const h=N.target.files?.[0];if(!h)return;if(h.size>2097152){w.error(r("settings.organizationForm.imageTooLarge"));return}const j=new FileReader;j.onerror=()=>w.error(r("settings.organizationForm.failedToReadImage")),j.onloadend=()=>{j.result&&l(j.result),m.current&&(m.current.value="")},j.readAsDataURL(h)},t[1]=l,t[2]=r,t[3]=o):o=t[3];const d=o;let g;t[4]!==r?(g=r("settings.organizationForm.uploadLogoLabel"),t[4]=r,t[5]=g):g=t[5];let f;t[6]!==c||t[7]!==d?(f=i.jsx("input",{ref:m,type:"file",accept:"image/*",onChange:d,className:"hidden",disabled:c}),t[6]=c,t[7]=d,t[8]=f):f=t[8];const p=s||void 0,x=a??"?";let v;t[9]!==p||t[10]!==x?(v=i.jsx(Te,{url:p,fallback:x,shape:"square",size:"base"}),t[9]=p,t[10]=x,t[11]=v):v=t[11];let _;return t[12]!==c||t[13]!==g||t[14]!==f||t[15]!==v?(_=i.jsxs("button",{type:"button",onClick:u,disabled:c,className:"rounded-lg overflow-hidden hover:ring-2 hover:ring-border transition-all disabled:opacity-50","aria-label":g,children:[f,v]}),t[12]=c,t[13]=g,t[14]=f,t[15]=v,t[16]=_):_=t[16],_}function ut(){const e=D(),{org:t}=ee(),s=De(),l=he(),a=je({resolver:ve(dt),values:{name:t.name??"",logo:t.logo??""}}),c=le({mutationFn:async o=>{const d={name:o.name};o.logo&&(d.logo=o.logo);const g=await s.organization.update({data:d});if(g?.error)throw new Error(g.error.message||e("settings.organizationForm.failedToUpdateOrg"));return g},onSuccess:(o,d)=>{ne("organization_settings_updated",{organization_id:t.id,fields:Object.keys(d)}),l.invalidateQueries({queryKey:re.organizations()}),l.invalidateQueries({queryKey:re.activeOrganization(t.slug)}),w.success(e("settings.organizationForm.updateSuccess"))},onError:(o,d)=>{ne("organization_settings_update_failed",{organization_id:t.id,fields:Object.keys(d),error:o instanceof Error?o.message:String(o)}),w.error(o instanceof Error?o.message:e("settings.organizationForm.failedToUpdateOrg"))}}),{schedule:r,flush:m}=Ne({save:async()=>{const o=a.control._formState.dirtyFields;if(Object.keys(o).length===0||!await a.trigger())return;const g=a.getValues(),f=a.control._defaultValues;a.reset(g,{keepValues:!0});try{await c.mutateAsync(g)}catch{a.reset(f,{keepValues:!0})}}}),n=a.formState.errors,u=typeof window<"u"?`${window.location.host}/`:"";return i.jsx(W,{children:i.jsxs(H,{children:[i.jsx($,{title:e("settings.organizationForm.logoTitle"),description:e("settings.organizationForm.logoDescription"),action:i.jsx(ft,{value:a.watch("logo"),onChange:o=>{a.setValue("logo",o??"",{shouldDirty:!0}),m()},name:a.watch("name")})}),i.jsx($,{title:e("settings.organizationForm.nameTitle"),action:i.jsx(Se,{control:a.control,name:"name",render:({field:o})=>i.jsx(ce,{id:"org-name",...o,onChange:d=>{o.onChange(d),r()},onBlur:()=>{o.onBlur(),m()},placeholder:e("settings.organizationForm.namePlaceholder"),className:"w-[280px]"})})}),i.jsx($,{title:e("settings.organizationForm.urlTitle"),description:e("settings.organizationForm.urlDescription"),action:i.jsxs("div",{className:"flex items-center w-[280px] rounded-md border border-input bg-muted/40 overflow-hidden",children:[u&&i.jsx("span",{className:"pl-3 text-sm text-muted-foreground select-none",children:u}),i.jsx("span",{className:"flex-1 min-w-0 px-2 py-1.5 text-sm text-foreground truncate",children:t.slug})]})}),(n.name||n.logo)&&i.jsxs("div",{className:"px-5 pb-3 flex flex-col gap-1",children:[n.name&&i.jsx("p",{className:"text-xs text-destructive",children:n.name.message}),n.logo&&i.jsx("p",{className:"text-xs text-destructive",children:n.logo.message})]})]})})}const ie="__super_agent__";function pt(){const e=C.c(42),t=D(),{org:s}=ee(),l=Ue(),{mainAgentId:a}=Ze(),c=Ye();let r,m,n,u,o,d,g,f;if(e[0]!==l||e[1]!==a||e[2]!==s.id||e[3]!==c||e[4]!==t){const v=Qe(l),_=(l??[]).filter(jt).filter(S=>!v.has(S.id)).filter(ht);let N;e[13]!==s.id?(N=qe(s.id),e[13]=s.id,e[14]=N):N=e[14];const h=N,j=a!=null?(l??[]).find(S=>S.id===a):void 0,T=j?j.id:ie,F=j&&!_.some(S=>S.id===j.id)?[j,..._]:_;let O;e[15]!==l||e[16]!==c||e[17]!==h.title||e[18]!==t?(O=S=>{const A=S===ie?null:S,R=A===null?h.title:(l??[]).find(P=>P.id===A)?.title??"";c.mutate(A,{onSuccess:()=>w.success(A===null?t("settings.mainAgent.resetToast"):t("settings.mainAgent.setToast",{title:R})),onError:()=>w.error(t("settings.mainAgent.errorToast"))})},e[15]=l,e[16]=c,e[17]=h.title,e[18]=t,e[19]=O):O=e[19];const k=O;m=ke,o=T,d=k,g=c.isPending,e[20]===Symbol.for("react.memo_cache_sentinel")?(f=i.jsx(Pe,{className:"w-full sm:w-[280px]",children:i.jsx(Ee,{})}),e[20]=f):f=e[20],r=$e;let b;e[21]!==h.icon||e[22]!==h.title?(b=i.jsx(ge,{icon:h.icon,name:h.title,size:"xs",className:"shrink-0"}),e[21]=h.icon,e[22]=h.title,e[23]=b):b=e[23];let y;e[24]!==t?(y=t("settings.mainAgent.superAgentOption"),e[24]=t,e[25]=y):y=e[25];let z;e[26]!==y?(z=i.jsx("span",{className:"truncate",children:y}),e[26]=y,e[27]=z):z=e[27],e[28]!==z||e[29]!==b?(n=i.jsx(me,{value:ie,children:i.jsxs("span",{className:"flex items-center gap-2",children:[b,z]})}),e[28]=z,e[29]=b,e[30]=n):n=e[30],u=F.map(xt),e[0]=l,e[1]=a,e[2]=s.id,e[3]=c,e[4]=t,e[5]=r,e[6]=m,e[7]=n,e[8]=u,e[9]=o,e[10]=d,e[11]=g,e[12]=f}else r=e[5],m=e[6],n=e[7],u=e[8],o=e[9],d=e[10],g=e[11],f=e[12];let p;e[31]!==r||e[32]!==n||e[33]!==u?(p=i.jsxs(r,{children:[n,u]}),e[31]=r,e[32]=n,e[33]=u,e[34]=p):p=e[34];let x;return e[35]!==m||e[36]!==o||e[37]!==d||e[38]!==g||e[39]!==f||e[40]!==p?(x=i.jsxs(m,{value:o,onValueChange:d,disabled:g,children:[f,p]}),e[35]=m,e[36]=o,e[37]=d,e[38]=g,e[39]=f,e[40]=p,e[41]=x):x=e[41],x}function xt(e){return i.jsx(me,{value:e.id,children:i.jsxs("span",{className:"flex items-center gap-2",children:[i.jsx(ge,{icon:e.icon,name:e.title,size:"xs",className:"shrink-0"}),i.jsx("span",{className:"truncate",children:e.title})]})},e.id)}function ht(e){return!Ge(e.id)}function jt(e){return!Be(e.id)}function vt(){const e=C.c(16),t=D();let s;e[0]!==t?(s=t("settings.mainAgent.title"),e[0]=t,e[1]=s):s=e[1];let l;e[2]!==t?(l=t("settings.mainAgent.description"),e[2]=t,e[3]=l):l=e[3];let a;e[4]!==t?(a=t("settings.mainAgent.itemTitle"),e[4]=t,e[5]=a):a=e[5];let c;e[6]!==t?(c=t("settings.mainAgent.itemDescription"),e[6]=t,e[7]=c):c=e[7];let r;e[8]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(Y.Suspense,{fallback:i.jsx(Re,{className:"h-9 w-[280px]"}),children:i.jsx(pt,{})}),e[8]=r):r=e[8];let m;e[9]!==a||e[10]!==c?(m=i.jsx(H,{children:i.jsx($,{title:a,description:c,action:r})}),e[9]=a,e[10]=c,e[11]=m):m=e[11];let n;return e[12]!==s||e[13]!==l||e[14]!==m?(n=i.jsx(W,{title:s,description:l,children:m}),e[12]=s,e[13]=l,e[14]=m,e[15]=n):n=e[15],n}function St(){const e=C.c(12),t=D();let s;e[0]!==t?(s=t("settings.review.title"),e[0]=t,e[1]=s):s=e[1];let l;e[2]!==t?(l=t("settings.review.description"),e[2]=t,e[3]=l):l=e[3];let a;e[4]===Symbol.for("react.memo_cache_sentinel")?(a=i.jsx(Z,{flag:"qa_agent_enabled",icon:i.jsx(Ke,{size:16}),titleKey:"settings.review.qaAgentTitle",descriptionKey:"settings.review.qaAgentDescription"}),e[4]=a):a=e[4];let c;e[5]===Symbol.for("react.memo_cache_sentinel")?(c=i.jsx(Z,{flag:"code_reviewer_enabled",icon:i.jsx(Me,{size:16}),titleKey:"settings.review.codeReviewerTitle",descriptionKey:"settings.review.codeReviewerDescription"}),e[5]=c):c=e[5];let r;e[6]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(Z,{flag:"cheap_reviewer_model",icon:i.jsx(Le,{size:16}),titleKey:"settings.review.cheapReviewerModelTitle",descriptionKey:"settings.review.cheapReviewerModelDescription"}),e[6]=r):r=e[6];let m;e[7]===Symbol.for("react.memo_cache_sentinel")?(m=i.jsx(Z,{flag:"auto_merge",icon:i.jsx(Ie,{size:16}),titleKey:"settings.review.autoMergeTitle",descriptionKey:"settings.review.autoMergeDescription"}),e[7]=m):m=e[7];let n;e[8]===Symbol.for("react.memo_cache_sentinel")?(n=i.jsxs(H,{children:[a,c,r,m,i.jsx(Z,{flag:"auto_assign_report_tasks_to_super_agent",icon:i.jsx(Ve,{size:16}),titleKey:"settings.review.autoAssignReportTasksTitle",descriptionKey:"settings.review.autoAssignReportTasksDescription"})]}),e[8]=n):n=e[8];let u;return e[9]!==s||e[10]!==l?(u=i.jsx(W,{title:s,description:l,children:n}),e[9]=s,e[10]=l,e[11]=u):u=e[11],u}function Z(e){const t=C.c(23),{flag:s,icon:l,titleKey:a,descriptionKey:c}=e,r=D(),m=We(s),n=de();let u;t[0]!==r||t[1]!==a?(u=r(a),t[0]=r,t[1]=a,t[2]=u):u=t[2];let o;t[3]!==c||t[4]!==r?(o=r(c),t[3]=c,t[4]=r,t[5]=o):o=t[5];const d=n.isPending;let g;t[6]!==r||t[7]!==a?(g=r(a),t[6]=r,t[7]=a,t[8]=g):g=t[8];let f;t[9]!==s||t[10]!==n||t[11]!==r?(f=v=>n.mutate(s,v,{onError:()=>w.error(r("settings.review.updateError"))}),t[9]=s,t[10]=n,t[11]=r,t[12]=f):f=t[12];let p;t[13]!==m||t[14]!==n.isPending||t[15]!==g||t[16]!==f?(p=i.jsx(fe,{checked:m,disabled:d,"aria-label":g,onCheckedChange:f}),t[13]=m,t[14]=n.isPending,t[15]=g,t[16]=f,t[17]=p):p=t[17];let x;return t[18]!==l||t[19]!==u||t[20]!==o||t[21]!==p?(x=i.jsx($,{icon:l,title:u,description:o,action:p}),t[18]=l,t[19]=u,t[20]=o,t[21]=p,t[22]=x):x=t[22],x}function _t(){const e=C.c(27),t=D(),s=He(),l=de();let a;e[0]!==t?(a=t("settings.navigation.title"),e[0]=t,e[1]=a):a=e[1];let c;e[2]!==t?(c=t("settings.navigation.description"),e[2]=t,e[3]=c):c=e[3];let r;e[4]===Symbol.for("react.memo_cache_sentinel")?(r=i.jsx(Xe,{size:16}),e[4]=r):r=e[4];let m;e[5]!==t?(m=t("settings.navigation.navV2Title"),e[5]=t,e[6]=m):m=e[6];let n;e[7]!==t?(n=t("settings.navigation.navV2Description"),e[7]=t,e[8]=n):n=e[8];const u=l.isPending;let o;e[9]!==t?(o=t("settings.navigation.navV2Title"),e[9]=t,e[10]=o):o=e[10];let d;e[11]!==l||e[12]!==t?(d=x=>l.mutate("nav_v2",x,{onError:()=>w.error(t("settings.navigation.updateError"))}),e[11]=l,e[12]=t,e[13]=d):d=e[13];let g;e[14]!==s||e[15]!==l.isPending||e[16]!==o||e[17]!==d?(g=i.jsx(fe,{checked:s,disabled:u,"aria-label":o,onCheckedChange:d}),e[14]=s,e[15]=l.isPending,e[16]=o,e[17]=d,e[18]=g):g=e[18];let f;e[19]!==m||e[20]!==n||e[21]!==g?(f=i.jsx(H,{children:i.jsx($,{icon:r,title:m,description:n,action:g})}),e[19]=m,e[20]=n,e[21]=g,e[22]=f):f=e[22];let p;return e[23]!==a||e[24]!==c||e[25]!==f?(p=i.jsx(W,{title:a,description:c,children:f}),e[23]=a,e[24]=c,e[25]=f,e[26]=p):p=e[26],p}function bt(){const e=C.c(86),t=D(),{org:s}=ee(),[l,a]=Y.useState(!1),[c,r]=Y.useState(""),m=et();let n;e[0]!==s.id||e[1]!==m?(n=async()=>{await m.call("ORGANIZATION_DELETE",{id:s.id})},e[0]=s.id,e[1]=m,e[2]=n):n=e[2];let u;e[3]!==s.id||e[4]!==s.slug||e[5]!==t?(u=()=>{ne("organization_deleted",{organization_id:s.id}),localStorage.getItem(ae.lastOrgSlug())===s.slug&&localStorage.removeItem(ae.lastOrgSlug()),_e()?.org===s.slug&&be(),ye(),w.success(t("settings.deleteOrganizationSection.organizationDeleted")),window.location.href="/"},e[3]=s.id,e[4]=s.slug,e[5]=t,e[6]=u):u=e[6];let o;e[7]!==t?(o=E=>{w.error(E instanceof Error?E.message:t("settings.deleteOrganizationSection.failedToDeleteOrganization"))},e[7]=t,e[8]=o):o=e[8];let d;e[9]!==n||e[10]!==u||e[11]!==o?(d={mutationFn:n,onSuccess:u,onError:o},e[9]=n,e[10]=u,e[11]=o,e[12]=d):d=e[12];const g=le(d);let f;e[13]!==t?(f=t("settings.deleteOrganizationSection.dangerZone"),e[13]=t,e[14]=f):f=e[14];let p;e[15]!==t?(p=t("settings.deleteOrganizationSection.irreversibleActionsDescription"),e[15]=t,e[16]=p):p=e[16];let x;e[17]!==t?(x=t("settings.deleteOrganizationSection.deleteOrganizationTitle"),e[17]=t,e[18]=x):x=e[18];let v;e[19]!==t?(v=t("settings.deleteOrganizationSection.deleteOrganizationDescription"),e[19]=t,e[20]=v):v=e[20];let _;e[21]===Symbol.for("react.memo_cache_sentinel")?(_=()=>a(!0),e[21]=_):_=e[21];const N=g.isPending;let h;e[22]!==t?(h=t("settings.deleteOrganizationSection.deleteButton"),e[22]=t,e[23]=h):h=e[23];let j;e[24]!==g.isPending||e[25]!==h?(j=i.jsx(se,{variant:"destructive",size:"sm",onClick:_,disabled:N,children:h}),e[24]=g.isPending,e[25]=h,e[26]=j):j=e[26];let T;e[27]!==j||e[28]!==x||e[29]!==v?(T=i.jsx(H,{className:"border-destructive/40",children:i.jsx($,{title:x,description:v,action:j})}),e[27]=j,e[28]=x,e[29]=v,e[30]=T):T=e[30];let F;e[31]!==T||e[32]!==f||e[33]!==p?(F=i.jsx(W,{title:f,description:p,children:T}),e[31]=T,e[32]=f,e[33]=p,e[34]=F):F=e[34];let O;e[35]===Symbol.for("react.memo_cache_sentinel")?(O=E=>{a(E),E||r("")},e[35]=O):O=e[35];let k;e[36]!==t?(k=t("settings.deleteOrganizationSection.deleteOrganizationQuestion"),e[36]=t,e[37]=k):k=e[37];let b;e[38]!==k?(b=i.jsx(tt,{children:k}),e[38]=k,e[39]=b):b=e[39];let y;e[40]!==s.name||e[41]!==t?(y=t("settings.deleteOrganizationSection.deleteWarning",{organizationName:s.name}),e[40]=s.name,e[41]=t,e[42]=y):y=e[42];let z;e[43]!==y?(z=i.jsx("p",{children:y}),e[43]=y,e[44]=z):z=e[44];let S;e[45]!==s.name||e[46]!==t?(S=t("settings.deleteOrganizationSection.typeToConfirm",{organizationName:s.name}),e[45]=s.name,e[46]=t,e[47]=S):S=e[47];let A;e[48]!==S?(A=i.jsx("p",{className:"mt-3 mb-1.5",children:S}),e[48]=S,e[49]=A):A=e[49];let R;e[50]===Symbol.for("react.memo_cache_sentinel")?(R=E=>r(E.target.value),e[50]=R):R=e[50];let P;e[51]!==c||e[52]!==s.name?(P=i.jsx(ce,{value:c,onChange:R,placeholder:s.name,autoFocus:!0}),e[51]=c,e[52]=s.name,e[53]=P):P=e[53];let K;e[54]!==z||e[55]!==A||e[56]!==P?(K=i.jsx(it,{asChild:!0,children:i.jsxs("div",{children:[z,A,P]})}),e[54]=z,e[55]=A,e[56]=P,e[57]=K):K=e[57];let M;e[58]!==b||e[59]!==K?(M=i.jsxs(st,{children:[b,K]}),e[58]=b,e[59]=K,e[60]=M):M=e[60];let L;e[61]!==t?(L=t("settings.deleteOrganizationSection.cancel"),e[61]=t,e[62]=L):L=e[62];let I;e[63]!==L?(I=i.jsx(nt,{children:L}),e[63]=L,e[64]=I):I=e[64];let V;e[65]!==g?(V=()=>g.mutate(),e[65]=g,e[66]=V):V=e[66];const te=c!==s.name||g.isPending;let q;e[67]!==g.isPending||e[68]!==t?(q=g.isPending?t("settings.deleteOrganizationSection.deleting"):t("settings.deleteOrganizationSection.deleteOrganizationAction"),e[67]=g.isPending,e[68]=t,e[69]=q):q=e[69];let B;e[70]!==V||e[71]!==te||e[72]!==q?(B=i.jsx(ot,{onClick:V,disabled:te,className:"bg-destructive text-destructive-foreground hover:bg-destructive/90 disabled:opacity-50",children:q}),e[70]=V,e[71]=te,e[72]=q,e[73]=B):B=e[73];let G;e[74]!==I||e[75]!==B?(G=i.jsxs(rt,{children:[I,B]}),e[74]=I,e[75]=B,e[76]=G):G=e[76];let U;e[77]!==M||e[78]!==G?(U=i.jsxs(at,{children:[M,G]}),e[77]=M,e[78]=G,e[79]=U):U=e[79];let Q;e[80]!==l||e[81]!==U?(Q=i.jsx(lt,{open:l,onOpenChange:O,children:U}),e[80]=l,e[81]=U,e[82]=Q):Q=e[82];let X;return e[83]!==F||e[84]!==Q?(X=i.jsxs(i.Fragment,{children:[F,Q]}),e[83]=F,e[84]=Q,e[85]=X):X=e[85],X}function yt(){const e=C.c(13),t=D();let s;e[0]!==t?(s=t("settings.orgGeneral.organization"),e[0]=t,e[1]=s):s=e[1];let l;e[2]!==s?(l=i.jsx(J.Title,{children:s}),e[2]=s,e[3]=l):l=e[3];let a,c,r,m,n,u,o;e[4]===Symbol.for("react.memo_cache_sentinel")?(a=i.jsx(gt,{}),c=i.jsx(ut,{}),r=i.jsx(vt,{}),m=i.jsx(St,{}),n=i.jsx(_t,{}),u=i.jsx(Je,{}),o=i.jsx(bt,{}),e[4]=a,e[5]=c,e[6]=r,e[7]=m,e[8]=n,e[9]=u,e[10]=o):(a=e[4],c=e[5],r=e[6],m=e[7],n=e[8],u=e[9],o=e[10]);let d;return e[11]!==l?(d=i.jsx(J,{children:i.jsx(J.Content,{children:i.jsx(J.Body,{children:i.jsxs(Fe,{children:[l,a,c,r,m,n,u,o]})})})}),e[11]=l,e[12]=d):d=e[12],d}function Zi(){const e=C.c(1);let t;return e[0]===Symbol.for("react.memo_cache_sentinel")?(t=i.jsx(ct,{capability:"org:manage",area:"general settings",children:i.jsx(yt,{})}),e[0]=t):t=e[0],t}export{Zi as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as L,b as A,j as r}from"./index-CMxZ_WIu.js";import{I as R}from"./input-QUFhSscC.js";import{L as I}from"./label-D9i9PU0s.js";import{S as V,a as z,b as J,c as O,d as D}from"./select-CAAExvF2.js";import{T as M}from"./textarea-DSK0cmwf.js";import{T as U,U as X,V as $,J as q,X as G,a0 as H}from"./index-RxUskJ2D.js";import{s as F}from"./primitives-D5_Ictax.js";import{u as Q}from"./use-autosave-Db4jyDfO.js";import"./tooltip-CCw2rc-N.js";import"./Check-CB1wWN-R.js";import"./ChevronDown-Bp5Bhuf2.js";import"./ChevronUp-BVjoCk50.js";import"./ArrowUp-DuZfapp-.js";import"./chat-context-BuWQJAhV.js";import"./tab-id-Dz9GTS6m.js";import"./dialog-D5JeNWji.js";import"./X-Bf4dZPNS.js";import"./Copy01-BE6lBLyL.js";import"./hooks-BwXOucYx.js";import"./use-mcp-client-CVI7A81s.js";import"./auth-DYv4QQwB.js";import"./decopilot-sse-pool-PDts66Cw.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BTWH3swd.js";import"./use-ai-providers-CMHb8eeO.js";import"./studio-tools-BKQiiGm_.js";import"./use-decopilot-events-DICjmIrV.js";import"./use-organization-settings-CpK185Z_.js";import"./automation-runs-_EfKEIfo.js";import"./agent-icon-CiNtbFvJ.js";import"./AlertCircle-DxhIVO8g.js";import"./Tool01-iPvLGmnY.js";import"./ArrowLeft-Ctr3YgRa.js";import"./Tool02-CE1JrXOr.js";import"./XCircle-Bv0g8j3q.js";import"./ArrowUpRight-DkDf0SlM.js";import"./TrendUp01-D58MKe4H.js";import"./ZapSquare-CcpE9ru4.js";import"./Users03-DMeS8kai.js";import"./CheckCircle-Brg9nQLu.js";import"./ChevronRight-DtQMDvdA.js";import"./DotsVertical-DgYMlIqK.js";import"./Stars02-NsTZY1yi.js";import"./CpuChip01-BzZVCktF.js";import"./CreditCard01-UKXGOiwR.js";import"./Globe01-DV0sA1fo.js";import"./Settings02-rME5QkSv.js";import"./Eye-A563EIve.js";import"./FilterLines-CujWJi10.js";import"./Share07-BB7t0OyK.js";import"./Star01-C2rjgGvG.js";import"./Globe04-JphLmdwi.js";import"./SwitchHorizontal01-Crz_Sn_d.js";import"./HardDrive-CwKpXkTd.js";import"./Key01-Bz0ywC7v.js";import"./LayoutLeft-p8Yokts4.js";import"./LinkExternal01-BVTQ7Txc.js";import"./LogOut01-C9MR6h34.js";import"./Monitor01-FmytUe2y.js";import"./Sun-qDRgeJdQ.js";import"./Palette-CdJ2ITyM.js";import"./Play-DmyxnVaR.js";import"./Plus-g_F7sl0h.js";import"./SearchLg-t8oKB9F9.js";import"./SearchMd-CkTq-ZRU.js";import"./Shield01-gWgEwZw2.js";import"./Stars01-DRCR0Q3e.js";import"./Trash01-HCUcswMa.js";import"./Upload01-Xse5pAaQ.js";import"./User01-Bdh9SztA.js";import"./Users01-D6CpSEBQ.js";import"./XClose-CdAk_TcD.js";import"./Zap-BxaU0A48.js";import"./useInfiniteQuery-Bn8GtXSi.js";import"./use-infinite-scroll-n_k4dNsE.js";import"./use-connection-BOd54lqQ.js";import"./card-DCdbjSt8.js";import"./sidebar-BBjg9obt.js";import"./use-mobile-Doxs1lZc.js";import"./table-DuJxV7wG.js";import"./empty-state-CUpJlnEP.js";import"./use-members-Cn0TjDfQ.js";import"./use-org-auth-client-CnC_ZcfG.js";import"./use-clock-tick-C2aXJbpO.js";import"./use-automations-D281hCxS.js";import"./useSuspenseInfiniteQuery-Bf9gAUxG.js";import"./avatar-Dxkbez_g.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DvraSgSy.js";import"./monaco-editor-J99MCaCo.js";import"./spinner-BiEgTK64.js";import"./types-Bbiq9OF8.js";import"./shell-layout-BzDcxKu_.js";import"./required-auth-layout-DDKLgrCs.js";import"./use-org-sso-Cibpu5jE.js";import"./integration-icon-LCPobrom.js";import"./use-navigate-to-agent-5MjWsTRH.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-DoWHmsjN.js";import"./index-DLKO9DR4.js";import"./form-BnBmIKdR.js";import"./file-type-icon-2Oy3oZAr.js";import"./drawer-DZB9Ayaq.js";import"./collection-search-DWHmJRTZ.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-DDz-V64-.js";import"./toggle-group-B-0po5Sm.js";import"./use-commerce-diagnostic-BkAPEKGQ.js";import"./popover-Ci4_tWvA.js";import"./self-tool-result-BCMn3-y-.js";import"./alert-dialog-BnAEWNTS.js";import"./extract-connection-data-HB0f7VhS.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-DT4rx-xW.js";import"./authenticate-and-persist-oauth-CFZPtaIU.js";import"./mcp-oauth-CB0oVlt7.js";import"./track-C_gZtHW2.js";import"./toolbar-BkeZkPG6.js";import"./skeleton-DaOsZD3E.js";import"./github-repo-picker-gMQ7jslJ.js";import"./use-mcp-tools-CzrK_N4T.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-CYYHOn8G.js";import"./use-registry-connections-C-CW_lkr.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-DD1440zT.js";import"./collection-tabs--RWCnegb.js";import"./badge-B4yWfrsj.js";import"./command-DpQjUH7C.js";import"./index-BVIvC2zN.js";import"./use-open-billing-url-B-ct7bqk.js";import"./select-model-COi00Qc2.js";import"./checkbox-Cj6-6z11.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-B50_pbBL.js";import"./cards-03SBwODD.js";import"./dropdown-menu-DGab5gGv.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-CPMNTf96.js";import"./use-capability-DVlvH4nJ.js";import"./use-file-configs-kjM_f61B.js";import"./pt-BR-CLy76QW2.js";import"./switch-Cq8T9YU6.js";import"./use-debounced-autosave-CSirrWhJ.js";import"./index-D3DyocAK.js";import"./search-input-B3HainHg.js";import"./index-Bmx5aP9S.js";import"./use-secrets-M_k0-nDT.js";import"./AreaChart-BcI5eQFQ.js";import"./use-tags-D0LzO9P6.js";import"./get-initials-D-f_fDFw.js";import"./automation-list-row-D4ePqY_K.js";const W={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 Hr(C){const t=L.c(40),{orgSlug:K,virtualMcpId:h,branch:w,kind:a,blockKey:g,block:f}=C,i=A(),P=U(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=X(b);let k;t[5]!==f||t[6]!==a?(k=$(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=W[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(V,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(z,{id:o.key,className:"h-10 w-full",children:r.jsx(J,{placeholder:i(o.labelKey)})}),r.jsx(O,{children:(o.options??[]).map(m=>r.jsx(D,{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(M,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(R,{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{Hr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DYbhPHER.js","assets/index-CMxZ_WIu.js","assets/index-BX7x5P5r.css","assets/Tool02-CE1JrXOr.js","assets/CheckCircle-Brg9nQLu.js","assets/Settings02-rME5QkSv.js","assets/use-mcp-client-CVI7A81s.js","assets/auth-DYv4QQwB.js","assets/useInfiniteQuery-Bn8GtXSi.js","assets/use-infinite-scroll-n_k4dNsE.js","assets/studio-tools-BKQiiGm_.js","assets/badge-B4yWfrsj.js","assets/input-QUFhSscC.js","assets/dropdown-menu-DGab5gGv.js","assets/Check-CB1wWN-R.js","assets/ChevronRight-DtQMDvdA.js","assets/DotsVertical-DgYMlIqK.js","assets/table-DuJxV7wG.js","assets/toggle-group-B-0po5Sm.js","assets/use-view-mode-DjVTG-K-.js","assets/use-mobile-Doxs1lZc.js","assets/FilterLines-CujWJi10.js","assets/Globe01-DV0sA1fo.js","assets/SearchMd-CkTq-ZRU.js","assets/dialog-D5JeNWji.js","assets/X-Bf4dZPNS.js","assets/AlertCircle-DxhIVO8g.js","assets/Upload01-Xse5pAaQ.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BnAEWNTS.js","assets/card-DCdbjSt8.js","assets/Trash01-HCUcswMa.js","assets/label-D9i9PU0s.js","assets/select-CAAExvF2.js","assets/tooltip-CCw2rc-N.js","assets/ChevronDown-Bp5Bhuf2.js","assets/ChevronUp-BVjoCk50.js","assets/switch-Cq8T9YU6.js","assets/textarea-DSK0cmwf.js","assets/ArrowLeft-Ctr3YgRa.js","assets/XCircle-Bv0g8j3q.js","assets/checkbox-Cj6-6z11.js","assets/Eye-A563EIve.js","assets/LinkExternal01-BVTQ7Txc.js","assets/use-copy-DvraSgSy.js","assets/Copy01-BE6lBLyL.js","assets/Key01-Bz0ywC7v.js","assets/Plus-g_F7sl0h.js","assets/mcp-oauth-CB0oVlt7.js","assets/Play-DmyxnVaR.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aF as o}from"./index-CMxZ_WIu.js";import{R as m}from"./require-capability-CFznm9Vo.js";import"./use-capability-DVlvH4nJ.js";import"./access-gate-BPZTU1dY.js";import"./capability-load-error-BIrLLyLV.js";const n=s.lazy(()=>o(()=>import("./registry-layout-DYbhPHER.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-DYbhPHER.js","assets/index-CMxZ_WIu.js","assets/index-BX7x5P5r.css","assets/Tool02-CE1JrXOr.js","assets/CheckCircle-Brg9nQLu.js","assets/Settings02-rME5QkSv.js","assets/use-mcp-client-CVI7A81s.js","assets/auth-DYv4QQwB.js","assets/useInfiniteQuery-Bn8GtXSi.js","assets/use-infinite-scroll-n_k4dNsE.js","assets/studio-tools-BKQiiGm_.js","assets/badge-B4yWfrsj.js","assets/input-QUFhSscC.js","assets/dropdown-menu-DGab5gGv.js","assets/Check-CB1wWN-R.js","assets/ChevronRight-DtQMDvdA.js","assets/DotsVertical-DgYMlIqK.js","assets/table-DuJxV7wG.js","assets/toggle-group-B-0po5Sm.js","assets/use-view-mode-DjVTG-K-.js","assets/use-mobile-Doxs1lZc.js","assets/FilterLines-CujWJi10.js","assets/Globe01-DV0sA1fo.js","assets/SearchMd-CkTq-ZRU.js","assets/dialog-D5JeNWji.js","assets/X-Bf4dZPNS.js","assets/AlertCircle-DxhIVO8g.js","assets/Upload01-Xse5pAaQ.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-BnAEWNTS.js","assets/card-DCdbjSt8.js","assets/Trash01-HCUcswMa.js","assets/label-D9i9PU0s.js","assets/select-CAAExvF2.js","assets/tooltip-CCw2rc-N.js","assets/ChevronDown-Bp5Bhuf2.js","assets/ChevronUp-BVjoCk50.js","assets/switch-Cq8T9YU6.js","assets/textarea-DSK0cmwf.js","assets/ArrowLeft-Ctr3YgRa.js","assets/XCircle-Bv0g8j3q.js","assets/checkbox-Cj6-6z11.js","assets/Eye-A563EIve.js","assets/LinkExternal01-BVTQ7Txc.js","assets/use-copy-DvraSgSy.js","assets/Copy01-BE6lBLyL.js","assets/Key01-Bz0ywC7v.js","assets/Plus-g_F7sl0h.js","assets/mcp-oauth-CB0oVlt7.js","assets/Play-DmyxnVaR.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,aF as p}from"./index-CMxZ_WIu.js";import{R as u}from"./require-capability-CFznm9Vo.js";import"./use-capability-DVlvH4nJ.js";import"./access-gate-BPZTU1dY.js";import"./capability-load-error-BIrLLyLV.js";const g=l.lazy(()=>p(()=>import("./registry-layout-DYbhPHER.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-n_k4dNsE.js";import{e6 as i}from"./index-CMxZ_WIu.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-n_k4dNsE.js";import{e6 as u,b3 as n}from"./index-CMxZ_WIu.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|