decocms 3.18.8 → 3.18.9
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-CEjUR4ma.js → AlertCircle-BHVtmqg5.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-uT8JCIJs.js → ArrowUpRight-BjNBbpmV.js} +1 -1
- package/dist/client/assets/{Check-ue2KWgWJ.js → Check-B0P5hodH.js} +1 -1
- package/dist/client/assets/{CheckCircle-Df84AR9T.js → CheckCircle-Bdqev0nO.js} +1 -1
- package/dist/client/assets/{ChevronDown-BVZtjVJY.js → ChevronDown-BLvS4ToG.js} +1 -1
- package/dist/client/assets/{ChevronLeft-BEr47RT8.js → ChevronLeft-DkNaQH3V.js} +1 -1
- package/dist/client/assets/{ChevronRight-ujoE2UV4.js → ChevronRight-4ehX8OPq.js} +1 -1
- package/dist/client/assets/{ChevronUp-OiyEMSaq.js → ChevronUp-BPS-J5rQ.js} +1 -1
- package/dist/client/assets/{Container-CaubKIrE.js → Container-BgS7rK8J.js} +1 -1
- package/dist/client/assets/{DotsVertical-D_SVgGJh.js → DotsVertical-J6xX8bRK.js} +1 -1
- package/dist/client/assets/{Eye-DkhRhMug.js → Eye-B4txmFQS.js} +1 -1
- package/dist/client/assets/{FilterLines-B8a9imyL.js → FilterLines-BTMjQgiq.js} +1 -1
- package/dist/client/assets/{Globe01-633RJxT_.js → Globe01-xi-0s299.js} +1 -1
- package/dist/client/assets/{HardDrive-CZ5s_-mg.js → HardDrive-Cw5wbzfr.js} +1 -1
- package/dist/client/assets/{Key01-CDeLFobi.js → Key01-CIFx1b27.js} +1 -1
- package/dist/client/assets/{LayoutLeft-4RVUmS78.js → LayoutLeft-DoTZR2dr.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BzkLuA4g.js → LinkExternal01-BUo_Z2Ai.js} +1 -1
- package/dist/client/assets/{Monitor01-B88WY9Iw.js → Monitor01-CU2IldL2.js} +1 -1
- package/dist/client/assets/{Palette-Bb6hf4rf.js → Palette-C1x3Xgx8.js} +1 -1
- package/dist/client/assets/{Play-BLU1qgQg.js → Play-cC3e0aRw.js} +1 -1
- package/dist/client/assets/{Plus-3hleEabH.js → Plus-C-omi-dN.js} +1 -1
- package/dist/client/assets/{RefreshCcw01-BKnMn9th.js → RefreshCcw01-BRsF38y3.js} +1 -1
- package/dist/client/assets/{SearchMd-C3Y3mLEO.js → SearchMd-B0_Yf3yk.js} +1 -1
- package/dist/client/assets/{Settings02-u9JAPlgK.js → Settings02-BAzPyCQK.js} +1 -1
- package/dist/client/assets/{Shield01-C6EForQ7.js → Shield01-D-Ka40fc.js} +1 -1
- package/dist/client/assets/{Star01-6IK5vWKT.js → Star01-BTZ2441m.js} +1 -1
- package/dist/client/assets/{Stars01-Bjw9UO9d.js → Stars01-BvMjy7DM.js} +1 -1
- package/dist/client/assets/{Stars02-0fXTHbN5.js → Stars02-D5yjx9l2.js} +1 -1
- package/dist/client/assets/{Sun-CnvIG-j_.js → Sun-CU5c1BQU.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-DRwxpGUn.js → SwitchHorizontal01-CI__ZFHo.js} +1 -1
- package/dist/client/assets/{Tool01-CB_-beME.js → Tool01-jh5OdcD_.js} +1 -1
- package/dist/client/assets/{Trash01-BJy-vGUY.js → Trash01-CY-IoFVl.js} +1 -1
- package/dist/client/assets/{Upload01-KqpVjI3s.js → Upload01-Dws98jTe.js} +1 -1
- package/dist/client/assets/{User01-BpmsHyRl.js → User01-CsfdlOo_.js} +1 -1
- package/dist/client/assets/{Users01-YZ2cXgHg.js → Users01-KgnDENeu.js} +1 -1
- package/dist/client/assets/{Users03-CxmtbRIo.js → Users03-B1-zgOdp.js} +1 -1
- package/dist/client/assets/{X-CN6_h3Qw.js → X-wAJMKsDG.js} +1 -1
- package/dist/client/assets/{XCircle-CJjS_Uo7.js → XCircle-C5XzBzrQ.js} +1 -1
- package/dist/client/assets/{XClose-Bq9zB2Rx.js → XClose-Wh4jKrco.js} +1 -1
- package/dist/client/assets/{Zap-DUwgtpoY.js → Zap-Cd9ypkMC.js} +1 -1
- package/dist/client/assets/{ZapSquare-DiwhXiB0.js → ZapSquare-BdJ-x7Vi.js} +1 -1
- package/dist/client/assets/{ZoomOut-uTNlQ9-Z.js → ZoomOut-DnPCWp9x.js} +1 -1
- package/dist/client/assets/{access-gate-ywabkFHK.js → access-gate-CNsIQ_vY.js} +1 -1
- package/dist/client/assets/{accordion-DRUVOrVO.js → accordion-CCq9lsEc.js} +1 -1
- package/dist/client/assets/{add-section-modal-DF4GaxjG.js → add-section-modal-DRe-XbIV.js} +1 -1
- package/dist/client/assets/agent-capabilities-Dk3tx7gd.js +3 -0
- package/dist/client/assets/{agent-icon-C7sEhkqy.js → agent-icon-Dr1bpYZ_.js} +1 -1
- package/dist/client/assets/{agent-icons-CCCuKTPg.js → agent-icons-CzC15bIN.js} +1 -1
- package/dist/client/assets/{agents-list-fCzIFEzp.js → agents-list-DWy0GtDE.js} +1 -1
- package/dist/client/assets/{ai-providers-Ctfzz9FP.js → ai-providers-BmFmfBdt.js} +1 -1
- package/dist/client/assets/{alert-DRIlVPTa.js → alert-BYbunVHe.js} +1 -1
- package/dist/client/assets/{alert-dialog-05vuxBW-.js → alert-dialog-B_G3fFis.js} +1 -1
- package/dist/client/assets/app-editor-eVQHoVzV.js +1 -0
- package/dist/client/assets/{auth-catchall-y-zNLQtU.js → auth-catchall-DbEVklo6.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BKVr4qiG.js → auth-split-layout-DuWIkei5.js} +1 -1
- package/dist/client/assets/{automation-list-row-DaxhoGhH.js → automation-list-row-Ca7Xhucl.js} +1 -1
- package/dist/client/assets/{automation-runs-DTTRWfsD.js → automation-runs-hyU42Y3D.js} +1 -1
- package/dist/client/assets/{automations-CLHblXAJ.js → automations-2cAsHwG9.js} +1 -1
- package/dist/client/assets/{avatar-UPASX_UE.js → avatar-DhzY0Eh2.js} +1 -1
- package/dist/client/assets/{badge-BMuzCes_.js → badge-bZNUWBV_.js} +1 -1
- package/dist/client/assets/{brand-context-zmE2IoGe.js → brand-context-D0vg5dZK.js} +1 -1
- package/dist/client/assets/{buckets-CAGbnlcp.js → buckets-DBovtxB9.js} +1 -1
- package/dist/client/assets/{calendar-BboUBemn.js → calendar-BLg-8LXk.js} +1 -1
- package/dist/client/assets/{capability-load-error-fYP5ZRRQ.js → capability-load-error-DBKsDtKJ.js} +1 -1
- package/dist/client/assets/{card-D-E4pj4Q.js → card-BDlh34z0.js} +1 -1
- package/dist/client/assets/{chat-context-C__4UOUU.js → chat-context-n64-vv_1.js} +1 -1
- package/dist/client/assets/{checkbox-BowaqmGc.js → checkbox-X6v3rKHo.js} +1 -1
- package/dist/client/assets/{cli-auth-success-4yFoRjEw.js → cli-auth-success-CQVq7_y_.js} +1 -1
- package/dist/client/assets/{collection-detail-Hnnv5RFG.js → collection-detail-C5P4CU7T.js} +1 -1
- package/dist/client/assets/{collection-display-button-DVoVt_QE.js → collection-display-button-BV3ToLFg.js} +1 -1
- package/dist/client/assets/{collection-search-C_o__TJL.js → collection-search-B7dmZ18T.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-BtXPNkm5.js → collection-table-wrapper-B0Cp6x2U.js} +1 -1
- package/dist/client/assets/{collection-tabs-BzQOcXsw.js → collection-tabs-IXoyjsqg.js} +1 -1
- package/dist/client/assets/{collections-Dl-QJ4h-.js → collections-Ca9cgdYF.js} +1 -1
- package/dist/client/assets/{command-7iumxWDA.js → command-eM0_ztLa.js} +1 -1
- package/dist/client/assets/{connect-desktop-dialog-D8fATkZL.js → connect-desktop-dialog-BnrR7FIp.js} +1 -1
- package/dist/client/assets/{connection-card-Di3rJz5O.js → connection-card-BNhxgt1r.js} +1 -1
- package/dist/client/assets/{connection-detail-CuYkU5_j.js → connection-detail-BfklQCKA.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CseaFBQ4.js → connection-form-helpers-E666kWj7.js} +1 -1
- package/dist/client/assets/{connections-C4UeseRl.js → connections-Bayyg13Q.js} +1 -1
- package/dist/client/assets/{constants-BwASqV3o.js → constants-CNZvm1cO.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-KTigFmmV.js → decopilot-sse-pool-BbXhLnto.js} +1 -1
- package/dist/client/assets/{dialog-tMBQk8ZQ.js → dialog-B25EnfSZ.js} +1 -1
- package/dist/client/assets/{domain-settings-Cf9H7T-u.js → domain-settings-DeaBF1NN.js} +1 -1
- package/dist/client/assets/{drawer-BpXrHY4O.js → drawer-fSMBE52Q.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CbEkLV1V.js → dropdown-menu-CqB2EneR.js} +1 -1
- package/dist/client/assets/{dynamic-plugin-layout-3UM11YBS.js → dynamic-plugin-layout-Hd9w0NQy.js} +1 -1
- package/dist/client/assets/{empty-state-BO24t3v_.js → empty-state-BZ5IbUpC.js} +1 -1
- package/dist/client/assets/{empty-state-B1zyKCjz.js → empty-state-ntjfA1V-.js} +1 -1
- package/dist/client/assets/{extract-connection-data-MFgoHej-.js → extract-connection-data-DtUMTD6M.js} +1 -1
- package/dist/client/assets/{features-B3jKlzdd.js → features-Do_DYvUG.js} +1 -1
- package/dist/client/assets/{file-explorer-DNPCQ0QL.js → file-explorer-CzHWiTKa.js} +1 -1
- package/dist/client/assets/{file-type-icon-Bc5TOpv6.js → file-type-icon-vEyv3GKo.js} +1 -1
- package/dist/client/assets/{files-AvcoPOSC.js → files-CqHDF15j.js} +1 -1
- package/dist/client/assets/{form-DfPEVJTD.js → form-Ck7oM85d.js} +1 -1
- package/dist/client/assets/{general-B-NiadKd.js → general-CiySELJl.js} +1 -1
- package/dist/client/assets/{generate-id-Clgx4NVq.js → generate-id-DFeI4rCP.js} +1 -1
- package/dist/client/assets/{github-repo-picker-htEMjZoZ.js → github-repo-picker-C8SuJIC3.js} +1 -1
- package/dist/client/assets/{header-tab-button-BSwyVhW5.js → header-tab-button-ByTfW4d9.js} +1 -1
- package/dist/client/assets/{hover-card-2-51SEXp.js → hover-card-Bs_VQXY_.js} +1 -1
- package/dist/client/assets/{image-field-nWZcKEH-.js → image-field-DsGhzGiD.js} +1 -1
- package/dist/client/assets/{index-8u18oRGg.js → index-B6C3Resz.js} +1 -1
- package/dist/client/assets/{index-CR4WWquJ.js → index-B7tMIGCq.js} +3 -3
- package/dist/client/assets/{index-Cx15R5eR.js → index-B9ljcRCy.js} +1 -1
- package/dist/client/assets/{index-mlAHnhfZ.js → index-BHIyMqy_.js} +1 -1
- package/dist/client/assets/{index-C96L2NKT.js → index-BNuieAvN.js} +1 -1
- package/dist/client/assets/{index-CG1T2pxn.js → index-BaZaX52j.js} +1 -1
- package/dist/client/assets/{index-DpCqt8sL.js → index-BicGKvEo.js} +4 -4
- package/dist/client/assets/{index-B7Oaq-RZ.js → index-BraUXQtj.js} +1 -1
- package/dist/client/assets/{index-D8bRG89r.js → index-CCsVvAb0.js} +1 -1
- package/dist/client/assets/{index-CCfeFYV7.js → index-CF0CDpUh.js} +1 -1
- package/dist/client/assets/{index-T0EnlyFn.js → index-DFwf5_Tj.js} +1 -1
- package/dist/client/assets/{index-pI38WS1y.js → index-DJZidEIe.js} +1 -1
- package/dist/client/assets/{index-DE7HYgXQ.js → index-DjvTsn28.js} +1 -1
- package/dist/client/assets/{index-CTrdUbeV.js → index-DllrVy9q.js} +1 -1
- package/dist/client/assets/{index-3AF5lDLi.js → index-IIM93U8v.js} +1 -1
- package/dist/client/assets/{index-redirect-Cwo593S2.js → index-redirect-DwG4UFJN.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-t6Hi_iG4.js → infiniteQueryObserver-GqeTL4E_.js} +1 -1
- package/dist/client/assets/{input-CxHC3x-C.js → input-DwlCJ28N.js} +1 -1
- package/dist/client/assets/{integration-icon-DucQ1W5m.js → integration-icon-BI887rQg.js} +1 -1
- package/dist/client/assets/{label-Bf55THi9.js → label-Cp7h2a1f.js} +1 -1
- package/dist/client/assets/{layout-2VN2W-NR.js → layout-CHqfnKZ0.js} +1 -1
- package/dist/client/assets/{login-DSl4fRSa.js → login-CxERd25A.js} +1 -1
- package/dist/client/assets/{members-DZfsDziN.js → members-BIU1EAnp.js} +1 -1
- package/dist/client/assets/{monaco-editor-DIa_WLht.js → monaco-editor-4zJKgWND.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-Snbqz0zD.js → monitoring-stats-row-Ckcrs5bU.js} +1 -1
- package/dist/client/assets/{oauth-callback-BY98PKae.js → oauth-callback-C1wSOpSi.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Dd2FijSC.js → oauth-callback-ai-provider-CIslKnkJ.js} +1 -1
- package/dist/client/assets/{onboarding-Bw2VLGbm.js → onboarding-DzOFbPHY.js} +1 -1
- package/dist/client/assets/{org-install-CGKkBZWa.js → org-install-DkWUqjZM.js} +1 -1
- package/dist/client/assets/{org-layout-B1dhdiyk.js → org-layout-D9qKjB7L.js} +1 -1
- package/dist/client/assets/{org-plugin-layout-D_B8r2WM.js → org-plugin-layout-CQA5014y.js} +1 -1
- package/dist/client/assets/{page-seo-form-9YbOybhS.js → page-seo-form-CCHdZJVC.js} +1 -1
- package/dist/client/assets/page-seo-sheet-muZrfYn9.js +1 -0
- package/dist/client/assets/{pair-VPgfw_dR.js → pair-DbyXobZ6.js} +1 -1
- package/dist/client/assets/{plugin-empty-state-BbDVh2Q3.js → plugin-empty-state-ClBAOxte.js} +1 -1
- package/dist/client/assets/{plugin-header-D0xXFHIE.js → plugin-header-0fc0DfDo.js} +1 -1
- package/dist/client/assets/{plugin-layout-C7-ysT8S.js → plugin-layout-CQ-ZS4on.js} +1 -1
- package/dist/client/assets/{popover-DbAqn4v_.js → popover-BpkFIRrC.js} +1 -1
- package/dist/client/assets/{post-editor-DOqkC-Vd.js → post-editor-B4qR5gjS.js} +1 -1
- package/dist/client/assets/{primitives-BRI9kffp.js → primitives-C0xseebZ.js} +1 -1
- package/dist/client/assets/{profile-D7KLPqHP.js → profile-j_YIrPxD.js} +1 -1
- package/dist/client/assets/project-app-view-BIOfOBLG.js +1 -0
- package/dist/client/assets/record-editor-DF21NWvv.js +1 -0
- package/dist/client/assets/registry-BiWmGi9J.js +2 -0
- package/dist/client/assets/{registry-layout-D5jxDFyv.js → registry-layout-DVn6I6vz.js} +1 -1
- package/dist/client/assets/{require-capability-DXhKEWoR.js → require-capability-DfrpjX-u.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DYdo_YVd.js → required-auth-layout-D-bn_J69.js} +1 -1
- package/dist/client/assets/{reset-password-CLZZfW7x.js → reset-password-CiNms6Sr.js} +1 -1
- package/dist/client/assets/{resizable-CWjPzzv5.js → resizable-v_bPD4vg.js} +1 -1
- package/dist/client/assets/{roles-YjoBz0aH.js → roles-A-J3RPs5.js} +1 -1
- package/dist/client/assets/{save-status-cMbN8LPM.js → save-status-caXPf-sW.js} +1 -1
- package/dist/client/assets/{schema-form-BxDlImtE.js → schema-form-OP25FipI.js} +1 -1
- package/dist/client/assets/{scroll-area-aBuzu5yV.js → scroll-area-DfF1DGTO.js} +1 -1
- package/dist/client/assets/{search-input-DLnPRfQp.js → search-input-D2vapx7T.js} +1 -1
- package/dist/client/assets/{secrets-BJaOwGjW.js → secrets-D9MKTymT.js} +1 -1
- package/dist/client/assets/{sections-editor-BePjOXsy.js → sections-editor-7GVJxDWw.js} +1 -1
- package/dist/client/assets/{select-nhrqzBAK.js → select-D6NiWcOv.js} +1 -1
- package/dist/client/assets/{select-model-De_ScBz5.js → select-model-TEFtvtVK.js} +1 -1
- package/dist/client/assets/{seo-editor-DN4MvkY2.js → seo-editor-CxuXRBUg.js} +1 -1
- package/dist/client/assets/{settings-layout-wJQfRs1C.js → settings-layout-q8E9c9E2.js} +1 -1
- package/dist/client/assets/{settings-section-DSFvAhyf.js → settings-section-BhG1oXRm.js} +1 -1
- package/dist/client/assets/{sheet-CuBrIJtg.js → sheet-CA-bu41g.js} +1 -1
- package/dist/client/assets/{shell-controls-q-XCzzlI.js → shell-controls-_xZFFXXO.js} +1 -1
- package/dist/client/assets/{shell-layout-BzFvzE6D.js → shell-layout-BJmtvdOF.js} +1 -1
- package/dist/client/assets/{shell-route-loading-WLTOuT1-.js → shell-route-loading-kYHtFyzE.js} +1 -1
- package/dist/client/assets/{sidebar-BEIQqG7v.js → sidebar-MAITYPYL.js} +1 -1
- package/dist/client/assets/{skeleton-CVzqY297.js → skeleton-B3z9RhFw.js} +1 -1
- package/dist/client/assets/{sortable.esm-DvKAwT6T.js → sortable.esm-ChXSQgk4.js} +1 -1
- package/dist/client/assets/{spinner-DZG11PAv.js → spinner-u4N4s9Z6.js} +1 -1
- package/dist/client/assets/{sso-BUixu3Zz.js → sso-QXpS_be1.js} +1 -1
- package/dist/client/assets/{store-BTnNlZj8.js → store-D0VBS3Tx.js} +1 -1
- package/dist/client/assets/store-registry-xnI7S9bB.js +2 -0
- package/dist/client/assets/{switch-P3zLSFv8.js → switch-B-X7IR6_.js} +1 -1
- package/dist/client/assets/{tab-id-DhCb_abW.js → tab-id-D4XtWZcv.js} +1 -1
- package/dist/client/assets/{table-yFj0stfJ.js → table-CUgkm7T_.js} +1 -1
- package/dist/client/assets/{tabs-4xCvoe9h.js → tabs-CxIIMzaj.js} +1 -1
- package/dist/client/assets/{task-status-B33JSiVR.js → task-status-4rr9cZ7d.js} +1 -1
- package/dist/client/assets/{textarea-DBZsWt4d.js → textarea-AHMya-Yu.js} +1 -1
- package/dist/client/assets/{toggle-group-BP_ogdFV.js → toggle-group-B_TX0y3P.js} +1 -1
- package/dist/client/assets/{toolbar-B-ecUSaD.js → toolbar-BNPhEiqF.js} +1 -1
- package/dist/client/assets/{tools-list-DurkYI7V.js → tools-list-ASCoS6LU.js} +1 -1
- package/dist/client/assets/{tooltip-SvWIEz4F.js → tooltip-VoacnTKM.js} +1 -1
- package/dist/client/assets/{types-dRDAzIp3.js → types-DGaPEJ11.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DGVQckBg.js → use-ai-providers-B08Dfztq.js} +1 -1
- package/dist/client/assets/{use-automations-MzX-pnft.js → use-automations-D6JWA2qr.js} +1 -1
- package/dist/client/assets/{use-capability-wOZj0F9y.js → use-capability-CD7uDLwB.js} +1 -1
- package/dist/client/assets/{use-collections-r13pSQw9.js → use-collections-DEYzPSLv.js} +1 -1
- package/dist/client/assets/{use-connection-CxabpxQN.js → use-connection-DY59WvYT.js} +1 -1
- package/dist/client/assets/{use-copy-BeP0rgAX.js → use-copy-DAGbC1GA.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DiFo-I35.js → use-create-virtual-mcp-BXxjk7k6.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-KdYwTFfQ.js → use-debounced-autosave-BOriK1WA.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BBrQ4LFO.js → use-delete-connection-wvPOAsuG.js} +1 -1
- package/dist/client/assets/{use-file-configs-DC8qoJy2.js → use-file-configs-c_8gPz9N.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-YklEtrt9.js → use-infinite-scroll-2beLt-Er.js} +1 -1
- package/dist/client/assets/{use-list-state-B__YGfxw.js → use-list-state-ZOMnKb9E.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-DSX3V-bQ.js → use-mcp-prompts-Z9l1A0Zz.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-pbSeY5Lj.js → use-mcp-tools-Da-abucn.js} +1 -1
- package/dist/client/assets/{use-members-DZ-u6V-u.js → use-members-BbxKUa81.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DF_KNeZq.js → use-navigate-to-agent-D4fCB-ku.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-yy03WxT-.js → use-org-auth-client-D8pwkohW.js} +1 -1
- package/dist/client/assets/{use-org-sso-CRtw-FZU.js → use-org-sso-Z-KrfZMw.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DQLKA3oR.js → use-organization-roles-BPbcrovc.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DWlWbg2C.js → use-organization-settings-DK19F2g9.js} +1 -1
- package/dist/client/assets/{use-registry-connections-bbGWBclV.js → use-registry-connections-BT5RIBa1.js} +1 -1
- package/dist/client/assets/{use-secrets-rUozqC0V.js → use-secrets-HKPmUn7b.js} +1 -1
- package/dist/client/assets/{use-status-sounds-Cf4933eB.js → use-status-sounds-bkoIBdSr.js} +1 -1
- package/dist/client/assets/{use-view-mode-DdEspuVM.js → use-view-mode-DTI3AORs.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BMeG-Ahu.js → use-virtual-mcp-C0J6vZOy.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-BYU0zu4v.js +1 -0
- package/dist/client/assets/{useRouterState-CrRn_Y16.js → useRouterState-BpN6uFWZ.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-CsscVl3c.js +1 -0
- package/dist/client/assets/{user-DVFRvErN.js → user-DICnku4_.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-DScb7qQz.js → view-mode-toggle-CbsM9RpS.js} +1 -1
- package/dist/client/assets/{workflow-DQR2vEK6.js → workflow-3MM_iKc4.js} +1 -1
- package/dist/client/assets/workflow-detail-Nu0x63kt.js +1 -0
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/agent-capabilities-DNEvySpc.js +0 -3
- package/dist/client/assets/app-editor-DRNBwOi5.js +0 -1
- package/dist/client/assets/page-seo-sheet-Cc0yvkD9.js +0 -1
- package/dist/client/assets/project-app-view-BNF63H5u.js +0 -1
- package/dist/client/assets/record-editor-EdXktlRb.js +0 -1
- package/dist/client/assets/registry-j83MXDkD.js +0 -2
- package/dist/client/assets/store-registry--w5svgmD.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DHYfiX8a.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BQXUxrp-.js +0 -1
- package/dist/client/assets/workflow-detail-BiAjVJyT.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1183,7 +1183,7 @@ ${Z}:`]}}function xn0({id:$,model:Z,created:G}){return{id:$!=null?$:void 0,model
|
|
|
1183
1183
|
`.execute($)).rows[0]?.exists)await u4`CREATE ROLE ${u4.id(G)} NOLOGIN`.execute($);await u4`GRANT ${u4.id(G)} TO CURRENT_USER`.execute($),await u4`GRANT USAGE, CREATE ON SCHEMA ${u4.id(Z)} TO ${u4.id(G)}`.execute($),await u4`GRANT ALL ON ALL TABLES IN SCHEMA ${u4.id(Z)} TO ${u4.id(G)}`.execute($),await u4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${u4.id(Z)} TO ${u4.id(G)}`.execute($),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(Z)} GRANT ALL ON TABLES TO ${u4.id(G)}`.execute($),await u4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${u4.id(Z)} GRANT ALL ON SEQUENCES TO ${u4.id(G)}`.execute($),await u4`REVOKE ALL ON SCHEMA public FROM ${u4.id(G)}`.execute($)}async function $y8($,Z,G,X){try{return await $.transaction().execute(async(Q)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute(Q),await u4`SET LOCAL search_path TO ${u4.id(Z)}`.execute(Q),await u4.raw(X).execute(Q)})}catch(Q){if(sx8(Q))return await ex8($,Z,G),await $.transaction().execute(async(Y)=>{return await u4`SET LOCAL ROLE ${u4.id(G)}`.execute(Y),await u4`SET LOCAL search_path TO ${u4.id(Z)}`.execute(Y),await u4.raw(X).execute(Y)});throw Q}}var px8,ox8,Bt0;var Dt0=D(()=>{p1();px8=PW.object({results:PW.array(PW.unknown()).optional(),success:PW.boolean().optional()});ox8=PW.object({sql:PW.string().describe("The SQL query to run"),params:PW.array(PW.any()).describe("The parameters to pass to the SQL query").optional()});Bt0=Z1({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:ox8,outputSchema:PW.object({result:PW.array(px8)}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=tx8($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let X=rx8(Z.connectionId),Q=ax8(Z.connectionId);return{result:[{results:(await $y8(Z.db,X,Q,G)).rows,success:!0}]}}})});import{z as wQ}from"zod";var Lt0,Gy8,Et0;var xU=D(()=>{Uc();Lt0=wQ.object({connectionId:wQ.string().optional().describe("Filter subscriptions by connection ID (optional)")}),Gy8=wQ.object({id:wQ.string().describe("Subscription ID"),connectionId:wQ.string().describe("Subscriber connection ID"),eventType:wQ.string().describe("Event type pattern"),publisher:wQ.string().nullable().describe("Publisher connection filter (null = all publishers)"),filter:wQ.string().nullable().describe("JSONPath filter expression"),enabled:wQ.boolean().describe("Whether subscription is enabled"),createdAt:wQ.string().datetime().describe("Created timestamp (ISO 8601)"),updatedAt:wQ.string().datetime().describe("Updated timestamp (ISO 8601)")}),Et0=wQ.object({subscriptions:wQ.array(Gy8).describe("List of subscriptions")})});var sy1;var wt0=D(()=>{p1();xU();sy1=Z1({name:"EVENT_PUBLISH",description:`Publish an event. Supports immediate, scheduled (deliverAt), and recurring (cron) delivery.
|
|
1184
1184
|
|
|
1185
1185
|
- Source is auto-set to the caller's connection ID.
|
|
1186
|
-
- Use EVENT_CANCEL to stop recurring events.`,annotations:{title:"Publish Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ru,outputSchema:au,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let Q=await Z.eventBus.publish(G.id,X,{type:$.type,subject:$.subject,data:$.data,deliverAt:$.deliverAt,cron:$.cron});return{id:Q.id,type:Q.type,source:Q.source,time:Q.time}}})});var ey1;var zt0=D(()=>{p1();xU();ey1=Z1({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. Caller's connection is set as subscriber automatically.",annotations:{title:"Subscribe to Events",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:su,outputSchema:eu,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let Q=await Z.eventBus.subscribe(G.id,{connectionId:X,eventType:$.eventType,publisher:$.publisher,filter:$.filter});return{subscription:{id:Q.id,connectionId:Q.connectionId,eventType:Q.eventType,publisher:Q.publisher,filter:Q.filter,enabled:Q.enabled,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}})});var $g1;var jt0=D(()=>{p1();xU();$g1=Z1({name:"EVENT_UNSUBSCRIBE",description:"Remove a subscription to stop receiving events of that type.",annotations:{title:"Unsubscribe from Events",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Gc,outputSchema:Xc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let Q=await Z.eventBus.getSubscription(G.id,$.subscriptionId);if(!Q)throw Error(`Subscription not found: ${$.subscriptionId}`);if(Q.connectionId!==X)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await Z.eventBus.unsubscribe(G.id,$.subscriptionId)).success,subscriptionId:$.subscriptionId}}})});var Zg1;var Pt0=D(()=>{p1();xU();Zg1=Z1({name:"EVENT_CANCEL",description:"Stop a recurring event from delivering further. Only the original publisher can cancel.",annotations:{title:"Cancel Recurring Event",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Qc,outputSchema:Yc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await Z.eventBus.getEvent(G.id,$.eventId))throw Error(`Event not found: ${$.eventId}`);if(!(await Z.eventBus.cancelEvent(G.id,$.eventId,X)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:$.eventId}}})});var Gg1;var At0=D(()=>{p1();xU();Gg1=Z1({name:"EVENT_ACK",description:"Acknowledge event delivery after processing. Only needed for events received with retryAfter.",annotations:{title:"Acknowledge Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Jc,outputSchema:Wc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await Z.eventBus.ackEvent(G.id,$.eventId,X)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:$.eventId}}})});var Xg1;var Rt0=D(()=>{p1();xU();Xg1=Z1({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions. Filter by connection ID to scope results.",annotations:{title:"List Event Subscriptions",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Lt0,outputSchema:Et0,handler:async($,Z)=>{P1(Z);let G=H1(Z);return await Z.access.check(),{subscriptions:(await Z.eventBus.listSubscriptions(G.id,$.connectionId)).map((Q)=>({id:Q.id,connectionId:Q.connectionId,eventType:Q.eventType,publisher:Q.publisher,filter:Q.filter,enabled:Q.enabled,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}})});var Qg1;var It0=D(()=>{p1();xU();Qg1=Z1({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Declaratively sync subscriptions: creates new, deletes removed, updates changed filters.",annotations:{title:"Sync Event Subscriptions",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:$c,outputSchema:Zc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let Q=await Z.eventBus.syncSubscriptions(G.id,{connectionId:X,subscriptions:$.subscriptions});return{created:Q.created,updated:Q.updated,deleted:Q.deleted,unchanged:Q.unchanged,subscriptions:Q.subscriptions.map((Y)=>({id:Y.id,connectionId:Y.connectionId,eventType:Y.eventType,publisher:Y.publisher,filter:Y.filter,enabled:Y.enabled,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}})});var Tt0=D(()=>{wt0();zt0();jt0();Pt0();At0();Rt0();It0();xU()});var bL=D(()=>{Js()});function P41($){let Z=$.access.getRole();if(!Z||!FW.includes(Z))throw new YL("Only organization owners and admins can change org-wide pin status")}var Yg1=D(()=>{KL();Xv()});import{z as kt0}from"zod";function Qy8(){let $=qt0[Math.floor(Math.random()*qt0.length)];return`icon://${Mt0[Math.floor(Math.random()*Mt0.length)]}?color=${$}`}var qt0,Mt0,Yy8,Jy8,Jg1;var Vt0=D(()=>{p1();bL();Yg1();qt0=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Mt0=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];Yy8=kt0.object({data:Zh.describe("Data for the new virtual MCP")}),Jy8=kt0.object({item:BG.describe("The created virtual MCP entity")}),Jg1=Z1({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP that aggregates tools from multiple connections into one endpoint.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Yy8,outputSchema:Jy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)P41(Z);let Q={...$.data,icon:$.data.icon??Qy8()};return{item:await Z.storage.virtualMcps.create(G.id,X,Q)}}})});function Wy8($){let Z=[],G=0;while(G<$.length){let X=$[G];if(X==="%")Z.push(".*");else if(X==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(X))Z.push("\\"+X);else Z.push(X);G++}return Z.join("")}function dN($){return typeof $==="string"||typeof $==="number"}function Wg1($,Z){let G=Z.split("."),X=$;for(let Q of G){if(X==null||typeof X!=="object")return;X=X[Q]}return X}function Ky8($,Z){return $.connections.some((G)=>G.connection_id===Z)}function A41($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((U)=>A41($,U));case"or":return K.some((U)=>A41($,U));case"not":return!K.every((U)=>A41($,U));default:return!0}}let{field:G,operator:X,value:Q}=Z,Y=G.join(".");if(Y==="connection_id"){if(X!=="eq"||typeof Q!=="string")return!1;return Ky8($,Q)}let J=Wg1($,Y);switch(X){case"eq":return J===Q;case"gt":return dN(J)&&dN(Q)&&J>Q;case"gte":return dN(J)&&dN(Q)&&J>=Q;case"lt":return dN(J)&&dN(Q)&&J<Q;case"lte":return dN(J)&&dN(Q)&&J<=Q;case"in":return Array.isArray(Q)&&Q.includes(J);case"like":if(typeof J!=="string"||typeof Q!=="string")return!1;if(Q.length>100)return!1;let W=Wy8(Q);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Q!=="string")return!1;return J.toLowerCase().includes(Q.toLowerCase());default:return!0}}function Uy8($,Z){return[...$].sort((G,X)=>{for(let Q of Z){let Y=Q.field.join("."),J=Wg1(G,Y),W=Wg1(X,Y),K=0;if(J==null&&W==null)continue;if(J==null)K=Q.nulls==="first"?-1:1;else if(W==null)K=Q.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Q.direction==="desc"?-K:K}return 0})}var Fy8,Hy8,Kg1;var St0=D(()=>{ZX();p1();bL();Fy8=wJ,Hy8=oK(BG),Kg1=Z1({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fy8,outputSchema:Hy8,handler:async($,Z)=>{await Z.access.check();let G=H1(Z),X=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=X?await Z.storage.virtualMcps.listByConnectionId(G.id,X):await Z.storage.virtualMcps.list(G.id,Q!==void 0?{pinnedOnly:Q}:void 0);if($.where)J=J.filter((N)=>A41(N,$.where));if($.orderBy&&$.orderBy.length>0)J=Uy8(J,$.orderBy);let W=J.length,K=$.offset??0,U=$.limit??100,F=J.slice(K,K+U),H=K+U<W;return{items:F,totalCount:W,hasMore:H}}})});import{z as Ug1}from"zod";var Ny8,Oy8,Fg1;var Ct0=D(()=>{p1();bL();Ny8=Ug1.object({id:Ug1.string().describe("ID of the virtual MCP to retrieve")}),Oy8=Ug1.object({item:BG.nullable().describe("The retrieved virtual MCP, or null if not found")}),Fg1=Z1({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ny8,outputSchema:Oy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.virtualMcps.findById($.id);if(X&&X.organization_id!==G.id)return{item:null};if(!X)return{item:null};return{item:X}}})});import{z as Hg1}from"zod";var By8,Dy8,Ng1;var _t0=D(()=>{p1();bL();Yg1();By8=Hg1.object({id:Hg1.string().describe("ID of the virtual MCP to update"),data:Gh.describe("Partial virtual MCP data to update")}),Dy8=Hg1.object({item:BG.describe("The updated virtual MCP entity")}),Ng1=Z1({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, or connection list.",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:By8,outputSchema:Dy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to update virtual MCP");let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==G.id)throw Error(`Virtual MCP not found: ${$.id}`);let Y={...$.data};if(Y.metadata&&Q.metadata)Y.metadata={...Q.metadata,...Y.metadata};if(Y.pinned!==void 0&&Y.pinned!==Q.pinned)P41(Z);return{item:await Z.storage.virtualMcps.update($.id,X,Y)}}})});import{z as Og1}from"zod";var Ly8,Ey8,Bg1;var bt0=D(()=>{hv();zW();p1();bL();Ly8=Og1.object({id:Og1.string().describe("ID of the virtual MCP to delete")}),Ey8=Og1.object({item:BG.describe("The deleted virtual MCP entity")}),Bg1=Z1({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ly8,outputSchema:Ey8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.virtualMcps.findById($.id);if(!X)throw Error(`Virtual MCP not found: ${$.id}`);if(X.organization_id!==G.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);let Q=X.metadata?.githubRepo?.connectionId;if(Q)try{let Y=await Z.storage.connections.findById(Q,G.id);if(Y&&jW(Y)){let W=await new k9(Z.db,Z.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Q)}}catch(Y){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:Y.message})}return{item:X}}})});import{z as LX}from"zod";var wy8,Dg1;var vt0=D(()=>{p1();wy8=LX.object({id:LX.string(),virtualMcpId:LX.string(),pluginId:LX.string(),connectionId:LX.string().nullable(),settings:LX.record(LX.string(),LX.unknown()).nullable(),createdAt:LX.string(),updatedAt:LX.string()}),Dg1=Z1({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LX.object({virtualMcpId:LX.string().describe("Virtual MCP ID"),pluginId:LX.string().describe("Plugin ID")}),outputSchema:LX.object({config:wy8.nullable()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let{virtualMcpId:G,pluginId:X}=$,Q=await Z.storage.virtualMcpPluginConfigs.get(G,X);if(!Q)return{config:null};return{config:{id:Q.id,virtualMcpId:Q.virtualMcpId,pluginId:Q.pluginId,connectionId:Q.connectionId,settings:Q.settings,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}})});import{z as CZ}from"zod";var zy8,Lg1;var ft0=D(()=>{p1();mC();lX();zy8=CZ.object({id:CZ.string(),virtualMcpId:CZ.string(),pluginId:CZ.string(),connectionId:CZ.string().nullable(),settings:CZ.record(CZ.string(),CZ.unknown()).nullable(),createdAt:CZ.string(),updatedAt:CZ.string()}),Lg1=Z1({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CZ.object({virtualMcpId:CZ.string().describe("Virtual MCP ID"),pluginId:CZ.string().describe("Plugin ID"),connectionId:CZ.string().nullable().optional().describe("MCP connection to bind"),settings:CZ.record(CZ.string(),CZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:CZ.object({config:zy8}),handler:async($,Z)=>{P1(Z),await Z.access.check();let{virtualMcpId:G,pluginId:X,connectionId:Q,settings:Y}=$,J=D$(Z),W=await Z.storage.connections.findById(G);if(!W)throw Error(`Connection not found: ${G}`);let K=Q?await Z.storage.connections.findById(Q):null;if(Q&&W.organization_id&&!K&&NJ()){if(Ws(Q,W.organization_id)){if(!J)throw Error("User ID required to create dev-assets connection");let F=dC(W.organization_id,V7());await Z.storage.connections.create({...F,organization_id:W.organization_id,created_by:J})}}let U=await Z.storage.virtualMcpPluginConfigs.upsert(G,X,{connectionId:Q,settings:Y});return{config:{id:U.id,virtualMcpId:U.virtualMcpId,pluginId:U.pluginId,connectionId:U.connectionId,settings:U.settings,createdAt:U.createdAt instanceof Date?U.createdAt.toISOString():U.createdAt,updatedAt:U.updatedAt instanceof Date?U.updatedAt.toISOString():U.updatedAt}}}})});import{z as VG}from"zod";var jy8,Eg1;var xt0=D(()=>{p1();bL();jy8=VG.object({connectionId:VG.string(),toolName:VG.string(),label:VG.string(),icon:VG.string().nullable().optional()}),Eg1=Z1({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:VG.object({virtualMcpId:VG.string().describe("Virtual MCP ID"),pinnedViews:VG.array(jy8).describe("Pinned views to set for the virtual MCP sidebar"),layout:VG.object({defaultMainView:VG.object({type:VG.string(),id:VG.string().optional(),toolName:VG.string().optional()}).nullable().optional(),chatDefaultOpen:VG.boolean().nullable().optional()}).optional()}),outputSchema:VG.object({item:BG.nullable()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let{virtualMcpId:X,pinnedViews:Q,layout:Y}=$,J=D$(Z),W=await Z.storage.virtualMcps.findById(X);if(!W)throw Error(`Virtual MCP not found: ${X}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${X}`);let K=W.metadata?.ui??{},U={...K,pinnedViews:Q.length>0?Q:null,layout:Y??K.layout??null};return{item:await Z.storage.virtualMcps.update(X,J??"system",{metadata:{...W.metadata,ui:U}})}}})});import{z as yU}from"zod";var Py8,Ay8,wg1;var yt0=D(()=>{p1();Py8=yU.object({ids:yU.array(yU.string()).describe("Virtual MCP ids to look up")}),Ay8=yU.object({items:yU.array(yU.object({id:yU.string(),last_used_at:yU.string().optional(),last_used_by:yU.string().optional()}))}),wg1=Z1({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Py8,outputSchema:Ay8,handler:async($,Z)=>{P1(Z),H1(Z),await Z.access.check();let G=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((X)=>({id:X,last_used_at:G.get(X)?.last_used_at,last_used_by:G.get(X)?.last_used_by}))}}})});var gt0=D(()=>{Vt0();St0();Ct0();_t0();bt0();vt0();ft0();xt0();yt0()});import{z as q5}from"zod";var zg1;var ht0=D(()=>{f9();p1();zg1=Z1({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string().describe("Log ID to fetch")}),outputSchema:q5.object({log:q5.object({id:q5.string().optional(),organizationId:q5.string(),connectionId:q5.string(),toolName:q5.string(),input:q5.record(q5.string(),q5.unknown()),output:q5.record(q5.string(),q5.unknown()),isError:q5.boolean(),errorMessage:q5.string().nullish(),durationMs:q5.number(),timestamp:q5.string(),userId:q5.string().nullish(),requestId:q5.string(),userAgent:q5.string().nullish(),virtualMcpId:q5.string().nullish(),properties:q5.record(q5.string(),q5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await vQ();let G=H1(Z),X=await Z.storage.monitoring.getById(G.id,$.id);if(!X)return{log:null};return{log:{...X,timestamp:X.timestamp instanceof Date?X.timestamp.toISOString():X.timestamp}}}})});import{z as R8}from"zod";var Iy8,jg1;var ut0=D(()=>{f9();p1();Iy8=R8.object({id:R8.string().optional().describe("Unique log identifier"),organizationId:R8.string().describe("Organization ID"),connectionId:R8.string().describe("Connection ID"),toolName:R8.string().describe("Name of the tool that was called"),isError:R8.boolean().describe("Whether the call resulted in an error"),errorMessage:R8.string().nullish().describe("Error message if applicable"),durationMs:R8.number().describe("Call duration in milliseconds"),timestamp:R8.string().describe("ISO 8601 timestamp of the call"),userId:R8.string().nullish().describe("User who triggered the call"),requestId:R8.string().describe("Unique request identifier"),userAgent:R8.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:R8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:R8.record(R8.string(),R8.string()).nullish().describe("Custom key-value metadata attached to the log")}),jg1=Z1({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R8.object({connectionId:R8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:R8.array(R8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:R8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:R8.string().optional().describe("Filter by tool name"),isError:R8.boolean().optional().describe("Filter by error status"),startDate:R8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:R8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:R8.number().default(20).describe("Maximum number of results"),offset:R8.number().default(0).describe("Offset for pagination"),properties:R8.record(R8.string(),R8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:R8.array(R8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:R8.record(R8.string(),R8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:R8.record(R8.string(),R8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:R8.object({logs:R8.array(Iy8).describe("Array of monitoring logs"),total:R8.number().describe("Total number of logs matching filters"),offset:R8.number().describe("Current offset for pagination"),limit:R8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await vQ();let G=H1(Z),Q=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,Y={organizationId:G.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Q},J=await Z.storage.monitoring.query(Y);return{logs:J.logs.map(({input:W,output:K,...U})=>({...U,timestamp:U.timestamp instanceof Date?U.timestamp.toISOString():U.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as L$}from"zod";var Pg1;var ct0=D(()=>{f9();p1();Pg1=Z1({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:L$.object({startDate:L$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:L$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:L$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:L$.array(L$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:L$.array(L$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:L$.array(L$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:L$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:L$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:L$.array(L$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:L$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:L$.object({totalCalls:L$.number().describe("Total number of tool calls"),errorRate:L$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:L$.number().describe("Average call duration in milliseconds"),errorRatePercent:L$.string().optional().describe("Error rate as a percentage string"),totalErrors:L$.number().optional().describe("Total number of errors"),p50DurationMs:L$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:L$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:L$.array(L$.object({connectionId:L$.string(),calls:L$.number(),errors:L$.number(),errorRate:L$.number(),avgDurationMs:L$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:L$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:L$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:L$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:L$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:L$.array(L$.object({toolName:L$.string(),connectionId:L$.string().nullable(),calls:L$.number(),inputTokens:L$.number().optional(),outputTokens:L$.number().optional(),costUsd:L$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:L$.array(L$.object({timestamp:L$.string(),toolName:L$.string(),calls:L$.number(),errors:L$.number(),avg:L$.number(),p95:L$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:L$.array(L$.object({timestamp:L$.string(),calls:L$.number(),errors:L$.number(),errorRate:L$.number(),avg:L$.number(),p50:L$.number(),p95:L$.number(),inputTokens:L$.number().optional(),outputTokens:L$.number().optional(),totalTokens:L$.number().optional(),costUsd:L$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let G=H1(Z);if(await Z.access.check(),await vQ(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Q=await Z.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Q;let Y=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Q,topTools:Y.topTools,topToolsTimeseries:Y.timeseries}}let X=await Z.storage.monitoring.getStats({organizationId:G.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...X,errorRatePercent:(X.errorRate*100).toFixed(2)}}})});import{z as SG}from"zod";var Ag1;var lt0=D(()=>{f9();p1();Ag1=Z1({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SG.object({threadIds:SG.array(SG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:SG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:SG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:SG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:SG.object({items:SG.array(SG.object({threadId:SG.string(),calls:SG.number(),inputTokens:SG.number(),outputTokens:SG.number(),totalTokens:SG.number(),costUsd:SG.number()}))}),handler:async($,Z)=>{let G=H1(Z);return await Z.access.check(),await vQ(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var dt0=D(()=>{ht0();ut0();ct0();lt0()});import{z as zQ}from"zod";var Rg1;var mt0=D(()=>{p1();Rg1=Z1({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:zQ.object({slug:zQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:zQ.string().min(1).max(255),description:zQ.string().optional()}),outputSchema:zQ.object({id:zQ.string(),name:zQ.string(),slug:zQ.string(),logo:zQ.string().nullable().optional(),metadata:zQ.any().optional(),createdAt:zQ.string().datetime().describe("ISO 8601 timestamp"),members:zQ.array(zQ.any()).optional()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=D$(Z);if(!G)throw Error("User ID required to create organization");let X=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:G});if(!X)throw Error("Failed to create organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as nJ}from"zod";var Ig1;var it0=D(()=>{p1();Ig1=Z1({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:nJ.object({userId:nJ.string().optional()}),outputSchema:nJ.object({organizations:nJ.array(nJ.object({id:nJ.string(),name:nJ.string(),slug:nJ.string(),logo:nJ.string().nullable().optional(),metadata:nJ.any().optional(),createdAt:nJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=D$(Z),X=$.userId||G;if(!X)throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list(X)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}}})});import{z as qY}from"zod";var Tg1;var nt0=D(()=>{p1();Tg1=Z1({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:qY.object({}),outputSchema:qY.object({id:qY.string(),name:qY.string(),slug:qY.string(),logo:qY.string().nullable().optional(),metadata:qY.any().optional(),createdAt:qY.string().datetime().describe("ISO 8601 timestamp"),members:qY.array(qY.any()).optional(),invitations:qY.array(qY.any()).optional()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.get(G);if(!X)throw Error("No active organization found");let Q=new Date,Y=X.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...X,invitations:Y,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as pJ}from"zod";var qg1;var pt0=D(()=>{p1();qg1=Z1({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pJ.object({id:pJ.string(),name:pJ.string().min(1).max(255).optional(),description:pJ.string().optional()}),outputSchema:pJ.object({id:pJ.string(),name:pJ.string(),slug:pJ.string(),logo:pJ.string().nullable().optional(),metadata:pJ.any().optional(),createdAt:pJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G={};if($.name)G.name=$.name;if($.description)G.metadata={description:$.description};let X=await Z.boundAuth.organization.update({organizationId:$.id,data:G});if(!X)throw Error("Failed to update organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as Xm}from"zod";var Mg1;var tt0=D(()=>{p1();Mg1=Z1({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Xm.object({id:Xm.string()}),outputSchema:Xm.object({success:Xm.boolean(),id:Xm.string()}),handler:async($,Z)=>{return P1(Z),await Z.access.check(),await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as Z8}from"zod";var Ym,Jm,Qm,ot0,R41,Wm,Km,mN;var gU=D(()=>{Ym=Z8.object({title:Z8.string(),url:Z8.string(),icon:Z8.string()}),Jm=Z8.object({registries:Z8.record(Z8.string(),Z8.object({enabled:Z8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:Z8.array(Z8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),Qm=Z8.object({keyId:Z8.string(),modelId:Z8.string(),title:Z8.string().optional()}).nullable(),ot0=Z8.enum(["fast","smart","thinking","image","web_research"]),R41=Z8.enum(["fast","smart","thinking"]),Wm=Z8.object({tiers:Z8.object({fast:Qm,smart:Qm,thinking:Qm,image:Qm,web_research:Qm})}),Km=Z8.object({ids:Z8.array(Z8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),mN=Z8.object({id:Z8.string().describe("Brand context ID"),name:Z8.string().describe("Company name"),domain:Z8.string().describe("Company domain (e.g. example.com)"),overview:Z8.string().describe("Company overview / description"),logo:Z8.string().nullable().optional().describe("Logo URL"),favicon:Z8.string().nullable().optional().describe("Favicon URL"),ogImage:Z8.string().nullable().optional().describe("OG image URL"),fonts:Z8.object({heading:Z8.string().optional().describe("Font family for headings"),body:Z8.string().optional().describe("Font family for body text"),code:Z8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:Z8.object({primary:Z8.string().optional().describe("Primary brand color (hex)"),secondary:Z8.string().optional().describe("Secondary brand color (hex)"),accent:Z8.string().optional().describe("Accent / highlight color (hex)"),background:Z8.string().optional().describe("Background color (hex)"),foreground:Z8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:Z8.array(Z8.record(Z8.string(),Z8.unknown())).nullable().optional().describe("Brand images"),metadata:Z8.record(Z8.string(),Z8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:Z8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:Z8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as iN}from"zod";var kg1;var rt0=D(()=>{p1();gU();kg1=Z1({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:iN.object({}),outputSchema:iN.object({organizationId:iN.string(),sidebar_items:iN.array(Ym).nullable().optional(),enabled_plugins:iN.array(iN.string()).nullable().optional(),registry_config:Jm.nullable().optional(),simple_mode:Wm.nullable().optional(),default_home_agents:Km.nullable().optional(),createdAt:iN.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:iN.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.organizationSettings.get(G);if(!X)return{organizationId:G};return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as MY}from"zod";var Vg1;var at0=D(()=>{p1();gU();Vg1=Z1({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:MY.object({organizationId:MY.string(),sidebar_items:MY.array(Ym).optional(),enabled_plugins:MY.array(MY.string()).optional(),registry_config:Jm.optional(),simple_mode:Wm.optional(),default_home_agents:Km.optional()}),outputSchema:MY.object({organizationId:MY.string(),sidebar_items:MY.array(Ym).nullable().optional(),enabled_plugins:MY.array(MY.string()).nullable().optional(),registry_config:Jm.nullable().optional(),simple_mode:Wm.nullable().optional(),default_home_agents:Km.nullable().optional(),createdAt:MY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:MY.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(P1(Z),await Z.access.check(),Z.organization&&Z.organization.id!==$.organizationId)throw Error("Cannot update settings for a different organization");let G=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents});return{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}})});import{z as tJ}from"zod";var st0,Sg1,Cg1;var et0=D(()=>{p1();gU();st0=mN.extend({organizationId:tJ.string(),archivedAt:tJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:tJ.string().describe("ISO 8601 timestamp"),updatedAt:tJ.string().describe("ISO 8601 timestamp")}),Sg1=Z1({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:tJ.object({includeArchived:tJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:tJ.object({items:tJ.array(st0)}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(G,{includeArchived:$.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),Cg1=Z1({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:tJ.object({id:tJ.string().describe("Brand context ID")}),outputSchema:st0.extend({organizationId:tJ.string()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.get($.id,G);if(!X)throw Error("Brand context not found");return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as vL}from"zod";var $o0,_g1,bg1,vg1;var Zo0=D(()=>{p1();gU();$o0=mN.extend({organizationId:vL.string(),createdAt:vL.string().describe("ISO 8601 timestamp"),updatedAt:vL.string().describe("ISO 8601 timestamp")}),_g1=Z1({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:mN.omit({id:!0}),outputSchema:$o0,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.create(G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}}),bg1=Z1({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:mN.partial().required({id:!0}),outputSchema:$o0,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,G))throw Error("Brand context not found");let{id:Q,...Y}=$;if(Y.isDefault===!0)await Z.storage.brandContext.setDefault(Q,G);let J=await Z.storage.brandContext.update(Q,G,{name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo!==void 0?Y.logo??null:void 0,favicon:Y.favicon!==void 0?Y.favicon??null:void 0,ogImage:Y.ogImage!==void 0?Y.ogImage??null:void 0,fonts:Y.fonts!==void 0?Y.fonts??null:void 0,colors:Y.colors!==void 0?Y.colors??null:void 0,images:Y.images!==void 0?Y.images??null:void 0,metadata:Y.metadata!==void 0?Y.metadata??null:void 0,archivedAt:Y.archivedAt!==void 0?Y.archivedAt??null:void 0,isDefault:Y.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),vg1=Z1({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vL.object({id:vL.string().describe("Brand context ID")}),outputSchema:vL.object({success:vL.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,G))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function I41($,Z,G){let X=$.trim();if(!X.startsWith("http"))X=`https://${X}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:X,formats:["branding"]})});if(!Q.ok){let N=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${N.slice(0,200)}`)}let Y=await Q.json();if(!Y.success||!Y.data?.branding)return null;let J=Y.data.branding,W=Y.data.metadata??{},K=ky8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((N)=>N.trim()).filter(Boolean)?.slice().sort((N,O)=>N.length-O.length)[0]??W.ogSiteName??G??$,domain:$,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function ky8($,Z){let G=$.images??{},X=$.colors??{},Q={};for(let[F,H]of Object.entries(X))if(typeof H==="string"&&H&&qy8.has(F))Q[F]=H;let Y={},W=($.typography??{}).fontFamilies??{};for(let[F,H]of Object.entries(W))if(typeof H==="string"&&H){let N=My8[F.toLowerCase()];if(N&&!Y[N])Y[N]=H}let K=$.fonts;if(Array.isArray(K))for(let F of K){let H=F.family;if(typeof H==="string"&&H&&!Y.body)Y.body=H}let U={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)U[F]=$[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??Z.ogImage??null,fonts:Object.keys(Y).length>0?Y:null,colors:Object.keys(Q).length>0?Q:null,metadata:U}}var qy8,My8;var fg1=D(()=>{qy8=new Set(["primary","secondary","accent","background","foreground"]),My8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as T41}from"zod";var Vy8,xg1;var Go0=D(()=>{p1();fg1();gU();Vy8=mN.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:T41.boolean()}),xg1=Z1({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:T41.object({domain:T41.string().describe("Website domain to extract brand from"),brandId:T41.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:Vy8,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=Z.firecrawlApiKey;if(!X)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await I41($.domain,X,$.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let Y={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,G))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,G,Y)})():await Z.storage.brandContext.create(G,Y);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function Xo0($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(Z).filter(([X])=>X!=="tagline"&&X!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var yg1,gg1;var Qo0=D(()=>{h_1();p1();yg1=Z1({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_01,outputSchema:Kc,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=$.id?await Z.storage.brandContext.get($.id,G):await Z.storage.brandContext.getDefault(G);if(!X)throw Error($.id?"Brand not found":"No default brand configured");return Xo0(X)}}),gg1=Z1({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:b01,outputSchema:v01,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(G)).map(Xo0)}}})});import{z as q41}from"zod";var hg1;var Yo0=D(()=>{p1();hg1=Z1({name:"ORGANIZATION_DOMAIN_GET",description:"Get the claimed email domain for an organization.",annotations:{title:"Get Organization Domain",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q41.object({}),outputSchema:q41.object({domain:q41.string().nullable(),autoJoinEnabled:q41.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.organizationDomains.getByOrganizationId(G.id);return{domain:X?.domain??null,autoJoinEnabled:X?.autoJoinEnabled??!1}}})});import{z as EX}from"zod";var Sy8,ug1,cg1,lg1;var Jo0=D(()=>{p1();uU();Sy8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,ug1=Z1({name:"ORGANIZATION_DOMAIN_SET",description:"Claim an email domain for an organization. The caller's verified email must match the domain.",annotations:{title:"Set Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({domain:EX.string().min(1).max(255).describe("Email domain to claim (e.g. 'acme.com')"),autoJoinEnabled:EX.boolean().optional().default(!1).describe("Whether users with matching email domain can auto-join")}),outputSchema:EX.object({domain:EX.string(),autoJoinEnabled:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=$.domain.toLowerCase().trim();if(!Sy8.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(hU.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);let Q=Z.auth.user?.email;if(!Q)throw Error("User email is required to claim a domain.");if(!Z.auth.user?.emailVerified)throw Error("Email must be verified before claiming a domain.");let Y=Q.split("@")[1]?.toLowerCase();if(Y!==X)throw Error(`You can only claim your own email domain ("${Y}"), not "${X}".`);let J=await Z.storage.organizationDomains.getByOrganizationId(G.id);if(J&&J.domain!==X)throw Error(`This organization already claims "${J.domain}". Clear it first before claiming a new domain.`);let W=await Z.storage.organizationDomains.setDomain(G.id,X,$.autoJoinEnabled);return{domain:W.domain,autoJoinEnabled:W.autoJoinEnabled}}}),cg1=Z1({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Update auto-join setting for the organization's already-claimed domain.",annotations:{title:"Update Organization Domain Settings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({autoJoinEnabled:EX.boolean().describe("Whether users with matching email domain can auto-join")}),outputSchema:EX.object({domain:EX.string(),autoJoinEnabled:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.organizationDomains.getByOrganizationId(G.id))throw Error("No domain claimed for this organization.");let Q=await Z.storage.organizationDomains.updateAutoJoin(G.id,$.autoJoinEnabled);return{domain:Q.domain,autoJoinEnabled:Q.autoJoinEnabled}}}),lg1=Z1({name:"ORGANIZATION_DOMAIN_CLEAR",description:"Remove the claimed email domain for an organization.",annotations:{title:"Clear Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({}),outputSchema:EX.object({success:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);return await Z.storage.organizationDomains.clearDomain(G.id),{success:!0}}})});import{z as wX}from"zod";var dg1;var Wo0=D(()=>{N5();p1();dg1=Z1({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:wX.object({organizationId:wX.string().optional(),userId:wX.string(),role:wX.array(wX.string())}),outputSchema:wX.object({id:wX.string(),organizationId:wX.string(),userId:wX.string(),role:wX.union([wX.string(),wX.array(wX.string())]),createdAt:wX.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.addMember({organizationId:G,userId:$.userId,role:$.role});if(!X)throw Error("Failed to add member");let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:$.userId,role:$.role}});return{...X,role:X.role,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as pv}from"zod";var mg1;var Ko0=D(()=>{N5();p1();mg1=Z1({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pv.object({organizationId:pv.string().optional(),memberIdOrEmail:pv.string()}),outputSchema:pv.object({success:pv.boolean(),memberIdOrEmail:pv.string()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");await Z.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:$.memberIdOrEmail});let X=D$(Z);if(X)w$.capture({distinctId:X,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as t7}from"zod";var ig1;var Uo0=D(()=>{p1();ig1=Z1({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:t7.object({limit:t7.number().optional(),offset:t7.number().optional()}),outputSchema:t7.object({members:t7.array(t7.object({id:t7.string(),organizationId:t7.string(),userId:t7.string(),role:t7.string(),createdAt:t7.string().datetime().describe("ISO 8601 timestamp"),user:t7.object({id:t7.string(),name:t7.string(),email:t7.string(),image:t7.string().optional()}).optional()}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.listMembers({organizationId:G,limit:$.limit,offset:$.offset});return{members:(Array.isArray(X)?X:[]).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}}})});import{z as _Z}from"zod";var ng1;var Fo0=D(()=>{N5();p1();ng1=Z1({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_Z.object({organizationId:_Z.string().optional(),memberId:_Z.string(),role:_Z.array(_Z.string())}),outputSchema:_Z.object({id:_Z.string(),organizationId:_Z.string(),userId:_Z.string(),role:_Z.union([_Z.literal("admin"),_Z.literal("member"),_Z.literal("owner")]),createdAt:_Z.string().datetime().describe("ISO 8601 timestamp"),user:_Z.object({email:_Z.string(),name:_Z.string(),image:_Z.string().optional()})}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.updateMemberRole({organizationId:G,memberId:$.memberId,role:$.role});if(!X)throw Error("Failed to update member role");Z.invalidateMemberRole?.(X.userId,G);let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:$.memberId,target_user_id:X.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});var Ho0=D(()=>{mt0();it0();nt0();pt0();tt0();rt0();at0();et0();Zo0();Go0();Qo0();Yo0();Jo0();Wo0();Ko0();Uo0();Fo0()});import{z as nN}from"zod";var pg1;var No0=D(()=>{p1();pg1=Z1({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nN.object({}),outputSchema:nN.object({tags:nN.array(nN.object({id:nN.string(),organizationId:nN.string(),name:nN.string(),createdAt:nN.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);return{tags:(await Z.storage.tags.listOrgTags(G.id)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as pN}from"zod";var tg1;var Oo0=D(()=>{p1();tg1=Z1({name:"TAGS_CREATE",description:"Create a new tag that can be assigned to organization members.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:pN.object({name:pN.string().min(1).max(50).describe("Tag name")}),outputSchema:pN.object({tag:pN.object({id:pN.string(),organizationId:pN.string(),name:pN.string(),createdAt:pN.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.tags.createTag(G.id,$.name);return{tag:{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():String(X.createdAt)}}}})});import{z as M41}from"zod";var og1;var Bo0=D(()=>{p1();og1=Z1({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:M41.object({tagId:M41.string().describe("Tag ID to delete")}),outputSchema:M41.object({success:M41.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.tags.getTag($.tagId);if(!X)throw Error("Tag not found");if(X.organizationId!==G.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as cU}from"zod";var rg1;var Do0=D(()=>{p1();rg1=Z1({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cU.object({memberId:cU.string().describe("Member ID")}),outputSchema:cU.object({tags:cU.array(cU.object({id:cU.string(),organizationId:cU.string(),name:cU.string(),createdAt:cU.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,G.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as kY}from"zod";var ag1;var Lo0=D(()=>{p1();ag1=Z1({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:kY.object({memberId:kY.string().describe("Member ID"),tagIds:kY.array(kY.string()).describe("Array of tag IDs to assign")}),outputSchema:kY.object({success:kY.boolean(),tags:kY.array(kY.object({id:kY.string(),organizationId:kY.string(),name:kY.string(),createdAt:kY.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,G.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Y of $.tagIds){let J=await Z.storage.tags.getTag(Y);if(!J)throw Error(`Tag not found: ${Y}`);if(J.organizationId!==G.id)throw Error(`Tag does not belong to this organization: ${Y}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});var Eo0=D(()=>{No0();Oo0();Bo0();Do0();Lo0()});function AW($,Z=Date.now()){let G=$.status;if(G==="in_progress"){let X=new Date($.updated_at).getTime();if(!Number.isFinite(X)||Z-X>1800000)G="expired"}return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,created_at:$.created_at,updated_at:$.updated_at,created_by:$.created_by,updated_by:$.updated_by,hidden:$.hidden??!1,status:G,virtual_mcp_id:$.virtual_mcp_id||void 0,trigger_id:$.trigger_id,branch:$.branch,sandbox_provider_kind:$.sandbox_provider_kind,harness_id:$.harness_id,metadata:$.metadata&&Object.keys($.metadata).length>0?$.metadata:void 0,run_config:$.run_config}}var wo0=D(()=>{V8()});import{z as t$}from"zod";var zo0,by8,jo0,RW,Po0,Ao0;var fL=D(()=>{wo0();zo0=t$.object({id:t$.string().describe("Unique message ID"),thread_id:t$.string().describe("ID of the parent thread"),metadata:t$.unknown().optional().describe("Optional message metadata"),parts:t$.array(t$.record(t$.string(),t$.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:t$.enum(["user","assistant","system"]).describe("Message role"),created_at:t$.string().datetime().describe("Timestamp of creation"),updated_at:t$.string().datetime().describe("Timestamp of last update")}),by8=t$.object({toolName:t$.string().describe("Fully qualified tool name"),appId:t$.string().describe("App ID that owns the tool"),args:t$.record(t$.string(),t$.unknown()).describe("Arguments used when expanding the tool"),expandedAt:t$.string().datetime().describe("When the tool was expanded")}),jo0=t$.object({expanded_tools:t$.array(by8).optional()}).catchall(t$.unknown()),RW=t$.object({id:t$.string().describe("Unique thread ID"),organization_id:t$.string().describe("Organization this thread belongs to"),title:t$.string().describe("Thread title"),description:t$.string().nullable().describe("Thread description"),created_at:t$.string().datetime().describe("Timestamp of creation"),updated_at:t$.string().datetime().describe("Timestamp of last update"),hidden:t$.boolean().optional().describe("Whether the thread is hidden"),status:t$.enum([...yC,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:t$.string().describe("User ID who created the thread"),updated_by:t$.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:t$.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:t$.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:t$.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:t$.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:t$.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:jo0.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:t$.record(t$.string(),t$.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),Po0=t$.object({id:t$.string().optional().describe("Optional custom ID for the thread"),title:t$.string().optional().describe("Thread title"),description:t$.string().nullish().describe("Thread description"),virtual_mcp_id:t$.string().describe("Virtual MCP (agent) this thread is bound to"),branch:t$.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),Ao0=t$.object({title:t$.string().optional().describe("New thread title"),description:t$.string().nullish().describe("New thread description"),hidden:t$.boolean().optional().describe("Whether the thread is hidden"),status:t$.enum(["requires_action","failed","in_progress","completed"]).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:jo0.optional().describe("Full replacement of the thread's metadata object"),branch:t$.string().nullish().describe("New git branch for this thread")})});function k41(){let $=Ro0[Math.floor(Math.random()*Ro0.length)],Z=Io0[Math.floor(Math.random()*Io0.length)];return`deco/${$}-${Z}`}var Ro0,Io0;var sg1=D(()=>{Ro0=["amber","bold","bright","calm","crimson","coral","daring","deep","dusty","eager","faint","fierce","frozen","gentle","golden","grand","green","hollow","iron","ivory","keen","lasting","lunar","mellow","misty","noble","olive","pale","prime","quiet","rapid","rustic","serene","sharp","silver","sleek","solar","stark","still","swift","tawny","tender","thin","true","vast","velvet","warm","wild","young","zen"],Io0=["anchor","birch","brook","cedar","cliff","cove","crane","dune","echo","ember","falcon","fern","flint","forge","frost","glade","grove","harbor","hawk","iris","jade","lark","maple","marsh","mesa","opal","orbit","peak","pine","plume","quartz","rapids","reef","ridge","river","sage","shore","slate","spruce","stone","summit","thorn","tide","trail","vale","wren","aspen","delta","crest","spark"]});import{z as To0}from"zod";function xy8($,Z){let G=$?.[Z];if(!G)return;return Object.entries(G).sort(([,Q],[,Y])=>{let J=Math.max(0,...Object.values(Q).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0))-J})[0]?.[0]}var vy8,fy8,eg1;var qo0=D(()=>{N5();p1();fL();tX();sg1();vy8=To0.object({data:Po0.describe("Data for the new thread (id is auto-generated if not provided)")}),fy8=To0.object({item:RW.describe("The created thread entity")});eg1=Z1({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vy8,outputSchema:fy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to create thread");let{data:Q}=$,Y=Q.id??V6("thrd"),J=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,G.id);if(!J)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,U=null;if(K)U=Q.branch??xy8(W?.sandboxMap,X)??k41();let F=await Z.storage.threads.create({id:Y,organization_id:G.id,title:Q.title,description:Q.description,virtual_mcp_id:Q.virtual_mcp_id,branch:U,created_by:X});return w$.capture({distinctId:X,event:"chat_started",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:Y,has_title:!!$.data.title,created_via:"tool"}}),{item:AW(F)}}})});import{z as jQ}from"zod";var yy8,gy8,$h1;var Mo0=D(()=>{ZX();p1();fL();yy8=wJ.extend({where:jQ.object({created_by:jQ.string().optional(),trigger_ids:jQ.array(jQ.string()).optional(),virtual_mcp_id:jQ.string().optional(),hidden:jQ.boolean().optional(),has_trigger:jQ.boolean().optional()}).optional(),startDate:jQ.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:jQ.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:jQ.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:jQ.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:jQ.string().optional().describe("Filter by the user who created the thread"),agentId:jQ.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),gy8=oK(RW),$h1=Z1({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:yy8,outputSchema:gy8,handler:async($,Z)=>{await Z.access.check();let G=Z.auth.user?.id;if(!G)throw Error("User ID required to list threads");H1(Z);let X=$.offset??0,Q=$.limit??100,Y=$.where?.trigger_ids,J=$.where?.virtual_mcp_id,W=$.userId??($.where?.created_by==="me"?G:$.where?.created_by),{threads:K,total:U}=Y?.length?await Z.storage.threads.listByTriggerIds(Y,{limit:Q,offset:X}):await Z.storage.threads.list(W,{limit:Q,offset:X,virtualMcpId:J,startDate:$.startDate,endDate:$.endDate,search:$.search,status:$.status,agentId:$.agentId,includeArchived:$.where?.hidden,hasTrigger:$.where?.has_trigger}),F=X+Q<U,H=Date.now();return{items:K.map((N)=>AW(N,H)),totalCount:U,hasMore:F}}})});var hy8,Zh1;var ko0=D(()=>{ZX();p1();fL();hy8=oh(RW),Zh1=Z1({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:th,outputSchema:hy8,handler:async($,Z)=>{P1(Z),H1(Z),await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)return{item:null};return{item:AW(G)}}})});import{z as Gh1}from"zod";var uy8,cy8,Xh1;var Vo0=D(()=>{N5();p1();fL();uy8=Gh1.object({id:Gh1.string().describe("ID of the thread to update"),data:Ao0.describe("Partial thread data to update")}),cy8=Gh1.object({item:RW.describe("The updated thread entity")}),Xh1=Z1({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uy8,outputSchema:cy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to update thread");let{id:Q,data:Y}=$,J=await Z.storage.threads.get(Q);if(!J)throw Error("Thread not found in organization");if(Y.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,H1(Z).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:Y.title,description:Y.description,hidden:Y.hidden,updated_by:X};if(Y.status)W.status=Y.status;if(Y.metadata!==void 0)W.metadata=Y.metadata;if(Y.branch!==void 0)W.branch=Y.branch;let K=await Z.storage.threads.update(Q,W);if(Y.hidden!==void 0&&Y.hidden!==J.hidden)w$.capture({distinctId:X,event:Y.hidden?"chat_archived":"chat_unarchived",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:Q}});return{item:AW(K)}}})});var Qh1;var So0=D(()=>{ZX();N5();p1();fL();Qh1=Z1({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:rh,outputSchema:ah(RW),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.threads.get($.id);if(!X)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"chat_deleted",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:$.id}});return{item:AW(X)}}})});import{z as ly8}from"zod";function Co0($){if(!$)return null;if("field"in $&&$.field[0]==="thread_id"&&$.operator==="eq")return String($.value);if("conditions"in $)for(let Z of $.conditions){let G=Co0(Z);if(G)return G}return null}var dy8,my8,Yh1;var _o0=D(()=>{ZX();p1();fL();dy8=wJ.extend({thread_id:ly8.string().optional().describe("ID of the thread to list messages for (required)")}),my8=oK(zo0),Yh1=Z1({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:dy8,outputSchema:my8,handler:async($,Z)=>{H1(Z),await Z.access.check();let G=$.thread_id??Co0($.where);if(!G)throw Error("thread_id is required (provide as top-level param or in where clause)");let X=$.offset??0,Q=$.limit??100,Y=$.orderBy?.[0]?.direction??"asc",J=await Z.storage.threads.get(G);if(!J)return{items:[],totalCount:0,hasMore:!1};if(J.message_storage_version===2){let{messages:F,total:H}=await Z.storage.threads.messageParts().loadWindow(G,{limit:Q,offset:X});return{items:F.map((N)=>({id:N.id,thread_id:G,role:N.role,parts:N.parts,metadata:N.metadata??null,created_at:N.created_at,updated_at:N.created_at})),totalCount:H,hasMore:X+Q<H}}let{messages:W,total:K}=await Z.storage.threads.listMessages(G,{limit:Q,offset:X,sort:Y}),U=X+Q<K;return{items:W,totalCount:K,hasMore:U}}})});var bo0=D(()=>{qo0();Mo0();ko0();Vo0();So0();_o0()});function ny8($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function py8($){return $.map((Z)=>{let G=Z.metadata;if(G?.tiptapDoc)return Z;let X=Z.parts.find((Q)=>Q.type==="text"&&typeof Q.text==="string");if(!X?.text||typeof X.text!=="string")return Z;return{...Z,metadata:{...G,tiptapDoc:ny8(X.text)}}})}function V41($){let Z;if(typeof $==="string")try{let G=JSON.parse($);if(Array.isArray(G)&&G.length>0&&G[0]?.role&&Array.isArray(G[0]?.parts))Z=G;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return py8(Z)}import{z as W5}from"zod";var Jh1;var vo0=D(()=>{N5();p1();gU();Jh1=Z1({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:W5.object({name:W5.string().min(1).max(255),virtual_mcp_id:W5.string(),messages:W5.union([W5.string(),W5.array(W5.looseObject({id:W5.string().optional(),role:W5.enum(["user","assistant","system"]),parts:W5.array(W5.record(W5.string(),W5.unknown())),metadata:W5.unknown().optional()}))]),models:W5.object({tier:R41,modelId:W5.string().optional(),credentialId:W5.string().optional()}).loose().default({tier:"smart"}),tools:W5.array(W5.string()).nullable().optional(),maxAgentSteps:W5.number().int().min(1).max(100).nullable().optional(),temperature:W5.number().default(0.5),active:W5.boolean().default(!0)}),outputSchema:W5.object({id:W5.string(),name:W5.string(),active:W5.boolean(),created_at:W5.string()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("Unable to determine user identity");let Q=V41($.messages),Y=await Z.storage.automations.create({organization_id:G.id,created_by:X,name:$.name,messages:JSON.stringify(Q),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return w$.capture({distinctId:X,event:"automation_created",groups:{organization:G.id},properties:{organization_id:G.id,automation_id:Y.id,virtual_mcp_id:$.virtual_mcp_id,active:Y.active,tier:$.models.tier}}),{id:Y.id,name:Y.name,active:Y.active,created_at:Y.created_at}}})});import{z as e6}from"zod";var Wh1;var fo0=D(()=>{p1();Wh1=Z1({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:e6.object({id:e6.string()}),outputSchema:e6.object({automation:e6.object({id:e6.string(),name:e6.string(),active:e6.boolean(),created_by:e6.string(),created_at:e6.string(),updated_at:e6.string(),virtual_mcp_id:e6.string(),messages:e6.unknown(),models:e6.unknown(),tools:e6.array(e6.string()).nullable(),maxAgentSteps:e6.number().nullable(),temperature:e6.number(),triggers:e6.array(e6.object({id:e6.string(),type:e6.enum(["cron","event","webhook"]),cron_expression:e6.string().nullable(),connection_id:e6.string().nullable(),event_type:e6.string().nullable(),params:e6.unknown().nullable(),last_run_at:e6.string().nullable(),api_key_id:e6.string().nullable(),created_at:e6.string()}))}).nullable()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.automations.findById($.id,G.id);if(!X)return{automation:null};let Q=await Z.storage.automations.listTriggers(X.id);return{automation:{id:X.id,name:X.name,active:X.active,created_by:X.created_by,created_at:X.created_at,updated_at:X.updated_at,virtual_mcp_id:X.virtual_mcp_id,messages:JSON.parse(X.messages),models:JSON.parse(X.models),tools:X.tools?JSON.parse(X.tools):null,maxAgentSteps:X.max_agent_steps,temperature:X.temperature,triggers:Q.map((Y)=>({id:Y.id,type:Y.type,cron_expression:Y.cron_expression,connection_id:Y.connection_id,event_type:Y.event_type,params:Y.params?JSON.parse(Y.params):null,last_run_at:Y.last_run_at,api_key_id:Y.api_key_id,created_at:Y.created_at}))}}}})});import{z as PQ}from"zod";var Kh1;var xo0=D(()=>{p1();Kh1=Z1({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:PQ.object({virtual_mcp_id:PQ.string().optional().nullable()}),outputSchema:PQ.object({automations:PQ.array(PQ.object({id:PQ.string(),name:PQ.string(),active:PQ.boolean(),created_by:PQ.string(),created_at:PQ.string(),trigger_count:PQ.number(),nearest_next_run_at:PQ.string().nullable(),virtual_mcp_id:PQ.string()}))}),handler:async($,Z)=>{P1(Z);let G=H1(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(G.id,$.virtual_mcp_id)).map((Y)=>({id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,trigger_count:Y.trigger_count,nearest_next_run_at:Y.nearest_next_run_at,virtual_mcp_id:Y.virtual_mcp_id}))}}})});import{DBOS as tv}from"@dbos-inc/dbos-sdk";async function oy8($,Z){for(let G=0;G<Z.maxAttempts;G++){if(Z.signal?.aborted)throw Z.signal.reason??Error("gate aborted");let X=await $();if(ty8.has(X))return X;if(G<Z.maxAttempts-1)await j6(Z.intervalMs,{signal:Z.signal}).catch(()=>{})}throw Error(`[threadGate] gate timed out polling for terminal status (${Z.maxAttempts} attempts)`)}function ry8($){return $.isPullCapable&&$.sandboxProviderKind==="user-desktop"}function Hh1($){Uh1=$}function ay8(){if(!Uh1)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return Uh1}async function sy8($){let Z=ay8(),{request:G}=$,X=await Z.meshContextFactory(G.organizationId,G.userId);if(!X)throw Error("user membership lost mid-dispatch");let Q=Z.pullDispatchFn!=null&&Z.workQueue!=null;if(!ry8({isPullCapable:Q,sandboxProviderKind:G.target?.sandboxProviderKind})){let U=$.timeoutMs??Z.runTimeoutMs,F=new AbortController,H=U!=null?setTimeout(()=>F.abort(),U):null;try{await Z.dispatchRunFn({...G,abortSignal:F.signal},X,Z.deps)}finally{if(H!==null)clearTimeout(H)}return}let J=$.timeoutMs??Z.runTimeoutMs,W=new AbortController,K=J!=null?setTimeout(()=>W.abort(),J):null;try{let{taskId:U,runFenceToken:F,harnessInput:H,messagesRef:N,sandboxConfig:O,orgSlug:B}=await Z.pullDispatchFn({...G,abortSignal:W.signal},X,Z.deps),L={runId:U,threadId:G.taskId??$.threadId,orgId:G.organizationId,userId:G.userId,runFenceToken:F,harnessInput:H,...O?{sandbox:O}:{},orgSlug:B,...N?{messagesRef:N}:{}};await Z.workQueue.publish(G.userId,L);let w=Z.gatePollIntervalMs??3000,z=Z.gatePollMaxAttempts??1200;await oy8(async()=>{return(await X.storage.threads.get(U))?.status??"unknown"},{intervalMs:w,maxAttempts:z,signal:W.signal})}finally{if(K!==null)clearTimeout(K)}}async function ey8($){if($.source!=="user-message")return;let{request:Z}=$;w$.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function $g8($,Z){if($.source!=="user-message")return;let{request:G}=$;w$.capture({distinctId:G.userId,event:"chat_message_failed",groups:{organization:G.organizationId},properties:{organization_id:G.organizationId,thread_id:G.taskId??$.threadId,agent_id:G.agent,model_id:G.models.thinking.id,mode:G.mode,error_category:"setup",error_message:Z}})}async function Zg8($){await tv.runStep(()=>ey8($),{name:"trackMessageStarted"});try{await tv.runStep(()=>sy8($),{name:"dispatchRunAndWait",retriesAllowed:!1})}catch(Z){let G=Z instanceof Error?Z.message:String(Z);throw await tv.runStep(()=>$g8($,G),{name:"trackMessageFailed"}),Z}return{taskId:$.request.taskId??$.threadId}}async function Nh1($,Z){return{workflowID:(await tv.startWorkflow(yo0,{queueName:Um,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}async function Oh1($,Z){return await(await tv.startWorkflow(yo0,{queueName:Um,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).getResult()}var Um="thread-gate",ty8,Fh1=1,Uh1=null,yo0;var go0=D(()=>{N5();gZ();ty8=new Set(["completed","failed","requires_action"]);yo0=tv.registerWorkflow(Zg8,{name:"threadGateWorkflow"})});var S41=D(()=>{go0()});async function Bh1($,Z,G){let X;try{return await Promise.race([$.aiProviders.listModels(Z,G),new Promise((Y,J)=>{X=setTimeout(()=>J(Error("listModels timeout")),Gg8)})])}finally{if(X)clearTimeout(X)}}function Xg8($,Z){switch($){case"fast":return Z.chat.fast;case"smart":return Z.chat.smart;case"thinking":return Z.chat.thinking;case"image":return Z.image;case"web_research":return Z.webResearch}}function Dh1($,Z,G){let X=$.find((Q)=>Q.modelId===Z);return{title:X?.title??G??Z,providerId:X?.providerId,capabilities:X?.capabilities,limits:X?.limits??null}}async function xL($,Z){let G=$.organization?.id;if(!G)throw Error("resolveTier called without an organization");let Q=(await $.storage.organizationSettings.get(G))?.simple_mode?.tiers?.[Z]??null,Y=await $.storage.aiProviderKeys.list({organizationId:G});if(Q&&Y.some((F)=>F.id===Q.keyId)){let F=await Bh1($,Q.keyId,G).catch(()=>[]);return{credentialId:Q.keyId,modelId:Q.modelId,modelMeta:Dh1(F,Q.modelId,Q.title)}}if(Y.length===0)throw new ov(Z);let J={};await Promise.all(Y.map(async(F)=>{J[F.id]=await Bh1($,F.id,G).catch(()=>[])}));let W=Y.map((F)=>({id:F.id,providerId:F.providerId,label:F.label,presetId:F.presetId,createdBy:F.createdBy,createdAt:F.createdAt})),K=yq1(W,J),U=Xg8(Z,K);if(!U)throw new ov(Z);return{credentialId:U.keyId,modelId:U.modelId,modelMeta:Dh1(J[U.keyId]??[],U.modelId,U.title)}}async function ho0($,Z,G){let X=$.organization?.id;if(!X)throw Error("resolveSpecificModel called without an organization");let Q=await Bh1($,Z,X).catch(()=>[]);return{credentialId:Z,modelId:G,modelMeta:Dh1(Q,G)}}async function rv($,Z){try{return await xL($,Z)}catch(G){if(G instanceof ov)return null;return console.warn(`[resolveTier] tier "${Z}" resolution failed:`,G),null}}var ov,Gg8=5000;var C41=D(()=>{V8();ov=class ov extends Error{tier;constructor($){super(`No model available for tier "${$}". Connect a provider or configure the tier in organization settings.`);this.tier=$;this.name="TierUnavailableError"}}});function uo0($){return $ instanceof Fm||typeof $==="object"&&$!==null&&$.permanent===!0}var Fm;var Lh1=D(()=>{Fm=class Fm extends Error{permanent=!0;code;constructor($,Z){super(Z);this.name="PermanentRunError",this.code=$}}});function Qg8($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((G)=>typeof G==="string"))return Z.length>0?Z:null}catch{}return null}function co0($,Z,G,X){return{messages:JSON.parse($.messages).map((W)=>({...W,id:crypto.randomUUID()})),models:{credentialId:X.credentialId,thinking:X.thinking,...X.image?{image:X.image}:{},...X.deepResearch?{deepResearch:X.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:Qg8($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,triggerId:Z??void 0,taskId:G}}function o7($,Z,G,X,Q,Y,J,W){return o7.fromTZ(o7.tp($,Z,G,X,Q,Y,J),W)}function Eh1($,Z=new Date){let G=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],X=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${X} GMT`)-Date.parse(`${X} ${G}`)}function Yg8($,Z){let G=new Date(Date.parse($));if(isNaN(G))throw Error("minitz: Invalid ISO8601 passed to parser.");let X=$.substring(9);return $.includes("Z")||X.includes("-")||X.includes("+")?o7.tp(G.getUTCFullYear(),G.getUTCMonth()+1,G.getUTCDate(),G.getUTCHours(),G.getUTCMinutes(),G.getUTCSeconds(),"Etc/UTC"):o7.tp(G.getFullYear(),G.getMonth()+1,G.getDate(),G.getHours(),G.getMinutes(),G.getSeconds(),Z)}function Jg8($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new VY($.startAt,$.timezone)),$.stopAt&&($.stopAt=new VY($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function Hm($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function Wg8($){return Hm($)}function Kg8($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var wh1=32,Nm,io0,lo0=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new VY(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,Nm),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,G,X){let Q=this[$],Y=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Y)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Q.fill(X);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],G,X);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,G,X):Z.indexOf("-")!==-1?this.handleRange(Z,$,G,X):Z.indexOf("/")!==-1?this.handleStepping(Z,$,G,X):Z!==""&&this.handleNumber(Z,$,G,X)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,G,X){let Q=this.extractNth($,Z),Y=parseInt(Q[0],10)+G;if(isNaN(Y))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Y,Q[1]||X)}setPart($,Z,G){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,G);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=G}handleRangeWithStepping($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Y===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=Y,U=parseInt(J,10)+G,F=parseInt(W,10)+G,H=parseInt(K,10);if(isNaN(U))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(H===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(H>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(U>F)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let N=U;N<=F;N+=H)this.setPart(Z,N,Q[1]||X)}extractNth($,Z){let G=$,X;if(G.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");X=G.split("#")[1],G=G.split("#")[0]}return[G,X]}handleRange($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].split("-");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Y[0],10)+G,W=parseInt(Y[1],10)+G;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=J;K<=W;K++)this.setPart(Z,K,Q[1]||X)}handleStepping($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].split("/");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Y[0]===""&&(Y[0]="*");let J=0;Y[0]!=="*"&&(J=parseInt(Y[0],10)+G);let W=parseInt(Y[1],10);if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(W===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(W>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let K=J;K<this[Z].length;K+=W)this.setPart(Z,K,Q[1]||X)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|wh1;else if(Z===Nm)this.dayOfWeek[$]=Nm;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|io0[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},do0,lU,VY=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,G){if(this.tz=G,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,G,X,Q){let Y=new Date(Date.UTC(Z,G,X)).getUTCDay(),J=0;for(let W=1;W<=X;W++)new Date(Date.UTC(Z,G,W)).getUTCDay()===Y&&J++;if(Q&Nm&&io0[J-1]&Q)return!0;if(Q&wh1){let W=new Date(Date.UTC(Z,G+1,0)).getUTCDate();for(let K=X+1;K<=W;K++)if(new Date(Date.UTC(Z,G,K)).getUTCDay()===Y)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let G=o7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=G.s,this.minute=G.i,this.hour=G.h,this.day=G.d,this.month=G.m-1,this.year=G.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>do0[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let G=o7.fromTZISO(Z);this.ms=G.getUTCMilliseconds(),this.second=G.getUTCSeconds(),this.minute=G.getUTCMinutes(),this.hour=G.getUTCHours(),this.day=G.getUTCDate(),this.month=G.getUTCMonth(),this.year=G.getUTCFullYear(),this.apply()}else return this.fromDate(o7.fromTZISO(Z,this.tz))}findNext(Z,G,X,Q){let Y=this[G],J;X.lastDayOfMonth&&(this.month!==1?J=do0[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!X.starDOW&&G=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[G]+Q;K<X[G].length;K++){let U=X[G][K];if(G==="day"&&X.lastDayOfMonth&&K-Q==J&&(U=1),G==="day"&&!X.starDOW){let F=X.dayOfWeek[(W+(K-Q-1))%7];if(F&&F&Nm)F=this.isNthWeekdayOfMonth(this.year,this.month,K-Q,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!X.starDOM?U=U||F:U=U&&F}if(U)return this[G]=K-Q,Y!==this[G]?2:1}return 3}recurse(Z,G,X){let Q=this.findNext(G,lU[X][0],Z,lU[X][2]);if(Q>1){let Y=X+1;for(;Y<lU.length;)this[lU[Y][0]]=-lU[Y][2],Y++;if(Q===3)return this[lU[X][1]]++,this[lU[X][0]]=-lU[X][2],this.apply(),this.recurse(Z,G,0);if(this.apply())return this.recurse(Z,G,X-1)}return X+=1,X>=lU.length?this:this.year>=3000?null:this.recurse(Z,G,X)}increment(Z,G,X){return this.second+=G.interval!==void 0&&G.interval>1&&X?G.interval:1,this.ms=0,this.apply(),this.recurse(Z,G,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):o7.fromTZ(o7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},mo0=30000,_41,tN=class{name;options;_states;fn;constructor($,Z,G){let X,Q;if(Hm(Z))Q=Z;else if(typeof Z=="object")X=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Hm(G))Q=G;else if(typeof G=="object")X=G;else if(G!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=X?.name,this.options=Jg8(X),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:X?X.maxRuns:void 0,paused:X?X.paused:!1,pattern:new lo0("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new VY($,this.options.timezone||this.options.utcOffset):this._states.pattern=new lo0($,this.options.timezone),this.name){if(_41.find((Y)=>Y.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");_41.push(this)}return Q!==void 0&&Wg8(Q)&&(this.fn=Q,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let G=[],X=Z||this._states.currentRun||void 0;for(;$--&&(X=this.nextRun(X));)G.push(X);return G}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,G=this.fn!==void 0,X=!this._states.kill;return Z&&G&&X&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof VY||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new VY($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=_41.indexOf(this);$>=0&&_41.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),G=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||G===null?this:(Z>mo0&&(Z=mo0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(G),Z),this._states.currentTimeout&&this.options.unref&&Kg8(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new VY(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){Hm(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new VY($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,G=!this._states.paused&&Z.getTime()>=$.getTime(),X=this._states.blocking&&this.options.protect;G&&!X?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):G&&X&&Hm(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),G=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),G=!$),$=new VY($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let X=this._states.once||new VY($,this.options.timezone||this.options.utcOffset);return!G&&X!==this._states.once&&(X=X.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||X===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&X.getTime()>=this.options.stopAt.getTime()?null:X}_calculatePreviousRun($,Z){let G=new VY(void 0,this.options.timezone||this.options.utcOffset),X=$;if(this.options.startAt.getTime()<=G.getTime()){X=this.options.startAt;let Q=X.getTime()+this.options.interval*1000;for(;Q<=G.getTime();)X=new VY(X,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Q=X.getTime()+this.options.interval*1000;Z=!0}return X===null&&(X=void 0),[X,Z]}};var Om=D(()=>{o7.fromTZISO=($,Z,G)=>o7.fromTZ(Yg8($,Z),G);o7.fromTZ=function($,Z){let G=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),X=Eh1($.tz,G),Q=new Date(G.getTime()-X),Y=Eh1($.tz,Q);if(Y-X===0)return Q;{let J=new Date(G.getTime()-Y),W=Eh1($.tz,J);if(W-Y===0)return J;if(!Z&&W-Y>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Q}};o7.toTZ=function($,Z){let G=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),X=new Date(G);return{y:X.getFullYear(),m:X.getMonth()+1,d:X.getDate(),h:X.getHours(),i:X.getMinutes(),s:X.getSeconds(),tz:Z}};o7.tp=($,Z,G,X,Q,Y,J)=>({y:$,m:Z,d:G,h:X,i:Q,s:Y,tz:J});o7.minitz=o7;Nm=31|wh1,io0=[1,2,4,8,16],do0=[31,28,31,30,31,30,31,31,30,31,30,31],lU=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];_41=[]});function b41($,Z){try{return new tN($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var zh1=D(()=>{Om()});import{DBOS as O7,SchedulerMode as Ug8}from"@dbos-inc/dbos-sdk";function Bm($){return`${Fg8}${$}`}async function v41($){await O7.registerQueue(Bm($),{concurrency:Hg8,onConflict:"never_update"})}function Ah1($){Ph1=$}function yL(){if(!Ph1)throw Error("[automations] DBOS runtime not initialized \u2014 setAutomationRuntime() must run before workflows fire");return Ph1}function Og8($){if(!$||$.length===0)return;return{vision:$.includes("vision")||$.includes("image")||void 0,text:$.includes("text")||void 0,reasoning:$.includes("reasoning")||void 0,file:$.includes("file")||void 0}}async function Bg8($){let Z=yL(),G=await Z.storage.findById($.automationId,$.organizationId);if(!G)return{skip:"not_found"};if(!G.active)return{skip:"inactive"};let X=await Z.meshContextFactory(G.organization_id,G.created_by);if(!X)return console.warn(`[fireAutomationWorkflow] deactivating "${G.name}" \u2014 creator ${G.created_by} no longer in org ${G.organization_id}`),await Z.storage.deactivateAutomation(G.id),{skip:"creator_invalid"};let Q=JSON.parse(G.models),Y=Q.modelId&&Q.credentialId?{modelId:Q.modelId,credentialId:Q.credentialId}:null;if(!Y&&!Q.tier)console.warn(`[fireAutomationWorkflow] automation ${G.id} missing tier, defaulting to "smart"`);let J=Q.tier??"smart",[W,K,U]=await Promise.all([Y?ho0(X,Y.credentialId,Y.modelId):xL(X,J),rv(X,"image"),rv(X,"web_research")]),F=(N)=>({id:N.modelId,title:N.modelMeta.title,provider:N.modelMeta.providerId??null,capabilities:Og8(N.modelMeta.capabilities),limits:N.modelMeta.limits?{contextWindow:N.modelMeta.limits.contextWindow,maxOutputTokens:N.modelMeta.limits.maxOutputTokens??void 0}:void 0}),H={credentialId:W.credentialId,thinking:F(W),...K?{image:{...F(K),credentialId:K.credentialId}}:{},...U?{deepResearch:{...F(U),credentialId:U.credentialId}}:{}};return{automation:G,resolvedModel:H}}async function Dg8($,Z){return await yL().storage.createAutomationRunThread($,Z)}async function Lg8($){let Z=yL();try{let G=new Date().toISOString();await Z.storage.updateTriggerLastRunAt($,G);let X=await Z.storage.findTriggerById($);if(X?.cron_expression){let Q=b41(X.cron_expression,new Date);await Z.storage.updateNextRunAt($,Q?Q.toISOString():null)}}catch(G){console.warn(`[fireAutomationWorkflow] trigger ${$} run-time write failed:`,G instanceof Error?G.message:G)}}async function Eg8($,Z,G,X){if(!await yL().meshContextFactory($.organization_id,$.created_by))return{ok:!1,reason:"creator membership lost mid-fire"};let J=co0($,G.triggerId,X,Z);if(G.contextMessages&&G.contextMessages.length>0){let U=G.contextMessages.flatMap((H)=>H.parts),F=J.messages.find((H)=>H.role!=="system");if(F)F.parts=[...U,...F.parts];else J.messages=[...J.messages,{id:crypto.randomUUID(),role:"user",parts:U}]}let{abortSignal:W,...K}=J;return{ok:!0,request:K}}async function jh1($){let Z=yL();try{await Z.storage.markRunFailed($)}catch{}}async function wg8($){let Z=yL();try{await Z.storage.deactivateAutomation($)}catch{}}async function zg8($){let Z=await O7.runStep(()=>Bg8($),{name:"prepareFire"});if("skip"in Z)return{skipped:Z.skip};let G=await O7.runStep(()=>Dg8(Z.automation,$.triggerId),{name:"createRunThread"});if($.triggerId){let Y=$.triggerId;await O7.runStep(()=>Lg8(Y),{name:"updateTriggerTiming"})}let X=await O7.runStep(()=>Eg8(Z.automation,Z.resolvedModel,$,G),{name:"buildDispatchRequest"});if(!X.ok)return await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:X.reason};let Q=yL();try{await Oh1({threadId:G,request:X.request,timeoutMs:Q.runTimeoutMs??Ng8,source:"automation"})}catch(Y){let J=Y instanceof Error?Y.message:String(Y);if(uo0(Y))return console.warn(`[fireAutomationWorkflow] deactivating "${Z.automation.name}" (${Z.automation.id}) \u2014 permanent dispatch error, will not fire again: ${J}`),await O7.runStep(()=>wg8(Z.automation.id),{name:"deactivateAutomation"}),await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:J};return console.error(`[fireAutomationWorkflow] ERROR "${Z.automation.name}" taskId=${G}:`,J),await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:J}}return{taskId:G}}async function jg8($,Z){await v41(Z.organizationId),await O7.startWorkflow(f41,{queueName:Bm(Z.organizationId)})(Z)}async function Ig8(){let $=Date.now()-Pg8,Z=new Date($).toISOString(),G=0,X=0;while(X<200){let Q=await O7.listWorkflows({status:[...Rg8],endTime:Z,limit:no0,loadInput:!1,loadOutput:!1});if(Q.length===0)break;if(await O7.deleteWorkflows(Q.map((Y)=>Y.workflowID)),G+=Q.length,X++,Q.length<no0)break}return console.log(`[automations-gc] deleted ${G} workflow(s) in ${X} batch(es) (cutoff=${Z})`),{deleted:G,batches:X,cutoffMs:$}}async function Tg8($,Z){await O7.runStep(()=>Ig8(),{name:"automationsGarbageCollect"})}var Fg8="automations-org-",Hg8=10,Ng8=300000,Ph1=null,f41,po0,Pg8=604800000,no0=500,Ag8="17 3 * * *",Rg8,qg8;var Rh1=D(()=>{S41();C41();Lh1();zh1();f41=O7.registerWorkflow(zg8,{name:"fireAutomationWorkflow"});po0=O7.registerWorkflow(jg8,{name:"cronEntryWorkflow"}),Rg8=["SUCCESS","ERROR","CANCELLED"];qg8=O7.registerWorkflow(Tg8,{name:"automationsGcWorkflow"});O7.registerScheduled(qg8,{name:"automationsGcWorkflow",crontab:Ag8,mode:Ug8.ExactlyOncePerIntervalWhenActive})});import{DBOS as av}from"@dbos-inc/dbos-sdk";function gL($){return`auto-trigger-${$}`}async function x41($,Z){if($.type!=="cron"||!$.cron_expression)return;await av.createSchedule({scheduleName:gL($.id),workflowFn:po0,schedule:$.cron_expression,context:{automationId:Z.id,organizationId:Z.organization_id,triggerId:$.id}})}async function Ih1($){try{await av.deleteSchedule(gL($))}catch(Z){console.warn(`[dbos-sync] deleteSchedule(${$}) failed:`,Z instanceof Error?Z.message:Z)}}async function oo0($,Z){let G=$.filter((X)=>X.type==="cron");await Promise.allSettled(G.map(async(X)=>{try{if(Z)await av.resumeSchedule(gL(X.id));else await av.pauseSchedule(gL(X.id))}catch(Q){console.warn(`[dbos-sync] ${Z?"resume":"pause"}Schedule(${X.id}) failed:`,Q instanceof Error?Q.message:Q)}}))}async function ro0($){await Promise.allSettled($.filter((Z)=>Z.type==="cron").map((Z)=>Ih1(Z.id)))}function ao0($,Z){return Z?`auto:${$.automationId}:${Z}`:void 0}async function Th1($,Z){await v41($.organizationId);let G=ao0($,Z?.idempotencyKey);return await(await av.startWorkflow(f41,{workflowID:G,queueName:Bm($.organizationId)})($)).getResult()}async function Dm($,Z){await v41($.organizationId);let G=ao0($,Z?.idempotencyKey);await av.startWorkflow(f41,{workflowID:G,queueName:Bm($.organizationId)})($)}var to0="auto-trigger-";var hL=D(()=>{Rh1()});class SY{constructor($={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=$.sessionIdGenerator,this._enableJsonResponse=$.enableJsonResponse??!1,this._eventStore=$.eventStore,this._onsessioninitialized=$.onsessioninitialized,this._onsessionclosed=$.onsessionclosed,this._allowedHosts=$.allowedHosts,this._allowedOrigins=$.allowedOrigins,this._enableDnsRebindingProtection=$.enableDnsRebindingProtection??!1,this._retryInterval=$.retryInterval}async start(){if(this._started)throw Error("Transport already started");this._started=!0}createJsonErrorResponse($,Z,G,X){let Q={code:Z,message:G};if(X?.data!==void 0)Q.data=X.data;return new Response(JSON.stringify({jsonrpc:"2.0",error:Q,id:null}),{status:$,headers:{"Content-Type":"application/json",...X?.headers}})}validateRequestHeaders($){if(!this._enableDnsRebindingProtection)return;if(this._allowedHosts&&this._allowedHosts.length>0){let Z=$.headers.get("host");if(!Z||!this._allowedHosts.includes(Z)){let G=`Invalid Host header: ${Z}`;return this.onerror?.(Error(G)),this.createJsonErrorResponse(403,-32000,G)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let Z=$.headers.get("origin");if(Z&&!this._allowedOrigins.includes(Z)){let G=`Invalid Origin header: ${Z}`;return this.onerror?.(Error(G)),this.createJsonErrorResponse(403,-32000,G)}}return}async handleRequest($,Z){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let G=this.validateRequestHeaders($);if(G)return G;switch($.method){case"POST":return this.handlePostRequest($,Z);case"GET":return this.handleGetRequest($);case"DELETE":return this.handleDeleteRequest($);default:return this.handleUnsupportedRequest()}}async writePrimingEvent($,Z,G,X){if(!this._eventStore)return;if(X<"2025-11-25")return;let Q=await this._eventStore.storeEvent(G,{}),Y=`id: ${Q}
|
|
1186
|
+
- Use EVENT_CANCEL to stop recurring events.`,annotations:{title:"Publish Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:ru,outputSchema:au,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to publish events. Use a connection-scoped token.");let Q=await Z.eventBus.publish(G.id,X,{type:$.type,subject:$.subject,data:$.data,deliverAt:$.deliverAt,cron:$.cron});return{id:Q.id,type:Q.type,source:Q.source,time:Q.time}}})});var ey1;var zt0=D(()=>{p1();xU();ey1=Z1({name:"EVENT_SUBSCRIBE",description:"Subscribe to events of a specific type. Caller's connection is set as subscriber automatically.",annotations:{title:"Subscribe to Events",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:su,outputSchema:eu,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to subscribe. Use a connection-scoped token.");let Q=await Z.eventBus.subscribe(G.id,{connectionId:X,eventType:$.eventType,publisher:$.publisher,filter:$.filter});return{subscription:{id:Q.id,connectionId:Q.connectionId,eventType:Q.eventType,publisher:Q.publisher,filter:Q.filter,enabled:Q.enabled,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}})});var $g1;var jt0=D(()=>{p1();xU();$g1=Z1({name:"EVENT_UNSUBSCRIBE",description:"Remove a subscription to stop receiving events of that type.",annotations:{title:"Unsubscribe from Events",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Gc,outputSchema:Xc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to unsubscribe. Use a connection-scoped token.");let Q=await Z.eventBus.getSubscription(G.id,$.subscriptionId);if(!Q)throw Error(`Subscription not found: ${$.subscriptionId}`);if(Q.connectionId!==X)throw Error("Cannot unsubscribe from a subscription owned by another connection");return{success:(await Z.eventBus.unsubscribe(G.id,$.subscriptionId)).success,subscriptionId:$.subscriptionId}}})});var Zg1;var Pt0=D(()=>{p1();xU();Zg1=Z1({name:"EVENT_CANCEL",description:"Stop a recurring event from delivering further. Only the original publisher can cancel.",annotations:{title:"Cancel Recurring Event",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Qc,outputSchema:Yc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to cancel events. Use a connection-scoped token.");if(!await Z.eventBus.getEvent(G.id,$.eventId))throw Error(`Event not found: ${$.eventId}`);if(!(await Z.eventBus.cancelEvent(G.id,$.eventId,X)).success)throw Error("Failed to cancel event. Either the event is already completed/failed, or you are not the publisher.");return{success:!0,eventId:$.eventId}}})});var Gg1;var At0=D(()=>{p1();xU();Gg1=Z1({name:"EVENT_ACK",description:"Acknowledge event delivery after processing. Only needed for events received with retryAfter.",annotations:{title:"Acknowledge Event",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Jc,outputSchema:Wc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to acknowledge events. Use a connection-scoped token.");if(!(await Z.eventBus.ackEvent(G.id,$.eventId,X)).success)throw Error("Failed to acknowledge event. Either the event was not found, already delivered, or you are not a subscriber.");return{success:!0,eventId:$.eventId}}})});var Xg1;var Rt0=D(()=>{p1();xU();Xg1=Z1({name:"EVENT_SUBSCRIPTION_LIST",description:"List event subscriptions. Filter by connection ID to scope results.",annotations:{title:"List Event Subscriptions",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Lt0,outputSchema:Et0,handler:async($,Z)=>{P1(Z);let G=H1(Z);return await Z.access.check(),{subscriptions:(await Z.eventBus.listSubscriptions(G.id,$.connectionId)).map((Q)=>({id:Q.id,connectionId:Q.connectionId,eventType:Q.eventType,publisher:Q.publisher,filter:Q.filter,enabled:Q.enabled,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}})});var Qg1;var It0=D(()=>{p1();xU();Qg1=Z1({name:"EVENT_SYNC_SUBSCRIPTIONS",description:"Declaratively sync subscriptions: creates new, deletes removed, updates changed filters.",annotations:{title:"Sync Event Subscriptions",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:$c,outputSchema:Zc,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=Z.connectionId;if(!X)throw Error("Connection ID required to sync subscriptions. Use a connection-scoped token.");let Q=await Z.eventBus.syncSubscriptions(G.id,{connectionId:X,subscriptions:$.subscriptions});return{created:Q.created,updated:Q.updated,deleted:Q.deleted,unchanged:Q.unchanged,subscriptions:Q.subscriptions.map((Y)=>({id:Y.id,connectionId:Y.connectionId,eventType:Y.eventType,publisher:Y.publisher,filter:Y.filter,enabled:Y.enabled,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}})});var Tt0=D(()=>{wt0();zt0();jt0();Pt0();At0();Rt0();It0();xU()});var bL=D(()=>{Js()});function P41($){let Z=$.access.getRole();if(!Z||!FW.includes(Z))throw new YL("Only organization owners and admins can change org-wide pin status")}var Yg1=D(()=>{KL();Xv()});import{z as kt0}from"zod";function Qy8(){let $=qt0[Math.floor(Math.random()*qt0.length)];return`icon://${Mt0[Math.floor(Math.random()*Mt0.length)]}?color=${$}`}var qt0,Mt0,Yy8,Jy8,Jg1;var Vt0=D(()=>{p1();bL();Yg1();qt0=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],Mt0=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];Yy8=kt0.object({data:Zh.describe("Data for the new virtual MCP")}),Jy8=kt0.object({item:BG.describe("The created virtual MCP entity")}),Jg1=Z1({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP that aggregates tools from multiple connections into one endpoint.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:Yy8,outputSchema:Jy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)P41(Z);let Q={...$.data,icon:$.data.icon??Qy8()};return{item:await Z.storage.virtualMcps.create(G.id,X,Q)}}})});function Wy8($){let Z=[],G=0;while(G<$.length){let X=$[G];if(X==="%")Z.push(".*");else if(X==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(X))Z.push("\\"+X);else Z.push(X);G++}return Z.join("")}function dN($){return typeof $==="string"||typeof $==="number"}function Wg1($,Z){let G=Z.split("."),X=$;for(let Q of G){if(X==null||typeof X!=="object")return;X=X[Q]}return X}function Ky8($,Z){return $.connections.some((G)=>G.connection_id===Z)}function A41($,Z){if("conditions"in Z){let{operator:W,conditions:K}=Z;switch(W){case"and":return K.every((U)=>A41($,U));case"or":return K.some((U)=>A41($,U));case"not":return!K.every((U)=>A41($,U));default:return!0}}let{field:G,operator:X,value:Q}=Z,Y=G.join(".");if(Y==="connection_id"){if(X!=="eq"||typeof Q!=="string")return!1;return Ky8($,Q)}let J=Wg1($,Y);switch(X){case"eq":return J===Q;case"gt":return dN(J)&&dN(Q)&&J>Q;case"gte":return dN(J)&&dN(Q)&&J>=Q;case"lt":return dN(J)&&dN(Q)&&J<Q;case"lte":return dN(J)&&dN(Q)&&J<=Q;case"in":return Array.isArray(Q)&&Q.includes(J);case"like":if(typeof J!=="string"||typeof Q!=="string")return!1;if(Q.length>100)return!1;let W=Wy8(Q);return new RegExp(`^${W}$`,"i").test(J);case"contains":if(typeof J!=="string"||typeof Q!=="string")return!1;return J.toLowerCase().includes(Q.toLowerCase());default:return!0}}function Uy8($,Z){return[...$].sort((G,X)=>{for(let Q of Z){let Y=Q.field.join("."),J=Wg1(G,Y),W=Wg1(X,Y),K=0;if(J==null&&W==null)continue;if(J==null)K=Q.nulls==="first"?-1:1;else if(W==null)K=Q.nulls==="first"?1:-1;else if(typeof J==="string"&&typeof W==="string")K=J.localeCompare(W);else if(typeof J==="number"&&typeof W==="number")K=J-W;else K=String(J).localeCompare(String(W));if(K!==0)return Q.direction==="desc"?-K:K}return 0})}var Fy8,Hy8,Kg1;var St0=D(()=>{ZX();p1();bL();Fy8=wJ,Hy8=oK(BG),Kg1=Z1({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Fy8,outputSchema:Hy8,handler:async($,Z)=>{await Z.access.check();let G=H1(Z),X=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Q=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,J=X?await Z.storage.virtualMcps.listByConnectionId(G.id,X):await Z.storage.virtualMcps.list(G.id,Q!==void 0?{pinnedOnly:Q}:void 0);if($.where)J=J.filter((N)=>A41(N,$.where));if($.orderBy&&$.orderBy.length>0)J=Uy8(J,$.orderBy);let W=J.length,K=$.offset??0,U=$.limit??100,F=J.slice(K,K+U),H=K+U<W;return{items:F,totalCount:W,hasMore:H}}})});import{z as Ug1}from"zod";var Ny8,Oy8,Fg1;var Ct0=D(()=>{p1();bL();Ny8=Ug1.object({id:Ug1.string().describe("ID of the virtual MCP to retrieve")}),Oy8=Ug1.object({item:BG.nullable().describe("The retrieved virtual MCP, or null if not found")}),Fg1=Z1({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Ny8,outputSchema:Oy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.virtualMcps.findById($.id);if(X&&X.organization_id!==G.id)return{item:null};if(!X)return{item:null};return{item:X}}})});import{z as Hg1}from"zod";var By8,Dy8,Ng1;var _t0=D(()=>{p1();bL();Yg1();By8=Hg1.object({id:Hg1.string().describe("ID of the virtual MCP to update"),data:Gh.describe("Partial virtual MCP data to update")}),Dy8=Hg1.object({item:BG.describe("The updated virtual MCP entity")}),Ng1=Z1({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, or connection list.",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:By8,outputSchema:Dy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to update virtual MCP");let Q=await Z.storage.virtualMcps.findById($.id);if(!Q)throw Error(`Virtual MCP not found: ${$.id}`);if(Q.organization_id!==G.id)throw Error(`Virtual MCP not found: ${$.id}`);let Y={...$.data};if(Y.metadata&&Q.metadata)Y.metadata={...Q.metadata,...Y.metadata};if(Y.pinned!==void 0&&Y.pinned!==Q.pinned)P41(Z);return{item:await Z.storage.virtualMcps.update($.id,X,Y)}}})});import{z as Og1}from"zod";var Ly8,Ey8,Bg1;var bt0=D(()=>{hv();zW();p1();bL();Ly8=Og1.object({id:Og1.string().describe("ID of the virtual MCP to delete")}),Ey8=Og1.object({item:BG.describe("The deleted virtual MCP entity")}),Bg1=Z1({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ly8,outputSchema:Ey8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.virtualMcps.findById($.id);if(!X)throw Error(`Virtual MCP not found: ${$.id}`);if(X.organization_id!==G.id)throw Error(`Virtual MCP not found: ${$.id}`);await Z.storage.virtualMcps.delete($.id);let Q=X.metadata?.githubRepo?.connectionId;if(Q)try{let Y=await Z.storage.connections.findById(Q,G.id);if(Y&&jW(Y)){let W=await new k9(Z.db,Z.vault).get(Q);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Q)}}catch(Y){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Q,error:Y.message})}return{item:X}}})});import{z as LX}from"zod";var wy8,Dg1;var vt0=D(()=>{p1();wy8=LX.object({id:LX.string(),virtualMcpId:LX.string(),pluginId:LX.string(),connectionId:LX.string().nullable(),settings:LX.record(LX.string(),LX.unknown()).nullable(),createdAt:LX.string(),updatedAt:LX.string()}),Dg1=Z1({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:LX.object({virtualMcpId:LX.string().describe("Virtual MCP ID"),pluginId:LX.string().describe("Plugin ID")}),outputSchema:LX.object({config:wy8.nullable()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let{virtualMcpId:G,pluginId:X}=$,Q=await Z.storage.virtualMcpPluginConfigs.get(G,X);if(!Q)return{config:null};return{config:{id:Q.id,virtualMcpId:Q.virtualMcpId,pluginId:Q.pluginId,connectionId:Q.connectionId,settings:Q.settings,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}}}})});import{z as CZ}from"zod";var zy8,Lg1;var ft0=D(()=>{p1();mC();lX();zy8=CZ.object({id:CZ.string(),virtualMcpId:CZ.string(),pluginId:CZ.string(),connectionId:CZ.string().nullable(),settings:CZ.record(CZ.string(),CZ.unknown()).nullable(),createdAt:CZ.string(),updatedAt:CZ.string()}),Lg1=Z1({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:CZ.object({virtualMcpId:CZ.string().describe("Virtual MCP ID"),pluginId:CZ.string().describe("Plugin ID"),connectionId:CZ.string().nullable().optional().describe("MCP connection to bind"),settings:CZ.record(CZ.string(),CZ.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:CZ.object({config:zy8}),handler:async($,Z)=>{P1(Z),await Z.access.check();let{virtualMcpId:G,pluginId:X,connectionId:Q,settings:Y}=$,J=D$(Z),W=await Z.storage.connections.findById(G);if(!W)throw Error(`Connection not found: ${G}`);let K=Q?await Z.storage.connections.findById(Q):null;if(Q&&W.organization_id&&!K&&NJ()){if(Ws(Q,W.organization_id)){if(!J)throw Error("User ID required to create dev-assets connection");let F=dC(W.organization_id,V7());await Z.storage.connections.create({...F,organization_id:W.organization_id,created_by:J})}}let U=await Z.storage.virtualMcpPluginConfigs.upsert(G,X,{connectionId:Q,settings:Y});return{config:{id:U.id,virtualMcpId:U.virtualMcpId,pluginId:U.pluginId,connectionId:U.connectionId,settings:U.settings,createdAt:U.createdAt instanceof Date?U.createdAt.toISOString():U.createdAt,updatedAt:U.updatedAt instanceof Date?U.updatedAt.toISOString():U.updatedAt}}}})});import{z as VG}from"zod";var jy8,Eg1;var xt0=D(()=>{p1();bL();jy8=VG.object({connectionId:VG.string(),toolName:VG.string(),label:VG.string(),icon:VG.string().nullable().optional()}),Eg1=Z1({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:VG.object({virtualMcpId:VG.string().describe("Virtual MCP ID"),pinnedViews:VG.array(jy8).describe("Pinned views to set for the virtual MCP sidebar"),layout:VG.object({defaultMainView:VG.object({type:VG.string(),id:VG.string().optional(),toolName:VG.string().optional()}).nullable().optional(),chatDefaultOpen:VG.boolean().nullable().optional()}).optional()}),outputSchema:VG.object({item:BG.nullable()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let{virtualMcpId:X,pinnedViews:Q,layout:Y}=$,J=D$(Z),W=await Z.storage.virtualMcps.findById(X);if(!W)throw Error(`Virtual MCP not found: ${X}`);if(W.organization_id!==G.id)throw Error(`Virtual MCP not found: ${X}`);let K=W.metadata?.ui??{},U={...K,pinnedViews:Q.length>0?Q:null,layout:Y??K.layout??null};return{item:await Z.storage.virtualMcps.update(X,J??"system",{metadata:{...W.metadata,ui:U}})}}})});import{z as yU}from"zod";var Py8,Ay8,wg1;var yt0=D(()=>{p1();Py8=yU.object({ids:yU.array(yU.string()).describe("Virtual MCP ids to look up")}),Ay8=yU.object({items:yU.array(yU.object({id:yU.string(),last_used_at:yU.string().optional(),last_used_by:yU.string().optional()}))}),wg1=Z1({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Py8,outputSchema:Ay8,handler:async($,Z)=>{P1(Z),H1(Z),await Z.access.check();let G=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((X)=>({id:X,last_used_at:G.get(X)?.last_used_at,last_used_by:G.get(X)?.last_used_by}))}}})});var gt0=D(()=>{Vt0();St0();Ct0();_t0();bt0();vt0();ft0();xt0();yt0()});import{z as q5}from"zod";var zg1;var ht0=D(()=>{f9();p1();zg1=Z1({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q5.object({id:q5.string().describe("Log ID to fetch")}),outputSchema:q5.object({log:q5.object({id:q5.string().optional(),organizationId:q5.string(),connectionId:q5.string(),toolName:q5.string(),input:q5.record(q5.string(),q5.unknown()),output:q5.record(q5.string(),q5.unknown()),isError:q5.boolean(),errorMessage:q5.string().nullish(),durationMs:q5.number(),timestamp:q5.string(),userId:q5.string().nullish(),requestId:q5.string(),userAgent:q5.string().nullish(),virtualMcpId:q5.string().nullish(),properties:q5.record(q5.string(),q5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await vQ();let G=H1(Z),X=await Z.storage.monitoring.getById(G.id,$.id);if(!X)return{log:null};return{log:{...X,timestamp:X.timestamp instanceof Date?X.timestamp.toISOString():X.timestamp}}}})});import{z as R8}from"zod";var Iy8,jg1;var ut0=D(()=>{f9();p1();Iy8=R8.object({id:R8.string().optional().describe("Unique log identifier"),organizationId:R8.string().describe("Organization ID"),connectionId:R8.string().describe("Connection ID"),toolName:R8.string().describe("Name of the tool that was called"),isError:R8.boolean().describe("Whether the call resulted in an error"),errorMessage:R8.string().nullish().describe("Error message if applicable"),durationMs:R8.number().describe("Call duration in milliseconds"),timestamp:R8.string().describe("ISO 8601 timestamp of the call"),userId:R8.string().nullish().describe("User who triggered the call"),requestId:R8.string().describe("Unique request identifier"),userAgent:R8.string().nullish().describe("Client identifier (x-mesh-client header)"),virtualMcpId:R8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:R8.record(R8.string(),R8.string()).nullish().describe("Custom key-value metadata attached to the log")}),jg1=Z1({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:R8.object({connectionId:R8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:R8.array(R8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:R8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:R8.string().optional().describe("Filter by tool name"),isError:R8.boolean().optional().describe("Filter by error status"),startDate:R8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:R8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:R8.number().default(20).describe("Maximum number of results"),offset:R8.number().default(0).describe("Offset for pagination"),properties:R8.record(R8.string(),R8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:R8.array(R8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:R8.record(R8.string(),R8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:R8.record(R8.string(),R8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:R8.object({logs:R8.array(Iy8).describe("Array of monitoring logs"),total:R8.number().describe("Total number of logs matching filters"),offset:R8.number().describe("Current offset for pagination"),limit:R8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await vQ();let G=H1(Z),Q=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,Y={organizationId:G.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Q},J=await Z.storage.monitoring.query(Y);return{logs:J.logs.map(({input:W,output:K,...U})=>({...U,timestamp:U.timestamp instanceof Date?U.timestamp.toISOString():U.timestamp})),total:J.total,offset:$.offset,limit:$.limit}}})});import{z as L$}from"zod";var Pg1;var ct0=D(()=>{f9();p1();Pg1=Z1({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:L$.object({startDate:L$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:L$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:L$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:L$.array(L$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:L$.array(L$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:L$.array(L$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:L$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:L$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:L$.array(L$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:L$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:L$.object({totalCalls:L$.number().describe("Total number of tool calls"),errorRate:L$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:L$.number().describe("Average call duration in milliseconds"),errorRatePercent:L$.string().optional().describe("Error rate as a percentage string"),totalErrors:L$.number().optional().describe("Total number of errors"),p50DurationMs:L$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:L$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:L$.array(L$.object({connectionId:L$.string(),calls:L$.number(),errors:L$.number(),errorRate:L$.number(),avgDurationMs:L$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:L$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:L$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:L$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:L$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:L$.array(L$.object({toolName:L$.string(),connectionId:L$.string().nullable(),calls:L$.number(),inputTokens:L$.number().optional(),outputTokens:L$.number().optional(),costUsd:L$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:L$.array(L$.object({timestamp:L$.string(),toolName:L$.string(),calls:L$.number(),errors:L$.number(),avg:L$.number(),p95:L$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:L$.array(L$.object({timestamp:L$.string(),calls:L$.number(),errors:L$.number(),errorRate:L$.number(),avg:L$.number(),p50:L$.number(),p95:L$.number(),inputTokens:L$.number().optional(),outputTokens:L$.number().optional(),totalTokens:L$.number().optional(),costUsd:L$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let G=H1(Z);if(await Z.access.check(),await vQ(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:G.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Q=await Z.storage.monitoring.queryMetricTimeseries({organizationId:G.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Q;let Y=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:G.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Q,topTools:Y.topTools,topToolsTimeseries:Y.timeseries}}let X=await Z.storage.monitoring.getStats({organizationId:G.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...X,errorRatePercent:(X.errorRate*100).toFixed(2)}}})});import{z as SG}from"zod";var Ag1;var lt0=D(()=>{f9();p1();Ag1=Z1({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:SG.object({threadIds:SG.array(SG.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:SG.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:SG.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:SG.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:SG.object({items:SG.array(SG.object({threadId:SG.string(),calls:SG.number(),inputTokens:SG.number(),outputTokens:SG.number(),totalTokens:SG.number(),costUsd:SG.number()}))}),handler:async($,Z)=>{let G=H1(Z);return await Z.access.check(),await vQ(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:G.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var dt0=D(()=>{ht0();ut0();ct0();lt0()});import{z as zQ}from"zod";var Rg1;var mt0=D(()=>{p1();Rg1=Z1({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:zQ.object({slug:zQ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens"),name:zQ.string().min(1).max(255),description:zQ.string().optional()}),outputSchema:zQ.object({id:zQ.string(),name:zQ.string(),slug:zQ.string(),logo:zQ.string().nullable().optional(),metadata:zQ.any().optional(),createdAt:zQ.string().datetime().describe("ISO 8601 timestamp"),members:zQ.array(zQ.any()).optional()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=D$(Z);if(!G)throw Error("User ID required to create organization");let X=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:G});if(!X)throw Error("Failed to create organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as nJ}from"zod";var Ig1;var it0=D(()=>{p1();Ig1=Z1({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:nJ.object({userId:nJ.string().optional()}),outputSchema:nJ.object({organizations:nJ.array(nJ.object({id:nJ.string(),name:nJ.string(),slug:nJ.string(),logo:nJ.string().nullable().optional(),metadata:nJ.any().optional(),createdAt:nJ.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=D$(Z),X=$.userId||G;if(!X)throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list(X)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}}})});import{z as qY}from"zod";var Tg1;var nt0=D(()=>{p1();Tg1=Z1({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:qY.object({}),outputSchema:qY.object({id:qY.string(),name:qY.string(),slug:qY.string(),logo:qY.string().nullable().optional(),metadata:qY.any().optional(),createdAt:qY.string().datetime().describe("ISO 8601 timestamp"),members:qY.array(qY.any()).optional(),invitations:qY.array(qY.any()).optional()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.get(G);if(!X)throw Error("No active organization found");let Q=new Date,Y=X.invitations?.filter((J)=>new Date(J.expiresAt)>Q);return{...X,invitations:Y,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as pJ}from"zod";var qg1;var pt0=D(()=>{p1();qg1=Z1({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pJ.object({id:pJ.string(),name:pJ.string().min(1).max(255).optional(),description:pJ.string().optional()}),outputSchema:pJ.object({id:pJ.string(),name:pJ.string(),slug:pJ.string(),logo:pJ.string().nullable().optional(),metadata:pJ.any().optional(),createdAt:pJ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G={};if($.name)G.name=$.name;if($.description)G.metadata={description:$.description};let X=await Z.boundAuth.organization.update({organizationId:$.id,data:G});if(!X)throw Error("Failed to update organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as Xm}from"zod";var Mg1;var tt0=D(()=>{p1();Mg1=Z1({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Xm.object({id:Xm.string()}),outputSchema:Xm.object({success:Xm.boolean(),id:Xm.string()}),handler:async($,Z)=>{return P1(Z),await Z.access.check(),await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as Z8}from"zod";var Ym,Jm,Qm,ot0,R41,Wm,Km,mN;var gU=D(()=>{Ym=Z8.object({title:Z8.string(),url:Z8.string(),icon:Z8.string()}),Jm=Z8.object({registries:Z8.record(Z8.string(),Z8.object({enabled:Z8.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:Z8.array(Z8.string()).describe("List of MCP app_name or app_id values to hide from the store.")}),Qm=Z8.object({keyId:Z8.string(),modelId:Z8.string(),title:Z8.string().optional()}).nullable(),ot0=Z8.enum(["fast","smart","thinking","image","web_research"]),R41=Z8.enum(["fast","smart","thinking"]),Wm=Z8.object({tiers:Z8.object({fast:Qm,smart:Qm,thinking:Qm,image:Qm,web_research:Qm})}),Km=Z8.object({ids:Z8.array(Z8.string()).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),mN=Z8.object({id:Z8.string().describe("Brand context ID"),name:Z8.string().describe("Company name"),domain:Z8.string().describe("Company domain (e.g. example.com)"),overview:Z8.string().describe("Company overview / description"),logo:Z8.string().nullable().optional().describe("Logo URL"),favicon:Z8.string().nullable().optional().describe("Favicon URL"),ogImage:Z8.string().nullable().optional().describe("OG image URL"),fonts:Z8.object({heading:Z8.string().optional().describe("Font family for headings"),body:Z8.string().optional().describe("Font family for body text"),code:Z8.string().optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:Z8.object({primary:Z8.string().optional().describe("Primary brand color (hex)"),secondary:Z8.string().optional().describe("Secondary brand color (hex)"),accent:Z8.string().optional().describe("Accent / highlight color (hex)"),background:Z8.string().optional().describe("Background color (hex)"),foreground:Z8.string().optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:Z8.array(Z8.record(Z8.string(),Z8.unknown())).nullable().optional().describe("Brand images"),metadata:Z8.record(Z8.string(),Z8.unknown()).nullable().optional().describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:Z8.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:Z8.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as iN}from"zod";var kg1;var rt0=D(()=>{p1();gU();kg1=Z1({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:iN.object({}),outputSchema:iN.object({organizationId:iN.string(),sidebar_items:iN.array(Ym).nullable().optional(),enabled_plugins:iN.array(iN.string()).nullable().optional(),registry_config:Jm.nullable().optional(),simple_mode:Wm.nullable().optional(),default_home_agents:Km.nullable().optional(),createdAt:iN.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:iN.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.organizationSettings.get(G);if(!X)return{organizationId:G};return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as MY}from"zod";var Vg1;var at0=D(()=>{p1();gU();Vg1=Z1({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:MY.object({organizationId:MY.string(),sidebar_items:MY.array(Ym).optional(),enabled_plugins:MY.array(MY.string()).optional(),registry_config:Jm.optional(),simple_mode:Wm.optional(),default_home_agents:Km.optional()}),outputSchema:MY.object({organizationId:MY.string(),sidebar_items:MY.array(Ym).nullable().optional(),enabled_plugins:MY.array(MY.string()).nullable().optional(),registry_config:Jm.nullable().optional(),simple_mode:Wm.nullable().optional(),default_home_agents:Km.nullable().optional(),createdAt:MY.string().datetime().describe("ISO 8601 timestamp"),updatedAt:MY.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(P1(Z),await Z.access.check(),Z.organization&&Z.organization.id!==$.organizationId)throw Error("Cannot update settings for a different organization");let G=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents});return{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}})});import{z as tJ}from"zod";var st0,Sg1,Cg1;var et0=D(()=>{p1();gU();st0=mN.extend({organizationId:tJ.string(),archivedAt:tJ.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:tJ.string().describe("ISO 8601 timestamp"),updatedAt:tJ.string().describe("ISO 8601 timestamp")}),Sg1=Z1({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:tJ.object({includeArchived:tJ.boolean().optional().describe("Include archived brands in the list")}),outputSchema:tJ.object({items:tJ.array(st0)}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(G,{includeArchived:$.includeArchived})).map((Q)=>({...Q,archivedAt:Q.archivedAt instanceof Date?Q.archivedAt.toISOString():Q.archivedAt,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():Q.createdAt,updatedAt:Q.updatedAt instanceof Date?Q.updatedAt.toISOString():Q.updatedAt}))}}}),Cg1=Z1({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:tJ.object({id:tJ.string().describe("Brand context ID")}),outputSchema:st0.extend({organizationId:tJ.string()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.get($.id,G);if(!X)throw Error("Brand context not found");return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as vL}from"zod";var $o0,_g1,bg1,vg1;var Zo0=D(()=>{p1();gU();$o0=mN.extend({organizationId:vL.string(),createdAt:vL.string().describe("ISO 8601 timestamp"),updatedAt:vL.string().describe("ISO 8601 timestamp")}),_g1=Z1({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:mN.omit({id:!0}),outputSchema:$o0,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.create(G,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}}),bg1=Z1({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:mN.partial().required({id:!0}),outputSchema:$o0,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,G))throw Error("Brand context not found");let{id:Q,...Y}=$;if(Y.isDefault===!0)await Z.storage.brandContext.setDefault(Q,G);let J=await Z.storage.brandContext.update(Q,G,{name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo!==void 0?Y.logo??null:void 0,favicon:Y.favicon!==void 0?Y.favicon??null:void 0,ogImage:Y.ogImage!==void 0?Y.ogImage??null:void 0,fonts:Y.fonts!==void 0?Y.fonts??null:void 0,colors:Y.colors!==void 0?Y.colors??null:void 0,images:Y.images!==void 0?Y.images??null:void 0,metadata:Y.metadata!==void 0?Y.metadata??null:void 0,archivedAt:Y.archivedAt!==void 0?Y.archivedAt??null:void 0,isDefault:Y.isDefault===!1?!1:void 0});return{...J,archivedAt:J.archivedAt instanceof Date?J.archivedAt.toISOString():J.archivedAt,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt,updatedAt:J.updatedAt instanceof Date?J.updatedAt.toISOString():J.updatedAt}}}),vg1=Z1({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vL.object({id:vL.string().describe("Brand context ID")}),outputSchema:vL.object({success:vL.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,G))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,G,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function I41($,Z,G){let X=$.trim();if(!X.startsWith("http"))X=`https://${X}`;let Q=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:X,formats:["branding"]})});if(!Q.ok){let N=await Q.text().catch(()=>"");throw Error(`Firecrawl API error: ${Q.status} ${N.slice(0,200)}`)}let Y=await Q.json();if(!Y.success||!Y.data?.branding)return null;let J=Y.data.branding,W=Y.data.metadata??{},K=ky8(J,W);return{name:W.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((N)=>N.trim()).filter(Boolean)?.slice().sort((N,O)=>N.length-O.length)[0]??W.ogSiteName??G??$,domain:$,overview:W.description??"",logo:K.logo,favicon:K.favicon,ogImage:K.ogImage,fonts:K.fonts,colors:K.colors,images:null,metadata:Object.keys(K.metadata).length>0?K.metadata:null}}function ky8($,Z){let G=$.images??{},X=$.colors??{},Q={};for(let[F,H]of Object.entries(X))if(typeof H==="string"&&H&&qy8.has(F))Q[F]=H;let Y={},W=($.typography??{}).fontFamilies??{};for(let[F,H]of Object.entries(W))if(typeof H==="string"&&H){let N=My8[F.toLowerCase()];if(N&&!Y[N])Y[N]=H}let K=$.fonts;if(Array.isArray(K))for(let F of K){let H=F.family;if(typeof H==="string"&&H&&!Y.body)Y.body=H}let U={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)U[F]=$[F];return{logo:G.logo??null,favicon:G.favicon??null,ogImage:G.ogImage??Z.ogImage??null,fonts:Object.keys(Y).length>0?Y:null,colors:Object.keys(Q).length>0?Q:null,metadata:U}}var qy8,My8;var fg1=D(()=>{qy8=new Set(["primary","secondary","accent","background","foreground"]),My8={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as T41}from"zod";var Vy8,xg1;var Go0=D(()=>{p1();fg1();gU();Vy8=mN.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:T41.boolean()}),xg1=Z1({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:T41.object({domain:T41.string().describe("Website domain to extract brand from"),brandId:T41.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:Vy8,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=Z.firecrawlApiKey;if(!X)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Q=await I41($.domain,X,$.domain);if(!Q)throw Error("Firecrawl did not return branding data for this URL");let Y={name:Q.name,domain:Q.domain,overview:Q.overview,logo:Q.logo,favicon:Q.favicon,ogImage:Q.ogImage,fonts:Q.fonts,colors:Q.colors,images:Q.images,metadata:Q.metadata},J=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,G))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,G,Y)})():await Z.storage.brandContext.create(G,Y);return{id:J.id,name:J.name,domain:J.domain,overview:J.overview,logo:J.logo,favicon:J.favicon,ogImage:J.ogImage,fonts:J.fonts,colors:J.colors,success:!0}}})});function Xo0($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let G=Object.fromEntries(Object.entries(Z).filter(([X])=>X!=="tagline"&&X!=="tone"));return Object.keys(G).length>0?G:void 0})()}}var yg1,gg1;var Qo0=D(()=>{h_1();p1();yg1=Z1({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_01,outputSchema:Kc,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=$.id?await Z.storage.brandContext.get($.id,G):await Z.storage.brandContext.getDefault(G);if(!X)throw Error($.id?"Brand not found":"No default brand configured");return Xo0(X)}}),gg1=Z1({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:b01,outputSchema:v01,handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(G)).map(Xo0)}}})});import{z as q41}from"zod";var hg1;var Yo0=D(()=>{p1();hg1=Z1({name:"ORGANIZATION_DOMAIN_GET",description:"Get the claimed email domain for an organization.",annotations:{title:"Get Organization Domain",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:q41.object({}),outputSchema:q41.object({domain:q41.string().nullable(),autoJoinEnabled:q41.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.organizationDomains.getByOrganizationId(G.id);return{domain:X?.domain??null,autoJoinEnabled:X?.autoJoinEnabled??!1}}})});import{z as EX}from"zod";var Sy8,ug1,cg1,lg1;var Jo0=D(()=>{p1();uU();Sy8=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,ug1=Z1({name:"ORGANIZATION_DOMAIN_SET",description:"Claim an email domain for an organization. The caller's verified email must match the domain.",annotations:{title:"Set Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({domain:EX.string().min(1).max(255).describe("Email domain to claim (e.g. 'acme.com')"),autoJoinEnabled:EX.boolean().optional().default(!1).describe("Whether users with matching email domain can auto-join")}),outputSchema:EX.object({domain:EX.string(),autoJoinEnabled:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=$.domain.toLowerCase().trim();if(!Sy8.test(X))throw Error(`Invalid domain format: "${X}". Must be a valid domain like "acme.com"`);if(hU.has(X))throw Error(`Cannot claim generic email domain "${X}". Only corporate domains are allowed.`);let Q=Z.auth.user?.email;if(!Q)throw Error("User email is required to claim a domain.");if(!Z.auth.user?.emailVerified)throw Error("Email must be verified before claiming a domain.");let Y=Q.split("@")[1]?.toLowerCase();if(Y!==X)throw Error(`You can only claim your own email domain ("${Y}"), not "${X}".`);let J=await Z.storage.organizationDomains.getByOrganizationId(G.id);if(J&&J.domain!==X)throw Error(`This organization already claims "${J.domain}". Clear it first before claiming a new domain.`);let W=await Z.storage.organizationDomains.setDomain(G.id,X,$.autoJoinEnabled);return{domain:W.domain,autoJoinEnabled:W.autoJoinEnabled}}}),cg1=Z1({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Update auto-join setting for the organization's already-claimed domain.",annotations:{title:"Update Organization Domain Settings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({autoJoinEnabled:EX.boolean().describe("Whether users with matching email domain can auto-join")}),outputSchema:EX.object({domain:EX.string(),autoJoinEnabled:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.organizationDomains.getByOrganizationId(G.id))throw Error("No domain claimed for this organization.");let Q=await Z.storage.organizationDomains.updateAutoJoin(G.id,$.autoJoinEnabled);return{domain:Q.domain,autoJoinEnabled:Q.autoJoinEnabled}}}),lg1=Z1({name:"ORGANIZATION_DOMAIN_CLEAR",description:"Remove the claimed email domain for an organization.",annotations:{title:"Clear Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:EX.object({}),outputSchema:EX.object({success:EX.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);return await Z.storage.organizationDomains.clearDomain(G.id),{success:!0}}})});import{z as wX}from"zod";var dg1;var Wo0=D(()=>{N5();p1();dg1=Z1({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:wX.object({organizationId:wX.string().optional(),userId:wX.string(),role:wX.array(wX.string())}),outputSchema:wX.object({id:wX.string(),organizationId:wX.string(),userId:wX.string(),role:wX.union([wX.string(),wX.array(wX.string())]),createdAt:wX.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");if(G!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.addMember({organizationId:G,userId:$.userId,role:$.role});if(!X)throw Error("Failed to add member");let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"organization_member_added",groups:{organization:G},properties:{organization_id:G,added_user_id:$.userId,role:$.role}});return{...X,role:X.role,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as pv}from"zod";var mg1;var Ko0=D(()=>{N5();p1();mg1=Z1({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:pv.object({organizationId:pv.string().optional(),memberIdOrEmail:pv.string()}),outputSchema:pv.object({success:pv.boolean(),memberIdOrEmail:pv.string()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");await Z.boundAuth.organization.removeMember({organizationId:G,memberIdOrEmail:$.memberIdOrEmail});let X=D$(Z);if(X)w$.capture({distinctId:X,event:"organization_member_removed",groups:{organization:G},properties:{organization_id:G,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as t7}from"zod";var ig1;var Uo0=D(()=>{p1();ig1=Z1({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:t7.object({limit:t7.number().optional(),offset:t7.number().optional()}),outputSchema:t7.object({members:t7.array(t7.object({id:t7.string(),organizationId:t7.string(),userId:t7.string(),role:t7.string(),createdAt:t7.string().datetime().describe("ISO 8601 timestamp"),user:t7.object({id:t7.string(),name:t7.string(),email:t7.string(),image:t7.string().optional()}).optional()}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.listMembers({organizationId:G,limit:$.limit,offset:$.offset});return{members:(Array.isArray(X)?X:[]).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}))}}})});import{z as _Z}from"zod";var ng1;var Fo0=D(()=>{N5();p1();ng1=Z1({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_Z.object({organizationId:_Z.string().optional(),memberId:_Z.string(),role:_Z.array(_Z.string())}),outputSchema:_Z.object({id:_Z.string(),organizationId:_Z.string(),userId:_Z.string(),role:_Z.union([_Z.literal("admin"),_Z.literal("member"),_Z.literal("owner")]),createdAt:_Z.string().datetime().describe("ISO 8601 timestamp"),user:_Z.object({email:_Z.string(),name:_Z.string(),image:_Z.string().optional()})}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=$.organizationId||Z.organization?.id;if(!G)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.updateMemberRole({organizationId:G,memberId:$.memberId,role:$.role});if(!X)throw Error("Failed to update member role");Z.invalidateMemberRole?.(X.userId,G);let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"organization_member_role_updated",groups:{organization:G},properties:{organization_id:G,member_id:$.memberId,target_user_id:X.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});var Ho0=D(()=>{mt0();it0();nt0();pt0();tt0();rt0();at0();et0();Zo0();Go0();Qo0();Yo0();Jo0();Wo0();Ko0();Uo0();Fo0()});import{z as nN}from"zod";var pg1;var No0=D(()=>{p1();pg1=Z1({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:nN.object({}),outputSchema:nN.object({tags:nN.array(nN.object({id:nN.string(),organizationId:nN.string(),name:nN.string(),createdAt:nN.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);return{tags:(await Z.storage.tags.listOrgTags(G.id)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as pN}from"zod";var tg1;var Oo0=D(()=>{p1();tg1=Z1({name:"TAGS_CREATE",description:"Create a new tag that can be assigned to organization members.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:pN.object({name:pN.string().min(1).max(50).describe("Tag name")}),outputSchema:pN.object({tag:pN.object({id:pN.string(),organizationId:pN.string(),name:pN.string(),createdAt:pN.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.tags.createTag(G.id,$.name);return{tag:{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():String(X.createdAt)}}}})});import{z as M41}from"zod";var og1;var Bo0=D(()=>{p1();og1=Z1({name:"TAGS_DELETE",description:"Delete a tag and automatically remove it from all assigned members.",annotations:{title:"Delete Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:M41.object({tagId:M41.string().describe("Tag ID to delete")}),outputSchema:M41.object({success:M41.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z),X=await Z.storage.tags.getTag($.tagId);if(!X)throw Error("Tag not found");if(X.organizationId!==G.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as cU}from"zod";var rg1;var Do0=D(()=>{p1();rg1=Z1({name:"MEMBER_TAGS_GET",description:"Get all tags currently assigned to a specific member.",annotations:{title:"Get Member Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:cU.object({memberId:cU.string().describe("Member ID")}),outputSchema:cU.object({tags:cU.array(cU.object({id:cU.string(),organizationId:cU.string(),name:cU.string(),createdAt:cU.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,G.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as kY}from"zod";var ag1;var Lo0=D(()=>{p1();ag1=Z1({name:"MEMBER_TAGS_SET",description:"Replace all tags on a member with the given set. Pass empty array to clear.",annotations:{title:"Set Member Tags",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:kY.object({memberId:kY.string().describe("Member ID"),tagIds:kY.array(kY.string()).describe("Array of tag IDs to assign")}),outputSchema:kY.object({success:kY.boolean(),tags:kY.array(kY.object({id:kY.string(),organizationId:kY.string(),name:kY.string(),createdAt:kY.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=H1(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,G.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Y of $.tagIds){let J=await Z.storage.tags.getTag(Y);if(!J)throw Error(`Tag not found: ${Y}`);if(J.organizationId!==G.id)throw Error(`Tag does not belong to this organization: ${Y}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});var Eo0=D(()=>{No0();Oo0();Bo0();Do0();Lo0()});function AW($,Z=Date.now()){let G=$.status;if(G==="in_progress"){let X=new Date($.updated_at).getTime();if(!Number.isFinite(X)||Z-X>1800000)G="expired"}return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,created_at:$.created_at,updated_at:$.updated_at,created_by:$.created_by,updated_by:$.updated_by,hidden:$.hidden??!1,status:G,virtual_mcp_id:$.virtual_mcp_id||void 0,trigger_id:$.trigger_id,branch:$.branch,sandbox_provider_kind:$.sandbox_provider_kind,harness_id:$.harness_id,metadata:$.metadata&&Object.keys($.metadata).length>0?$.metadata:void 0,run_config:$.run_config}}var wo0=D(()=>{V8()});import{z as t$}from"zod";var zo0,by8,jo0,RW,Po0,Ao0;var fL=D(()=>{wo0();zo0=t$.object({id:t$.string().describe("Unique message ID"),thread_id:t$.string().describe("ID of the parent thread"),metadata:t$.unknown().optional().describe("Optional message metadata"),parts:t$.array(t$.record(t$.string(),t$.unknown())).describe("Message content parts (AI SDK UIMessagePart format)"),role:t$.enum(["user","assistant","system"]).describe("Message role"),created_at:t$.string().datetime().describe("Timestamp of creation"),updated_at:t$.string().datetime().describe("Timestamp of last update")}),by8=t$.object({toolName:t$.string().describe("Fully qualified tool name"),appId:t$.string().describe("App ID that owns the tool"),args:t$.record(t$.string(),t$.unknown()).describe("Arguments used when expanding the tool"),expandedAt:t$.string().datetime().describe("When the tool was expanded")}),jo0=t$.object({expanded_tools:t$.array(by8).optional()}).catchall(t$.unknown()),RW=t$.object({id:t$.string().describe("Unique thread ID"),organization_id:t$.string().describe("Organization this thread belongs to"),title:t$.string().describe("Thread title"),description:t$.string().nullable().describe("Thread description"),created_at:t$.string().datetime().describe("Timestamp of creation"),updated_at:t$.string().datetime().describe("Timestamp of last update"),hidden:t$.boolean().optional().describe("Whether the thread is hidden"),status:t$.enum([...yC,"expired"]).describe("Thread execution status. 'expired' is virtual -- computed at read time for stale in_progress threads"),created_by:t$.string().describe("User ID who created the thread"),updated_by:t$.string().optional().describe("User ID who last updated the thread"),virtual_mcp_id:t$.string().optional().describe("Virtual MCP (agent) this thread was initiated with"),trigger_id:t$.string().nullable().optional().describe("Automation trigger that created this thread; null/absent for human-initiated threads."),branch:t$.string().nullable().optional().describe("Git branch this thread is pinned to (GitHub-linked vms only)"),sandbox_provider_kind:t$.string().nullable().optional().describe("Pinned on first message; identifies which sandbox provider to dispatch to (e.g. 'agent-sandbox', 'user-desktop')."),harness_id:t$.string().nullable().optional().describe("Pinned on first message; selects which harness runs the thread (e.g. 'claude-code', 'codex', 'decopilot')."),metadata:jo0.optional().describe("Free-form per-thread UI state (e.g. expanded_tools)"),run_config:t$.record(t$.string(),t$.unknown()).nullable().optional().describe("Persisted run configuration (contains agent and model info)")}),Po0=t$.object({id:t$.string().optional().describe("Optional custom ID for the thread"),title:t$.string().optional().describe("Thread title"),description:t$.string().nullish().describe("Thread description"),virtual_mcp_id:t$.string().describe("Virtual MCP (agent) this thread is bound to"),branch:t$.string().min(1).optional().describe("Preferred branch. Used only when the vMCP has a githubRepo; ignored otherwise. When omitted, the server picks the most-recently-touched branch from the user's sandboxMap, falling back to a freshly generated name.")}),Ao0=t$.object({title:t$.string().optional().describe("New thread title"),description:t$.string().nullish().describe("New thread description"),hidden:t$.boolean().optional().describe("Whether the thread is hidden"),status:t$.enum(["requires_action","failed","in_progress","completed"]).optional().describe("New thread status (user-set override). 'expired' is a computed virtual status and cannot be set directly."),metadata:jo0.optional().describe("Full replacement of the thread's metadata object"),branch:t$.string().nullish().describe("New git branch for this thread")})});function k41(){let $=Ro0[Math.floor(Math.random()*Ro0.length)],Z=Io0[Math.floor(Math.random()*Io0.length)];return`${$}-${Z}`}var Ro0,Io0;var sg1=D(()=>{Ro0=["alpha","beta","gamma","delta","epsilon","zeta","eta","theta","iota","kappa","lambda","mu","nu","xi","omicron","pi","rho","sigma","tau","upsilon","phi","chi","psi","omega"],Io0=["andromedae","antliae","apodis","aquarii","aquilae","arae","arietis","aurigae","bootis","caeli","camelopardalis","cancri","capricorni","carinae","cassiopeiae","centauri","cephei","ceti","chamaeleontis","circini","columbae","corvi","crateris","crucis","cygni","delphini","doradus","draconis","equulei","eridani","fornacis","geminorum","gruis","herculis","horologii","hydrae","hydri","indi","lacertae","leonis","leporis","librae","lupi","lyncis","lyrae","mensae","microscopii","monocerotis","muscae","normae","octantis","ophiuchi","orionis","pavonis","pegasi","persei","phoenicis","pictoris","piscium","puppis","pyxidis","reticuli","sagittae","sagittarii","scorpii","sculptoris","scuti","serpentis","sextantis","tauri","telescopii","trianguli","tucanae","velorum","virginis","volantis","vulpeculae"]});import{z as To0}from"zod";function xy8($,Z){let G=$?.[Z];if(!G)return;return Object.entries(G).sort(([,Q],[,Y])=>{let J=Math.max(0,...Object.values(Q).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0))-J})[0]?.[0]}var vy8,fy8,eg1;var qo0=D(()=>{N5();p1();fL();tX();sg1();vy8=To0.object({data:Po0.describe("Data for the new thread (id is auto-generated if not provided)")}),fy8=To0.object({item:RW.describe("The created thread entity")});eg1=Z1({name:"COLLECTION_THREADS_CREATE",description:"Create a new thread for organizing messages and conversations.",annotations:{title:"Create Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:vy8,outputSchema:fy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to create thread");let{data:Q}=$,Y=Q.id??V6("thrd"),J=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,G.id);if(!J)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,U=null;if(K)U=Q.branch??xy8(W?.sandboxMap,X)??k41();let F=await Z.storage.threads.create({id:Y,organization_id:G.id,title:Q.title,description:Q.description,virtual_mcp_id:Q.virtual_mcp_id,branch:U,created_by:X});return w$.capture({distinctId:X,event:"chat_started",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:Y,has_title:!!$.data.title,created_via:"tool"}}),{item:AW(F)}}})});import{z as jQ}from"zod";var yy8,gy8,$h1;var Mo0=D(()=>{ZX();p1();fL();yy8=wJ.extend({where:jQ.object({created_by:jQ.string().optional(),trigger_ids:jQ.array(jQ.string()).optional(),virtual_mcp_id:jQ.string().optional(),hidden:jQ.boolean().optional(),has_trigger:jQ.boolean().optional()}).optional(),startDate:jQ.string().datetime().optional().describe("Filter threads updated at or after this ISO timestamp"),endDate:jQ.string().datetime().optional().describe("Filter threads updated at or before this ISO timestamp"),search:jQ.string().optional().describe("Full-text search on thread title (case-insensitive)"),status:jQ.string().optional().describe("Filter by thread status (e.g. completed, failed, in_progress)"),userId:jQ.string().optional().describe("Filter by the user who created the thread"),agentId:jQ.string().optional().describe("Filter by agent (connection or virtual MCP) ID")}),gy8=oK(RW),$h1=Z1({name:"COLLECTION_THREADS_LIST",description:"List threads with filtering, sorting, and pagination.",annotations:{title:"List Threads",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:yy8,outputSchema:gy8,handler:async($,Z)=>{await Z.access.check();let G=Z.auth.user?.id;if(!G)throw Error("User ID required to list threads");H1(Z);let X=$.offset??0,Q=$.limit??100,Y=$.where?.trigger_ids,J=$.where?.virtual_mcp_id,W=$.userId??($.where?.created_by==="me"?G:$.where?.created_by),{threads:K,total:U}=Y?.length?await Z.storage.threads.listByTriggerIds(Y,{limit:Q,offset:X}):await Z.storage.threads.list(W,{limit:Q,offset:X,virtualMcpId:J,startDate:$.startDate,endDate:$.endDate,search:$.search,status:$.status,agentId:$.agentId,includeArchived:$.where?.hidden,hasTrigger:$.where?.has_trigger}),F=X+Q<U,H=Date.now();return{items:K.map((N)=>AW(N,H)),totalCount:U,hasMore:F}}})});var hy8,Zh1;var ko0=D(()=>{ZX();p1();fL();hy8=oh(RW),Zh1=Z1({name:"COLLECTION_THREADS_GET",description:"Get a thread's details and metadata by ID.",annotations:{title:"Get Thread",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:th,outputSchema:hy8,handler:async($,Z)=>{P1(Z),H1(Z),await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)return{item:null};return{item:AW(G)}}})});import{z as Gh1}from"zod";var uy8,cy8,Xh1;var Vo0=D(()=>{N5();p1();fL();uy8=Gh1.object({id:Gh1.string().describe("ID of the thread to update"),data:Ao0.describe("Partial thread data to update")}),cy8=Gh1.object({item:RW.describe("The updated thread entity")}),Xh1=Z1({name:"COLLECTION_THREADS_UPDATE",description:"Update a thread's title, description, or visibility.",annotations:{title:"Update Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:uy8,outputSchema:cy8,handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("User ID required to update thread");let{id:Q,data:Y}=$,J=await Z.storage.threads.get(Q);if(!J)throw Error("Thread not found in organization");if(Y.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,H1(Z).id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:Y.title,description:Y.description,hidden:Y.hidden,updated_by:X};if(Y.status)W.status=Y.status;if(Y.metadata!==void 0)W.metadata=Y.metadata;if(Y.branch!==void 0)W.branch=Y.branch;let K=await Z.storage.threads.update(Q,W);if(Y.hidden!==void 0&&Y.hidden!==J.hidden)w$.capture({distinctId:X,event:Y.hidden?"chat_archived":"chat_unarchived",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:Q}});return{item:AW(K)}}})});var Qh1;var So0=D(()=>{ZX();N5();p1();fL();Qh1=Z1({name:"COLLECTION_THREADS_DELETE",description:"Permanently delete a thread and all its messages.",annotations:{title:"Delete Thread",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:rh,outputSchema:ah(RW),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.threads.get($.id);if(!X)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Q=D$(Z);if(Q)w$.capture({distinctId:Q,event:"chat_deleted",groups:{organization:G.id},properties:{organization_id:G.id,thread_id:$.id}});return{item:AW(X)}}})});import{z as ly8}from"zod";function Co0($){if(!$)return null;if("field"in $&&$.field[0]==="thread_id"&&$.operator==="eq")return String($.value);if("conditions"in $)for(let Z of $.conditions){let G=Co0(Z);if(G)return G}return null}var dy8,my8,Yh1;var _o0=D(()=>{ZX();p1();fL();dy8=wJ.extend({thread_id:ly8.string().optional().describe("ID of the thread to list messages for (required)")}),my8=oK(zo0),Yh1=Z1({name:"COLLECTION_THREAD_MESSAGES_LIST",description:"List messages in a thread with pagination. Requires thread_id. Returns messages in chronological order.",annotations:{title:"List Thread Messages",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:dy8,outputSchema:my8,handler:async($,Z)=>{H1(Z),await Z.access.check();let G=$.thread_id??Co0($.where);if(!G)throw Error("thread_id is required (provide as top-level param or in where clause)");let X=$.offset??0,Q=$.limit??100,Y=$.orderBy?.[0]?.direction??"asc",J=await Z.storage.threads.get(G);if(!J)return{items:[],totalCount:0,hasMore:!1};if(J.message_storage_version===2){let{messages:F,total:H}=await Z.storage.threads.messageParts().loadWindow(G,{limit:Q,offset:X});return{items:F.map((N)=>({id:N.id,thread_id:G,role:N.role,parts:N.parts,metadata:N.metadata??null,created_at:N.created_at,updated_at:N.created_at})),totalCount:H,hasMore:X+Q<H}}let{messages:W,total:K}=await Z.storage.threads.listMessages(G,{limit:Q,offset:X,sort:Y}),U=X+Q<K;return{items:W,totalCount:K,hasMore:U}}})});var bo0=D(()=>{qo0();Mo0();ko0();Vo0();So0();_o0()});function ny8($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function py8($){return $.map((Z)=>{let G=Z.metadata;if(G?.tiptapDoc)return Z;let X=Z.parts.find((Q)=>Q.type==="text"&&typeof Q.text==="string");if(!X?.text||typeof X.text!=="string")return Z;return{...Z,metadata:{...G,tiptapDoc:ny8(X.text)}}})}function V41($){let Z;if(typeof $==="string")try{let G=JSON.parse($);if(Array.isArray(G)&&G.length>0&&G[0]?.role&&Array.isArray(G[0]?.parts))Z=G;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return py8(Z)}import{z as W5}from"zod";var Jh1;var vo0=D(()=>{N5();p1();gU();Jh1=Z1({name:"AUTOMATION_CREATE",description:"Create an automation that runs an agent thread on trigger fire. Requires virtual_mcp_id + messages.",annotations:{title:"Create Automation",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:W5.object({name:W5.string().min(1).max(255),virtual_mcp_id:W5.string(),messages:W5.union([W5.string(),W5.array(W5.looseObject({id:W5.string().optional(),role:W5.enum(["user","assistant","system"]),parts:W5.array(W5.record(W5.string(),W5.unknown())),metadata:W5.unknown().optional()}))]),models:W5.object({tier:R41,modelId:W5.string().optional(),credentialId:W5.string().optional()}).loose().default({tier:"smart"}),tools:W5.array(W5.string()).nullable().optional(),maxAgentSteps:W5.number().int().min(1).max(100).nullable().optional(),temperature:W5.number().default(0.5),active:W5.boolean().default(!0)}),outputSchema:W5.object({id:W5.string(),name:W5.string(),active:W5.boolean(),created_at:W5.string()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=D$(Z);if(!X)throw Error("Unable to determine user identity");let Q=V41($.messages),Y=await Z.storage.automations.create({organization_id:G.id,created_by:X,name:$.name,messages:JSON.stringify(Q),models:JSON.stringify($.models),tools:$.tools===void 0||$.tools===null?null:JSON.stringify($.tools),max_agent_steps:$.maxAgentSteps??null,temperature:$.temperature,active:$.active,virtual_mcp_id:$.virtual_mcp_id});return w$.capture({distinctId:X,event:"automation_created",groups:{organization:G.id},properties:{organization_id:G.id,automation_id:Y.id,virtual_mcp_id:$.virtual_mcp_id,active:Y.active,tier:$.models.tier}}),{id:Y.id,name:Y.name,active:Y.active,created_at:Y.created_at}}})});import{z as e6}from"zod";var Wh1;var fo0=D(()=>{p1();Wh1=Z1({name:"AUTOMATION_GET",description:"Get an automation's full configuration and triggers by ID.",annotations:{title:"Get Automation",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:e6.object({id:e6.string()}),outputSchema:e6.object({automation:e6.object({id:e6.string(),name:e6.string(),active:e6.boolean(),created_by:e6.string(),created_at:e6.string(),updated_at:e6.string(),virtual_mcp_id:e6.string(),messages:e6.unknown(),models:e6.unknown(),tools:e6.array(e6.string()).nullable(),maxAgentSteps:e6.number().nullable(),temperature:e6.number(),triggers:e6.array(e6.object({id:e6.string(),type:e6.enum(["cron","event","webhook"]),cron_expression:e6.string().nullable(),connection_id:e6.string().nullable(),event_type:e6.string().nullable(),params:e6.unknown().nullable(),last_run_at:e6.string().nullable(),api_key_id:e6.string().nullable(),created_at:e6.string()}))}).nullable()}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=await Z.storage.automations.findById($.id,G.id);if(!X)return{automation:null};let Q=await Z.storage.automations.listTriggers(X.id);return{automation:{id:X.id,name:X.name,active:X.active,created_by:X.created_by,created_at:X.created_at,updated_at:X.updated_at,virtual_mcp_id:X.virtual_mcp_id,messages:JSON.parse(X.messages),models:JSON.parse(X.models),tools:X.tools?JSON.parse(X.tools):null,maxAgentSteps:X.max_agent_steps,temperature:X.temperature,triggers:Q.map((Y)=>({id:Y.id,type:Y.type,cron_expression:Y.cron_expression,connection_id:Y.connection_id,event_type:Y.event_type,params:Y.params?JSON.parse(Y.params):null,last_run_at:Y.last_run_at,api_key_id:Y.api_key_id,created_at:Y.created_at}))}}}})});import{z as PQ}from"zod";var Kh1;var xo0=D(()=>{p1();Kh1=Z1({name:"AUTOMATION_LIST",description:"List automations with their status, triggers, and configuration.",annotations:{title:"List Automations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:PQ.object({virtual_mcp_id:PQ.string().optional().nullable()}),outputSchema:PQ.object({automations:PQ.array(PQ.object({id:PQ.string(),name:PQ.string(),active:PQ.boolean(),created_by:PQ.string(),created_at:PQ.string(),trigger_count:PQ.number(),nearest_next_run_at:PQ.string().nullable(),virtual_mcp_id:PQ.string()}))}),handler:async($,Z)=>{P1(Z);let G=H1(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(G.id,$.virtual_mcp_id)).map((Y)=>({id:Y.id,name:Y.name,active:Y.active,created_by:Y.created_by,created_at:Y.created_at,trigger_count:Y.trigger_count,nearest_next_run_at:Y.nearest_next_run_at,virtual_mcp_id:Y.virtual_mcp_id}))}}})});import{DBOS as tv}from"@dbos-inc/dbos-sdk";async function oy8($,Z){for(let G=0;G<Z.maxAttempts;G++){if(Z.signal?.aborted)throw Z.signal.reason??Error("gate aborted");let X=await $();if(ty8.has(X))return X;if(G<Z.maxAttempts-1)await j6(Z.intervalMs,{signal:Z.signal}).catch(()=>{})}throw Error(`[threadGate] gate timed out polling for terminal status (${Z.maxAttempts} attempts)`)}function ry8($){return $.isPullCapable&&$.sandboxProviderKind==="user-desktop"}function Hh1($){Uh1=$}function ay8(){if(!Uh1)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return Uh1}async function sy8($){let Z=ay8(),{request:G}=$,X=await Z.meshContextFactory(G.organizationId,G.userId);if(!X)throw Error("user membership lost mid-dispatch");let Q=Z.pullDispatchFn!=null&&Z.workQueue!=null;if(!ry8({isPullCapable:Q,sandboxProviderKind:G.target?.sandboxProviderKind})){let U=$.timeoutMs??Z.runTimeoutMs,F=new AbortController,H=U!=null?setTimeout(()=>F.abort(),U):null;try{await Z.dispatchRunFn({...G,abortSignal:F.signal},X,Z.deps)}finally{if(H!==null)clearTimeout(H)}return}let J=$.timeoutMs??Z.runTimeoutMs,W=new AbortController,K=J!=null?setTimeout(()=>W.abort(),J):null;try{let{taskId:U,runFenceToken:F,harnessInput:H,messagesRef:N,sandboxConfig:O,orgSlug:B}=await Z.pullDispatchFn({...G,abortSignal:W.signal},X,Z.deps),L={runId:U,threadId:G.taskId??$.threadId,orgId:G.organizationId,userId:G.userId,runFenceToken:F,harnessInput:H,...O?{sandbox:O}:{},orgSlug:B,...N?{messagesRef:N}:{}};await Z.workQueue.publish(G.userId,L);let w=Z.gatePollIntervalMs??3000,z=Z.gatePollMaxAttempts??1200;await oy8(async()=>{return(await X.storage.threads.get(U))?.status??"unknown"},{intervalMs:w,maxAttempts:z,signal:W.signal})}finally{if(K!==null)clearTimeout(K)}}async function ey8($){if($.source!=="user-message")return;let{request:Z}=$;w$.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function $g8($,Z){if($.source!=="user-message")return;let{request:G}=$;w$.capture({distinctId:G.userId,event:"chat_message_failed",groups:{organization:G.organizationId},properties:{organization_id:G.organizationId,thread_id:G.taskId??$.threadId,agent_id:G.agent,model_id:G.models.thinking.id,mode:G.mode,error_category:"setup",error_message:Z}})}async function Zg8($){await tv.runStep(()=>ey8($),{name:"trackMessageStarted"});try{await tv.runStep(()=>sy8($),{name:"dispatchRunAndWait",retriesAllowed:!1})}catch(Z){let G=Z instanceof Error?Z.message:String(Z);throw await tv.runStep(()=>$g8($,G),{name:"trackMessageFailed"}),Z}return{taskId:$.request.taskId??$.threadId}}async function Nh1($,Z){return{workflowID:(await tv.startWorkflow(yo0,{queueName:Um,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).workflowID}}async function Oh1($,Z){return await(await tv.startWorkflow(yo0,{queueName:Um,enqueueOptions:{queuePartitionKey:$.threadId},workflowID:Z?.workflowID})($)).getResult()}var Um="thread-gate",ty8,Fh1=1,Uh1=null,yo0;var go0=D(()=>{N5();gZ();ty8=new Set(["completed","failed","requires_action"]);yo0=tv.registerWorkflow(Zg8,{name:"threadGateWorkflow"})});var S41=D(()=>{go0()});async function Bh1($,Z,G){let X;try{return await Promise.race([$.aiProviders.listModels(Z,G),new Promise((Y,J)=>{X=setTimeout(()=>J(Error("listModels timeout")),Gg8)})])}finally{if(X)clearTimeout(X)}}function Xg8($,Z){switch($){case"fast":return Z.chat.fast;case"smart":return Z.chat.smart;case"thinking":return Z.chat.thinking;case"image":return Z.image;case"web_research":return Z.webResearch}}function Dh1($,Z,G){let X=$.find((Q)=>Q.modelId===Z);return{title:X?.title??G??Z,providerId:X?.providerId,capabilities:X?.capabilities,limits:X?.limits??null}}async function xL($,Z){let G=$.organization?.id;if(!G)throw Error("resolveTier called without an organization");let Q=(await $.storage.organizationSettings.get(G))?.simple_mode?.tiers?.[Z]??null,Y=await $.storage.aiProviderKeys.list({organizationId:G});if(Q&&Y.some((F)=>F.id===Q.keyId)){let F=await Bh1($,Q.keyId,G).catch(()=>[]);return{credentialId:Q.keyId,modelId:Q.modelId,modelMeta:Dh1(F,Q.modelId,Q.title)}}if(Y.length===0)throw new ov(Z);let J={};await Promise.all(Y.map(async(F)=>{J[F.id]=await Bh1($,F.id,G).catch(()=>[])}));let W=Y.map((F)=>({id:F.id,providerId:F.providerId,label:F.label,presetId:F.presetId,createdBy:F.createdBy,createdAt:F.createdAt})),K=yq1(W,J),U=Xg8(Z,K);if(!U)throw new ov(Z);return{credentialId:U.keyId,modelId:U.modelId,modelMeta:Dh1(J[U.keyId]??[],U.modelId,U.title)}}async function ho0($,Z,G){let X=$.organization?.id;if(!X)throw Error("resolveSpecificModel called without an organization");let Q=await Bh1($,Z,X).catch(()=>[]);return{credentialId:Z,modelId:G,modelMeta:Dh1(Q,G)}}async function rv($,Z){try{return await xL($,Z)}catch(G){if(G instanceof ov)return null;return console.warn(`[resolveTier] tier "${Z}" resolution failed:`,G),null}}var ov,Gg8=5000;var C41=D(()=>{V8();ov=class ov extends Error{tier;constructor($){super(`No model available for tier "${$}". Connect a provider or configure the tier in organization settings.`);this.tier=$;this.name="TierUnavailableError"}}});function uo0($){return $ instanceof Fm||typeof $==="object"&&$!==null&&$.permanent===!0}var Fm;var Lh1=D(()=>{Fm=class Fm extends Error{permanent=!0;code;constructor($,Z){super(Z);this.name="PermanentRunError",this.code=$}}});function Qg8($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((G)=>typeof G==="string"))return Z.length>0?Z:null}catch{}return null}function co0($,Z,G,X){return{messages:JSON.parse($.messages).map((W)=>({...W,id:crypto.randomUUID()})),models:{credentialId:X.credentialId,thinking:X.thinking,...X.image?{image:X.image}:{},...X.deepResearch?{deepResearch:X.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:Qg8($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,triggerId:Z??void 0,taskId:G}}function o7($,Z,G,X,Q,Y,J,W){return o7.fromTZ(o7.tp($,Z,G,X,Q,Y,J),W)}function Eh1($,Z=new Date){let G=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],X=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${X} GMT`)-Date.parse(`${X} ${G}`)}function Yg8($,Z){let G=new Date(Date.parse($));if(isNaN(G))throw Error("minitz: Invalid ISO8601 passed to parser.");let X=$.substring(9);return $.includes("Z")||X.includes("-")||X.includes("+")?o7.tp(G.getUTCFullYear(),G.getUTCMonth()+1,G.getUTCDate(),G.getUTCHours(),G.getUTCMinutes(),G.getUTCSeconds(),"Etc/UTC"):o7.tp(G.getFullYear(),G.getMonth()+1,G.getDate(),G.getHours(),G.getMinutes(),G.getSeconds(),Z)}function Jg8($){if($===void 0&&($={}),delete $.name,$.legacyMode=$.legacyMode===void 0?!0:$.legacyMode,$.paused=$.paused===void 0?!1:$.paused,$.maxRuns=$.maxRuns===void 0?1/0:$.maxRuns,$.catch=$.catch===void 0?!1:$.catch,$.interval=$.interval===void 0?0:parseInt($.interval.toString(),10),$.utcOffset=$.utcOffset===void 0?void 0:parseInt($.utcOffset.toString(),10),$.unref=$.unref===void 0?!1:$.unref,$.startAt&&($.startAt=new VY($.startAt,$.timezone)),$.stopAt&&($.stopAt=new VY($.stopAt,$.timezone)),$.interval!==null){if(isNaN($.interval))throw Error("CronOptions: Supplied value for interval is not a number");if($.interval<0)throw Error("CronOptions: Supplied value for interval can not be negative")}if($.utcOffset!==void 0){if(isNaN($.utcOffset))throw Error("CronOptions: Invalid value passed for utcOffset, should be number representing minutes offset from UTC.");if($.utcOffset<-870||$.utcOffset>870)throw Error("CronOptions: utcOffset out of bounds.");if($.utcOffset!==void 0&&$.timezone)throw Error("CronOptions: Combining 'utcOffset' with 'timezone' is not allowed.")}if($.unref!==!0&&$.unref!==!1)throw Error("CronOptions: Unref should be either true, false or undefined(false).");return $}function Hm($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function Wg8($){return Hm($)}function Kg8($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var wh1=32,Nm,io0,lo0=class{pattern;timezone;second;minute;hour;day;month;dayOfWeek;lastDayOfMonth;starDOM;starDOW;constructor($,Z){this.pattern=$,this.timezone=Z,this.second=Array(60).fill(0),this.minute=Array(60).fill(0),this.hour=Array(24).fill(0),this.day=Array(31).fill(0),this.month=Array(12).fill(0),this.dayOfWeek=Array(7).fill(0),this.lastDayOfMonth=!1,this.starDOM=!1,this.starDOW=!1,this.parse()}parse(){if(!(typeof this.pattern=="string"||this.pattern instanceof String))throw TypeError("CronPattern: Pattern has to be of type string.");this.pattern.indexOf("@")>=0&&(this.pattern=this.handleNicknames(this.pattern).trim());let $=this.pattern.replace(/\s+/g," ").split(" ");if($.length<5||$.length>6)throw TypeError("CronPattern: invalid configuration format ('"+this.pattern+"'), exactly five or six space separated parts are required.");if($.length===5&&$.unshift("0"),$[3].indexOf("L")>=0&&($[3]=$[3].replace("L",""),this.lastDayOfMonth=!0),$[3]=="*"&&(this.starDOM=!0),$[4].length>=3&&($[4]=this.replaceAlphaMonths($[4])),$[5].length>=3&&($[5]=this.replaceAlphaDays($[5])),$[5]=="*"&&(this.starDOW=!0),this.pattern.indexOf("?")>=0){let Z=new VY(new Date,this.timezone).getDate(!0);$[0]=$[0].replace("?",Z.getSeconds().toString()),$[1]=$[1].replace("?",Z.getMinutes().toString()),$[2]=$[2].replace("?",Z.getHours().toString()),this.starDOM||($[3]=$[3].replace("?",Z.getDate().toString())),$[4]=$[4].replace("?",(Z.getMonth()+1).toString()),this.starDOW||($[5]=$[5].replace("?",Z.getDay().toString()))}this.throwAtIllegalCharacters($),this.partToArray("second",$[0],0,1),this.partToArray("minute",$[1],0,1),this.partToArray("hour",$[2],0,1),this.partToArray("day",$[3],-1,1),this.partToArray("month",$[4],-1,1),this.partToArray("dayOfWeek",$[5],0,Nm),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,G,X){let Q=this[$],Y=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Y)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Q.fill(X);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],G,X);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,G,X):Z.indexOf("-")!==-1?this.handleRange(Z,$,G,X):Z.indexOf("/")!==-1?this.handleStepping(Z,$,G,X):Z!==""&&this.handleNumber(Z,$,G,X)}throwAtIllegalCharacters($){for(let Z=0;Z<$.length;Z++)if((Z===5?/[^/*0-9,\-#L]+/:/[^/*0-9,-]+/).test($[Z]))throw TypeError("CronPattern: configuration entry "+Z+" ("+$[Z]+") contains illegal characters.")}handleNumber($,Z,G,X){let Q=this.extractNth($,Z),Y=parseInt(Q[0],10)+G;if(isNaN(Y))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Y,Q[1]||X)}setPart($,Z,G){if(!Object.prototype.hasOwnProperty.call(this,$))throw TypeError("CronPattern: Invalid part specified: "+$);if($==="dayOfWeek"){if(Z===7&&(Z=0),Z<0||Z>6)throw RangeError("CronPattern: Invalid value for dayOfWeek: "+Z);this.setNthWeekdayOfMonth(Z,G);return}if($==="second"||$==="minute"){if(Z<0||Z>=60)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="hour"){if(Z<0||Z>=24)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="day"){if(Z<0||Z>=31)throw RangeError("CronPattern: Invalid value for "+$+": "+Z)}else if($==="month"&&(Z<0||Z>=12))throw RangeError("CronPattern: Invalid value for "+$+": "+Z);this[$][Z]=G}handleRangeWithStepping($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Y===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=Y,U=parseInt(J,10)+G,F=parseInt(W,10)+G,H=parseInt(K,10);if(isNaN(U))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(H===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(H>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(U>F)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let N=U;N<=F;N+=H)this.setPart(Z,N,Q[1]||X)}extractNth($,Z){let G=$,X;if(G.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");X=G.split("#")[1],G=G.split("#")[0]}return[G,X]}handleRange($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].split("-");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Y[0],10)+G,W=parseInt(Y[1],10)+G;if(isNaN(J))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(J>W)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let K=J;K<=W;K++)this.setPart(Z,K,Q[1]||X)}handleStepping($,Z,G,X){let Q=this.extractNth($,Z),Y=Q[0].split("/");if(Y.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Y[0]===""&&(Y[0]="*");let J=0;Y[0]!=="*"&&(J=parseInt(Y[0],10)+G);let W=parseInt(Y[1],10);if(isNaN(W))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(W===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(W>this[Z].length)throw TypeError("CronPattern: Syntax error, max steps for part is ("+this[Z].length+")");for(let K=J;K<this[Z].length;K+=W)this.setPart(Z,K,Q[1]||X)}replaceAlphaDays($){return $.replace(/-sun/gi,"-7").replace(/sun/gi,"0").replace(/mon/gi,"1").replace(/tue/gi,"2").replace(/wed/gi,"3").replace(/thu/gi,"4").replace(/fri/gi,"5").replace(/sat/gi,"6")}replaceAlphaMonths($){return $.replace(/jan/gi,"1").replace(/feb/gi,"2").replace(/mar/gi,"3").replace(/apr/gi,"4").replace(/may/gi,"5").replace(/jun/gi,"6").replace(/jul/gi,"7").replace(/aug/gi,"8").replace(/sep/gi,"9").replace(/oct/gi,"10").replace(/nov/gi,"11").replace(/dec/gi,"12")}handleNicknames($){let Z=$.trim().toLowerCase();return Z==="@yearly"||Z==="@annually"?"0 0 1 1 *":Z==="@monthly"?"0 0 1 * *":Z==="@weekly"?"0 0 * * 0":Z==="@daily"?"0 0 * * *":Z==="@hourly"?"0 * * * *":$}setNthWeekdayOfMonth($,Z){if(typeof Z!="number"&&Z==="L")this.dayOfWeek[$]=this.dayOfWeek[$]|wh1;else if(Z===Nm)this.dayOfWeek[$]=Nm;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|io0[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},do0,lU,VY=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,G){if(this.tz=G,Z&&Z instanceof Date)if(!isNaN(Z))this.fromDate(Z);else throw TypeError("CronDate: Invalid date passed to CronDate constructor");else if(Z===void 0)this.fromDate(new Date);else if(Z&&typeof Z=="string")this.fromString(Z);else if(Z instanceof $)this.fromCronDate(Z);else throw TypeError("CronDate: Invalid type ("+typeof Z+") passed to CronDate constructor")}isNthWeekdayOfMonth(Z,G,X,Q){let Y=new Date(Date.UTC(Z,G,X)).getUTCDay(),J=0;for(let W=1;W<=X;W++)new Date(Date.UTC(Z,G,W)).getUTCDay()===Y&&J++;if(Q&Nm&&io0[J-1]&Q)return!0;if(Q&wh1){let W=new Date(Date.UTC(Z,G+1,0)).getUTCDate();for(let K=X+1;K<=W;K++)if(new Date(Date.UTC(Z,G,K)).getUTCDay()===Y)return!1;return!0}return!1}fromDate(Z){if(this.tz!==void 0)if(typeof this.tz=="number")this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes()+this.tz,this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),this.apply();else{let G=o7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=G.s,this.minute=G.i,this.hour=G.h,this.day=G.d,this.month=G.m-1,this.year=G.y}else this.ms=Z.getMilliseconds(),this.second=Z.getSeconds(),this.minute=Z.getMinutes(),this.hour=Z.getHours(),this.day=Z.getDate(),this.month=Z.getMonth(),this.year=Z.getFullYear()}fromCronDate(Z){this.tz=Z.tz,this.year=Z.year,this.month=Z.month,this.day=Z.day,this.hour=Z.hour,this.minute=Z.minute,this.second=Z.second,this.ms=Z.ms}apply(){if(this.month>11||this.day>do0[this.month]||this.hour>59||this.minute>59||this.second>59||this.hour<0||this.minute<0||this.second<0){let Z=new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms));return this.ms=Z.getUTCMilliseconds(),this.second=Z.getUTCSeconds(),this.minute=Z.getUTCMinutes(),this.hour=Z.getUTCHours(),this.day=Z.getUTCDate(),this.month=Z.getUTCMonth(),this.year=Z.getUTCFullYear(),!0}else return!1}fromString(Z){if(typeof this.tz=="number"){let G=o7.fromTZISO(Z);this.ms=G.getUTCMilliseconds(),this.second=G.getUTCSeconds(),this.minute=G.getUTCMinutes(),this.hour=G.getUTCHours(),this.day=G.getUTCDate(),this.month=G.getUTCMonth(),this.year=G.getUTCFullYear(),this.apply()}else return this.fromDate(o7.fromTZISO(Z,this.tz))}findNext(Z,G,X,Q){let Y=this[G],J;X.lastDayOfMonth&&(this.month!==1?J=do0[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!X.starDOW&&G=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[G]+Q;K<X[G].length;K++){let U=X[G][K];if(G==="day"&&X.lastDayOfMonth&&K-Q==J&&(U=1),G==="day"&&!X.starDOW){let F=X.dayOfWeek[(W+(K-Q-1))%7];if(F&&F&Nm)F=this.isNthWeekdayOfMonth(this.year,this.month,K-Q,F)?1:0;else if(F)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${F}`);Z.legacyMode&&!X.starDOM?U=U||F:U=U&&F}if(U)return this[G]=K-Q,Y!==this[G]?2:1}return 3}recurse(Z,G,X){let Q=this.findNext(G,lU[X][0],Z,lU[X][2]);if(Q>1){let Y=X+1;for(;Y<lU.length;)this[lU[Y][0]]=-lU[Y][2],Y++;if(Q===3)return this[lU[X][1]]++,this[lU[X][0]]=-lU[X][2],this.apply(),this.recurse(Z,G,0);if(this.apply())return this.recurse(Z,G,X-1)}return X+=1,X>=lU.length?this:this.year>=3000?null:this.recurse(Z,G,X)}increment(Z,G,X){return this.second+=G.interval!==void 0&&G.interval>1&&X?G.interval:1,this.ms=0,this.apply(),this.recurse(Z,G,0)}getDate(Z){return Z||this.tz===void 0?new Date(this.year,this.month,this.day,this.hour,this.minute,this.second,this.ms):typeof this.tz=="number"?new Date(Date.UTC(this.year,this.month,this.day,this.hour,this.minute-this.tz,this.second,this.ms)):o7.fromTZ(o7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},mo0=30000,_41,tN=class{name;options;_states;fn;constructor($,Z,G){let X,Q;if(Hm(Z))Q=Z;else if(typeof Z=="object")X=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Hm(G))Q=G;else if(typeof G=="object")X=G;else if(G!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=X?.name,this.options=Jg8(X),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:X?X.maxRuns:void 0,paused:X?X.paused:!1,pattern:new lo0("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new VY($,this.options.timezone||this.options.utcOffset):this._states.pattern=new lo0($,this.options.timezone),this.name){if(_41.find((Y)=>Y.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");_41.push(this)}return Q!==void 0&&Wg8(Q)&&(this.fn=Q,this.schedule()),this}nextRun($){let Z=this._next($);return Z?Z.getDate(!1):null}nextRuns($,Z){this._states.maxRuns!==void 0&&$>this._states.maxRuns&&($=this._states.maxRuns);let G=[],X=Z||this._states.currentRun||void 0;for(;$--&&(X=this.nextRun(X));)G.push(X);return G}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,G=this.fn!==void 0,X=!this._states.kill;return Z&&G&&X&&$!==null}isStopped(){return this._states.kill}isBusy(){return this._states.blocking}currentRun(){return this._states.currentRun?this._states.currentRun.getDate():null}previousRun(){return this._states.previousRun?this._states.previousRun.getDate():null}msToNext($){let Z=this._next($);return Z?$ instanceof VY||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new VY($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=_41.indexOf(this);$>=0&&_41.splice($,1)}pause(){return this._states.paused=!0,!this._states.kill}resume(){return this._states.paused=!1,!this._states.kill}schedule($){if($&&this.fn)throw Error("Cron: It is not allowed to schedule two functions using the same Croner instance.");$&&(this.fn=$);let Z=this.msToNext(),G=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||G===null?this:(Z>mo0&&(Z=mo0),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(G),Z),this._states.currentTimeout&&this.options.unref&&Kg8(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new VY(void 0,this.options.timezone||this.options.utcOffset),this.options.catch)try{this.fn!==void 0&&await this.fn(this,this.options.context)}catch(Z){Hm(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new VY($,this.options.timezone||this.options.utcOffset),this._states.blocking=!1}async trigger(){await this._trigger()}runsLeft(){return this._states.maxRuns}_checkTrigger($){let Z=new Date,G=!this._states.paused&&Z.getTime()>=$.getTime(),X=this._states.blocking&&this.options.protect;G&&!X?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):G&&X&&Hm(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),G=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),G=!$),$=new VY($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let X=this._states.once||new VY($,this.options.timezone||this.options.utcOffset);return!G&&X!==this._states.once&&(X=X.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||X===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&X.getTime()>=this.options.stopAt.getTime()?null:X}_calculatePreviousRun($,Z){let G=new VY(void 0,this.options.timezone||this.options.utcOffset),X=$;if(this.options.startAt.getTime()<=G.getTime()){X=this.options.startAt;let Q=X.getTime()+this.options.interval*1000;for(;Q<=G.getTime();)X=new VY(X,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Q=X.getTime()+this.options.interval*1000;Z=!0}return X===null&&(X=void 0),[X,Z]}};var Om=D(()=>{o7.fromTZISO=($,Z,G)=>o7.fromTZ(Yg8($,Z),G);o7.fromTZ=function($,Z){let G=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),X=Eh1($.tz,G),Q=new Date(G.getTime()-X),Y=Eh1($.tz,Q);if(Y-X===0)return Q;{let J=new Date(G.getTime()-Y),W=Eh1($.tz,J);if(W-Y===0)return J;if(!Z&&W-Y>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Q}};o7.toTZ=function($,Z){let G=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),X=new Date(G);return{y:X.getFullYear(),m:X.getMonth()+1,d:X.getDate(),h:X.getHours(),i:X.getMinutes(),s:X.getSeconds(),tz:Z}};o7.tp=($,Z,G,X,Q,Y,J)=>({y:$,m:Z,d:G,h:X,i:Q,s:Y,tz:J});o7.minitz=o7;Nm=31|wh1,io0=[1,2,4,8,16],do0=[31,28,31,30,31,30,31,31,30,31,30,31],lU=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];_41=[]});function b41($,Z){try{return new tN($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var zh1=D(()=>{Om()});import{DBOS as O7,SchedulerMode as Ug8}from"@dbos-inc/dbos-sdk";function Bm($){return`${Fg8}${$}`}async function v41($){await O7.registerQueue(Bm($),{concurrency:Hg8,onConflict:"never_update"})}function Ah1($){Ph1=$}function yL(){if(!Ph1)throw Error("[automations] DBOS runtime not initialized \u2014 setAutomationRuntime() must run before workflows fire");return Ph1}function Og8($){if(!$||$.length===0)return;return{vision:$.includes("vision")||$.includes("image")||void 0,text:$.includes("text")||void 0,reasoning:$.includes("reasoning")||void 0,file:$.includes("file")||void 0}}async function Bg8($){let Z=yL(),G=await Z.storage.findById($.automationId,$.organizationId);if(!G)return{skip:"not_found"};if(!G.active)return{skip:"inactive"};let X=await Z.meshContextFactory(G.organization_id,G.created_by);if(!X)return console.warn(`[fireAutomationWorkflow] deactivating "${G.name}" \u2014 creator ${G.created_by} no longer in org ${G.organization_id}`),await Z.storage.deactivateAutomation(G.id),{skip:"creator_invalid"};let Q=JSON.parse(G.models),Y=Q.modelId&&Q.credentialId?{modelId:Q.modelId,credentialId:Q.credentialId}:null;if(!Y&&!Q.tier)console.warn(`[fireAutomationWorkflow] automation ${G.id} missing tier, defaulting to "smart"`);let J=Q.tier??"smart",[W,K,U]=await Promise.all([Y?ho0(X,Y.credentialId,Y.modelId):xL(X,J),rv(X,"image"),rv(X,"web_research")]),F=(N)=>({id:N.modelId,title:N.modelMeta.title,provider:N.modelMeta.providerId??null,capabilities:Og8(N.modelMeta.capabilities),limits:N.modelMeta.limits?{contextWindow:N.modelMeta.limits.contextWindow,maxOutputTokens:N.modelMeta.limits.maxOutputTokens??void 0}:void 0}),H={credentialId:W.credentialId,thinking:F(W),...K?{image:{...F(K),credentialId:K.credentialId}}:{},...U?{deepResearch:{...F(U),credentialId:U.credentialId}}:{}};return{automation:G,resolvedModel:H}}async function Dg8($,Z){return await yL().storage.createAutomationRunThread($,Z)}async function Lg8($){let Z=yL();try{let G=new Date().toISOString();await Z.storage.updateTriggerLastRunAt($,G);let X=await Z.storage.findTriggerById($);if(X?.cron_expression){let Q=b41(X.cron_expression,new Date);await Z.storage.updateNextRunAt($,Q?Q.toISOString():null)}}catch(G){console.warn(`[fireAutomationWorkflow] trigger ${$} run-time write failed:`,G instanceof Error?G.message:G)}}async function Eg8($,Z,G,X){if(!await yL().meshContextFactory($.organization_id,$.created_by))return{ok:!1,reason:"creator membership lost mid-fire"};let J=co0($,G.triggerId,X,Z);if(G.contextMessages&&G.contextMessages.length>0){let U=G.contextMessages.flatMap((H)=>H.parts),F=J.messages.find((H)=>H.role!=="system");if(F)F.parts=[...U,...F.parts];else J.messages=[...J.messages,{id:crypto.randomUUID(),role:"user",parts:U}]}let{abortSignal:W,...K}=J;return{ok:!0,request:K}}async function jh1($){let Z=yL();try{await Z.storage.markRunFailed($)}catch{}}async function wg8($){let Z=yL();try{await Z.storage.deactivateAutomation($)}catch{}}async function zg8($){let Z=await O7.runStep(()=>Bg8($),{name:"prepareFire"});if("skip"in Z)return{skipped:Z.skip};let G=await O7.runStep(()=>Dg8(Z.automation,$.triggerId),{name:"createRunThread"});if($.triggerId){let Y=$.triggerId;await O7.runStep(()=>Lg8(Y),{name:"updateTriggerTiming"})}let X=await O7.runStep(()=>Eg8(Z.automation,Z.resolvedModel,$,G),{name:"buildDispatchRequest"});if(!X.ok)return await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:X.reason};let Q=yL();try{await Oh1({threadId:G,request:X.request,timeoutMs:Q.runTimeoutMs??Ng8,source:"automation"})}catch(Y){let J=Y instanceof Error?Y.message:String(Y);if(uo0(Y))return console.warn(`[fireAutomationWorkflow] deactivating "${Z.automation.name}" (${Z.automation.id}) \u2014 permanent dispatch error, will not fire again: ${J}`),await O7.runStep(()=>wg8(Z.automation.id),{name:"deactivateAutomation"}),await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:J};return console.error(`[fireAutomationWorkflow] ERROR "${Z.automation.name}" taskId=${G}:`,J),await O7.runStep(()=>jh1(G),{name:"markRunFailed"}),{taskId:G,error:J}}return{taskId:G}}async function jg8($,Z){await v41(Z.organizationId),await O7.startWorkflow(f41,{queueName:Bm(Z.organizationId)})(Z)}async function Ig8(){let $=Date.now()-Pg8,Z=new Date($).toISOString(),G=0,X=0;while(X<200){let Q=await O7.listWorkflows({status:[...Rg8],endTime:Z,limit:no0,loadInput:!1,loadOutput:!1});if(Q.length===0)break;if(await O7.deleteWorkflows(Q.map((Y)=>Y.workflowID)),G+=Q.length,X++,Q.length<no0)break}return console.log(`[automations-gc] deleted ${G} workflow(s) in ${X} batch(es) (cutoff=${Z})`),{deleted:G,batches:X,cutoffMs:$}}async function Tg8($,Z){await O7.runStep(()=>Ig8(),{name:"automationsGarbageCollect"})}var Fg8="automations-org-",Hg8=10,Ng8=300000,Ph1=null,f41,po0,Pg8=604800000,no0=500,Ag8="17 3 * * *",Rg8,qg8;var Rh1=D(()=>{S41();C41();Lh1();zh1();f41=O7.registerWorkflow(zg8,{name:"fireAutomationWorkflow"});po0=O7.registerWorkflow(jg8,{name:"cronEntryWorkflow"}),Rg8=["SUCCESS","ERROR","CANCELLED"];qg8=O7.registerWorkflow(Tg8,{name:"automationsGcWorkflow"});O7.registerScheduled(qg8,{name:"automationsGcWorkflow",crontab:Ag8,mode:Ug8.ExactlyOncePerIntervalWhenActive})});import{DBOS as av}from"@dbos-inc/dbos-sdk";function gL($){return`auto-trigger-${$}`}async function x41($,Z){if($.type!=="cron"||!$.cron_expression)return;await av.createSchedule({scheduleName:gL($.id),workflowFn:po0,schedule:$.cron_expression,context:{automationId:Z.id,organizationId:Z.organization_id,triggerId:$.id}})}async function Ih1($){try{await av.deleteSchedule(gL($))}catch(Z){console.warn(`[dbos-sync] deleteSchedule(${$}) failed:`,Z instanceof Error?Z.message:Z)}}async function oo0($,Z){let G=$.filter((X)=>X.type==="cron");await Promise.allSettled(G.map(async(X)=>{try{if(Z)await av.resumeSchedule(gL(X.id));else await av.pauseSchedule(gL(X.id))}catch(Q){console.warn(`[dbos-sync] ${Z?"resume":"pause"}Schedule(${X.id}) failed:`,Q instanceof Error?Q.message:Q)}}))}async function ro0($){await Promise.allSettled($.filter((Z)=>Z.type==="cron").map((Z)=>Ih1(Z.id)))}function ao0($,Z){return Z?`auto:${$.automationId}:${Z}`:void 0}async function Th1($,Z){await v41($.organizationId);let G=ao0($,Z?.idempotencyKey);return await(await av.startWorkflow(f41,{workflowID:G,queueName:Bm($.organizationId)})($)).getResult()}async function Dm($,Z){await v41($.organizationId);let G=ao0($,Z?.idempotencyKey);await av.startWorkflow(f41,{workflowID:G,queueName:Bm($.organizationId)})($)}var to0="auto-trigger-";var hL=D(()=>{Rh1()});class SY{constructor($={}){this._started=!1,this._hasHandledRequest=!1,this._streamMapping=new Map,this._requestToStreamMapping=new Map,this._requestResponseMap=new Map,this._initialized=!1,this._enableJsonResponse=!1,this._standaloneSseStreamId="_GET_stream",this.sessionIdGenerator=$.sessionIdGenerator,this._enableJsonResponse=$.enableJsonResponse??!1,this._eventStore=$.eventStore,this._onsessioninitialized=$.onsessioninitialized,this._onsessionclosed=$.onsessionclosed,this._allowedHosts=$.allowedHosts,this._allowedOrigins=$.allowedOrigins,this._enableDnsRebindingProtection=$.enableDnsRebindingProtection??!1,this._retryInterval=$.retryInterval}async start(){if(this._started)throw Error("Transport already started");this._started=!0}createJsonErrorResponse($,Z,G,X){let Q={code:Z,message:G};if(X?.data!==void 0)Q.data=X.data;return new Response(JSON.stringify({jsonrpc:"2.0",error:Q,id:null}),{status:$,headers:{"Content-Type":"application/json",...X?.headers}})}validateRequestHeaders($){if(!this._enableDnsRebindingProtection)return;if(this._allowedHosts&&this._allowedHosts.length>0){let Z=$.headers.get("host");if(!Z||!this._allowedHosts.includes(Z)){let G=`Invalid Host header: ${Z}`;return this.onerror?.(Error(G)),this.createJsonErrorResponse(403,-32000,G)}}if(this._allowedOrigins&&this._allowedOrigins.length>0){let Z=$.headers.get("origin");if(Z&&!this._allowedOrigins.includes(Z)){let G=`Invalid Origin header: ${Z}`;return this.onerror?.(Error(G)),this.createJsonErrorResponse(403,-32000,G)}}return}async handleRequest($,Z){if(!this.sessionIdGenerator&&this._hasHandledRequest)throw Error("Stateless transport cannot be reused across requests. Create a new transport per request.");this._hasHandledRequest=!0;let G=this.validateRequestHeaders($);if(G)return G;switch($.method){case"POST":return this.handlePostRequest($,Z);case"GET":return this.handleGetRequest($);case"DELETE":return this.handleDeleteRequest($);default:return this.handleUnsupportedRequest()}}async writePrimingEvent($,Z,G,X){if(!this._eventStore)return;if(X<"2025-11-25")return;let Q=await this._eventStore.storeEvent(G,{}),Y=`id: ${Q}
|
|
1187
1187
|
data:
|
|
1188
1188
|
|
|
1189
1189
|
`;if(this._retryInterval!==void 0)Y=`id: ${Q}
|
|
@@ -2207,7 +2207,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
|
|
|
2207
2207
|
`);let X=Z.pax;if(X)for(let Q in X)G+=Sd1(" "+Q+"="+X[Q]+`
|
|
2208
2208
|
`);return d4.from(G)};me8.decodePax=function(Z){let G={};while(Z.length){let X=0;while(X<Z.length&&Z[X]!==32)X++;let Q=parseInt(d4.toString(Z.subarray(0,X)),10);if(!Q)return G;let Y=d4.toString(Z.subarray(X+1,Q-1)),J=Y.indexOf("=");if(J===-1)return G;G[Y.slice(0,J)]=Y.slice(J+1),Z=Z.subarray(Q)}return G};me8.encode=function(Z){let G=d4.alloc(512),X=Z.name,Q="";if(Z.typeflag===5&&X[X.length-1]!=="/")X+="/";if(d4.byteLength(X)!==X.length)return null;while(d4.byteLength(X)>100){let Y=X.indexOf("/");if(Y===-1)return null;Q+=Q?"/"+X.slice(0,Y):X.slice(0,Y),X=X.slice(Y+1)}if(d4.byteLength(X)>100||d4.byteLength(Q)>155)return null;if(Z.linkname&&d4.byteLength(Z.linkname)>100)return null;if(d4.write(G,X),d4.write(G,EO(Z.mode&4095,6),100),d4.write(G,EO(Z.uid,6),108),d4.write(G,EO(Z.gid,6),116),le8(Z.size,G,124),d4.write(G,EO(Z.mtime.getTime()/1000|0,11),136),G[156]=48+ue8(Z.type),Z.linkname)d4.write(G,Z.linkname,157);if(d4.copy(u7$,G,257),d4.copy(be8,G,263),Z.uname)d4.write(G,Z.uname,265);if(Z.gname)d4.write(G,Z.gname,297);if(d4.write(G,EO(Z.devmajor||0,6),329),d4.write(G,EO(Z.devminor||0,6),337),Q)d4.write(G,Q,345);return d4.write(G,EO(l7$(G),6),148),G};me8.decode=function(Z,G,X){let Q=Z[156]===0?0:Z[156]-48,Y=ff(Z,0,100,G),J=LO(Z,100,8),W=LO(Z,108,8),K=LO(Z,116,8),U=LO(Z,124,12),F=LO(Z,136,12),H=he8(Q),N=Z[157]===0?null:ff(Z,157,100,G),O=ff(Z,265,32),B=ff(Z,297,32),L=LO(Z,329,8),w=LO(Z,337,8),z=l7$(Z);if(z===256)return null;if(z!==LO(Z,148,8))throw Error("Invalid tar header. Maybe the tar is corrupted or it needs to be gunzipped?");if(xe8(Z)){if(Z[345])Y=ff(Z,345,155,G)+"/"+Y}else if(ye8(Z));else if(!X)throw Error("Invalid tar header: unknown format.");if(Q===0&&Y&&Y[Y.length-1]==="/")Q=5;return{name:Y,mode:J,uid:W,gid:K,size:U,mtime:new Date(1000*F),type:H,linkname:N,uname:O,gname:B,devmajor:L,devminor:w,pax:null}};function xe8($){return d4.equals(u7$,$.subarray(257,263))}function ye8($){return d4.equals(ve8,$.subarray(257,263))&&d4.equals(fe8,$.subarray(263,265))}function ge8($,Z,G){if(typeof $!=="number")return G;if($=~~$,$>=Z)return Z;if($>=0)return $;if($+=Z,$>=0)return $;return 0}function he8($){switch($){case 0:return"file";case 1:return"link";case 2:return"symlink";case 3:return"character-device";case 4:return"block-device";case 5:return"directory";case 6:return"fifo";case 7:return"contiguous-file";case 72:return"pax-header";case 55:return"pax-global-header";case 27:return"gnu-long-link-path";case 28:case 30:return"gnu-long-path"}return null}function ue8($){switch($){case"file":return 0;case"link":return 1;case"symlink":return 2;case"character-device":return 3;case"block-device":return 4;case"directory":return 5;case"fifo":return 6;case"contiguous-file":return 7;case"pax-header":return 72}return 0}function c7$($,Z,G,X){for(;G<X;G++)if($[G]===Z)return G;return X}function l7$($){let Z=256;for(let G=0;G<148;G++)Z+=$[G];for(let G=156;G<512;G++)Z+=$[G];return Z}function EO($,Z){if($=$.toString(8),$.length>Z)return"7777777777777777777".slice(0,Z)+" ";return"0000000000000000000".slice(0,Z-$.length)+$+" "}function ce8($,Z,G){Z[G]=128;for(let X=11;X>0;X--)Z[G+X]=$&255,$=Math.floor($/256)}function le8($,Z,G){if($.toString(8).length>11)ce8($,Z,G);else d4.write(Z,EO($,11),G)}function de8($){let Z;if($[0]===128)Z=!0;else if($[0]===255)Z=!1;else return null;let G=[],X;for(X=$.length-1;X>0;X--){let J=$[X];if(Z)G.push(J);else G.push(255-J)}let Q=0,Y=G.length;for(X=0;X<Y;X++)Q+=G[X]*Math.pow(256,X);return Z?Q:-1*Q}function LO($,Z,G){if($=$.subarray(Z,Z+G),Z=0,$[Z]&128)return de8($);else{while(Z<$.length&&$[Z]===32)Z++;let X=ge8(c7$($,32,Z,$.length),$.length,$.length);while(Z<X&&$[Z]===0)Z++;if(X===Z)return 0;return parseInt(d4.toString($.subarray(Z,X)),8)}}function ff($,Z,G,X){return d4.toString($.subarray(Z,c7$($,0,Z,Z+G)),X)}function Sd1($){let Z=d4.byteLength($),G=Math.floor(Math.log(Z)/Math.log(10))+1;if(Z+G>=Math.pow(10,G))G++;return Z+G+$}});var r7$=v((Hr5,o7$)=>{var{Writable:re8,Readable:ae8,getStreamError:d7$}=Vd1(),se8=Rd1(),m7$=vf(),xf=Cd1(),ee8=m7$.alloc(0);class i7${constructor(){this.buffered=0,this.shifted=0,this.queue=new se8,this._offset=0}push($){this.buffered+=$.byteLength,this.queue.push($)}shiftFirst($){return this._buffered===0?null:this._next($)}shift($){if($>this.buffered)return null;if($===0)return ee8;let Z=this._next($);if($===Z.byteLength)return Z;let G=[Z];while(($-=Z.byteLength)>0)Z=this._next($),G.push(Z);return m7$.concat(G)}_next($){let Z=this.queue.peek(),G=Z.byteLength-this._offset;if($>=G){let X=this._offset?Z.subarray(this._offset,Z.byteLength):Z;return this.queue.shift(),this._offset=0,this.buffered-=G,this.shifted+=G,X}return this.buffered-=$,this.shifted+=$,Z.subarray(this._offset,this._offset+=$)}}class n7$ extends ae8{constructor($,Z,G){super();this.header=Z,this.offset=G,this._parent=$}_read($){if(this.header.size===0)this.push(null);if(this._parent._stream===this)this._parent._update();$(null)}_predestroy(){this._parent.destroy(d7$(this))}_detach(){if(this._parent._stream===this)this._parent._stream=null,this._parent._missing=t7$(this.header.size),this._parent._update()}_destroy($){this._detach(),$(null)}}class p7$ extends re8{constructor($){super($);if(!$)$={};this._buffer=new i7$,this._offset=0,this._header=null,this._stream=null,this._missing=0,this._longHeader=!1,this._callback=_d1,this._locked=!1,this._finished=!1,this._pax=null,this._paxGlobal=null,this._gnuLongPath=null,this._gnuLongLinkPath=null,this._filenameEncoding=$.filenameEncoding||"utf-8",this._allowUnknownFormat=!!$.allowUnknownFormat,this._unlockBound=this._unlock.bind(this)}_unlock($){if(this._locked=!1,$){this.destroy($),this._continueWrite($);return}this._update()}_consumeHeader(){if(this._locked)return!1;this._offset=this._buffer.shifted;try{this._header=xf.decode(this._buffer.shift(512),this._filenameEncoding,this._allowUnknownFormat)}catch($){return this._continueWrite($),!1}if(!this._header)return!0;switch(this._header.type){case"gnu-long-path":case"gnu-long-link-path":case"pax-global-header":case"pax-header":return this._longHeader=!0,this._missing=this._header.size,!0}if(this._locked=!0,this._applyLongHeaders(),this._header.size===0||this._header.type==="directory")return this.emit("entry",this._header,this._createStream(),this._unlockBound),!0;return this._stream=this._createStream(),this._missing=this._header.size,this.emit("entry",this._header,this._stream,this._unlockBound),!0}_applyLongHeaders(){if(this._gnuLongPath)this._header.name=this._gnuLongPath,this._gnuLongPath=null;if(this._gnuLongLinkPath)this._header.linkname=this._gnuLongLinkPath,this._gnuLongLinkPath=null;if(this._pax){if(this._pax.path)this._header.name=this._pax.path;if(this._pax.linkpath)this._header.linkname=this._pax.linkpath;if(this._pax.size)this._header.size=parseInt(this._pax.size,10);this._header.pax=this._pax,this._pax=null}}_decodeLongHeader($){switch(this._header.type){case"gnu-long-path":this._gnuLongPath=xf.decodeLongPath($,this._filenameEncoding);break;case"gnu-long-link-path":this._gnuLongLinkPath=xf.decodeLongPath($,this._filenameEncoding);break;case"pax-global-header":this._paxGlobal=xf.decodePax($);break;case"pax-header":this._pax=this._paxGlobal===null?xf.decodePax($):Object.assign({},this._paxGlobal,xf.decodePax($));break}}_consumeLongHeader(){this._longHeader=!1,this._missing=t7$(this._header.size);let $=this._buffer.shift(this._header.size);try{this._decodeLongHeader($)}catch(Z){return this._continueWrite(Z),!1}return!0}_consumeStream(){let $=this._buffer.shiftFirst(this._missing);if($===null)return!1;this._missing-=$.byteLength;let Z=this._stream.push($);if(this._missing===0){if(this._stream.push(null),Z)this._stream._detach();return Z&&this._locked===!1}return Z}_createStream(){return new n7$(this,this._header,this._offset)}_update(){while(this._buffer.buffered>0&&!this.destroying){if(this._missing>0){if(this._stream!==null){if(this._consumeStream()===!1)return;continue}if(this._longHeader===!0){if(this._missing>this._buffer.buffered)break;if(this._consumeLongHeader()===!1)return!1;continue}let $=this._buffer.shiftFirst(this._missing);if($!==null)this._missing-=$.byteLength;continue}if(this._buffer.buffered<512)break;if(this._stream!==null||this._consumeHeader()===!1)return}this._continueWrite(null)}_continueWrite($){let Z=this._callback;this._callback=_d1,Z($)}_write($,Z){this._callback=Z,this._buffer.push($),this._update()}_final($){this._finished=this._missing===0&&this._buffer.buffered===0,$(this._finished?null:Error("Unexpected end of data"))}_predestroy(){this._continueWrite(null)}_destroy($){if(this._stream)this._stream.destroy(d7$(this));$(null)}[Symbol.asyncIterator](){let $=null,Z=null,G=null,X=null,Q=null,Y=this;return this.on("entry",K),this.on("error",(H)=>{$=H}),this.on("close",U),{[Symbol.asyncIterator](){return this},next(){return new Promise(W)},return(){return F(null)},throw(H){return F(H)}};function J(H){if(!Q)return;let N=Q;Q=null,N(H)}function W(H,N){if($)return N($);if(X){H({value:X,done:!1}),X=null;return}if(Z=H,G=N,J(null),Y._finished&&Z)Z({value:void 0,done:!0}),Z=G=null}function K(H,N,O){if(Q=O,N.on("error",_d1),Z)Z({value:N,done:!1}),Z=G=null;else X=N}function U(){if(J($),!Z)return;if($)G($);else Z({value:void 0,done:!0});Z=G=null}function F(H){return Y.destroy(H),J(H),new Promise((N,O)=>{if(Y.destroyed)return N({value:void 0,done:!0});Y.once("close",function(){if(H)O(H);else N({value:void 0,done:!0})})})}}}o7$.exports=function(Z){return new p7$(Z)};function _d1(){}function t7$($){return $&=511,$&&512-$}});var s7$=v((Nr5,bd1)=>{var a7$={S_IFMT:61440,S_IFDIR:16384,S_IFCHR:8192,S_IFBLK:24576,S_IFIFO:4096,S_IFLNK:40960};try{bd1.exports=C1("fs").constants||a7$}catch{bd1.exports=a7$}});var YG$=v((Or5,QG$)=>{var{Readable:$14,Writable:Z14,getStreamError:e7$}=Vd1(),MV=vf(),yf=s7$(),KH1=Cd1(),$G$=MV.alloc(1024);class ZG$ extends Z14{constructor($,Z,G){super({mapWritable:X14,eagerOpen:!0});if(this.written=0,this.header=Z,this._callback=G,this._linkname=null,this._isLinkname=Z.type==="symlink"&&!Z.linkname,this._isVoid=Z.type!=="file"&&Z.type!=="contiguous-file",this._finished=!1,this._pack=$,this._openCallback=null,this._pack._stream===null)this._pack._stream=this;else this._pack._pending.push(this)}_open($){if(this._openCallback=$,this._pack._stream===this)this._continueOpen()}_continuePack($){if(this._callback===null)return;let Z=this._callback;this._callback=null,Z($)}_continueOpen(){if(this._pack._stream===null)this._pack._stream=this;let $=this._openCallback;if(this._openCallback=null,$===null)return;if(this._pack.destroying)return $(Error("pack stream destroyed"));if(this._pack._finalized)return $(Error("pack stream is already finalized"));if(this._pack._stream=this,!this._isLinkname)this._pack._encode(this.header);if(this._isVoid)this._finish(),this._continuePack(null);$(null)}_write($,Z){if(this._isLinkname)return this._linkname=this._linkname?MV.concat([this._linkname,$]):$,Z(null);if(this._isVoid){if($.byteLength>0)return Z(Error("No body allowed for this entry"));return Z()}if(this.written+=$.byteLength,this._pack.push($))return Z();this._pack._drain=Z}_finish(){if(this._finished)return;if(this._finished=!0,this._isLinkname)this.header.linkname=this._linkname?MV.toString(this._linkname,"utf-8"):"",this._pack._encode(this.header);XG$(this._pack,this.header.size),this._pack._done(this)}_final($){if(this.written!==this.header.size)return $(Error("Size mismatch"));this._finish(),$(null)}_getError(){return e7$(this)||Error("tar entry destroyed")}_predestroy(){this._pack.destroy(this._getError())}_destroy($){this._pack._done(this),this._continuePack(this._finished?null:this._getError()),$()}}class GG$ extends $14{constructor($){super($);this._drain=vd1,this._finalized=!1,this._finalizing=!1,this._pending=[],this._stream=null}entry($,Z,G){if(this._finalized||this.destroying)throw Error("already finalized or destroyed");if(typeof Z==="function")G=Z,Z=null;if(!G)G=vd1;if(!$.size||$.type==="symlink")$.size=0;if(!$.type)$.type=G14($.mode);if(!$.mode)$.mode=$.type==="directory"?493:420;if(!$.uid)$.uid=0;if(!$.gid)$.gid=0;if(!$.mtime)$.mtime=new Date;if(typeof Z==="string")Z=MV.from(Z);let X=new ZG$(this,$,G);if(MV.isBuffer(Z))return $.size=Z.byteLength,X.write(Z),X.end(),X;if(X._isVoid)return X;return X}finalize(){if(this._stream||this._pending.length>0){this._finalizing=!0;return}if(this._finalized)return;this._finalized=!0,this.push($G$),this.push(null)}_done($){if($!==this._stream)return;if(this._stream=null,this._finalizing)this.finalize();if(this._pending.length)this._pending.shift()._continueOpen()}_encode($){if(!$.pax){let Z=KH1.encode($);if(Z){this.push(Z);return}}this._encodePax($)}_encodePax($){let Z=KH1.encodePax({name:$.name,linkname:$.linkname,pax:$.pax}),G={name:"PaxHeader",mode:$.mode,uid:$.uid,gid:$.gid,size:Z.byteLength,mtime:$.mtime,type:"pax-header",linkname:$.linkname&&"PaxHeader",uname:$.uname,gname:$.gname,devmajor:$.devmajor,devminor:$.devminor};this.push(KH1.encode(G)),this.push(Z),XG$(this,Z.byteLength),G.size=$.size,G.type=$.type,this.push(KH1.encode(G))}_doDrain(){let $=this._drain;this._drain=vd1,$()}_predestroy(){let $=e7$(this);if(this._stream)this._stream.destroy($);while(this._pending.length){let Z=this._pending.shift();Z.destroy($),Z._continueOpen()}this._doDrain()}_read($){this._doDrain(),$()}}QG$.exports=function(Z){return new GG$(Z)};function G14($){switch($&yf.S_IFMT){case yf.S_IFBLK:return"block-device";case yf.S_IFCHR:return"character-device";case yf.S_IFDIR:return"directory";case yf.S_IFIFO:return"fifo";case yf.S_IFLNK:return"symlink"}return"file"}function vd1(){}function XG$($,Z){if(Z&=511,Z)$.push($G$.subarray(0,512-Z))}function X14($){return MV.isBuffer($)?$:MV.from($)}});var JG$=v((Q14)=>{Q14.extract=r7$();Q14.pack=YG$()});var UG$=v((Dr5,KG$)=>{KG$.exports=WG$;function WG$($,Z){if($&&Z)return WG$($)(Z);if(typeof $!=="function")throw TypeError("need wrapper function");return Object.keys($).forEach(function(X){G[X]=$[X]}),G;function G(){var X=Array(arguments.length);for(var Q=0;Q<X.length;Q++)X[Q]=arguments[Q];var Y=$.apply(this,X),J=X[X.length-1];if(typeof Y==="function"&&Y!==J)Object.keys(J).forEach(function(W){Y[W]=J[W]});return Y}}});var xd1=v((Lr5,fd1)=>{var FG$=UG$();fd1.exports=FG$(UH1);fd1.exports.strict=FG$(HG$);UH1.proto=UH1(function(){Object.defineProperty(Function.prototype,"once",{value:function(){return UH1(this)},configurable:!0}),Object.defineProperty(Function.prototype,"onceStrict",{value:function(){return HG$(this)},configurable:!0})});function UH1($){var Z=function(){if(Z.called)return Z.value;return Z.called=!0,Z.value=$.apply(this,arguments)};return Z.called=!1,Z}function HG$($){var Z=function(){if(Z.called)throw Error(Z.onceError);return Z.called=!0,Z.value=$.apply(this,arguments)},G=$.name||"Function wrapped with `once`";return Z.onceError=G+" shouldn't be called more than once",Z.called=!1,Z}});var BG$=v((Er5,OG$)=>{var W14=xd1(),K14=function(){},U14=global.Bare?queueMicrotask:process.nextTick.bind(process),F14=function($){return $.setHeader&&typeof $.abort==="function"},H14=function($){return $.stdio&&Array.isArray($.stdio)&&$.stdio.length===3},NG$=function($,Z,G){if(typeof Z==="function")return NG$($,null,Z);if(!Z)Z={};G=W14(G||K14);var{_writableState:X,_readableState:Q}=$,Y=Z.readable||Z.readable!==!1&&$.readable,J=Z.writable||Z.writable!==!1&&$.writable,W=!1,K=function(){if(!$.writable)U()},U=function(){if(J=!1,!Y)G.call($)},F=function(){if(Y=!1,!J)G.call($)},H=function(w){G.call($,w?Error("exited with error code: "+w):null)},N=function(w){G.call($,w)},O=function(){U14(B)},B=function(){if(W)return;if(Y&&!(Q&&(Q.ended&&!Q.destroyed)))return G.call($,Error("premature close"));if(J&&!(X&&(X.ended&&!X.destroyed)))return G.call($,Error("premature close"))},L=function(){$.req.on("finish",U)};if(F14($))if($.on("complete",U),$.on("abort",O),$.req)L();else $.on("request",L);else if(J&&!X)$.on("end",K),$.on("close",K);if(H14($))$.on("exit",H);if($.on("end",F),$.on("finish",U),Z.error!==!1)$.on("error",N);return $.on("close",O),function(){if(W=!0,$.removeListener("complete",U),$.removeListener("abort",O),$.removeListener("request",L),$.req)$.req.removeListener("finish",U);$.removeListener("end",K),$.removeListener("close",K),$.removeListener("finish",U),$.removeListener("exit",H),$.removeListener("end",F),$.removeListener("error",N),$.removeListener("close",O)}};OG$.exports=NG$});var EG$=v((wr5,LG$)=>{var N14=xd1(),O14=BG$(),FH1;try{FH1=C1("fs")}catch($){}var Ui=function(){},B14=typeof process>"u"?!1:/^v?\.0/.test(process.version),HH1=function($){return typeof $==="function"},D14=function($){if(!B14)return!1;if(!FH1)return!1;return($ instanceof(FH1.ReadStream||Ui)||$ instanceof(FH1.WriteStream||Ui))&&HH1($.close)},L14=function($){return $.setHeader&&HH1($.abort)},E14=function($,Z,G,X){X=N14(X);var Q=!1;$.on("close",function(){Q=!0}),O14($,{readable:Z,writable:G},function(J){if(J)return X(J);Q=!0,X()});var Y=!1;return function(J){if(Q)return;if(Y)return;if(Y=!0,D14($))return $.close(Ui);if(L14($))return $.abort();if(HH1($.destroy))return $.destroy();X(J||Error("stream was destroyed"))}},DG$=function($){$()},w14=function($,Z){return $.pipe(Z)},z14=function(){var $=Array.prototype.slice.call(arguments),Z=HH1($[$.length-1]||Ui)&&$.pop()||Ui;if(Array.isArray($[0]))$=$[0];if($.length<2)throw Error("pump requires two streams per minimum");var G,X=$.map(function(Q,Y){var J=Y<$.length-1,W=Y>0;return E14(Q,J,W,function(K){if(!G)G=K;if(K)X.forEach(DG$);if(J)return;X.forEach(DG$),Z(G)})});return $.reduce(w14)};LG$.exports=z14});var qG$=v((R14)=>{var wG$=JG$(),zG$=EG$(),jG$=C1("fs"),B9=C1("path"),Fi=(global.Bare?global.Bare.platform:process.platform)==="win32";R14.pack=function(Z,G){if(!Z)Z=".";if(!G)G={};let X=G.fs||jG$,Q=G.ignore||G.filter||Hi,Y=G.mapStream||IG$,J=A14(X,G.dereference?X.stat:X.lstat,Z,Q,G.entries,G.sort),W=G.strict!==!1,K=typeof G.umask==="number"?~G.umask:~PG$(),U=G.pack||wG$.pack(),F=G.finish||Hi,H=G.map||Hi,N=typeof G.dmode==="number"?G.dmode:0,O=typeof G.fmode==="number"?G.fmode:0;if(G.strip)H=TG$(H,G.strip);if(G.readable)N|=parseInt(555,8),O|=parseInt(444,8);if(G.writable)N|=parseInt(333,8),O|=parseInt(222,8);w();function B(z,j){X.readlink(B9.join(Z,z),function(P,R){if(P)return U.destroy(P);j.linkname=yd1(R),U.entry(j,w)})}function L(z,j,P){if(U.destroyed)return;if(z)return U.destroy(z);if(!j){if(G.finalize!==!1)U.finalize();return F(U)}if(P.isSocket())return w();let R={name:yd1(j),mode:(P.mode|(P.isDirectory()?N:O))&K,mtime:P.mtime,size:P.size,type:"file",uid:P.uid,gid:P.gid};if(P.isDirectory())return R.size=0,R.type="directory",R=H(R)||R,U.entry(R,w);if(P.isSymbolicLink())return R.size=0,R.type="symlink",R=H(R)||R,B(j,R);if(R=H(R)||R,!P.isFile()){if(W)return U.destroy(Error("unsupported type for "+j));return w()}let A=U.entry(R,w),q=Y(X.createReadStream(B9.join(Z,j),{start:0,end:R.size>0?R.size-1:R.size}),R);q.on("error",function(S){A.destroy(S)}),zG$(q,A)}function w(z){if(z)return U.destroy(z);J(L)}return U};function j14($){return $.length?$[$.length-1]:null}function P14(){return!global.Bare&&process.getuid?process.getuid():-1}function PG$(){return!global.Bare&&process.umask?process.umask():0}R14.extract=function(Z,G){if(!Z)Z=".";if(!G)G={};Z=B9.resolve(Z);let X=G.fs||jG$,Q=G.ignore||G.filter||Hi,Y=G.mapStream||IG$,J=G.chown!==!1&&!Fi&&P14()===0,W=G.extract||wG$.extract(),K=[],U=new Date,F=typeof G.umask==="number"?~G.umask:~PG$(),H=G.strict!==!1,N=G.validateSymlinks!==!1,O=G.map||Hi,B=typeof G.dmode==="number"?G.dmode:0,L=typeof G.fmode==="number"?G.fmode:0;if(G.strip)O=TG$(O,G.strip);if(G.readable)B|=parseInt(555,8),L|=parseInt(444,8);if(G.writable)B|=parseInt(333,8),L|=parseInt(222,8);if(W.on("entry",w),G.finish)W.on("finish",G.finish);return W;function w(A,q,S){A=O(A)||A,A.name=yd1(A.name);let k=B9.join(Z,B9.join("/",A.name));if(Q(k,A))return q.resume(),S();let C=B9.join(k,".")===B9.join(Z,".")?Z:B9.dirname(k);RG$(X,C,B9.join(Z,"."),function(p,Q1){if(p)return S(p);if(!Q1)return S(Error(C+" is not a valid path"));if(A.type==="directory")return K.push([k,A.mtime]),R(k,{fs:X,own:J,uid:A.uid,gid:A.gid,mode:A.mode},u);R(C,{fs:X,own:J,uid:A.uid,gid:A.gid,mode:493},function(G1){if(G1)return S(G1);switch(A.type){case"file":return d();case"link":return y();case"symlink":return x()}if(H)return S(Error("unsupported type for "+k+" ("+A.type+")"));q.resume(),S()})});function u(p){if(p)return S(p);j(k,A,function(Q1){if(Q1)return S(Q1);if(Fi)return S();P(k,A,S)})}function x(){if(Fi)return S();X.unlink(k,function(){let p=B9.resolve(B9.dirname(k),A.linkname);if(!s(p)&&N)return S(Error(k+" is not a valid symlink"));AG$(X,p,B9.join(Z,"."),function(Q1,G1){if(Q1)return S(Q1);if(!G1&&N)return S(Error(k+" is not a valid symlink"));X.symlink(A.linkname,k,u)})})}function y(){if(Fi)return S();X.unlink(k,function(){let p=B9.join(Z,B9.join("/",A.linkname));X.realpath(p,function(Q1,G1){if(Q1||!s(G1))return S(Error(k+" is not a valid hardlink"));X.link(G1,k,function(F1){if(F1&&F1.code==="EPERM"&&G.hardlinkAsFilesFallback)return q=X.createReadStream(G1),d();u(F1)})})})}function s(p){return p===Z||p.startsWith(Z+B9.sep)}function d(){let p=X.createWriteStream(k),Q1=Y(q,A);p.on("error",function(G1){Q1.destroy(G1)}),zG$(Q1,p,function(G1){if(G1)return S(G1);p.on("close",u)})}}function z(A,q){let S;while((S=j14(K))&&A.slice(0,S[0].length)!==S[0])K.pop();if(!S)return q();X.utimes(S[0],U,S[1],q)}function j(A,q,S){if(G.utimes===!1)return S();if(q.type==="directory")return X.utimes(A,U,q.mtime,S);if(q.type==="symlink")return z(A,S);X.utimes(A,U,q.mtime,function(k){if(k)return S(k);z(A,S)})}function P(A,q,S){let k=q.type==="symlink",C=k?X.lchmod:X.chmod,u=k?X.lchown:X.chown;if(!C)return S();let x=(q.mode|(q.type==="directory"?B:L))&F;if(u&&J)u.call(X,A,q.uid,q.gid,y);else y(null);function y(s){if(s)return S(s);if(!C)return S();C.call(X,A,x,S)}}function R(A,q,S){X.stat(A,function(k){if(!k)return S(null);if(k.code!=="ENOENT")return S(k);X.mkdir(A,{mode:q.mode,recursive:!0},function(C,u){if(C)return S(C);P(A,q,S)})})}};function AG$($,Z,G,X){if(Z===G)return X(null,!0);if(!Z.startsWith(G+B9.sep))return X(null,!1);$.lstat(Z,function(Q,Y){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return X(Q);if(Q||!Y.isSymbolicLink())return AG$($,B9.join(Z,".."),G,X);X(null,!1)})}function RG$($,Z,G,X){if(Z===G)return X(null,!0);$.lstat(Z,function(Q,Y){if(Q&&Q.code!=="ENOENT"&&Q.code!=="EPERM")return X(Q);if(Q||Y.isDirectory())return RG$($,B9.join(Z,".."),G,X);X(null,!1)})}function Hi(){}function IG$($){return $}function yd1($){return Fi?$.replace(/\\/g,"/").replace(/[:?<>|]/g,"_"):$}function A14($,Z,G,X,Q,Y){if(!Q)Q=["."];let J=Q.slice(0);return function(K){if(!J.length)return K(null);let U=J.shift(),F=B9.join(G,U);Z.call($,F,function(H,N){if(H)return K(Q.indexOf(U)===-1&&H.code==="ENOENT"?null:H);if(!N.isDirectory())return K(null,U,N);$.readdir(F,function(O,B){if(O)return K(O);if(Y)B.sort();for(let L=0;L<B.length;L++)if(!X(B9.join(G,U,B[L])))J.push(B9.join(U,B[L]));K(null,U,N)})})}}function TG$($,Z){return function(G){G.name=G.name.split("/").slice(Z).join("/");let X=G.linkname;if(X&&(G.type==="link"||B9.isAbsolute(X)))G.linkname=X.split("/").slice(Z).join("/");return $(G)}}});var q14,M14;var MG$=D(()=>{Pd1();q14=f(B7$(),1),M14=f(qG$(),1)});var NH1=()=>{};var kG$=D(()=>{qF1()});var VG$=D(()=>{eF1();sF1();NH1()});var SG$=()=>{};var CG$=()=>{};var gd1=D(()=>{oZ$();zd1();eF1();$7$();Ed1();Pd1();Z7$();G7$();X7$();Q7$();wd1();Y7$();MG$();NH1();kG$();VG$();SG$();CG$();NH1()});var C9,o9,kV,Ni;var Oi=D(()=>{C9={CLAIM_API_GROUP:"extensions.agents.x-k8s.io",CLAIM_API_VERSION:"v1alpha1",CLAIM_PLURAL:"sandboxclaims",SANDBOX_API_GROUP:"agents.x-k8s.io",SANDBOX_API_VERSION:"v1alpha1",SANDBOX_PLURAL:"sandboxes",POD_NAME_ANNOTATION:"agents.x-k8s.io/pod-name"};o9=class o9 extends Error{cause;constructor($,Z){super($);if(this.name="SandboxError",this.cause=Z,Z instanceof Error&&Z.stack)this.stack=`${this.stack}
|
|
2209
2209
|
Caused by: ${Z.stack}`}};kV=class kV extends o9{constructor($,Z){super($,Z);this.name="SandboxTimeoutError"}};Ni=class Ni extends o9{constructor($,Z){super($,Z);this.name="SandboxAlreadyExistsError"}}});async function k14($){let Z=$.getCurrentCluster();if(!Z)throw new o9("No active cluster in kubeconfig");let G={};await $.applyToHTTPSOptions(G);let X={},Q=G.headers??{};for(let[Y,J]of Object.entries(Q))if(Array.isArray(J))X[Y]=J.join(", ");else if(J!==void 0)X[Y]=String(J);if(typeof G.auth==="string"&&!X.Authorization)X.Authorization=`Basic ${Buffer.from(G.auth).toString("base64")}`;return{server:Z.server.replace(/\/+$/,""),headers:X,tls:{cert:hd1(G.cert),key:hd1(G.key),ca:hd1(G.ca),rejectUnauthorized:Z.skipTLSVerify?!1:void 0}}}function hd1($){if($==null)return;if(typeof $==="string")return $;if(Buffer.isBuffer($))return $.toString("utf8");return String($)}async function VV($,Z){let G=await k14($),X={...G.headers,...Z.headers};if(Z.method==="PATCH")X["content-type"]=Z.patchType==="apply"?"application/apply-patch+yaml":Z.patchType==="strategic-merge"?"application/strategic-merge-patch+json":"application/merge-patch+json";else if(Z.body!==void 0&&!("content-type"in X))X["content-type"]="application/json";let Q={method:Z.method,headers:X,body:Z.body===void 0?void 0:JSON.stringify(Z.body),signal:Z.signal,tls:G.tls,...Z.stream?{timeout:!1}:{}};return fetch(`${G.server}${Z.path}`,Q)}async function ud1($){try{return await $.json()}catch{return null}}async function cd1($,Z){if($.ok)return;let G=await ud1($),X=G?.message??`${Z} failed: ${$.status} ${$.statusText}`;throw new _G$($.status,G,X)}async function Bi($,Z,G,X,Q="none"){try{let Y=await VV($,Z);if(Y.status===404)return null;if(await cd1(Y,G),Q==="json")return await Y.json();return null}catch(Y){throw new o9(X,Y)}}async function Di($,Z,G){let X=`${bG$}/${encodeURIComponent(Z)}/${C9.CLAIM_PLURAL}`,Q;try{Q=await VV($,{method:"POST",path:X,body:G})}catch(U){let F=U instanceof Error?U.message:String(U);throw console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} transport error: ${F}`),new o9(`Failed to create SandboxClaim: ${G.metadata.name} (transport error: ${F})`,U)}if(Q.ok)return;let Y=await ud1(Q),J=Y?.reason?` ${Y.reason}`:"",W=Y?.message??Q.statusText,K=`Failed to create SandboxClaim: ${G.metadata.name} (${Q.status}${J}: ${W})`;if(console.warn(`[agent-sandbox/client] createSandboxClaim ${G.metadata.name} rejected: status=${Q.status} reason=${Y?.reason??"<none>"} message=${W}`),Q.status===409)throw new Ni(K);throw new o9(K)}async function OH1($,Z,G,X=60000){let Q=Date.now()+X,Y=500,J;while(!0){let W=await JF($,Z,G).catch(()=>{return});if(!W)return;if(J=W,Date.now()>=Q){let K=J.metadata?.finalizers??[],U=J.metadata?.deletionTimestamp??"<unknown>";throw new kV(`SandboxClaim ${G} still terminating after ${X}ms (deletionTimestamp=${U}, finalizers=[${K.join(", ")}])`)}await new Promise((K)=>setTimeout(K,500))}}function ld1($,Z){return`${bG$}/${encodeURIComponent($)}/${C9.CLAIM_PLURAL}/${encodeURIComponent(Z)}`}async function vG$($,Z,G,X){await Bi($,{method:"PATCH",path:ld1(Z,G),patchType:"merge",body:{spec:{lifecycle:{shutdownPolicy:"Delete",shutdownTime:X}}}},"patchSandboxClaimShutdown",`Failed to patch SandboxClaim shutdownTime: ${G}`)}async function wO($,Z,G){await Bi($,{method:"DELETE",path:ld1(Z,G)},"deleteSandboxClaim",`Failed to delete SandboxClaim: ${G}`)}async function JF($,Z,G){return await Bi($,{method:"GET",path:ld1(Z,G)},"getSandboxClaim",`Failed to get SandboxClaim: ${G}`,"json")??void 0}async function fG$($,Z,G,X=60){let Q=Date.now()+X*1000,Y=200;while(Date.now()<Q){let W=(await JF($,Z,G).catch(()=>{return}))?.status?.sandbox?.name;if(W)return W;await new Promise((K)=>setTimeout(K,200))}throw new kV(`SandboxClaim ${G} did not record an adopted Sandbox (status.sandbox.name) within ${X}s`)}function dd1($,Z){return`${V14}/${encodeURIComponent($)}/${gG$}/${encodeURIComponent(Z)}`}async function BH1($,Z,G){let X=new URLSearchParams({fieldManager:uG$,force:"true"}),Q=`${dd1(Z,G.metadata.name)}?${X}`;try{let Y=await VV($,{method:"PATCH",path:Q,patchType:"apply",body:G});await cd1(Y,"applyHttpRoute")}catch(Y){throw new o9(`Failed to apply HTTPRoute: ${G.metadata.name}`,Y)}}async function DH1($,Z,G){await Bi($,{method:"DELETE",path:dd1(Z,G)},"deleteHttpRoute",`Failed to delete HTTPRoute: ${G}`)}async function hG$($,Z,G){return await Bi($,{method:"GET",path:dd1(Z,G)},"getHttpRoute",`Failed to get HTTPRoute: ${G}`,"json")??void 0}async function cG$($,Z,G,X){let Q={apiVersion:"v1",kind:"Service",metadata:{name:G},spec:{ports:[{name:X.name,port:X.port,targetPort:X.targetPort,protocol:X.protocol??"TCP"}]}},Y=new URLSearchParams({fieldManager:uG$,force:"true"}),J=`/api/v1/namespaces/${encodeURIComponent(Z)}/services/${encodeURIComponent(G)}?${Y}`;try{let W=await VV($,{method:"PATCH",path:J,patchType:"apply",body:Q});await cd1(W,"ensureServicePort")}catch(W){throw new o9(`Failed to apply Service ports: ${G}`,W)}}function LH1($,Z,G,X=180){let Q=`/apis/${C9.SANDBOX_API_GROUP}/${C9.SANDBOX_API_VERSION}/namespaces/${encodeURIComponent(Z)}/${C9.SANDBOX_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`,{resolve:Y,reject:J,promise:W}=Promise.withResolvers(),K=new AbortController,U=!1,F=setTimeout(()=>{if(U)return;U=!0,K.abort(),J(new kV(`Sandbox did not become ready within ${X} seconds`))},X*1000),H=(N)=>{if(U)return;U=!0,clearTimeout(F),K.abort(),N()};return(async()=>{let N;try{N=await VV($,{method:"GET",path:Q,signal:K.signal,headers:{accept:"application/json"},stream:!0})}catch(O){H(()=>J(new o9("Failed to start watch for sandbox readiness",O)));return}if(!N.ok||!N.body){let O=await ud1(N).catch(()=>null);H(()=>J(new o9(`Watch handshake failed (${N.status}): ${O?.message??N.statusText}`)));return}try{for await(let O of md1(N.body)){if(U)return;if(O.type==="ERROR"){let j=O.object;H(()=>J(new o9(`Watch stream error while waiting for sandbox: ${j.message??"unknown"}`)));return}if(O.type!=="ADDED"&&O.type!=="MODIFIED")continue;let B=O.object;if(!B.status?.conditions?.find((j)=>j.type==="Ready"&&j.status==="True"))continue;let w=B.metadata?.name;if(!w){H(()=>J(new o9("Sandbox metadata or name is missing")));return}let z=B.metadata?.annotations?.[C9.POD_NAME_ANNOTATION]??w;H(()=>Y({sandboxName:w,podName:z}));return}H(()=>J(new o9("Watch stream closed before sandbox became ready")))}catch(O){if(U)return;if(O instanceof Error&&(O.name==="AbortError"||K.signal.aborted))return;H(()=>J(new o9("Watch stream error while waiting for sandbox",O)))}})(),W}async function*md1($){let Z=$.getReader(),G=new TextDecoder,X="";try{while(!0){let{value:Y,done:J}=await Z.read();if(J)break;X+=G.decode(Y,{stream:!0});let W;while((W=X.indexOf(`
|
|
2210
|
-
`))>=0){let K=X.slice(0,W).trim();if(X=X.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=X.trim();if(Q)yield JSON.parse(Q)}finally{Z.releaseLock()}}var _G$,bG$,xG$="gateway.networking.k8s.io",yG$="v1",gG$="httproutes",V14,Li,uG$="mesh-sandbox-runner";var EH1=D(()=>{Oi();_G$=class _G$ extends Error{status;body;constructor($,Z,G){super(G);this.status=$;this.body=Z;this.name="KubeHttpError"}};bG$=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces`;V14=`/apis/${xG$}/${yG$}/namespaces`;Li={API_GROUP:xG$,API_VERSION:yG$,PLURAL:gG$}});var wH1=D(()=>{gZ();m61()});async function jH1($){try{let Z=await fetch(`${$}/health`,{signal:AbortSignal.timeout(S14)});if(!Z.ok)return null;let G=await Z.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function iG$($){for(let Z=0;Z<lG$;Z++){if(await jH1($)!==null)return;let G=(Math.random()*2-1)*C14;await j6(dG$+G)}throw Error(`sandbox daemon at ${$} did not respond on /health within ${lG$*dG$/1000}s`)}async function Ei($,Z,G,X,Q){return _14($,Z,"POST",G,X,Q)}async function _14($,Z,G,X,Q,Y){let J={...X};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${$}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify(J),signal:AbortSignal.timeout(Y?.timeoutMs??mG$)}),K=await W.text();if(!W.ok)throw new zH1(W.status,K);return JSON.parse(K)}async function nG$($,Z,G){let X=await fetch(`${$}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:G,signal:AbortSignal.timeout(mG$)}),Q=await X.text();if(!X.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${X.status}: ${Q}`);return JSON.parse(Q)}async function wi($,Z,G,X){let Q=new Headers(X.headers);for(let W of b14)Q.delete(W);Q.set("authorization",`Bearer ${Z}`);let Y=X.method!=="GET"&&X.method!=="HEAD",J=`${$}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:X.method,headers:Q,body:Y?X.body:void 0,redirect:"manual",signal:X.signal,duplex:Y?"half":void 0})}var zH1,S14=500,mG$=30000,lG$=25,dG$=200,C14=50,b14;var pG$=D(()=>{wH1();zH1=class zH1 extends Error{status;constructor($,Z){super(`sandbox daemon /_sandbox/config returned ${$}: ${Z}`);this.status=$;this.name="ConfigRequestError"}};b14=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*rG$($){let Z=$.now??(()=>Date.now()),G=Z(),X=$.schedulingTimeoutMs??x14,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},Y=[],J=null,W=!1,K=(j)=>{if(W)return;if(J){let P=J;J=null,P(j)}else Y.push(j)},U=()=>{if(Y.length>0)return Promise.resolve(Y.shift());if(W)return Promise.resolve(null);return new Promise((j)=>{J=j})},F=()=>{if(W)return;if(W=!0,J){let j=J;J=null,j(null)}},H=new AbortController,N=()=>{H.abort(),F()};if($.signal)if($.signal.aborted)H.abort(),F();else $.signal.addEventListener("abort",N,{once:!0});let O=Math.max(0,X-(Z()-G)),B=setTimeout(()=>K("tick"),O+100),L,w=new Promise((j)=>{L=j}),z=Promise.allSettled([y14($.kc,$.namespace,$.claimName,H.signal,Q,K,Z,L),h14($.kc,$.namespace,$.claimName,H.signal,Q,K),u14($.kc,$.namespace,$.claimName,w,H.signal,Q,K,Z)]);try{let j=null,P=-1,R=tG$(Q,X,Z);if(j=nd1(R),!id1(R))P=oG$(R);if(yield R,id1(R))return;while(!W){if(await U()===null)break;let q=tG$(Q,X,Z);if(id1(q)){let C=nd1(q);if(C!==j)j=C,yield q;return}let S=oG$(q);if(S<P)continue;let k=nd1(q);if(k!==j)j=k,P=S,yield q}}finally{if(clearTimeout(B),H.abort(),$.signal)$.signal.removeEventListener("abort",N);F(),await z.catch(()=>{})}}function tG$($,Z,G){let{pod:X,sandbox:Q,events:Y,startedAt:J}=$;if(Q.ready)return{kind:"ready"};let W=X.containerWaitingReason;if(W==="ImagePullBackOff"||W==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!X.scheduled&&Y.lastFailedSchedulingAt!==void 0&&G()-J>Z)return{kind:"failed",reason:"scheduling-timeout",message:Y.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(Z/1000)}s.`};if(X.containerRunning&&!X.containerReady)return{kind:"warming-daemon",since:J};if(Y.hasPulling&&!Y.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||X.scheduled&&!X.containerRunning)return{kind:"starting-container",since:J};if(X.scheduledFalseReason==="Unschedulable"||Y.lastFailedSchedulingAt!==void 0&&!X.scheduled)return{kind:"waiting-for-capacity",since:J,message:Y.failedSchedulingMessage??X.scheduledFalseMessage,nodeClaim:Y.nominatedNodeClaim};return{kind:"claiming",since:J}}function id1($){return $.kind==="ready"||$.kind==="failed"}function oG$($){switch($.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function nd1($){switch($.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return $.kind;case"waiting-for-capacity":return`waiting-for-capacity:${$.message??""}:${$.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${$.reason}:${$.message}`}}async function y14($,Z,G,X,Q,Y,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(Z)}/pods?watch=true&labelSelector=${encodeURIComponent(`${v14}=${G}`)}`;return PH1({kc:$,path:K,signal:X,label:`pod/${G}`,onEvent:(U)=>{if(U.type!=="ADDED"&&U.type!=="MODIFIED")return;let F=U.object;if(F.metadata?.name)W(F.metadata.name);g14(F,Q,J),Y("pod")}})}function g14($,Z,G){let Q=($.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")Z.pod.scheduled=!0,Z.pod.scheduledFalseReason=void 0,Z.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")Z.pod.scheduled=!1,Z.pod.scheduledFalseReason=Q.reason,Z.pod.scheduledFalseMessage=Q.message;let Y=($.status?.containerStatuses??[]).find((J)=>J.name===f14);if(Y)Z.pod.containerWaitingReason=Y.state?.waiting?.reason,Z.pod.containerRunning=!!Y.state?.running,Z.pod.containerReady=Y.ready===!0}async function h14($,Z,G,X,Q,Y){let J=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(Z)}/${C9.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return PH1({kc:$,path:J,signal:X,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let U=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!U)return;if(U.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=U.reason,Q.sandbox.notReadyMessage=U.message;Y("sandbox")}})}async function u14($,Z,G,X,Q,Y,J,W){let K=await Promise.race([X,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let U=`/api/v1/namespaces/${encodeURIComponent(Z)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return PH1({kc:$,path:U,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let H=F.object,N=H.reason;if(!N)return;switch(N){case"Pulling":Y.events.hasPulling=!0;break;case"Pulled":Y.events.hasPulling=!0,Y.events.hasPulled=!0;break;case"FailedScheduling":Y.events.lastFailedSchedulingAt=W(),Y.events.failedSchedulingMessage=H.message;break;case"Nominated":{let O=H.message?.match(/nodeclaim\/([\w-]+)/);if(O)Y.events.nominatedNodeClaim=O[1];break}default:return}J("event")}})}async function aG$($){let{kc:Z,namespace:G,labelSelector:X,signal:Q,onDelete:Y}=$,J=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${C9.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(X)}`;return PH1({kc:Z,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)Y(K)}})}async function PH1($){let{kc:Z,path:G,signal:X,label:Q,onEvent:Y}=$,J=0;while(!X.aborted){try{let K=await VV(Z,{method:"GET",path:G,signal:X,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let U of md1(K.body)){if(X.aborted)return;try{Y(U)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(X.aborted)return;let U=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${U}`)}if(X.aborted)return;let W=s9(5000,250,J,2,0);J+=1,await j6(W,{signal:X}).catch(()=>{})}}var v14="studio.decocms.com/sandbox-handle",f14="sandbox",x14=300000;var sG$=D(()=>{gZ();Oi();EH1()});import{createHash as c14,randomBytes as l14,randomUUID as d14}from"crypto";import*as GX$ from"net";import{PassThrough as m14}from"stream";function i14($){if($ instanceof Error)return $.message;if($&&typeof $==="object"){let Z=$;if(Z.error instanceof Error)return Z.error.message;if(typeof Z.message==="string"&&Z.message)return Z.message}return String($)}class sd1{kind=kX;records=new Map;inflight=new c61;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;claimWatchAbort=new AbortController;constructor($={}){this.stateStore=$.stateStore??null,this.previewUrlPattern=$.previewUrlPattern??null,this.kubeConfig=$.kubeConfig??Z04(),this.portForward=new Ad1(this.kubeConfig),this.namespace=$.namespace??n14,this.sandboxTemplateName=$.sandboxTemplateName??p14,this.envName=W04($.envName),this.tokenGenerator=$.tokenGenerator??(()=>l14(o14).toString("hex")),this.idleTtlMs=$.idleTtlMs??a14,this.metrics=$.meter?$04($.meter):null,this.previewGateway=$.previewGateway&&$.previewUrlPattern?{...$.previewGateway}:null;let Z=$.sentinelToken?.trim()??"";this.sentinelToken=Z.length>0?Z:null,this.startClaimReaper()}startClaimReaper(){let $=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${hY.env}=${this.envName}`]:[]].join(",");aG$({kc:this.kubeConfig,namespace:this.namespace,labelSelector:$,signal:this.claimWatchAbort.signal,onDelete:(Z)=>this.invalidateRecord(Z)})}async ensure($,Z={}){let G=YO($,Z.branch??Z.repo?.branch??null);return this.inflight.run(G,()=>l61(this.stateStore,$,kX,(X)=>this.ensureLocked($,G,Z,X)))}async delete($){let Z=await this.getRecord($);if(this.records.delete($),Z)this.closeForwarder(Z.daemonForward),this.metrics?.active.add(-1,rd1(Z.tenant));if(await this.deleteHttpRouteIfManaged($).catch((G)=>{console.warn(`[${E7}] HTTPRoute delete failed for ${$}: ${G instanceof Error?G.message:String(G)}`)}),await wO(this.kubeConfig,this.namespace,$),this.stateStore)if(Z)await this.stateStore.delete(Z.id,kX);else await this.stateStore.deleteByHandle(kX,$)}async alive($){return await JF(this.kubeConfig,this.namespace,$)!==void 0}watchClaimLifecycle($,Z){return rG$({kc:this.kubeConfig,namespace:this.namespace,claimName:$,signal:Z})}async getPreviewUrl($){let Z=await this.getRecord($);if(!Z)return null;return this.composePreviewUrl(Z)}async proxyDaemonRequest($,Z,G){let X=await this.getRecord($);if(!X&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(kX,$),U=K?.state,F=U?.token;if(K&&F){let N=`http://${U?.adoptedSandboxName??$}.${this.namespace}.svc.cluster.local:${zO}`;try{let O=await wi(N,F,Z,G);if(O.status!==404)return O;try{await O.body?.cancel()}catch{}}catch{}}}if(!X)X=await this.resurrectByHandle($);if(!X)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=X,Y=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await wi(X.daemonUrl,X.token,Z,G);if(K.status===401&&W){this.invalidateRecord($);let U=await this.getRecord($).catch(()=>null)??await this.resurrectByHandle($).catch(()=>null);if(U)Q=U,K=await wi(U.daemonUrl,U.token,Z,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord($);let U=await this.resurrectByHandle($)??await this.getRecord($).catch(()=>null);if(!U)throw K;Q=U;let F=await wi(U.daemonUrl,U.token,Z,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-Y)}}async adoptLiveClaim($,Z){if(this.records.has(Z))return!0;let G=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(Z,async()=>{let Q=this.records.get(Z);if(Q)return this.toSandbox(Q);let Y=await this.adopt($,Z,G);if(!Y)throw Error(`cannot adopt live claim ${Z}`);return l61(this.stateStore,$,kX,(J)=>this.finish(Y,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl($){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle($)}.${this.namespace}.svc.cluster.local:${zO}`;let Z=await this.getRecord($);if(Z)return Z.daemonUrl;let G=await this.resurrectByHandle($);return G?G.daemonUrl:null}async resolveServiceNameForHandle($){let Z=this.records.get($);if(Z)return Z.adoptedSandboxName;if(this.stateStore){let X=(await this.stateStore.getByHandle(kX,$).catch(()=>null))?.state?.adoptedSandboxName;if(X)return X}return $}async proxyPreviewRequest($,Z){let G=performance.now(),X=this.records.get($)??null,Q=0;try{let Y=await this.resolvePreviewUpstreamUrl($);if(!Y){Q=404;let B=td1(404,{error:"sandbox not found"});return B.headers.set(CV,"1"),B}let J=new URL(Z.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&Z.method!=="GET")return Q=404,td1(404,{error:"not found"});let K=(B)=>`${B}${J.pathname}${J.search}`,U=new Headers(Z.headers);for(let B of s14)U.delete(B);let F=Z.method!=="GET"&&Z.method!=="HEAD",H={method:Z.method,headers:U,body:F?Z.body:void 0,redirect:"manual",signal:Z.signal,duplex:F?"half":void 0},N;try{N=await fetch(K(Y),H)}catch(B){let L=`${Y}${J.pathname}`;if(console.warn(`[${E7}] preview fetch to ${L} failed: ${B instanceof Error?B.message:String(B)}`),Z.method==="GET"||Z.method==="HEAD"){if(this.invalidateRecord($),await this.resurrectByHandle($).catch(()=>null)){let j=await this.resolvePreviewUpstreamUrl($);if(j)try{N=await fetch(K(j),H);let P=new Headers;for(let[R,A]of N.headers.entries())if(!eG$.includes(R.toLowerCase()))P.set(R,A);return Q=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:P})}catch(P){console.warn(`[${E7}] preview fetch retry to ${L} failed: ${P instanceof Error?P.message:String(P)}`)}}}else this.invalidateRecord($);Q=502;let w=td1(502,{error:"sandbox daemon unreachable"});return w.headers.set(CV,"1"),w}let O=new Headers;for(let[B,L]of N.headers.entries())if(!eG$.includes(B.toLowerCase()))O.set(B,L);return Q=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:O})}finally{this.recordProxyDuration("preview",Q,X,performance.now()-G,$)}}async ensureLocked($,Z,G,X){if(G.image)console.warn(`[${E7}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(X){let J=await X.get($,kX);if(J){let W=await this.rehydrate($,Z,J);if(W)return this.finish(W,X,!1,!0,"resume");await X.delete($,kX)}}let Q=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await OH1(this.kubeConfig,this.namespace,Z).catch((J)=>{console.warn(`[${E7}] wait for terminating claim ${Z} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt($,Z,Q).catch((W)=>{return console.warn(`[${E7}] adopt ${Z} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return this.finish(J,X,!0,!0,"adopt");await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),await OH1(this.kubeConfig,this.namespace,Z).catch((W)=>{console.warn(`[${E7}] wait for deleted claim ${Z} failed: ${W instanceof Error?W.message:String(W)}`)})}let Y=await this.provision($,Z,G);return this.finish(Y,X,!0,!1,"fresh")}async finish($,Z,G,X,Q){let Y=this.records.get($.handle),J=Y!==void 0;if(Y&&Y.daemonForward!==$.daemonForward)this.closeForwarder(Y.daemonForward);if(this.records.set($.handle,$),G)await this.persist(Z,$);if(X)await vG$(this.kubeConfig,this.namespace,$.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${E7}] TTL refresh failed for ${$.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=rd1($.tenant);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox($)}buildEnvMap($,Z){let G={},X=[];for(let[Q,Y]of Object.entries($.env??{}))if(r14.has(Q))X.push(Q);else G[Q]=Y;if(X.length>0)console.warn(`[${E7}] opts.env keys overlap reserved bootstrap names and were dropped: ${X.join(",")}`);return{...G,DAEMON_TOKEN:Z.token,DAEMON_BOOT_ID:Z.daemonBootId,APP_ROOT:Z.workdir,PROXY_PORT:String(zO)}}buildClaim($,Z,G){let X=this.sentinelToken!==null,Q=X?[]:Object.entries(this.buildEnvMap(Z,G)).sort(([W],[K])=>W<K?-1:W>K?1:0).map(([W,K])=>({name:W,value:K})),Y=F04(Z),J=Object.keys(Y).length>0;return{apiVersion:`${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:$,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[hY.env]:this.envName}:{},...od1(Z.tenant)},...J?{annotations:Y}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:od1(Z.tenant,{[hY.role]:"claimed",[hY.sandboxHandle]:$,...this.envName?{[hY.env]:this.envName}:{}}),...J?{annotations:Y}:{}},env:Q,warmpool:X?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision($,Z,G){let X=this.tokenGenerator(),Q=d14(),Y=pd1,J=this.buildClaim(Z,G,{token:X,daemonBootId:Q,workdir:Y});try{await Di(this.kubeConfig,this.namespace,J)}catch(N){if(N instanceof Ni)await OH1(this.kubeConfig,this.namespace,Z),await Di(this.kubeConfig,this.namespace,J);else throw N}let W;try{W=await fG$(this.kubeConfig,this.namespace,Z),await LH1(this.kubeConfig,this.namespace,W)}catch(N){throw await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}try{await this.ensureServicePortForAdoptedSandbox(W),await this.ensureHttpRouteForHandle(Z,W,G.tenant??null)}catch(N){throw await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}let K=await this.openForwarder(W,zO,Z),U=`http://127.0.0.1:${K.localPort}`,F=this.workloadConfigPayload(G),H=Q;try{if(await iG$(U),this.sentinelToken!==null){let N=await jH1(U);if(N)H=N.bootId;await Ei(U,this.sentinelToken,F??{},{rotateToken:X})}else if(F)await Ei(U,X,F);if(G.orgFsConfigJson)await nG$(U,X,G.orgFsConfigJson).catch((N)=>console.warn("[org-fs] sidecar config relay failed",N))}catch(N){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(Z).catch(()=>{}),await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}return{id:$,handle:Z,adoptedSandboxName:W,token:X,workdir:Y,daemonUrl:U,daemonForward:K,workload:G.workload??null,daemonBootId:H,tenant:G.tenant??null,ensureOpts:N04(G)}}workloadConfigPayload($){return lc1({runtime:$?.workload?.runtime??"node",packageManager:$?.workload?.packageManager?{name:$.workload.packageManager,...$.workload.packageManagerPath?{path:$.workload.packageManagerPath}:{}}:null,repo:$?.repo??null,port:$?.workload?.devPort??t14,tenant:$?.tenant??void 0})}async rebootstrapDaemon($,Z,G){if(this.sentinelToken===null)return!1;let X=this.workloadConfigPayload(G)??{};try{return await Ei($,this.sentinelToken,X,{rotateToken:Z}),!0}catch(Q){if(Q instanceof zH1&&Q.status===401)try{return await Ei($,Z,X,{rotateToken:Z}),!0}catch(Y){return console.warn(`[${E7}] re-bootstrap retry with claim token failed: ${Y instanceof Error?Y.message:String(Y)}`),!1}return console.warn(`[${E7}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox($){if(!this.previewGateway||!this.previewUrlPattern)return;await cG$(this.kubeConfig,this.namespace,$,{name:"daemon",port:zO,targetPort:zO})}async ensureHttpRouteForHandle($,Z,G){if(!this.previewGateway||!this.previewUrlPattern)return;let X=O04(this.previewUrlPattern,$);if(!X)throw new o9(`Unable to derive preview hostname for ${$} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Li.API_GROUP}/${Li.API_VERSION}`,kind:"HTTPRoute",metadata:{name:$,namespace:this.namespace,labels:od1(G??void 0,{[hY.role]:"claimed",[hY.sandboxHandle]:$,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[hY.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[X],rules:[{backendRefs:[{group:"",kind:"Service",name:Z,port:zO}]}]}};await BH1(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged($){if(!this.previewGateway)return;await DH1(this.kubeConfig,this.namespace,$)}async rehydrate($,Z,G){let X=G.state;if(!X.adoptedSandboxName&&!X.podName||!X.token)return null;let Q=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(!Q||!$X$(Q))return null;let Y=Q.status?.sandbox?.name??X.adoptedSandboxName??X.podName??Z,J=await this.openAndProbeDaemon(Y,Z);if(!J)return null;if(X.daemonBootId&&X.daemonBootId!==J.bootId){if(this.sentinelToken!==null){if(!await this.rebootstrapDaemon(J.daemonUrl,X.token,X.ensureOpts??null))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${E7}] daemon restart detected (handle=${Z}): stored bootId=${X.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put($,kX,{handle:Z,state:{...X,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${E7}] bootId persist failed for ${Z}: ${W instanceof Error?W.message:String(W)}`))}return{id:$,handle:Z,adoptedSandboxName:Y,token:X.token,workdir:X.workdir??pd1,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:X.workload??null,daemonBootId:J.bootId,tenant:X.tenant??null,ensureOpts:X.ensureOpts??null}}async adopt($,Z,G){if(!$X$(G))return null;let X=G.status?.sandbox?.name??Z;if(this.sentinelToken!==null)return null;let Q=G04(G);if(!Q)return null;let Y=await this.openAndProbeDaemon(X,Z);if(!Y)return null;let J=H04(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(X).catch((W)=>{console.warn(`[${E7}] Service port backfill failed for ${Z}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(Z,X,J).catch((W)=>{console.warn(`[${E7}] HTTPRoute backfill failed for ${Z}: ${W instanceof Error?W.message:String(W)}`)});return{id:$,handle:Z,adoptedSandboxName:X,token:Q,workdir:pd1,daemonUrl:Y.daemonUrl,daemonForward:Y.daemonForward,workload:null,daemonBootId:Y.bootId,tenant:J,ensureOpts:null}}async openAndProbeDaemon($,Z){let G=await this.openForwarder($,zO,Z).catch(()=>null);if(!G)return null;let X=`http://127.0.0.1:${G.localPort}`,Q=await jH1(X);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:X,bootId:Q.bootId}}async getRecord($){let Z=this.records.get($);if(Z)return Z;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(kX,$);if(!G)return null;let X=await this.rehydrate(G.id,$,G);if(X)this.records.set($,X);return X}async resurrectByHandle($){if(!this.stateStore)return null;let Z=await this.stateStore.getByHandle(kX,$);if(!Z)return null;let G=Z.state.ensureOpts;if(!G)return null;return await this.ensure(Z.id,G),this.records.get($)??null}invalidateRecord($){let Z=this.records.get($);if(!Z)return;this.records.delete($),this.closeForwarder(Z.daemonForward)}recordProxyDuration($,Z,G,X,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(X,{...rd1(G?.tenant??null),source:$,sandbox_handle:G?.handle??Q??"",status_code:Z||0})}composePreviewUrl($){if(this.previewUrlPattern)return d61(this.previewUrlPattern,$.handle);return`http://127.0.0.1:${$.daemonForward.localPort}/`}toSandbox($){return{handle:$.handle,workdir:$.workdir,previewUrl:this.composePreviewUrl($)}}async persist($,Z){if(!$)return;let G={adoptedSandboxName:Z.adoptedSandboxName,token:Z.token,workdir:Z.workdir,workload:Z.workload,daemonBootId:Z.daemonBootId,tenant:Z.tenant,...Z.ensureOpts?{ensureOpts:Z.ensureOpts}:{}};await $.put(Z.id,kX,{handle:Z.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder($,Z,G=$){let X=X04(G,Z);return new Promise((Q,Y)=>{let J=(W,K)=>{let U=GX$.createServer((F)=>this.handleForwardedConnection(F,$,Z,G));U.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<e14){try{U.close()}catch{}let H=ad1+(W-ad1+1)%XX$;J(H,K+1);return}Y(F)}),U.listen(W,"127.0.0.1",()=>{let F=U.address();if(!F||typeof F==="string"){U.close(),Y(Error("port-forward listener failed to bind"));return}Q({server:U,localPort:F.port})})};J(X,0)})}handleForwardedConnection($,Z,G,X){let Q=new m14,Y=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),Y)try{Y.close()}catch{}if(!$.destroyed)$.destroy()};$.pipe(Q),$.on("error",W),$.on("close",W),this.portForward.portForward(this.namespace,Z,[G],$,null,Q).then((K)=>{let U=typeof K==="function"?K():K;if(!U){W();return}if(Y=U,Y.on("close",W),Y.on("error",()=>{this.invalidateRecord(X),W()}),J)try{Y.close()}catch{}}).catch((K)=>{console.warn(`[${E7}] port-forward to ${Z}:${G} failed: ${i14(K)}`),this.invalidateRecord(X),W()})}closeForwarder($){$.server.close((Z)=>{if(Z)console.warn(`[${E7}] port-forward close on :${$.localPort} errored: ${Z instanceof Error?Z.message:String(Z)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let $ of this.records.values())this.closeForwarder($.daemonForward);this.records.clear()}}function $04($){return{active:$.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:$.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:$.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function Z04(){let $=new bf;return $.loadFromDefault(),$}function $X$($){return Boolean($.status?.conditions?.some((Z)=>Z.type==="Ready"&&Z.status==="True"))}function G04($){let Z=$.spec?.env;if(!Z)return null;for(let G of Z)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function X04($,Z){let G=c14("sha256").update(`${$}:${Z}`).digest();return ad1+G.readUInt32BE(0)%XX$}function td1($,Z){return new Response(JSON.stringify(Z),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function ZX$($){let Z=$.slice(0,Y04);return Q04.test(Z)?Z:""}function W04($){if($===void 0)return null;let Z=$.trim();if(Z==="")return null;if(!J04.test(Z))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(Z)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return Z}function od1($,Z={}){let G={...Z};if($){let X=ZX$($.orgId),Q=ZX$($.userId);if(X)G[hY.orgId]=X;if(Q)G[hY.userId]=Q}return G}function SV($){let Z="";for(let G of $){let X=G.codePointAt(0)??0;Z+=X<32||X===127?" ":G}return Z.slice(0,K04)}function U04($){try{let Z=new URL($);return Z.username="",Z.password="",Z.toString()}catch{return""}}function F04($){let Z={},G=$.tenant;if(G?.orgSlug)Z[Y3.orgSlug]=SV(G.orgSlug);if(G?.orgName)Z[Y3.orgName]=SV(G.orgName);if(G?.userEmail)Z[Y3.userEmail]=SV(G.userEmail);if(G?.userName)Z[Y3.userName]=SV(G.userName);let X=$.repo;if(X){if(X.displayName)Z[Y3.gitRepo]=SV(X.displayName);let Q=U04(X.cloneUrl);if(Q)Z[Y3.gitRepoUrl]=SV(Q);let Y=$.branch??X.branch;if(Y)Z[Y3.gitBranch]=SV(Y)}return Z}function H04($){let Z=$.metadata?.labels;if(!Z)return null;let G=Z[hY.orgId],X=Z[hY.userId];if(!G||!X)return null;let Q=$.metadata?.annotations??{};return{orgId:G,userId:X,orgSlug:Q[Y3.orgSlug],orgName:Q[Y3.orgName],userEmail:Q[Y3.userEmail],userName:Q[Y3.userName]}}function rd1($){return{org_id:$?.orgId??"",user_id:$?.userId??"",runner_kind:kX}}function N04($){let Z={};if($.repo)Z.repo=$.repo;if($.workload)Z.workload=$.workload;if($.env&&Object.keys($.env).length>0)Z.env=$.env;if($.tenant)Z.tenant=$.tenant;return Object.keys(Z).length>0?Z:null}function O04($,Z){try{return new URL(d61($,Z)).hostname||null}catch{return null}}var kX="agent-sandbox",E7="AgentSandboxProvider",CV="x-sandbox-preview-not-ready",n14="agent-sandbox-system",p14="studio-sandbox",zO=9000,t14=3000,pd1="/app",o14=32,r14,a14=900000,s14,eG$,ad1=40000,XX$=1e4,e14=256,hY,Y3,Q04,Y04=63,J04,K04=253;var QX$=D(()=>{gd1();pG$();i61();EH1();Oi();sG$();r14=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),s14=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],eG$=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];hY={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},Y3={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},Q04=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;J04=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var YX$={};n4(YX$,{waitForSandboxReady:()=>LH1,getSandboxClaim:()=>JF,getHttpRoute:()=>hG$,deleteSandboxClaim:()=>wO,deleteHttpRoute:()=>DH1,createSandboxClaim:()=>Di,applyHttpRoute:()=>BH1,SandboxTimeoutError:()=>kV,SandboxError:()=>o9,PREVIEW_NOT_READY_HEADER:()=>CV,KubeConfig:()=>bf,K8S_CONSTANTS:()=>C9,HTTPROUTE_CONSTANTS:()=>Li,AgentSandboxProvider:()=>sd1});var ed1=D(()=>{gd1();Oi();EH1();QX$()});class AH1{kind=jO;userSub;dispatch;stateStore;records=new Map;constructor($){if(!$.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!$.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=$.userSub,this.dispatch=$.dispatch,this.stateStore=$.stateStore??null}async ensure($,Z={}){let G=Z.branch??Z.repo?.branch,X=YO($,G),Q=this.records.get(X);if(Q){if(await this.probeHealth(X))return this.toSandbox(Q);if(this.records.delete(X),this.stateStore)await this.stateStore.deleteByHandle(jO,X).catch(()=>{})}else if(this.stateStore){let N=(await this.stateStore.getByHandle(jO,X))?.state,O=N?.sandboxApiUrl;if(O){if(await this.probeHealth(X)){let B={handle:X,sandboxApiUrl:O,previewUrl:N?.previewUrl??O};return this.records.set(X,B),this.toSandbox(B)}await this.stateStore.deleteByHandle(jO,X).catch(()=>{})}}let Y=rU({userName:Z.tenant?.userName,userEmail:Z.tenant?.userEmail}),J=JSON.stringify({handle:X,repo:Z.repo,branch:G,...Z.workload?{workload:Z.workload}:{},...Y?{operator:Y}:{},...Z.offloadAllowedHosts?{offloadAllowedHosts:Z.offloadAllowedHosts}:{},...Z.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:Z.offloadAllowSameHostDev}:{},...Z.orgFsConfigJson?{orgFsConfigJson:Z.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let U=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:X,sandboxApiUrl:K.sandboxApiUrl,previewUrl:U};if(this.records.set(X,F),this.stateStore)await this.stateStore.put($,jO,{handle:X,state:{handle:X,sandboxApiUrl:K.sandboxApiUrl,previewUrl:U}});return this.toSandbox(F)}async proxyDaemonRequest($,Z,G){let X=Z.startsWith("/")?Z:`/${Z}`,Q=X.startsWith("/_sandbox/")?X.slice(9):X,Y=`/_sandbox/${encodeURIComponent($)}${Q}`,J=new Headers(G.headers);for(let z of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(z);let W={};J.forEach((z,j)=>{W[j]=z});let K;if(G.body!=null)K=await D04(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:Y,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),H=B04(),N=200,O={"content-type":"application/octet-stream"},B=[];try{while(!0){let z=await F.next();if(z.done)break;let j=z.value;if(j.headers){N=j.headers.status,O=j.headers.headers;break}if(j.data!=null){let P=H.push(j.data);if(P.length)B.push(P)}}}catch(z){let j=z instanceof Error?z.message:"dispatch error";return new Response(JSON.stringify({error:j}),{status:502,headers:{"content-type":"application/json"}})}let L=!1,w=new ReadableStream({async start(z){for(let j of B)z.enqueue(j)},async pull(z){try{while(!0){let j=await F.next();if(L)return;if(j.done){let R=H.flush();if(R.length)z.enqueue(R);z.close();return}let P=j.value;if(P.data!=null){let R=H.push(P.data);if(R.length){z.enqueue(R);return}}}}catch(j){if(!L)z.error(j)}},cancel(){L=!0,F.return?.()}});return new Response(w,{status:N,headers:O})}async alive($){return this.probeHealth($)}async probeHealth($){let Z=new AbortController,G=setTimeout(()=>Z.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent($)}`,void 0,Z.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle($){if(this.records.delete($),this.stateStore)await this.stateStore.deleteByHandle(jO,$).catch(()=>{})}async delete($){if(this.records.delete($),this.stateStore)await this.stateStore.deleteByHandle(jO,$).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent($)}`)}catch(Z){if(!(Z instanceof Error?Z.message:String(Z)).includes("404"))throw Z}}async getPreviewUrl($){return(await this.resolveRecord($))?.previewUrl??null}async localWorkdir($){return null}async*watchClaimLifecycle($,Z){yield{kind:"ready"}}toSandbox($){return{handle:$.handle,workdir:$.sandboxApiUrl,previewUrl:$.previewUrl}}async resolveRecord($){let Z=this.records.get($);if(Z)return Z;if(!this.stateStore)return null;let X=(await this.stateStore.getByHandle(jO,$))?.state,Q=X?.sandboxApiUrl;if(!Q)return null;let Y={handle:$,sandboxApiUrl:Q,previewUrl:X?.previewUrl??Q};return this.records.set($,Y),Y}async dispatchJson($,Z,G,X){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let Y=this.dispatch(this.userSub,{method:$,path:Z,headers:Q,body:G},{signal:X}),J=null,W="";for await(let U of Y)if(U.headers)J=U.headers.status;else if(U.data!=null)W+=U.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function JX$($){return new AH1($)}function B04(){let $="";return{push(Z){if(Z.length===0)return $m1;$+=Z;let G=$.length-$.length%4;if(G===0)return $m1;let X=$.slice(0,G);return $=$.slice(G),new Uint8Array(Buffer.from(X,"base64"))},flush(){if($.length===0)return $m1;let Z=$;return $="",new Uint8Array(Buffer.from(Z,"base64"))}}}async function D04($){if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");if(ArrayBuffer.isView($))return Buffer.from($.buffer,$.byteOffset,$.byteLength).toString("utf8");if($ instanceof URLSearchParams)return $.toString();return await new Response($).text()}var jO="user-desktop",$m1;var WX$=D(()=>{i61();m61();$m1=new Uint8Array(0)});var KX$={};n4(KX$,{createDesktopProvider:()=>JX$,DesktopSandboxProvider:()=>AH1});var UX$=D(()=>{WX$()});var DX$={};n4(DX$,{subscribeLifecycle:()=>zi,getSandboxProviderByKind:()=>Gm1,getOrInitSharedRunner:()=>R04,buildDesktopProvider:()=>RH1,__resetSharedLifecyclesForTesting:()=>k04});function OX$($,Z){let G=FX$[$];if(G)return Promise.resolve(G);let X=Zm1[$];if(X)return X;let Q=Z().then((Y)=>{return FX$[$]=Y,Y}).finally(()=>{delete Zm1[$]});return Zm1[$]=Q,Q}function w04(){let $=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return $&&$.trim()!==""?$:void 0}function z04(){let $=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return $&&$.trim()!==""?$:void 0}function j04(){let $=process.env.STUDIO_ENV;return $&&$.trim()!==""?$:void 0}function P04(){let $=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return $&&$.trim()!==""?$:void 0}function A04(){let $=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!$&&!Z)return;if(!$||!Z)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:$,namespace:Z}}async function BX$($,Z){let G=new WO(Z),X=w04();switch($){case"agent-sandbox":{let{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (ed1(),YX$));return new Q({stateStore:G,previewUrlPattern:X,sandboxTemplateName:z04(),envName:j04(),previewGateway:A04(),sentinelToken:P04(),meter:i6})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String($)}`)}}async function RH1($,Z){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (UX$(),KX$)),{getProxyDispatch:X}=await Promise.resolve().then(() => (Qm1(),Xm1)),Q=new WO($.db);if(!Z)throw Error("buildDesktopProvider: userSub must be a non-empty string");let Y=X();return new G({userSub:Z,dispatch:Y,stateStore:Q})}function Gm1($,Z){return OX$(Z,()=>BX$(Z,$.db))}async function R04(){let $;try{$=bW()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await OX$($,()=>BX$($,P6().db))}function zi($,Z,G){let X=PO.get(Z);if(X){if(X.terminated){if(X.lastPhase)try{G(X.lastPhase)}catch{}return{unsubscribe:q04}}if(X.listeners.add(G),X.lastPhase)try{G(X.lastPhase)}catch{}return HX$(Z,X,G)}let Q=new AbortController,Y={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return PO.set(Z,Y),M04($,Z,Y),HX$(Z,Y,G)}function q04(){}function HX$($,Z,G){return{unsubscribe(){if(PO.get($)!==Z)return;if(Z.listeners.delete(G),Z.listeners.size===0)PO.delete($),Z.abort.abort()}}}async function M04($,Z,G){let X=null;try{for await(let Q of $.watchClaimLifecycle(Z,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let Y=Q.kind==="ready"||Q.kind==="failed";if(Y)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if(Y)break}}catch(Q){X=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:X instanceof Error?X.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let Y of Array.from(G.listeners))try{Y(Q)}catch{}}if(PO.get(Z)===G)PO.delete(Z)}}function k04(){for(let $ of PO.values())$.abort.abort();PO.clear()}var L04,E04,NX$,FX$,Zm1,I04,T04,PO;var ji=D(()=>{IQ();BJ();f9();a61();L04=Symbol.for("decocms.sandbox.lifecycle.runners"),E04=Symbol.for("decocms.sandbox.lifecycle.inflight"),NX$=globalThis,FX$=NX$[L04]??={},Zm1=NX$[E04]??={};I04=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),T04=globalThis,PO=T04[I04]??=new Map});async function IH1($,Z){if(await Z.linkClaimRegistry.get($))return"user-desktop";return Z.resolveEnvKind()}async function J3($,Z){let{userId:G,branch:X,virtualMcpMetadata:Q,explicitKind:Y}=Z;if(Y)return{provider:await Pi($,G,Y),kind:Y};if($.sandboxPreference==="agent-sandbox")return{provider:await Pi($,G,"agent-sandbox"),kind:"agent-sandbox"};if($.sandboxPreference==="user-desktop"&&$.linkForCurrentRun)return{provider:await RH1($,G),kind:"user-desktop"};if($.sandboxPreference==="cluster-default"){let F=bW();return{provider:await Pi($,G,F),kind:F}}let[J,...W]=V04(Q,G,X);if(J){let F=W.length===0?J:await S04($,G,J,W);return{provider:await Pi($,G,F),kind:F}}let K=await LX$($,G);return{provider:await Pi($,G,K),kind:K}}function V04($,Z,G){let X=TQ($)[Z]?.[G];if(!X)return[];let Q=hK(X);return Object.keys(Q)}async function S04($,Z,G,X){let Q=await LX$($,Z);if(Q===G||X.includes(Q))return Q;return G}async function LX$($,Z){if(!$.linkClaimRegistry)return bW();return IH1(Z,{linkClaimRegistry:$.linkClaimRegistry,resolveEnvKind:bW})}async function Pi($,Z,G){if(G!=="user-desktop")return Gm1($,G);if(!$.linkClaimRegistry)throw Error("user-desktop sandbox provider requires ctx.linkClaimRegistry to be wired (set on StudioContextConfig).");if(!await $.linkClaimRegistry.get(Z))throw Error(`No link daemon registered for user "${Z}". Start one with \`deco link\` (or run \`bun run dev --local-sandbox-provider\` for dev).`);return RH1($,Z)}var gf=D(()=>{V8();IQ();eU();ji()});async function TH1($,Z){if(!$)return{hosts:[],allowSameHostDev:!1};let G;try{G=await $.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let X;try{X=new URL(G)}catch{return{hosts:[],allowSameHostDev:!1}}if(X.protocol!=="https:"&&X.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let Q=X.hostname,Y=C04.has(Q);return{hosts:[Q],allowSameHostDev:Y&&!Z.isProduction}}var C04;var Ym1=D(()=>{C04=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});function hf($){if(_04.has($)||!b04.test($))return"home";return $}var _04,b04;var qH1=D(()=>{_04=new Set(["output","upload","public","home"]),b04=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function y04($){return{baseUrl:$.baseUrl.replace(/\/+$/,""),orgSlug:$.orgSlug,token:$.token,mounts:[{volume:"home",path:hf($.orgSlug)},...x04.map((Z)=>({...Z})),...($.publicSets??[]).map((Z)=>({volume:Br(Z),path:`public/${Z}`,readonly:!0}))]}}async function MH1($,Z){try{let G=await $.boundAuth.apiKey.create({name:`orgfs-${Z.orgSlug}`,expiresIn:g04,metadata:{organization:{id:Z.orgId,slug:Z.orgSlug}}});return JSON.stringify(y04({baseUrl:Z.baseUrl,orgSlug:Z.orgSlug,token:G.key,publicSets:ZJ().map((X)=>X.set)}))}catch(G){console.warn("[org-fs] token mint failed; mounts disabled for this sandbox",G);return}}var v04=".outputs",f04=".uploads",x04,g04=604800;var Jm1=D(()=>{qH1();UC();x04=[{volume:"outputs",path:v04},{volume:"uploads",path:f04}]});import{z as hW}from"zod";async function EX$($,Z){P1(Z);let G=H1(Z),X=D$(Z);if(!X)throw Error("User ID required");let Q=await Z.storage.virtualMcps.findById($.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let Y=Q.metadata??{},J=sU(TQ(Y),X,$.branch,$.sandboxProviderKind),W=$.sandboxProviderKind,{provider:K}=await J3(Z,{userId:X,branch:$.branch,virtualMcpMetadata:Y,explicitKind:W});if(J){if(W!=="user-desktop")return J;if(await K.alive(J.sandboxHandle).catch(()=>!1))return J;await JO(Z.storage.virtualMcps,$.virtualMcpId,X,X,$.branch,W).catch((N)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",N)})}let U=Y.githubRepo??null,{entry:F}=await wX$({ctx:Z,userId:X,orgId:G.id,virtualMcpId:$.virtualMcpId,branch:$.branch,metadata:Y,githubRepo:U,existing:null,providerKind:W,runner:K});return F}async function wX$($){let{ctx:Z,userId:G,orgId:X,virtualMcpId:Q,branch:Y,metadata:J,githubRepo:W,existing:K,runner:U}=$,{runtime:F,packageManager:H,port:N,packageManagerPath:O}=n61(J),B;if(W){if(W.connectionId)await Pf({ctx:Z,connectionId:W.connectionId,organizationId:X,onLegacyMintError:(Q1)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:W.connectionId,error:Q1.message})}});let{cloneUrl:s,gitUserName:d,gitUserEmail:p}=W.connectionId?await Af(W.connectionId,W.owner,W.name,Z.db,Z.vault):t61(W.owner,W.name);if(!H){let Q1=W.connectionId?await s8$(W.connectionId,W.owner,W.name,Z.db,Z.vault):await e8$(W.owner,W.name);if(Q1)H=Q1.packageManager,F=nm[Q1.packageManager].runtime,N=Q1.devPort??N,await u04(Z,Q,G,Q1.packageManager,Q1.devPort)}B={cloneUrl:s,userName:d,userEmail:p,branch:Y,displayName:`${W.owner}/${W.name}`}}let L=F&&H?{runtime:F,packageManager:H,...N!==null?{devPort:Number(N)}:{},...O?{packageManagerPath:O}:{}}:void 0,w=aU({orgId:X,virtualMcpId:Q,branch:Y}),z=U.kind==="user-desktop"?await TH1(Z.objectStorage,{isProduction:I0().nodeEnv==="production"}):null,j=U.kind==="user-desktop"||U.kind==="agent-sandbox"&&I0().orgFsClusterMounts,P;if(j){let s=Z.organization?.slug??(await Z.db.selectFrom("organization").select(["slug"]).where("id","=",X).executeTakeFirst())?.slug;if(s)P=await MH1(Z,{orgSlug:s,orgId:X,baseUrl:I3()})}let R=await U.ensure({userId:G,projectRef:w},{branch:Y,repo:B,workload:L,tenant:{orgId:X,userId:G,...Z.organization?.slug?{orgSlug:Z.organization.slug}:{},...Z.organization?.name?{orgName:Z.organization.name}:{},...Z.auth.user?.email?{userEmail:Z.auth.user.email}:{},...Z.auth.user?.name?{userName:Z.auth.user.name}:{}},...z?{offloadAllowedHosts:z.hosts,offloadAllowSameHostDev:z.allowSameHostDev}:{},...P?{orgFsConfigJson:P}:{}}),A=J.runtime?.env??null;await p61({ctx:Z,runner:U,handle:R.handle,orgId:X,userId:G,entries:A});let S=!!K&&K.sandboxHandle===R.handle&&K?.createdAt?K.createdAt:Date.now(),k=J.runtime?.selected??null,C=J.runtime?.port??null,u=J.runtime?.path??null,x={sandboxHandle:R.handle,previewUrl:R.previewUrl,sandboxApiUrl:R.previewUrl,sandboxProviderKind:U.kind,createdAt:S,startedWith:{packageManager:k,port:C,path:u}};await p8$(Z.storage.virtualMcps,Q,G,G,Y,$.providerKind,x);let y=!K||K.sandboxHandle!==R.handle;return{entry:x,isNewVm:y}}async function u04($,Z,G,X,Q){let Y=await $.storage.virtualMcps.findById(Z);if(!Y)return;let J=Y.metadata??{};await $.storage.virtualMcps.update(Z,G,{metadata:{...J,runtime:{selected:X,port:Q}}})}var h04,Wm1;var Km1=D(()=>{IQ();p1();pm();ic1();eU();o61();Z4$();sg1();mc1();gf();Ym1();D4();lX();Jm1();eU();h04=hW.enum(["agent-sandbox","user-desktop","cluster"]),Wm1=Z1({name:"SANDBOX_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:hW.object({virtualMcpId:hW.string().describe("Virtual MCP ID"),branch:hW.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates `deco/<adjective>-<noun>` and uses it. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:h04.optional().describe("Explicit runtime choice. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. When omitted, defaults to `user-desktop` if the acting user's link daemon is online, else the env kind.")}),outputSchema:hW.object({previewUrl:hW.string().nullable(),sandboxHandle:hW.string(),branch:hW.string(),isNewVm:hW.boolean(),sandboxProviderKind:hW.enum(["agent-sandbox","user-desktop"])}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=$.branch??k41(),Q=D$(Z);if(!Q)throw Error("User ID required");let Y=await Z.storage.virtualMcps.findById($.virtualMcpId);if(!Y||Y.organization_id!==G.id)throw Error("Virtual MCP not found");let J=Y.metadata??{},W=$.sandboxProviderKind?oU($.sandboxProviderKind):void 0,{provider:K,kind:U}=await J3(Z,{userId:Q,branch:X,virtualMcpMetadata:J,explicitKind:W}),F=sU(TQ(J),Q,X,U),H=J.githubRepo??null,{entry:N,isNewVm:O}=await wX$({ctx:Z,userId:Q,orgId:G.id,virtualMcpId:$.virtualMcpId,branch:X,metadata:J,githubRepo:H,existing:F,providerKind:U,runner:K});return{...N,branch:X,isNewVm:O,sandboxProviderKind:U}}})});import{z as uf}from"zod";var c04,Um1;var zX$=D(()=>{IQ();p1();pm();eU();gf();c04=uf.enum(["agent-sandbox","user-desktop","cluster"]),Um1=Z1({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:uf.object({virtualMcpId:uf.string().describe("Virtual MCP ID that owns this VM"),branch:uf.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:c04.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:uf.object({success:uf.boolean()}),handler:async($,Z)=>{let G=oU($.sandboxProviderKind),X;try{X=await o8$({...$,sandboxProviderKind:G},Z)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Q,userId:Y}=X;if(!Q)return{success:!0};let{provider:J}=await J3(Z,{userId:Y,branch:$.branch,virtualMcpMetadata:X.metadata,explicitKind:G});return await JO(Z.storage.virtualMcps,$.virtualMcpId,Y,Y,$.branch,G),await J.delete(Q.sandboxHandle).catch((W)=>console.error(`[SANDBOX_DELETE] ${G} ${Q.sandboxHandle}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var jX$=D(()=>{Km1();zX$()});import{z as uW}from"zod";var d04="https://api.github.com",Fm1;var PX$=D(()=>{p1();_L();hv();zW();Fm1=Z1({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:uW.object({connectionId:uW.string().describe("ID of the mcp-github connection to use")}),outputSchema:uW.object({installations:uW.array(uW.object({installationId:uW.number(),login:uW.string(),avatarUrl:uW.string(),type:uW.string()})),appSlug:uW.string().optional()}),handler:async($,Z)=>{await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization context required");let X=await Z.storage.connections.findById($.connectionId,G);if(!X)throw Error("Connection not found");if(jW(X))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Q=new k9(Z.db,Z.vault),Y=await Q.get($.connectionId);if(!Y)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Y.accessToken;if(B41(Y)&&Q.isExpired(Y,sd)){let N=await D41(Y,Q);if(!N)throw Error(p7);J=N,Y=await Q.get($.connectionId)??Y}let W=[],K,U=1,F=100,H=async(N)=>fetch(`${d04}/user/installations?per_page=${F}&page=${U}`,{headers:{Authorization:`Bearer ${N}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let N=await H(J);if(N.status===401){let B=await Q.get($.connectionId);if(!B||!B41(B))throw Error(p7);let L=await D41(B,Q);if(!L)throw Error(p7);if(J=L,N=await H(J),N.status===401)throw Error(p7)}if(!N.ok)throw Error(`GitHub /user/installations failed: ${N.status}`);let O=await N.json();for(let B of O.installations){if(!K)K=B.app_slug??B.app?.slug;W.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type})}if(O.installations.length<F)break;U++}return{installations:W,...K?{appSlug:K}:{}}}})});var AX$=D(()=>{PX$()});import{z as T0}from"zod";var Hm1,RX$,IX$,i04,Ai,n04,Ri,p04,t04,o04,_s5;var kH1=D(()=>{Hm1=T0.enum(["claude-code","codex","decopilot-sandbox","body-offload"]),RX$=T0.array(T0.string()).catch([]).transform(($)=>$.filter((Z)=>Hm1.safeParse(Z).success)),IX$=T0.discriminatedUnion("type",[T0.object({type:T0.literal("ui-message-chunk"),chunk:T0.unknown()}),T0.object({type:T0.literal("error"),code:T0.string(),message:T0.string()}),T0.object({type:T0.literal("done")})]),i04=T0.record(T0.string(),T0.unknown()),Ai=T0.object({id:T0.string(),title:T0.string().optional(),provider:T0.string().nullable().optional(),credentialId:T0.string(),limits:T0.object({contextWindow:T0.number().int().positive().optional(),maxOutputTokens:T0.number().int().positive().optional()}).optional(),capabilities:T0.object({vision:T0.boolean().optional(),text:T0.boolean().optional(),reasoning:T0.boolean().optional()}).optional()}).strict(),n04=T0.object({thinking:Ai.extend({title:T0.string()}),fast:Ai.optional(),smart:Ai.optional(),image:Ai.optional(),deepResearch:Ai.optional()}).strict(),Ri=T0.object({kind:T0.literal("secret"),providerId:T0.string(),apiKey:T0.string(),modelId:T0.string(),baseUrl:T0.string().optional(),extraHeaders:T0.record(T0.string(),T0.string()).optional()}),p04=T0.object({thinking:Ri,fast:Ri.optional(),smart:Ri.optional(),image:Ri.optional(),deepResearch:Ri.optional()}).strict(),t04=T0.object({kind:T0.literal("http"),url:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}),o04=T0.object({kind:T0.literal("http"),baseUrl:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}),_s5=T0.object({harnessId:T0.enum(["decopilot","claude-code","codex"]).optional(),threadId:T0.string(),runId:T0.string(),taskId:T0.string(),resumeSessionRef:T0.string().optional(),messages:T0.array(i04),workspace:T0.object({cwd:T0.string().min(1)}).strict(),models:n04,modelSources:p04.optional(),mcpSource:t04.optional(),objectStorageSource:o04.optional(),mcp:T0.object({url:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}).strict(),mode:T0.enum(["default","plan","web-search","gen-image"]),temperature:T0.number(),toolApprovalLevel:T0.enum(["auto","readonly"]),toolAllowlist:T0.array(T0.string()).nullable().optional(),maxAgentSteps:T0.number().int().optional(),user:T0.object({id:T0.string(),email:T0.string()}),organizationId:T0.string(),organizationSlug:T0.string().optional(),virtualMcp:T0.record(T0.string(),T0.unknown()),agent:T0.object({id:T0.string()}),branch:T0.string().nullable().optional(),triggerId:T0.string().optional(),currentThreadTitle:T0.string().optional(),traceparent:T0.string().optional(),runFenceToken:T0.string().optional()}).strip()});import{z as TX$}from"zod";var qX$;var Nm1=D(()=>{kH1();qX$=TX$.object({seq:TX$.number().int().positive(),event:IX$})});function VX$($){return $>=2}var MX$=2,kX$="x-link-protocol";var SX$=()=>{};var CX$=D(()=>{SX$();Nm1();kH1()});var _X$=D(()=>{CX$()});import _V from"zod";var Om1;var bX$=D(()=>{_X$();p1();Om1=Z1({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:_V.object({}),outputSchema:_V.object({online:_V.boolean(),machineId:_V.string().optional(),hostname:_V.string().optional(),cliVersion:_V.string().optional(),capabilities:_V.array(Hm1).default([])}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.linkClaimRegistry;if(!G)return{online:!1,capabilities:[]};let X=await G.get(Z.auth.user.id);if(!X)return{online:!1,capabilities:[]};return{online:!0,machineId:X.machineId,hostname:X.hostname,cliVersion:X.cliVersion,capabilities:X.capabilities}}})});import Bm1 from"zod";var Dm1;var vX$=D(()=>{p1();Dm1=Z1({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms link` on the desktop.",inputSchema:Bm1.object({}),outputSchema:Bm1.object({disconnected:Bm1.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.auth.user.id,X=Z.linkClaimRegistry;if(!(X?await X.get(G):null))return{disconnected:!1};return Z.publishLinkControlFrame?.(G,{type:"shutdown"}),await X.delete(G),{disconnected:!0}}})});var fX$=D(()=>{bX$();vX$()});import{z as r9}from"zod";function xX$($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}var s04,e04,$$4,Z$4,G$4,Lm1;var yX$=D(()=>{p1();s04=["thread"],e04=r9.object({type:r9.literal("thread"),id:r9.string(),title:r9.string(),created_at:r9.string(),updated_at:r9.string(),virtual_mcp_id:r9.string().nullable(),run_config:r9.record(r9.string(),r9.unknown()).nullable(),status:r9.string().nullable()}),$$4=r9.discriminatedUnion("type",[e04]),Z$4=r9.object({query:r9.string().min(1).describe("Free-text search query."),limit:r9.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:r9.array(r9.enum(s04)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),G$4=r9.object({items:r9.array($$4),totalCount:r9.number()});Lm1=Z1({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Z$4,outputSchema:G$4,handler:async($,Z)=>{await Z.access.check(),H1(Z);let G=$.limit??20,X=$.types?.length?new Set($.types):null,Q=!X||X.has("thread"),Y=[],J=0;if(Q){let{threads:W,total:K}=await Z.storage.threads.list(void 0,{limit:G,offset:0,search:$.query,includeArchived:!1});J+=K;for(let U of W)Y.push({type:"thread",id:U.id,title:U.title??"",created_at:xX$(U.created_at),updated_at:xX$(U.updated_at),virtual_mcp_id:U.virtual_mcp_id??null,run_config:U.run_config??null,status:U.status??null})}return{items:Y,totalCount:J}}})});var gX$=D(()=>{yX$()});var j41={};n4(j41,{managementMCP:()=>$f,managementContextStore:()=>uL,listManagementTools:()=>J$4,ALL_TOOLS:()=>uX$});import{z as hX$}from"zod";async function J$4($){let Z=await $f($),[G,X]=ku.createLinkedPair();await Z.connect(X);let Q=new Y9({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:b5});try{return await Q.connect(G),(await Q.listTools()).tools}finally{await Q.close().catch(()=>{}),await Z.close().catch(()=>{})}}var Q$4,Y$4,uX$,$f=async($)=>{let Z=null;if($.organization){let J=await $.storage.organizationSettings.get($.organization.id),W=await $.storage.virtualMcps.listEnabledPlugins($.organization.id),K=new Set(J?.enabled_plugins??[]);for(let U of W)K.add(U);Z=K.size>0?[...K]:null}let G=BC0(uX$,Z),X=new uK({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:b5});for(let J of G){let{config:W,handler:K}=qa0(J);X.registerTool(J.name,W,K)}let Q=J61();for(let J of Q){let W=J.arguments?.length?Object.fromEntries(J.arguments.map((K)=>{let U=K.required?hX$.string():hX$.string().optional();return[K.name,K.description?U.describe(K.description):U]})):void 0;X.registerPrompt(J.name,{title:J.title,description:J.description,...W?{argsSchema:W}:{}},(K)=>{return{messages:[{role:"user",content:{type:"text",text:typeof J.text==="function"?J.text(K??{}):J.text}}]}})}if($.organization?.id){let J=await $.storage.brandContext.list($.organization.id),W=new Set;for(let K of J){let U=K.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),F=U?`brand-${U}`:`brand-${K.id}`;if(W.has(F))F=`${F}-${K.id.slice(0,8)}`;W.add(F);let H=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let O=Object.entries(K.colors).filter(([,B])=>B);if(O.length>0){H.push("","## Colors");for(let[B,L]of O)H.push(`- **${B}:** ${L}`)}}if(K.fonts){let O=Object.entries(K.fonts).filter(([,B])=>B);if(O.length>0){H.push("","## Fonts");for(let[B,L]of O)H.push(`- ${L} (${B})`)}}if(K.logo)H.push("",`**Logo:** ${K.logo}`);if(K.favicon)H.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)H.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){H.push("","## Images");for(let O of K.images){let B=Object.entries(O).map(([L,w])=>`${L}: ${w}`).join(", ");H.push(`- ${B}`)}}let N=H.join(`
|
|
2210
|
+
`))>=0){let K=X.slice(0,W).trim();if(X=X.slice(W+1),!K)continue;yield JSON.parse(K)}}let Q=X.trim();if(Q)yield JSON.parse(Q)}finally{Z.releaseLock()}}var _G$,bG$,xG$="gateway.networking.k8s.io",yG$="v1",gG$="httproutes",V14,Li,uG$="mesh-sandbox-runner";var EH1=D(()=>{Oi();_G$=class _G$ extends Error{status;body;constructor($,Z,G){super(G);this.status=$;this.body=Z;this.name="KubeHttpError"}};bG$=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces`;V14=`/apis/${xG$}/${yG$}/namespaces`;Li={API_GROUP:xG$,API_VERSION:yG$,PLURAL:gG$}});var wH1=D(()=>{gZ();m61()});async function jH1($){try{let Z=await fetch(`${$}/health`,{signal:AbortSignal.timeout(S14)});if(!Z.ok)return null;let G=await Z.json();if(typeof G==="object"&&G!==null&&typeof G.bootId==="string"&&typeof G.ready==="boolean"&&G.setup&&typeof G.setup.running==="boolean"&&typeof G.setup.done==="boolean")return G;return null}catch{return null}}async function iG$($){for(let Z=0;Z<lG$;Z++){if(await jH1($)!==null)return;let G=(Math.random()*2-1)*C14;await j6(dG$+G)}throw Error(`sandbox daemon at ${$} did not respond on /health within ${lG$*dG$/1000}s`)}async function Ei($,Z,G,X,Q){return _14($,Z,"POST",G,X,Q)}async function _14($,Z,G,X,Q,Y){let J={...X};if(Q&&Q.rotateToken!==void 0)J.auth=Q;let W=await fetch(`${$}/_sandbox/config`,{method:G,headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify(J),signal:AbortSignal.timeout(Y?.timeoutMs??mG$)}),K=await W.text();if(!W.ok)throw new zH1(W.status,K);return JSON.parse(K)}async function nG$($,Z,G){let X=await fetch(`${$}/_sandbox/orgfs-config`,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:G,signal:AbortSignal.timeout(mG$)}),Q=await X.text();if(!X.ok)throw Error(`sandbox daemon /_sandbox/orgfs-config returned ${X.status}: ${Q}`);return JSON.parse(Q)}async function wi($,Z,G,X){let Q=new Headers(X.headers);for(let W of b14)Q.delete(W);Q.set("authorization",`Bearer ${Z}`);let Y=X.method!=="GET"&&X.method!=="HEAD",J=`${$}${G.startsWith("/")?G:`/${G}`}`;return fetch(J,{method:X.method,headers:Q,body:Y?X.body:void 0,redirect:"manual",signal:X.signal,duplex:Y?"half":void 0})}var zH1,S14=500,mG$=30000,lG$=25,dG$=200,C14=50,b14;var pG$=D(()=>{wH1();zH1=class zH1 extends Error{status;constructor($,Z){super(`sandbox daemon /_sandbox/config returned ${$}: ${Z}`);this.status=$;this.name="ConfigRequestError"}};b14=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length"]});async function*rG$($){let Z=$.now??(()=>Date.now()),G=Z(),X=$.schedulingTimeoutMs??x14,Q={pod:{},sandbox:{},events:{hasPulling:!1,hasPulled:!1},startedAt:G},Y=[],J=null,W=!1,K=(j)=>{if(W)return;if(J){let P=J;J=null,P(j)}else Y.push(j)},U=()=>{if(Y.length>0)return Promise.resolve(Y.shift());if(W)return Promise.resolve(null);return new Promise((j)=>{J=j})},F=()=>{if(W)return;if(W=!0,J){let j=J;J=null,j(null)}},H=new AbortController,N=()=>{H.abort(),F()};if($.signal)if($.signal.aborted)H.abort(),F();else $.signal.addEventListener("abort",N,{once:!0});let O=Math.max(0,X-(Z()-G)),B=setTimeout(()=>K("tick"),O+100),L,w=new Promise((j)=>{L=j}),z=Promise.allSettled([y14($.kc,$.namespace,$.claimName,H.signal,Q,K,Z,L),h14($.kc,$.namespace,$.claimName,H.signal,Q,K),u14($.kc,$.namespace,$.claimName,w,H.signal,Q,K,Z)]);try{let j=null,P=-1,R=tG$(Q,X,Z);if(j=nd1(R),!id1(R))P=oG$(R);if(yield R,id1(R))return;while(!W){if(await U()===null)break;let q=tG$(Q,X,Z);if(id1(q)){let C=nd1(q);if(C!==j)j=C,yield q;return}let S=oG$(q);if(S<P)continue;let k=nd1(q);if(k!==j)j=k,P=S,yield q}}finally{if(clearTimeout(B),H.abort(),$.signal)$.signal.removeEventListener("abort",N);F(),await z.catch(()=>{})}}function tG$($,Z,G){let{pod:X,sandbox:Q,events:Y,startedAt:J}=$;if(Q.ready)return{kind:"ready"};let W=X.containerWaitingReason;if(W==="ImagePullBackOff"||W==="ErrImagePull")return{kind:"failed",reason:"image-pull-backoff",message:"Sandbox image failed to download. The cluster may be missing pull credentials or the image tag may not exist."};if(W==="CrashLoopBackOff")return{kind:"failed",reason:"crash-loop-backoff",message:"Sandbox crashed during startup and is now in CrashLoopBackOff. Check pod logs."};if(!X.scheduled&&Y.lastFailedSchedulingAt!==void 0&&G()-J>Z)return{kind:"failed",reason:"scheduling-timeout",message:Y.failedSchedulingMessage??`Pod could not be scheduled within ${Math.round(Z/1000)}s.`};if(X.containerRunning&&!X.containerReady)return{kind:"warming-daemon",since:J};if(Y.hasPulling&&!Y.hasPulled)return{kind:"pulling-image",since:J};if(W==="ContainerCreating"||W==="PodInitializing"||X.scheduled&&!X.containerRunning)return{kind:"starting-container",since:J};if(X.scheduledFalseReason==="Unschedulable"||Y.lastFailedSchedulingAt!==void 0&&!X.scheduled)return{kind:"waiting-for-capacity",since:J,message:Y.failedSchedulingMessage??X.scheduledFalseMessage,nodeClaim:Y.nominatedNodeClaim};return{kind:"claiming",since:J}}function id1($){return $.kind==="ready"||$.kind==="failed"}function oG$($){switch($.kind){case"claiming":return 0;case"waiting-for-capacity":return 1;case"pulling-image":return 2;case"starting-container":return 3;case"warming-daemon":return 4;case"ready":case"failed":return 99}}function nd1($){switch($.kind){case"claiming":case"pulling-image":case"starting-container":case"warming-daemon":return $.kind;case"waiting-for-capacity":return`waiting-for-capacity:${$.message??""}:${$.nodeClaim??""}`;case"ready":return"ready";case"failed":return`failed:${$.reason}:${$.message}`}}async function y14($,Z,G,X,Q,Y,J,W){let K=`/api/v1/namespaces/${encodeURIComponent(Z)}/pods?watch=true&labelSelector=${encodeURIComponent(`${v14}=${G}`)}`;return PH1({kc:$,path:K,signal:X,label:`pod/${G}`,onEvent:(U)=>{if(U.type!=="ADDED"&&U.type!=="MODIFIED")return;let F=U.object;if(F.metadata?.name)W(F.metadata.name);g14(F,Q,J),Y("pod")}})}function g14($,Z,G){let Q=($.status?.conditions??[]).find((J)=>J.type==="PodScheduled");if(Q?.status==="True")Z.pod.scheduled=!0,Z.pod.scheduledFalseReason=void 0,Z.pod.scheduledFalseMessage=void 0;else if(Q?.status==="False")Z.pod.scheduled=!1,Z.pod.scheduledFalseReason=Q.reason,Z.pod.scheduledFalseMessage=Q.message;let Y=($.status?.containerStatuses??[]).find((J)=>J.name===f14);if(Y)Z.pod.containerWaitingReason=Y.state?.waiting?.reason,Z.pod.containerRunning=!!Y.state?.running,Z.pod.containerReady=Y.ready===!0}async function h14($,Z,G,X,Q,Y){let J=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(Z)}/${C9.CLAIM_PLURAL}?watch=true&fieldSelector=${encodeURIComponent(`metadata.name=${G}`)}`;return PH1({kc:$,path:J,signal:X,label:`sandboxclaim/${G}`,onEvent:(W)=>{if(W.type!=="ADDED"&&W.type!=="MODIFIED")return;let U=W.object.status?.conditions?.find((F)=>F.type==="Ready");if(!U)return;if(U.status==="True")Q.sandbox.ready=!0,Q.sandbox.notReadyReason=void 0,Q.sandbox.notReadyMessage=void 0;else Q.sandbox.ready=!1,Q.sandbox.notReadyReason=U.reason,Q.sandbox.notReadyMessage=U.message;Y("sandbox")}})}async function u14($,Z,G,X,Q,Y,J,W){let K=await Promise.race([X,new Promise((F)=>{if(Q.aborted){F(G);return}Q.addEventListener("abort",()=>F(G),{once:!0})})]);if(Q.aborted)return;let U=`/api/v1/namespaces/${encodeURIComponent(Z)}/events?watch=true&fieldSelector=${encodeURIComponent(`involvedObject.name=${K},involvedObject.kind=Pod`)}`;return PH1({kc:$,path:U,signal:Q,label:`events/${G}`,onEvent:(F)=>{if(F.type!=="ADDED"&&F.type!=="MODIFIED")return;let H=F.object,N=H.reason;if(!N)return;switch(N){case"Pulling":Y.events.hasPulling=!0;break;case"Pulled":Y.events.hasPulling=!0,Y.events.hasPulled=!0;break;case"FailedScheduling":Y.events.lastFailedSchedulingAt=W(),Y.events.failedSchedulingMessage=H.message;break;case"Nominated":{let O=H.message?.match(/nodeclaim\/([\w-]+)/);if(O)Y.events.nominatedNodeClaim=O[1];break}default:return}J("event")}})}async function aG$($){let{kc:Z,namespace:G,labelSelector:X,signal:Q,onDelete:Y}=$,J=`/apis/${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}/namespaces/${encodeURIComponent(G)}/${C9.CLAIM_PLURAL}?watch=true&labelSelector=${encodeURIComponent(X)}`;return PH1({kc:Z,path:J,signal:Q,label:"sandboxclaim-reaper",onEvent:(W)=>{if(W.type!=="DELETED")return;let K=W.object.metadata?.name;if(K)Y(K)}})}async function PH1($){let{kc:Z,path:G,signal:X,label:Q,onEvent:Y}=$,J=0;while(!X.aborted){try{let K=await VV(Z,{method:"GET",path:G,signal:X,headers:{accept:"application/json"},stream:!0});if(!K.ok||!K.body){try{await K.body?.cancel()}catch{}throw Error(`watch handshake failed: ${K.status} ${K.statusText}`)}J=0;for await(let U of md1(K.body)){if(X.aborted)return;try{Y(U)}catch(F){console.warn(`[lifecycle-watcher] ${Q} onEvent threw: ${F instanceof Error?F.message:String(F)}`)}}}catch(K){if(X.aborted)return;let U=K instanceof Error?K.message:String(K);console.warn(`[lifecycle-watcher] ${Q} watch ended: ${U}`)}if(X.aborted)return;let W=s9(5000,250,J,2,0);J+=1,await j6(W,{signal:X}).catch(()=>{})}}var v14="studio.decocms.com/sandbox-handle",f14="sandbox",x14=300000;var sG$=D(()=>{gZ();Oi();EH1()});import{createHash as c14,randomBytes as l14,randomUUID as d14}from"crypto";import*as GX$ from"net";import{PassThrough as m14}from"stream";function i14($){if($ instanceof Error)return $.message;if($&&typeof $==="object"){let Z=$;if(Z.error instanceof Error)return Z.error.message;if(typeof Z.message==="string"&&Z.message)return Z.message}return String($)}class sd1{kind=kX;records=new Map;inflight=new c61;stateStore;previewUrlPattern;kubeConfig;portForward;namespace;sandboxTemplateName;envName;tokenGenerator;idleTtlMs;metrics;previewGateway;sentinelToken;closed=!1;claimWatchAbort=new AbortController;constructor($={}){this.stateStore=$.stateStore??null,this.previewUrlPattern=$.previewUrlPattern??null,this.kubeConfig=$.kubeConfig??Z04(),this.portForward=new Ad1(this.kubeConfig),this.namespace=$.namespace??n14,this.sandboxTemplateName=$.sandboxTemplateName??p14,this.envName=W04($.envName),this.tokenGenerator=$.tokenGenerator??(()=>l14(o14).toString("hex")),this.idleTtlMs=$.idleTtlMs??a14,this.metrics=$.meter?$04($.meter):null,this.previewGateway=$.previewGateway&&$.previewUrlPattern?{...$.previewGateway}:null;let Z=$.sentinelToken?.trim()??"";this.sentinelToken=Z.length>0?Z:null,this.startClaimReaper()}startClaimReaper(){let $=["app.kubernetes.io/managed-by=studio","app.kubernetes.io/name=studio-sandbox",...this.envName?[`${hY.env}=${this.envName}`]:[]].join(",");aG$({kc:this.kubeConfig,namespace:this.namespace,labelSelector:$,signal:this.claimWatchAbort.signal,onDelete:(Z)=>this.invalidateRecord(Z)})}async ensure($,Z={}){let G=YO($,Z.branch??Z.repo?.branch??null);return this.inflight.run(G,()=>l61(this.stateStore,$,kX,(X)=>this.ensureLocked($,G,Z,X)))}async delete($){let Z=await this.getRecord($);if(this.records.delete($),Z)this.closeForwarder(Z.daemonForward),this.metrics?.active.add(-1,rd1(Z.tenant));if(await this.deleteHttpRouteIfManaged($).catch((G)=>{console.warn(`[${E7}] HTTPRoute delete failed for ${$}: ${G instanceof Error?G.message:String(G)}`)}),await wO(this.kubeConfig,this.namespace,$),this.stateStore)if(Z)await this.stateStore.delete(Z.id,kX);else await this.stateStore.deleteByHandle(kX,$)}async alive($){return await JF(this.kubeConfig,this.namespace,$)!==void 0}watchClaimLifecycle($,Z){return rG$({kc:this.kubeConfig,namespace:this.namespace,claimName:$,signal:Z})}async getPreviewUrl($){let Z=await this.getRecord($);if(!Z)return null;return this.composePreviewUrl(Z)}async proxyDaemonRequest($,Z,G){let X=await this.getRecord($);if(!X&&this.previewUrlPattern&&this.stateStore){let K=await this.stateStore.getByHandle(kX,$),U=K?.state,F=U?.token;if(K&&F){let N=`http://${U?.adoptedSandboxName??$}.${this.namespace}.svc.cluster.local:${zO}`;try{let O=await wi(N,F,Z,G);if(O.status!==404)return O;try{await O.body?.cancel()}catch{}}catch{}}}if(!X)X=await this.resurrectByHandle($);if(!X)return new Response(JSON.stringify({error:"sandbox not found"}),{status:404,headers:{"content-type":"application/json"}});let Q=X,Y=performance.now(),J=0,W=!(G.body instanceof ReadableStream);try{let K=await wi(X.daemonUrl,X.token,Z,G);if(K.status===401&&W){this.invalidateRecord($);let U=await this.getRecord($).catch(()=>null)??await this.resurrectByHandle($).catch(()=>null);if(U)Q=U,K=await wi(U.daemonUrl,U.token,Z,G)}return J=K.status,K}catch(K){if(!W)throw K;this.invalidateRecord($);let U=await this.resurrectByHandle($)??await this.getRecord($).catch(()=>null);if(!U)throw K;Q=U;let F=await wi(U.daemonUrl,U.token,Z,G);return J=F.status,F}finally{this.recordProxyDuration("daemon",J,Q,performance.now()-Y)}}async adoptLiveClaim($,Z){if(this.records.has(Z))return!0;let G=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(!G||G.metadata?.deletionTimestamp)return!1;return await this.inflight.run(Z,async()=>{let Q=this.records.get(Z);if(Q)return this.toSandbox(Q);let Y=await this.adopt($,Z,G);if(!Y)throw Error(`cannot adopt live claim ${Z}`);return l61(this.stateStore,$,kX,(J)=>this.finish(Y,J,!0,!0,"adopt"))}).catch(()=>null)!=null}async resolvePreviewUpstreamUrl($){if(this.previewUrlPattern)return`http://${await this.resolveServiceNameForHandle($)}.${this.namespace}.svc.cluster.local:${zO}`;let Z=await this.getRecord($);if(Z)return Z.daemonUrl;let G=await this.resurrectByHandle($);return G?G.daemonUrl:null}async resolveServiceNameForHandle($){let Z=this.records.get($);if(Z)return Z.adoptedSandboxName;if(this.stateStore){let X=(await this.stateStore.getByHandle(kX,$).catch(()=>null))?.state?.adoptedSandboxName;if(X)return X}return $}async proxyPreviewRequest($,Z){let G=performance.now(),X=this.records.get($)??null,Q=0;try{let Y=await this.resolvePreviewUpstreamUrl($);if(!Y){Q=404;let B=td1(404,{error:"sandbox not found"});return B.headers.set(CV,"1"),B}let J=new URL(Z.url);if((J.pathname==="/_sandbox"||J.pathname.startsWith("/_sandbox/")||J.pathname==="/_decopilot_vm"||J.pathname.startsWith("/_decopilot_vm/"))&&Z.method!=="GET")return Q=404,td1(404,{error:"not found"});let K=(B)=>`${B}${J.pathname}${J.search}`,U=new Headers(Z.headers);for(let B of s14)U.delete(B);let F=Z.method!=="GET"&&Z.method!=="HEAD",H={method:Z.method,headers:U,body:F?Z.body:void 0,redirect:"manual",signal:Z.signal,duplex:F?"half":void 0},N;try{N=await fetch(K(Y),H)}catch(B){let L=`${Y}${J.pathname}`;if(console.warn(`[${E7}] preview fetch to ${L} failed: ${B instanceof Error?B.message:String(B)}`),Z.method==="GET"||Z.method==="HEAD"){if(this.invalidateRecord($),await this.resurrectByHandle($).catch(()=>null)){let j=await this.resolvePreviewUpstreamUrl($);if(j)try{N=await fetch(K(j),H);let P=new Headers;for(let[R,A]of N.headers.entries())if(!eG$.includes(R.toLowerCase()))P.set(R,A);return Q=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:P})}catch(P){console.warn(`[${E7}] preview fetch retry to ${L} failed: ${P instanceof Error?P.message:String(P)}`)}}}else this.invalidateRecord($);Q=502;let w=td1(502,{error:"sandbox daemon unreachable"});return w.headers.set(CV,"1"),w}let O=new Headers;for(let[B,L]of N.headers.entries())if(!eG$.includes(B.toLowerCase()))O.set(B,L);return Q=N.status,new Response(N.body,{status:N.status,statusText:N.statusText,headers:O})}finally{this.recordProxyDuration("preview",Q,X,performance.now()-G,$)}}async ensureLocked($,Z,G,X){if(G.image)console.warn(`[${E7}] opts.image ignored (template ${this.sandboxTemplateName} pins image): got ${G.image}`);if(X){let J=await X.get($,kX);if(J){let W=await this.rehydrate($,Z,J);if(W)return this.finish(W,X,!1,!0,"resume");await X.delete($,kX)}}let Q=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(Q)if(Q.metadata?.deletionTimestamp)await OH1(this.kubeConfig,this.namespace,Z).catch((J)=>{console.warn(`[${E7}] wait for terminating claim ${Z} failed: ${J instanceof Error?J.message:String(J)}`)});else{let J=await this.adopt($,Z,Q).catch((W)=>{return console.warn(`[${E7}] adopt ${Z} failed, recreating: ${W instanceof Error?W.message:String(W)}`),null});if(J)return this.finish(J,X,!0,!0,"adopt");await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),await OH1(this.kubeConfig,this.namespace,Z).catch((W)=>{console.warn(`[${E7}] wait for deleted claim ${Z} failed: ${W instanceof Error?W.message:String(W)}`)})}let Y=await this.provision($,Z,G);return this.finish(Y,X,!0,!1,"fresh")}async finish($,Z,G,X,Q){let Y=this.records.get($.handle),J=Y!==void 0;if(Y&&Y.daemonForward!==$.daemonForward)this.closeForwarder(Y.daemonForward);if(this.records.set($.handle,$),G)await this.persist(Z,$);if(X)await vG$(this.kubeConfig,this.namespace,$.handle,this.computeShutdownTime()).catch((W)=>console.warn(`[${E7}] TTL refresh failed for ${$.handle}: ${W instanceof Error?W.message:String(W)}`));if(this.metrics){let W=rd1($.tenant);if(this.metrics.ensureOutcome.add(1,{...W,outcome:Q}),!J)this.metrics.active.add(1,W)}return this.toSandbox($)}buildEnvMap($,Z){let G={},X=[];for(let[Q,Y]of Object.entries($.env??{}))if(r14.has(Q))X.push(Q);else G[Q]=Y;if(X.length>0)console.warn(`[${E7}] opts.env keys overlap reserved bootstrap names and were dropped: ${X.join(",")}`);return{...G,DAEMON_TOKEN:Z.token,DAEMON_BOOT_ID:Z.daemonBootId,APP_ROOT:Z.workdir,PROXY_PORT:String(zO)}}buildClaim($,Z,G){let X=this.sentinelToken!==null,Q=X?[]:Object.entries(this.buildEnvMap(Z,G)).sort(([W],[K])=>W<K?-1:W>K?1:0).map(([W,K])=>({name:W,value:K})),Y=F04(Z),J=Object.keys(Y).length>0;return{apiVersion:`${C9.CLAIM_API_GROUP}/${C9.CLAIM_API_VERSION}`,kind:"SandboxClaim",metadata:{name:$,namespace:this.namespace,labels:{"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[hY.env]:this.envName}:{},...od1(Z.tenant)},...J?{annotations:Y}:{}},spec:{sandboxTemplateRef:{name:this.sandboxTemplateName},additionalPodMetadata:{labels:od1(Z.tenant,{[hY.role]:"claimed",[hY.sandboxHandle]:$,...this.envName?{[hY.env]:this.envName}:{}}),...J?{annotations:Y}:{}},env:Q,warmpool:X?"default":"none",lifecycle:{shutdownPolicy:"Delete",shutdownTime:this.computeShutdownTime()}}}}async provision($,Z,G){let X=this.tokenGenerator(),Q=d14(),Y=pd1,J=this.buildClaim(Z,G,{token:X,daemonBootId:Q,workdir:Y});try{await Di(this.kubeConfig,this.namespace,J)}catch(N){if(N instanceof Ni)await OH1(this.kubeConfig,this.namespace,Z),await Di(this.kubeConfig,this.namespace,J);else throw N}let W;try{W=await fG$(this.kubeConfig,this.namespace,Z),await LH1(this.kubeConfig,this.namespace,W)}catch(N){throw await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}try{await this.ensureServicePortForAdoptedSandbox(W),await this.ensureHttpRouteForHandle(Z,W,G.tenant??null)}catch(N){throw await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}let K=await this.openForwarder(W,zO,Z),U=`http://127.0.0.1:${K.localPort}`,F=this.workloadConfigPayload(G),H=Q;try{if(await iG$(U),this.sentinelToken!==null){let N=await jH1(U);if(N)H=N.bootId;await Ei(U,this.sentinelToken,F??{},{rotateToken:X})}else if(F)await Ei(U,X,F);if(G.orgFsConfigJson)await nG$(U,X,G.orgFsConfigJson).catch((N)=>console.warn("[org-fs] sidecar config relay failed",N))}catch(N){throw this.closeForwarder(K),await this.deleteHttpRouteIfManaged(Z).catch(()=>{}),await wO(this.kubeConfig,this.namespace,Z).catch(()=>{}),N}return{id:$,handle:Z,adoptedSandboxName:W,token:X,workdir:Y,daemonUrl:U,daemonForward:K,workload:G.workload??null,daemonBootId:H,tenant:G.tenant??null,ensureOpts:N04(G)}}workloadConfigPayload($){return lc1({runtime:$?.workload?.runtime??"node",packageManager:$?.workload?.packageManager?{name:$.workload.packageManager,...$.workload.packageManagerPath?{path:$.workload.packageManagerPath}:{}}:null,repo:$?.repo??null,port:$?.workload?.devPort??t14,tenant:$?.tenant??void 0})}async rebootstrapDaemon($,Z,G){if(this.sentinelToken===null)return!1;let X=this.workloadConfigPayload(G)??{};try{return await Ei($,this.sentinelToken,X,{rotateToken:Z}),!0}catch(Q){if(Q instanceof zH1&&Q.status===401)try{return await Ei($,Z,X,{rotateToken:Z}),!0}catch(Y){return console.warn(`[${E7}] re-bootstrap retry with claim token failed: ${Y instanceof Error?Y.message:String(Y)}`),!1}return console.warn(`[${E7}] re-bootstrap failed: ${Q instanceof Error?Q.message:String(Q)}`),!1}}async ensureServicePortForAdoptedSandbox($){if(!this.previewGateway||!this.previewUrlPattern)return;await cG$(this.kubeConfig,this.namespace,$,{name:"daemon",port:zO,targetPort:zO})}async ensureHttpRouteForHandle($,Z,G){if(!this.previewGateway||!this.previewUrlPattern)return;let X=O04(this.previewUrlPattern,$);if(!X)throw new o9(`Unable to derive preview hostname for ${$} from pattern: ${this.previewUrlPattern}`);let Q={apiVersion:`${Li.API_GROUP}/${Li.API_VERSION}`,kind:"HTTPRoute",metadata:{name:$,namespace:this.namespace,labels:od1(G??void 0,{[hY.role]:"claimed",[hY.sandboxHandle]:$,"app.kubernetes.io/name":"studio-sandbox","app.kubernetes.io/managed-by":"studio",...this.envName?{[hY.env]:this.envName}:{}})},spec:{parentRefs:[{kind:"Gateway",group:"gateway.networking.k8s.io",name:this.previewGateway.name,namespace:this.previewGateway.namespace}],hostnames:[X],rules:[{backendRefs:[{group:"",kind:"Service",name:Z,port:zO}]}]}};await BH1(this.kubeConfig,this.namespace,Q)}async deleteHttpRouteIfManaged($){if(!this.previewGateway)return;await DH1(this.kubeConfig,this.namespace,$)}async rehydrate($,Z,G){let X=G.state;if(!X.adoptedSandboxName&&!X.podName||!X.token)return null;let Q=await JF(this.kubeConfig,this.namespace,Z).catch(()=>{return});if(!Q||!$X$(Q))return null;let Y=Q.status?.sandbox?.name??X.adoptedSandboxName??X.podName??Z,J=await this.openAndProbeDaemon(Y,Z);if(!J)return null;if(X.daemonBootId&&X.daemonBootId!==J.bootId){if(this.sentinelToken!==null){if(!await this.rebootstrapDaemon(J.daemonUrl,X.token,X.ensureOpts??null))return this.closeForwarder(J.daemonForward),null}else console.warn(`[${E7}] daemon restart detected (handle=${Z}): stored bootId=${X.daemonBootId} live bootId=${J.bootId}`);await this.stateStore?.put($,kX,{handle:Z,state:{...X,daemonBootId:J.bootId}}).catch((W)=>console.warn(`[${E7}] bootId persist failed for ${Z}: ${W instanceof Error?W.message:String(W)}`))}return{id:$,handle:Z,adoptedSandboxName:Y,token:X.token,workdir:X.workdir??pd1,daemonUrl:J.daemonUrl,daemonForward:J.daemonForward,workload:X.workload??null,daemonBootId:J.bootId,tenant:X.tenant??null,ensureOpts:X.ensureOpts??null}}async adopt($,Z,G){if(!$X$(G))return null;let X=G.status?.sandbox?.name??Z;if(this.sentinelToken!==null)return null;let Q=G04(G);if(!Q)return null;let Y=await this.openAndProbeDaemon(X,Z);if(!Y)return null;let J=H04(G);if(this.previewGateway)await this.ensureServicePortForAdoptedSandbox(X).catch((W)=>{console.warn(`[${E7}] Service port backfill failed for ${Z}: ${W instanceof Error?W.message:String(W)}`)}),await this.ensureHttpRouteForHandle(Z,X,J).catch((W)=>{console.warn(`[${E7}] HTTPRoute backfill failed for ${Z}: ${W instanceof Error?W.message:String(W)}`)});return{id:$,handle:Z,adoptedSandboxName:X,token:Q,workdir:pd1,daemonUrl:Y.daemonUrl,daemonForward:Y.daemonForward,workload:null,daemonBootId:Y.bootId,tenant:J,ensureOpts:null}}async openAndProbeDaemon($,Z){let G=await this.openForwarder($,zO,Z).catch(()=>null);if(!G)return null;let X=`http://127.0.0.1:${G.localPort}`,Q=await jH1(X);if(!Q)return this.closeForwarder(G),null;return{daemonForward:G,daemonUrl:X,bootId:Q.bootId}}async getRecord($){let Z=this.records.get($);if(Z)return Z;if(!this.stateStore)return null;let G=await this.stateStore.getByHandle(kX,$);if(!G)return null;let X=await this.rehydrate(G.id,$,G);if(X)this.records.set($,X);return X}async resurrectByHandle($){if(!this.stateStore)return null;let Z=await this.stateStore.getByHandle(kX,$);if(!Z)return null;let G=Z.state.ensureOpts;if(!G)return null;return await this.ensure(Z.id,G),this.records.get($)??null}invalidateRecord($){let Z=this.records.get($);if(!Z)return;this.records.delete($),this.closeForwarder(Z.daemonForward)}recordProxyDuration($,Z,G,X,Q){if(!this.metrics)return;this.metrics.proxyDurationMs.record(X,{...rd1(G?.tenant??null),source:$,sandbox_handle:G?.handle??Q??"",status_code:Z||0})}composePreviewUrl($){if(this.previewUrlPattern)return d61(this.previewUrlPattern,$.handle);return`http://127.0.0.1:${$.daemonForward.localPort}/`}toSandbox($){return{handle:$.handle,workdir:$.workdir,previewUrl:this.composePreviewUrl($)}}async persist($,Z){if(!$)return;let G={adoptedSandboxName:Z.adoptedSandboxName,token:Z.token,workdir:Z.workdir,workload:Z.workload,daemonBootId:Z.daemonBootId,tenant:Z.tenant,...Z.ensureOpts?{ensureOpts:Z.ensureOpts}:{}};await $.put(Z.id,kX,{handle:Z.handle,state:G})}computeShutdownTime(){return new Date(Date.now()+this.idleTtlMs).toISOString()}openForwarder($,Z,G=$){let X=X04(G,Z);return new Promise((Q,Y)=>{let J=(W,K)=>{let U=GX$.createServer((F)=>this.handleForwardedConnection(F,$,Z,G));U.once("error",(F)=>{if(F.code==="EADDRINUSE"&&K<e14){try{U.close()}catch{}let H=ad1+(W-ad1+1)%XX$;J(H,K+1);return}Y(F)}),U.listen(W,"127.0.0.1",()=>{let F=U.address();if(!F||typeof F==="string"){U.close(),Y(Error("port-forward listener failed to bind"));return}Q({server:U,localPort:F.port})})};J(X,0)})}handleForwardedConnection($,Z,G,X){let Q=new m14,Y=null,J=!1,W=()=>{if(J)return;if(J=!0,Q.destroy(),Y)try{Y.close()}catch{}if(!$.destroyed)$.destroy()};$.pipe(Q),$.on("error",W),$.on("close",W),this.portForward.portForward(this.namespace,Z,[G],$,null,Q).then((K)=>{let U=typeof K==="function"?K():K;if(!U){W();return}if(Y=U,Y.on("close",W),Y.on("error",()=>{this.invalidateRecord(X),W()}),J)try{Y.close()}catch{}}).catch((K)=>{console.warn(`[${E7}] port-forward to ${Z}:${G} failed: ${i14(K)}`),this.invalidateRecord(X),W()})}closeForwarder($){$.server.close((Z)=>{if(Z)console.warn(`[${E7}] port-forward close on :${$.localPort} errored: ${Z instanceof Error?Z.message:String(Z)}`)})}close(){if(this.closed)return;this.closed=!0,this.claimWatchAbort.abort();for(let $ of this.records.values())this.closeForwarder($.daemonForward);this.records.clear()}}function $04($){return{active:$.createUpDownCounter("studio.sandbox.active",{description:"Active sandbox count, by runner kind and owning org. Cross-checks the cAdvisor-derived count from the cluster \u2014 divergence between the two indicates orphaned claims (mesh deleted but K8s didn't reap) or unattributed pods.",unit:"{sandbox}"}),ensureOutcome:$.createCounter("studio.sandbox.ensure.outcome",{description:"Outcome of each ensure() call: fresh provision, resume from state-store after restart, or adopt of a cluster-side claim mesh didn't know about. Cold-start ratio is the primary input for warm-pool sizing.",unit:"{call}"}),proxyDurationMs:$.createHistogram("studio.sandbox.proxy.duration_ms",{description:"Wall-clock latency of mesh-mediated requests to the sandbox daemon: tool exec proxies (source=daemon) and preview iframe traffic (source=preview).",unit:"ms"})}}function Z04(){let $=new bf;return $.loadFromDefault(),$}function $X$($){return Boolean($.status?.conditions?.some((Z)=>Z.type==="Ready"&&Z.status==="True"))}function G04($){let Z=$.spec?.env;if(!Z)return null;for(let G of Z)if(G.name==="DAEMON_TOKEN"&&G.value)return G.value;return null}function X04($,Z){let G=c14("sha256").update(`${$}:${Z}`).digest();return ad1+G.readUInt32BE(0)%XX$}function td1($,Z){return new Response(JSON.stringify(Z),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function ZX$($){let Z=$.slice(0,Y04);return Q04.test(Z)?Z:""}function W04($){if($===void 0)return null;let Z=$.trim();if(Z==="")return null;if(!J04.test(Z))throw Error(`AgentSandboxProvider: envName=${JSON.stringify(Z)} is not a valid DNS-label-safe environment name (lowercase alphanumeric or '-', starts with a letter, ends alphanumeric, \u226432 chars). Mesh sets this from STUDIO_ENV; check the studio chart's configMap.`);return Z}function od1($,Z={}){let G={...Z};if($){let X=ZX$($.orgId),Q=ZX$($.userId);if(X)G[hY.orgId]=X;if(Q)G[hY.userId]=Q}return G}function SV($){let Z="";for(let G of $){let X=G.codePointAt(0)??0;Z+=X<32||X===127?" ":G}return Z.slice(0,K04)}function U04($){try{let Z=new URL($);return Z.username="",Z.password="",Z.toString()}catch{return""}}function F04($){let Z={},G=$.tenant;if(G?.orgSlug)Z[Y3.orgSlug]=SV(G.orgSlug);if(G?.orgName)Z[Y3.orgName]=SV(G.orgName);if(G?.userEmail)Z[Y3.userEmail]=SV(G.userEmail);if(G?.userName)Z[Y3.userName]=SV(G.userName);let X=$.repo;if(X){if(X.displayName)Z[Y3.gitRepo]=SV(X.displayName);let Q=U04(X.cloneUrl);if(Q)Z[Y3.gitRepoUrl]=SV(Q);let Y=$.branch??X.branch;if(Y)Z[Y3.gitBranch]=SV(Y)}return Z}function H04($){let Z=$.metadata?.labels;if(!Z)return null;let G=Z[hY.orgId],X=Z[hY.userId];if(!G||!X)return null;let Q=$.metadata?.annotations??{};return{orgId:G,userId:X,orgSlug:Q[Y3.orgSlug],orgName:Q[Y3.orgName],userEmail:Q[Y3.userEmail],userName:Q[Y3.userName]}}function rd1($){return{org_id:$?.orgId??"",user_id:$?.userId??"",runner_kind:kX}}function N04($){let Z={};if($.repo)Z.repo=$.repo;if($.workload)Z.workload=$.workload;if($.env&&Object.keys($.env).length>0)Z.env=$.env;if($.tenant)Z.tenant=$.tenant;return Object.keys(Z).length>0?Z:null}function O04($,Z){try{return new URL(d61($,Z)).hostname||null}catch{return null}}var kX="agent-sandbox",E7="AgentSandboxProvider",CV="x-sandbox-preview-not-ready",n14="agent-sandbox-system",p14="studio-sandbox",zO=9000,t14=3000,pd1="/app",o14=32,r14,a14=900000,s14,eG$,ad1=40000,XX$=1e4,e14=256,hY,Y3,Q04,Y04=63,J04,K04=253;var QX$=D(()=>{gd1();pG$();i61();EH1();Oi();sG$();r14=new Set(["DAEMON_TOKEN","DAEMON_BOOT_ID","APP_ROOT","PROXY_PORT"]),s14=["cookie","host","connection","keep-alive","proxy-authenticate","proxy-authorization","te","trailer","transfer-encoding","accept-encoding","content-length","upgrade"],eG$=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];hY={role:"studio.decocms.com/role",sandboxHandle:"studio.decocms.com/sandbox-handle",orgId:"studio.decocms.com/org-id",userId:"studio.decocms.com/user-id",env:"studio.decocms.com/env"},Y3={orgSlug:"studio.decocms.com/org-slug",orgName:"studio.decocms.com/org-name",userEmail:"studio.decocms.com/user-email",userName:"studio.decocms.com/user-name",gitRepo:"studio.decocms.com/git-repo",gitRepoUrl:"studio.decocms.com/git-repo-url",gitBranch:"studio.decocms.com/git-branch"},Q04=/^([A-Za-z0-9]([-A-Za-z0-9_.]*[A-Za-z0-9])?)?$/;J04=/^[a-z]([a-z0-9-]{0,30}[a-z0-9])?$/});var YX$={};n4(YX$,{waitForSandboxReady:()=>LH1,getSandboxClaim:()=>JF,getHttpRoute:()=>hG$,deleteSandboxClaim:()=>wO,deleteHttpRoute:()=>DH1,createSandboxClaim:()=>Di,applyHttpRoute:()=>BH1,SandboxTimeoutError:()=>kV,SandboxError:()=>o9,PREVIEW_NOT_READY_HEADER:()=>CV,KubeConfig:()=>bf,K8S_CONSTANTS:()=>C9,HTTPROUTE_CONSTANTS:()=>Li,AgentSandboxProvider:()=>sd1});var ed1=D(()=>{gd1();Oi();EH1();QX$()});class AH1{kind=jO;userSub;dispatch;stateStore;records=new Map;constructor($){if(!$.userSub)throw Error("DesktopSandboxProvider requires userSub");if(!$.dispatch)throw Error("DesktopSandboxProvider requires dispatch");this.userSub=$.userSub,this.dispatch=$.dispatch,this.stateStore=$.stateStore??null}async ensure($,Z={}){let G=Z.branch??Z.repo?.branch,X=YO($,G),Q=this.records.get(X);if(Q){if(await this.probeHealth(X))return this.toSandbox(Q);if(this.records.delete(X),this.stateStore)await this.stateStore.deleteByHandle(jO,X).catch(()=>{})}else if(this.stateStore){let N=(await this.stateStore.getByHandle(jO,X))?.state,O=N?.sandboxApiUrl;if(O){if(await this.probeHealth(X)){let B={handle:X,sandboxApiUrl:O,previewUrl:N?.previewUrl??O};return this.records.set(X,B),this.toSandbox(B)}await this.stateStore.deleteByHandle(jO,X).catch(()=>{})}}let Y=rU({userName:Z.tenant?.userName,userEmail:Z.tenant?.userEmail}),J=JSON.stringify({handle:X,repo:Z.repo,branch:G,...Z.workload?{workload:Z.workload}:{},...Y?{operator:Y}:{},...Z.offloadAllowedHosts?{offloadAllowedHosts:Z.offloadAllowedHosts}:{},...Z.offloadAllowSameHostDev!==void 0?{offloadAllowSameHostDev:Z.offloadAllowSameHostDev}:{},...Z.orgFsConfigJson?{orgFsConfigJson:Z.orgFsConfigJson}:{}}),W=await this.dispatchJson("POST","/api/sandboxes",J),K=JSON.parse(W);if(typeof K.sandboxApiUrl!=="string")throw Error("desktop ensure: daemon did not return a sandboxApiUrl string");let U=typeof K.previewUrl==="string"?K.previewUrl:K.sandboxApiUrl,F={handle:X,sandboxApiUrl:K.sandboxApiUrl,previewUrl:U};if(this.records.set(X,F),this.stateStore)await this.stateStore.put($,jO,{handle:X,state:{handle:X,sandboxApiUrl:K.sandboxApiUrl,previewUrl:U}});return this.toSandbox(F)}async proxyDaemonRequest($,Z,G){let X=Z.startsWith("/")?Z:`/${Z}`,Q=X.startsWith("/_sandbox/")?X.slice(9):X,Y=`/_sandbox/${encodeURIComponent($)}${Q}`,J=new Headers(G.headers);for(let z of["host","cookie","connection","keep-alive","transfer-encoding","upgrade","authorization"])J.delete(z);let W={};J.forEach((z,j)=>{W[j]=z});let K;if(G.body!=null)K=await D04(G.body);let F=this.dispatch(this.userSub,{method:G.method,path:Y,headers:W,body:K},{signal:G.signal})[Symbol.asyncIterator](),H=B04(),N=200,O={"content-type":"application/octet-stream"},B=[];try{while(!0){let z=await F.next();if(z.done)break;let j=z.value;if(j.headers){N=j.headers.status,O=j.headers.headers;break}if(j.data!=null){let P=H.push(j.data);if(P.length)B.push(P)}}}catch(z){let j=z instanceof Error?z.message:"dispatch error";return new Response(JSON.stringify({error:j}),{status:502,headers:{"content-type":"application/json"}})}let L=!1,w=new ReadableStream({async start(z){for(let j of B)z.enqueue(j)},async pull(z){try{while(!0){let j=await F.next();if(L)return;if(j.done){let R=H.flush();if(R.length)z.enqueue(R);z.close();return}let P=j.value;if(P.data!=null){let R=H.push(P.data);if(R.length){z.enqueue(R);return}}}}catch(j){if(!L)z.error(j)}},cancel(){L=!0,F.return?.()}});return new Response(w,{status:N,headers:O})}async alive($){return this.probeHealth($)}async probeHealth($){let Z=new AbortController,G=setTimeout(()=>Z.abort(),3000);try{return await this.dispatchJson("GET",`/api/sandboxes/${encodeURIComponent($)}`,void 0,Z.signal),!0}catch{return!1}finally{clearTimeout(G)}}async forgetHandle($){if(this.records.delete($),this.stateStore)await this.stateStore.deleteByHandle(jO,$).catch(()=>{})}async delete($){if(this.records.delete($),this.stateStore)await this.stateStore.deleteByHandle(jO,$).catch(()=>{});try{await this.dispatchJson("DELETE",`/api/sandboxes/${encodeURIComponent($)}`)}catch(Z){if(!(Z instanceof Error?Z.message:String(Z)).includes("404"))throw Z}}async getPreviewUrl($){return(await this.resolveRecord($))?.previewUrl??null}async localWorkdir($){return null}async*watchClaimLifecycle($,Z){yield{kind:"ready"}}toSandbox($){return{handle:$.handle,workdir:$.sandboxApiUrl,previewUrl:$.previewUrl}}async resolveRecord($){let Z=this.records.get($);if(Z)return Z;if(!this.stateStore)return null;let X=(await this.stateStore.getByHandle(jO,$))?.state,Q=X?.sandboxApiUrl;if(!Q)return null;let Y={handle:$,sandboxApiUrl:Q,previewUrl:X?.previewUrl??Q};return this.records.set($,Y),Y}async dispatchJson($,Z,G,X){let Q={accept:"application/json"};if(G!==void 0)Q["content-type"]="application/json";let Y=this.dispatch(this.userSub,{method:$,path:Z,headers:Q,body:G},{signal:X}),J=null,W="";for await(let U of Y)if(U.headers)J=U.headers.status;else if(U.data!=null)W+=U.data;let K=Buffer.from(W,"base64").toString("utf8");if(J!=null&&(J<200||J>=300))throw Error(`daemon returned ${J}: ${K}`);return K}}function JX$($){return new AH1($)}function B04(){let $="";return{push(Z){if(Z.length===0)return $m1;$+=Z;let G=$.length-$.length%4;if(G===0)return $m1;let X=$.slice(0,G);return $=$.slice(G),new Uint8Array(Buffer.from(X,"base64"))},flush(){if($.length===0)return $m1;let Z=$;return $="",new Uint8Array(Buffer.from(Z,"base64"))}}}async function D04($){if(typeof $==="string")return $;if($ instanceof ArrayBuffer)return Buffer.from($).toString("utf8");if(ArrayBuffer.isView($))return Buffer.from($.buffer,$.byteOffset,$.byteLength).toString("utf8");if($ instanceof URLSearchParams)return $.toString();return await new Response($).text()}var jO="user-desktop",$m1;var WX$=D(()=>{i61();m61();$m1=new Uint8Array(0)});var KX$={};n4(KX$,{createDesktopProvider:()=>JX$,DesktopSandboxProvider:()=>AH1});var UX$=D(()=>{WX$()});var DX$={};n4(DX$,{subscribeLifecycle:()=>zi,getSandboxProviderByKind:()=>Gm1,getOrInitSharedRunner:()=>R04,buildDesktopProvider:()=>RH1,__resetSharedLifecyclesForTesting:()=>k04});function OX$($,Z){let G=FX$[$];if(G)return Promise.resolve(G);let X=Zm1[$];if(X)return X;let Q=Z().then((Y)=>{return FX$[$]=Y,Y}).finally(()=>{delete Zm1[$]});return Zm1[$]=Q,Q}function w04(){let $=process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN;return $&&$.trim()!==""?$:void 0}function z04(){let $=process.env.STUDIO_SANDBOX_TEMPLATE_NAME;return $&&$.trim()!==""?$:void 0}function j04(){let $=process.env.STUDIO_ENV;return $&&$.trim()!==""?$:void 0}function P04(){let $=process.env.STUDIO_SANDBOX_SENTINEL_TOKEN;return $&&$.trim()!==""?$:void 0}function A04(){let $=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME?.trim(),Z=process.env.STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE?.trim();if(!$&&!Z)return;if(!$||!Z)throw Error("STUDIO_SANDBOX_PREVIEW_GATEWAY_NAME and STUDIO_SANDBOX_PREVIEW_GATEWAY_NAMESPACE must both be set, or both unset. Half-configured per-claim HTTPRoute routing would silently fail to attach.");return{name:$,namespace:Z}}async function BX$($,Z){let G=new WO(Z),X=w04();switch($){case"agent-sandbox":{let{AgentSandboxProvider:Q}=await Promise.resolve().then(() => (ed1(),YX$));return new Q({stateStore:G,previewUrlPattern:X,sandboxTemplateName:z04(),envName:j04(),previewGateway:A04(),sentinelToken:P04(),meter:i6})}case"user-desktop":throw Error("user-desktop provider cannot be instantiated without a per-run link claim \u2014 call resolveSandboxProvider, which binds the link before constructing the provider.");default:throw Error(`Unknown sandbox provider kind: ${String($)}`)}}async function RH1($,Z){let{DesktopSandboxProvider:G}=await Promise.resolve().then(() => (UX$(),KX$)),{getProxyDispatch:X}=await Promise.resolve().then(() => (Qm1(),Xm1)),Q=new WO($.db);if(!Z)throw Error("buildDesktopProvider: userSub must be a non-empty string");let Y=X();return new G({userSub:Z,dispatch:Y,stateStore:Q})}function Gm1($,Z){return OX$(Z,()=>BX$(Z,$.db))}async function R04(){let $;try{$=bW()}catch(G){return console.warn("[lifecycle] cannot resolve sandbox runner:",G instanceof Error?G.message:String(G)),null}return await OX$($,()=>BX$($,P6().db))}function zi($,Z,G){let X=PO.get(Z);if(X){if(X.terminated){if(X.lastPhase)try{G(X.lastPhase)}catch{}return{unsubscribe:q04}}if(X.listeners.add(G),X.lastPhase)try{G(X.lastPhase)}catch{}return HX$(Z,X,G)}let Q=new AbortController,Y={lastPhase:null,terminated:!1,listeners:new Set([G]),abort:Q};return PO.set(Z,Y),M04($,Z,Y),HX$(Z,Y,G)}function q04(){}function HX$($,Z,G){return{unsubscribe(){if(PO.get($)!==Z)return;if(Z.listeners.delete(G),Z.listeners.size===0)PO.delete($),Z.abort.abort()}}}async function M04($,Z,G){let X=null;try{for await(let Q of $.watchClaimLifecycle(Z,G.abort.signal)){if(G.abort.signal.aborted)break;G.lastPhase=Q;let Y=Q.kind==="ready"||Q.kind==="failed";if(Y)G.terminated=!0;let J=Array.from(G.listeners);for(let W of J)try{W(Q)}catch{}if(Y)break}}catch(Q){X=Q}finally{if(!G.terminated&&!G.abort.signal.aborted&&G.listeners.size>0){let Q={kind:"failed",reason:"unknown",message:X instanceof Error?X.message:"Lifecycle watcher ended unexpectedly"};G.lastPhase=Q,G.terminated=!0;for(let Y of Array.from(G.listeners))try{Y(Q)}catch{}}if(PO.get(Z)===G)PO.delete(Z)}}function k04(){for(let $ of PO.values())$.abort.abort();PO.clear()}var L04,E04,NX$,FX$,Zm1,I04,T04,PO;var ji=D(()=>{IQ();BJ();f9();a61();L04=Symbol.for("decocms.sandbox.lifecycle.runners"),E04=Symbol.for("decocms.sandbox.lifecycle.inflight"),NX$=globalThis,FX$=NX$[L04]??={},Zm1=NX$[E04]??={};I04=Symbol.for("decocms.sandbox.lifecycle.shared-lifecycles"),T04=globalThis,PO=T04[I04]??=new Map});async function IH1($,Z){if(await Z.linkClaimRegistry.get($))return"user-desktop";return Z.resolveEnvKind()}async function J3($,Z){let{userId:G,branch:X,virtualMcpMetadata:Q,explicitKind:Y}=Z;if(Y)return{provider:await Pi($,G,Y),kind:Y};if($.sandboxPreference==="agent-sandbox")return{provider:await Pi($,G,"agent-sandbox"),kind:"agent-sandbox"};if($.sandboxPreference==="user-desktop"&&$.linkForCurrentRun)return{provider:await RH1($,G),kind:"user-desktop"};if($.sandboxPreference==="cluster-default"){let F=bW();return{provider:await Pi($,G,F),kind:F}}let[J,...W]=V04(Q,G,X);if(J){let F=W.length===0?J:await S04($,G,J,W);return{provider:await Pi($,G,F),kind:F}}let K=await LX$($,G);return{provider:await Pi($,G,K),kind:K}}function V04($,Z,G){let X=TQ($)[Z]?.[G];if(!X)return[];let Q=hK(X);return Object.keys(Q)}async function S04($,Z,G,X){let Q=await LX$($,Z);if(Q===G||X.includes(Q))return Q;return G}async function LX$($,Z){if(!$.linkClaimRegistry)return bW();return IH1(Z,{linkClaimRegistry:$.linkClaimRegistry,resolveEnvKind:bW})}async function Pi($,Z,G){if(G!=="user-desktop")return Gm1($,G);if(!$.linkClaimRegistry)throw Error("user-desktop sandbox provider requires ctx.linkClaimRegistry to be wired (set on StudioContextConfig).");if(!await $.linkClaimRegistry.get(Z))throw Error(`No link daemon registered for user "${Z}". Start one with \`deco link\` (or run \`bun run dev --local-sandbox-provider\` for dev).`);return RH1($,Z)}var gf=D(()=>{V8();IQ();eU();ji()});async function TH1($,Z){if(!$)return{hosts:[],allowSameHostDev:!1};let G;try{G=await $.presignedGetUrl("link-dispatch/_allowlist_probe",60,{requireFetchable:!0})}catch{return{hosts:[],allowSameHostDev:!1}}let X;try{X=new URL(G)}catch{return{hosts:[],allowSameHostDev:!1}}if(X.protocol!=="https:"&&X.protocol!=="http:")return{hosts:[],allowSameHostDev:!1};let Q=X.hostname,Y=C04.has(Q);return{hosts:[Q],allowSameHostDev:Y&&!Z.isProduction}}var C04;var Ym1=D(()=>{C04=new Set(["127.0.0.1","localhost","::1","[::1]","0.0.0.0"])});function hf($){if(_04.has($)||!b04.test($))return"home";return $}var _04,b04;var qH1=D(()=>{_04=new Set(["output","upload","public","home"]),b04=/^[A-Za-z0-9][A-Za-z0-9._-]*$/});function y04($){return{baseUrl:$.baseUrl.replace(/\/+$/,""),orgSlug:$.orgSlug,token:$.token,mounts:[{volume:"home",path:hf($.orgSlug)},...x04.map((Z)=>({...Z})),...($.publicSets??[]).map((Z)=>({volume:Br(Z),path:`public/${Z}`,readonly:!0}))]}}async function MH1($,Z){try{let G=await $.boundAuth.apiKey.create({name:`orgfs-${Z.orgSlug}`,expiresIn:g04,metadata:{organization:{id:Z.orgId,slug:Z.orgSlug}}});return JSON.stringify(y04({baseUrl:Z.baseUrl,orgSlug:Z.orgSlug,token:G.key,publicSets:ZJ().map((X)=>X.set)}))}catch(G){console.warn("[org-fs] token mint failed; mounts disabled for this sandbox",G);return}}var v04=".outputs",f04=".uploads",x04,g04=604800;var Jm1=D(()=>{qH1();UC();x04=[{volume:"outputs",path:v04},{volume:"uploads",path:f04}]});import{z as hW}from"zod";async function EX$($,Z){P1(Z);let G=H1(Z),X=D$(Z);if(!X)throw Error("User ID required");let Q=await Z.storage.virtualMcps.findById($.virtualMcpId);if(!Q||Q.organization_id!==G.id)throw Error("Virtual MCP not found");let Y=Q.metadata??{},J=sU(TQ(Y),X,$.branch,$.sandboxProviderKind),W=$.sandboxProviderKind,{provider:K}=await J3(Z,{userId:X,branch:$.branch,virtualMcpMetadata:Y,explicitKind:W});if(J){if(W!=="user-desktop")return J;if(await K.alive(J.sandboxHandle).catch(()=>!1))return J;await JO(Z.storage.virtualMcps,$.virtualMcpId,X,X,$.branch,W).catch((N)=>{console.warn("[ensureSandbox] failed to reap stale user-desktop entry",N)})}let U=Y.githubRepo??null,{entry:F}=await wX$({ctx:Z,userId:X,orgId:G.id,virtualMcpId:$.virtualMcpId,branch:$.branch,metadata:Y,githubRepo:U,existing:null,providerKind:W,runner:K});return F}async function wX$($){let{ctx:Z,userId:G,orgId:X,virtualMcpId:Q,branch:Y,metadata:J,githubRepo:W,existing:K,runner:U}=$,{runtime:F,packageManager:H,port:N,packageManagerPath:O}=n61(J),B;if(W){if(W.connectionId)await Pf({ctx:Z,connectionId:W.connectionId,organizationId:X,onLegacyMintError:(Q1)=>{console.error("[provisionSandbox] repo-scoped legacy token mint failed",{connectionId:W.connectionId,error:Q1.message})}});let{cloneUrl:s,gitUserName:d,gitUserEmail:p}=W.connectionId?await Af(W.connectionId,W.owner,W.name,Z.db,Z.vault):t61(W.owner,W.name);if(!H){let Q1=W.connectionId?await s8$(W.connectionId,W.owner,W.name,Z.db,Z.vault):await e8$(W.owner,W.name);if(Q1)H=Q1.packageManager,F=nm[Q1.packageManager].runtime,N=Q1.devPort??N,await u04(Z,Q,G,Q1.packageManager,Q1.devPort)}B={cloneUrl:s,userName:d,userEmail:p,branch:Y,displayName:`${W.owner}/${W.name}`}}let L=F&&H?{runtime:F,packageManager:H,...N!==null?{devPort:Number(N)}:{},...O?{packageManagerPath:O}:{}}:void 0,w=aU({orgId:X,virtualMcpId:Q,branch:Y}),z=U.kind==="user-desktop"?await TH1(Z.objectStorage,{isProduction:I0().nodeEnv==="production"}):null,j=U.kind==="user-desktop"||U.kind==="agent-sandbox"&&I0().orgFsClusterMounts,P;if(j){let s=Z.organization?.slug??(await Z.db.selectFrom("organization").select(["slug"]).where("id","=",X).executeTakeFirst())?.slug;if(s)P=await MH1(Z,{orgSlug:s,orgId:X,baseUrl:I3()})}let R=await U.ensure({userId:G,projectRef:w},{branch:Y,repo:B,workload:L,tenant:{orgId:X,userId:G,...Z.organization?.slug?{orgSlug:Z.organization.slug}:{},...Z.organization?.name?{orgName:Z.organization.name}:{},...Z.auth.user?.email?{userEmail:Z.auth.user.email}:{},...Z.auth.user?.name?{userName:Z.auth.user.name}:{}},...z?{offloadAllowedHosts:z.hosts,offloadAllowSameHostDev:z.allowSameHostDev}:{},...P?{orgFsConfigJson:P}:{}}),A=J.runtime?.env??null;await p61({ctx:Z,runner:U,handle:R.handle,orgId:X,userId:G,entries:A});let S=!!K&&K.sandboxHandle===R.handle&&K?.createdAt?K.createdAt:Date.now(),k=J.runtime?.selected??null,C=J.runtime?.port??null,u=J.runtime?.path??null,x={sandboxHandle:R.handle,previewUrl:R.previewUrl,sandboxApiUrl:R.previewUrl,sandboxProviderKind:U.kind,createdAt:S,startedWith:{packageManager:k,port:C,path:u}};await p8$(Z.storage.virtualMcps,Q,G,G,Y,$.providerKind,x);let y=!K||K.sandboxHandle!==R.handle;return{entry:x,isNewVm:y}}async function u04($,Z,G,X,Q){let Y=await $.storage.virtualMcps.findById(Z);if(!Y)return;let J=Y.metadata??{};await $.storage.virtualMcps.update(Z,G,{metadata:{...J,runtime:{selected:X,port:Q}}})}var h04,Wm1;var Km1=D(()=>{IQ();p1();pm();ic1();eU();o61();Z4$();sg1();mc1();gf();Ym1();D4();lX();Jm1();eU();h04=hW.enum(["agent-sandbox","user-desktop","cluster"]),Wm1=Z1({name:"SANDBOX_START",description:"Start a sandbox with the connected GitHub repo and dev server.",annotations:{title:"Start VM Preview",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:hW.object({virtualMcpId:hW.string().describe("Virtual MCP ID"),branch:hW.string().min(1).optional().describe("Optional git branch to check out. When omitted the handler generates a Bayer-style `<greek-letter>-<constellation>` name (e.g. `alpha-centauri`) and uses it. The resolved branch is returned in the response so callers can persist it."),sandboxProviderKind:h04.optional().describe("Explicit runtime choice. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. When omitted, defaults to `user-desktop` if the acting user's link daemon is online, else the env kind.")}),outputSchema:hW.object({previewUrl:hW.string().nullable(),sandboxHandle:hW.string(),branch:hW.string(),isNewVm:hW.boolean(),sandboxProviderKind:hW.enum(["agent-sandbox","user-desktop"])}),handler:async($,Z)=>{P1(Z);let G=H1(Z);await Z.access.check();let X=$.branch??k41(),Q=D$(Z);if(!Q)throw Error("User ID required");let Y=await Z.storage.virtualMcps.findById($.virtualMcpId);if(!Y||Y.organization_id!==G.id)throw Error("Virtual MCP not found");let J=Y.metadata??{},W=$.sandboxProviderKind?oU($.sandboxProviderKind):void 0,{provider:K,kind:U}=await J3(Z,{userId:Q,branch:X,virtualMcpMetadata:J,explicitKind:W}),F=sU(TQ(J),Q,X,U),H=J.githubRepo??null,{entry:N,isNewVm:O}=await wX$({ctx:Z,userId:Q,orgId:G.id,virtualMcpId:$.virtualMcpId,branch:X,metadata:J,githubRepo:H,existing:F,providerKind:U,runner:K});return{...N,branch:X,isNewVm:O,sandboxProviderKind:U}}})});import{z as uf}from"zod";var c04,Um1;var zX$=D(()=>{IQ();p1();pm();eU();gf();c04=uf.enum(["agent-sandbox","user-desktop","cluster"]),Um1=Z1({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:uf.object({virtualMcpId:uf.string().describe("Virtual MCP ID that owns this VM"),branch:uf.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),sandboxProviderKind:c04.describe("Kind of sandbox provider the VM was started with. Hosted provider is `agent-sandbox`; legacy `cluster` input is accepted only for compatibility and normalized to `agent-sandbox`. Used to locate the correct 3-level sandboxMap entry.")}),outputSchema:uf.object({success:uf.boolean()}),handler:async($,Z)=>{let G=oU($.sandboxProviderKind),X;try{X=await o8$({...$,sandboxProviderKind:G},Z)}catch(W){if(W instanceof Error&&W.message==="Virtual MCP not found")return{success:!0};throw W}let{entry:Q,userId:Y}=X;if(!Q)return{success:!0};let{provider:J}=await J3(Z,{userId:Y,branch:$.branch,virtualMcpMetadata:X.metadata,explicitKind:G});return await JO(Z.storage.virtualMcps,$.virtualMcpId,Y,Y,$.branch,G),await J.delete(Q.sandboxHandle).catch((W)=>console.error(`[SANDBOX_DELETE] ${G} ${Q.sandboxHandle}: ${W instanceof Error?W.message:String(W)}`)),{success:!0}}})});var jX$=D(()=>{Km1();zX$()});import{z as uW}from"zod";var d04="https://api.github.com",Fm1;var PX$=D(()=>{p1();_L();hv();zW();Fm1=Z1({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:uW.object({connectionId:uW.string().describe("ID of the mcp-github connection to use")}),outputSchema:uW.object({installations:uW.array(uW.object({installationId:uW.number(),login:uW.string(),avatarUrl:uW.string(),type:uW.string()})),appSlug:uW.string().optional()}),handler:async($,Z)=>{await Z.access.check();let G=Z.organization?.id;if(!G)throw Error("Organization context required");let X=await Z.storage.connections.findById($.connectionId,G);if(!X)throw Error("Connection not found");if(jW(X))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Q=new k9(Z.db,Z.vault),Y=await Q.get($.connectionId);if(!Y)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let J=Y.accessToken;if(B41(Y)&&Q.isExpired(Y,sd)){let N=await D41(Y,Q);if(!N)throw Error(p7);J=N,Y=await Q.get($.connectionId)??Y}let W=[],K,U=1,F=100,H=async(N)=>fetch(`${d04}/user/installations?per_page=${F}&page=${U}`,{headers:{Authorization:`Bearer ${N}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"}});while(!0){let N=await H(J);if(N.status===401){let B=await Q.get($.connectionId);if(!B||!B41(B))throw Error(p7);let L=await D41(B,Q);if(!L)throw Error(p7);if(J=L,N=await H(J),N.status===401)throw Error(p7)}if(!N.ok)throw Error(`GitHub /user/installations failed: ${N.status}`);let O=await N.json();for(let B of O.installations){if(!K)K=B.app_slug??B.app?.slug;W.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type})}if(O.installations.length<F)break;U++}return{installations:W,...K?{appSlug:K}:{}}}})});var AX$=D(()=>{PX$()});import{z as T0}from"zod";var Hm1,RX$,IX$,i04,Ai,n04,Ri,p04,t04,o04,_s5;var kH1=D(()=>{Hm1=T0.enum(["claude-code","codex","decopilot-sandbox","body-offload"]),RX$=T0.array(T0.string()).catch([]).transform(($)=>$.filter((Z)=>Hm1.safeParse(Z).success)),IX$=T0.discriminatedUnion("type",[T0.object({type:T0.literal("ui-message-chunk"),chunk:T0.unknown()}),T0.object({type:T0.literal("error"),code:T0.string(),message:T0.string()}),T0.object({type:T0.literal("done")})]),i04=T0.record(T0.string(),T0.unknown()),Ai=T0.object({id:T0.string(),title:T0.string().optional(),provider:T0.string().nullable().optional(),credentialId:T0.string(),limits:T0.object({contextWindow:T0.number().int().positive().optional(),maxOutputTokens:T0.number().int().positive().optional()}).optional(),capabilities:T0.object({vision:T0.boolean().optional(),text:T0.boolean().optional(),reasoning:T0.boolean().optional()}).optional()}).strict(),n04=T0.object({thinking:Ai.extend({title:T0.string()}),fast:Ai.optional(),smart:Ai.optional(),image:Ai.optional(),deepResearch:Ai.optional()}).strict(),Ri=T0.object({kind:T0.literal("secret"),providerId:T0.string(),apiKey:T0.string(),modelId:T0.string(),baseUrl:T0.string().optional(),extraHeaders:T0.record(T0.string(),T0.string()).optional()}),p04=T0.object({thinking:Ri,fast:Ri.optional(),smart:Ri.optional(),image:Ri.optional(),deepResearch:Ri.optional()}).strict(),t04=T0.object({kind:T0.literal("http"),url:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}),o04=T0.object({kind:T0.literal("http"),baseUrl:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}),_s5=T0.object({harnessId:T0.enum(["decopilot","claude-code","codex"]).optional(),threadId:T0.string(),runId:T0.string(),taskId:T0.string(),resumeSessionRef:T0.string().optional(),messages:T0.array(i04),workspace:T0.object({cwd:T0.string().min(1)}).strict(),models:n04,modelSources:p04.optional(),mcpSource:t04.optional(),objectStorageSource:o04.optional(),mcp:T0.object({url:T0.string().url(),headers:T0.record(T0.string(),T0.string()),expiresAt:T0.number().int().positive()}).strict(),mode:T0.enum(["default","plan","web-search","gen-image"]),temperature:T0.number(),toolApprovalLevel:T0.enum(["auto","readonly"]),toolAllowlist:T0.array(T0.string()).nullable().optional(),maxAgentSteps:T0.number().int().optional(),user:T0.object({id:T0.string(),email:T0.string()}),organizationId:T0.string(),organizationSlug:T0.string().optional(),virtualMcp:T0.record(T0.string(),T0.unknown()),agent:T0.object({id:T0.string()}),branch:T0.string().nullable().optional(),triggerId:T0.string().optional(),currentThreadTitle:T0.string().optional(),traceparent:T0.string().optional(),runFenceToken:T0.string().optional()}).strip()});import{z as TX$}from"zod";var qX$;var Nm1=D(()=>{kH1();qX$=TX$.object({seq:TX$.number().int().positive(),event:IX$})});function VX$($){return $>=2}var MX$=2,kX$="x-link-protocol";var SX$=()=>{};var CX$=D(()=>{SX$();Nm1();kH1()});var _X$=D(()=>{CX$()});import _V from"zod";var Om1;var bX$=D(()=>{_X$();p1();Om1=Z1({name:"LINK_CURRENT_GET",description:"Return the calling user's currently registered desktop link, or `online: false` if no link is registered or the TTL has expired.",inputSchema:_V.object({}),outputSchema:_V.object({online:_V.boolean(),machineId:_V.string().optional(),hostname:_V.string().optional(),cliVersion:_V.string().optional(),capabilities:_V.array(Hm1).default([])}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.linkClaimRegistry;if(!G)return{online:!1,capabilities:[]};let X=await G.get(Z.auth.user.id);if(!X)return{online:!1,capabilities:[]};return{online:!0,machineId:X.machineId,hostname:X.hostname,cliVersion:X.cliVersion,capabilities:X.capabilities}}})});import Bm1 from"zod";var Dm1;var vX$=D(()=>{p1();Dm1=Z1({name:"LINK_DISCONNECT",description:"Disconnect the calling user's desktop link from the Studio side: tells the linked daemon to shut down (via a `shutdown` control frame) and removes the presence claim. The user re-links by running `bunx decocms link` on the desktop.",inputSchema:Bm1.object({}),outputSchema:Bm1.object({disconnected:Bm1.boolean()}),handler:async($,Z)=>{P1(Z),await Z.access.check();let G=Z.auth.user.id,X=Z.linkClaimRegistry;if(!(X?await X.get(G):null))return{disconnected:!1};return Z.publishLinkControlFrame?.(G,{type:"shutdown"}),await X.delete(G),{disconnected:!0}}})});var fX$=D(()=>{bX$();vX$()});import{z as r9}from"zod";function xX$($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}var s04,e04,$$4,Z$4,G$4,Lm1;var yX$=D(()=>{p1();s04=["thread"],e04=r9.object({type:r9.literal("thread"),id:r9.string(),title:r9.string(),created_at:r9.string(),updated_at:r9.string(),virtual_mcp_id:r9.string().nullable(),run_config:r9.record(r9.string(),r9.unknown()).nullable(),status:r9.string().nullable()}),$$4=r9.discriminatedUnion("type",[e04]),Z$4=r9.object({query:r9.string().min(1).describe("Free-text search query."),limit:r9.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:r9.array(r9.enum(s04)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),G$4=r9.object({items:r9.array($$4),totalCount:r9.number()});Lm1=Z1({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Z$4,outputSchema:G$4,handler:async($,Z)=>{await Z.access.check(),H1(Z);let G=$.limit??20,X=$.types?.length?new Set($.types):null,Q=!X||X.has("thread"),Y=[],J=0;if(Q){let{threads:W,total:K}=await Z.storage.threads.list(void 0,{limit:G,offset:0,search:$.query,includeArchived:!1});J+=K;for(let U of W)Y.push({type:"thread",id:U.id,title:U.title??"",created_at:xX$(U.created_at),updated_at:xX$(U.updated_at),virtual_mcp_id:U.virtual_mcp_id??null,run_config:U.run_config??null,status:U.status??null})}return{items:Y,totalCount:J}}})});var gX$=D(()=>{yX$()});var j41={};n4(j41,{managementMCP:()=>$f,managementContextStore:()=>uL,listManagementTools:()=>J$4,ALL_TOOLS:()=>uX$});import{z as hX$}from"zod";async function J$4($){let Z=await $f($),[G,X]=ku.createLinkedPair();await Z.connect(X);let Q=new Y9({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:b5});try{return await Q.connect(G),(await Q.listTools()).tools}finally{await Q.close().catch(()=>{}),await Z.close().catch(()=>{})}}var Q$4,Y$4,uX$,$f=async($)=>{let Z=null;if($.organization){let J=await $.storage.organizationSettings.get($.organization.id),W=await $.storage.virtualMcps.listEnabledPlugins($.organization.id),K=new Set(J?.enabled_plugins??[]);for(let U of W)K.add(U);Z=K.size>0?[...K]:null}let G=BC0(uX$,Z),X=new uK({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:b5});for(let J of G){let{config:W,handler:K}=qa0(J);X.registerTool(J.name,W,K)}let Q=J61();for(let J of Q){let W=J.arguments?.length?Object.fromEntries(J.arguments.map((K)=>{let U=K.required?hX$.string():hX$.string().optional();return[K.name,K.description?U.describe(K.description):U]})):void 0;X.registerPrompt(J.name,{title:J.title,description:J.description,...W?{argsSchema:W}:{}},(K)=>{return{messages:[{role:"user",content:{type:"text",text:typeof J.text==="function"?J.text(K??{}):J.text}}]}})}if($.organization?.id){let J=await $.storage.brandContext.list($.organization.id),W=new Set;for(let K of J){let U=K.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),F=U?`brand-${U}`:`brand-${K.id}`;if(W.has(F))F=`${F}-${K.id.slice(0,8)}`;W.add(F);let H=[`# Brand: ${K.name}`,"",`**Domain:** ${K.domain}`,"","## Overview",K.overview];if(K.colors){let O=Object.entries(K.colors).filter(([,B])=>B);if(O.length>0){H.push("","## Colors");for(let[B,L]of O)H.push(`- **${B}:** ${L}`)}}if(K.fonts){let O=Object.entries(K.fonts).filter(([,B])=>B);if(O.length>0){H.push("","## Fonts");for(let[B,L]of O)H.push(`- ${L} (${B})`)}}if(K.logo)H.push("",`**Logo:** ${K.logo}`);if(K.favicon)H.push(`**Favicon:** ${K.favicon}`);if(K.ogImage)H.push(`**OG Image:** ${K.ogImage}`);if(K.images&&K.images.length>0){H.push("","## Images");for(let O of K.images){let B=Object.entries(O).map(([L,w])=>`${L}: ${w}`).join(", ");H.push(`- ${B}`)}}let N=H.join(`
|
|
2211
2211
|
`);X.prompt(F,`Brand context for ${K.name}`,()=>({messages:[{role:"user",content:{type:"text",text:N}}]}))}}let Y=Ia0();for(let J of Y)X.resource(J.name,J.uri,{description:J.description,mimeType:J.mimeType??"text/markdown"},async(W)=>{return{contents:[{uri:typeof W==="string"?W:W.href,mimeType:J.mimeType??"text/markdown",text:J.text}]}});return X};var iv=D(()=>{P11();HJ();Qh();DG();vC0();Ht0();Dt0();Tt0();gt0();dt0();Ho0();Eo0();bo0();Lr0();wr0();cr0();mr0();er0();Za0();Nu1();Ou1();Ou1();aa0();l8$();jX$();AX$();fX$();gX$();Q$4=[Rg1,Ig1,Tg1,qg1,Mg1,kg1,Vg1,Sg1,Cg1,_g1,bg1,vg1,xg1,yg1,gg1,hg1,ug1,cg1,lg1,dg1,mg1,ig1,ng1,f_1,ny1,py1,oy1,ry1,ay1,Jg1,Kg1,Fg1,Ng1,Bg1,Bt0,zg1,jg1,Pg1,Ag1,iS1,pS1,tS1,nS1,sy1,ey1,$g1,Zg1,Gg1,Xg1,Qg1,gh1,eg1,$h1,Zh1,Xh1,Qh1,Yh1,pg1,tg1,og1,rg1,ag1,Jh1,Wh1,Kh1,Ch1,_h1,bh1,vh1,fh1,xh1,yh1,Dg1,Lg1,Eg1,wg1,hh1,lh1,dh1,mh1,ih1,nh1,ph1,th1,oh1,rh1,ah1,sh1,eh1,Zu1,Gu1,Xu1,Yu1,Ju1,Wu1,Hu1,$a0,Bu1,Du1,Lu1,Eu1,wu1,zu1,...c8$,Wm1,Um1,Fm1,Om1,Dm1,Lm1],Y$4=DC0(),uX$=[...Q$4,...Y$4]});import{z as cX$}from"zod";function W$4($){return[{permissions:{self:["*"]},getTools:async()=>{let{ALL_TOOLS:Z}=await Promise.resolve().then(() => (iv(),j41));return Z.map((G)=>{return{name:G.name,inputSchema:cX$.toJSONSchema(G.inputSchema,{unrepresentable:"any"}),outputSchema:G.outputSchema?cX$.toJSONSchema(G.outputSchema,{unrepresentable:"any"}):void 0,description:G.description}})},data:Nq1(V7(),$)},{data:Hq1()},{data:Fq1($)}]}async function lX$($,Z){try{let G=P6(),X=I0(),Q=new rB(X.encryptionKey),Y=new yh(G.db,Q),J=W$4($);await Promise.all(J.map(async(W)=>{let K=null;if(W.permissions)K=(await u6.api.createApiKey({body:{name:`${W.data.app_name??crypto.randomUUID()}-mcp`,userId:Z,permissions:W.permissions,rateLimitEnabled:!1,metadata:{organization:{id:$},purpose:"default-org-connections"}}}))?.key;let U=await VH({id:"pending",title:W.data.title,connection_type:W.data.connection_type,connection_url:W.data.connection_url,connection_token:W.data.connection_token??K,connection_headers:W.data.connection_headers}).catch(()=>null),F=await W.getTools?.()??U?.tools??null,H=U?.scopes?.length?U.scopes:null,N=W.data.id?W.data.id.startsWith(`${$}_`)?W.data.id:`${$}_${W.data.id}`:void 0;await Y.create({...W.data,id:N,tools:F,configuration_scopes:H,organization_id:$,created_by:Z,connection_token:W.data.connection_token??K})}));try{await uk1({orgId:$,createdBy:Z})}catch(W){console.error("Failed to enqueue studio pack install:",W)}if(X.aiGatewayEnabled&&X.studioProvisionSecretKey&&vh.provisionKey)try{let W=await SH(Z),K=await vh.provisionKey(W,$);await new xh(G.db,Q).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:K,organizationId:$,createdBy:Z})}catch(W){console.error("Failed to auto-provision Deco AI Gateway key:",W)}}catch(G){console.error("Error creating default MCP connections:",G)}}var dX$=D(()=>{V8();Wk1();lX();BJ();Je();Fk1();Dk1();mh();D4();uU();Ee();ZD()});async function mX$($,Z){let G=uX();if(!G)return Z;let X=await P6().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst();if(!X?.slug)return Z;return await F41({objectStorage:$J(G,$),baseUrl:V7(),orgSlug:X.slug,prefix:"org-logos"})(Z)??Z}var iX$=D(()=>{BJ();zB();My1();lX()});function K$4($,Z){let G=$.email.split("@")[1]?.toLowerCase()??null;return{distinctId:$.id,properties:{$set:{email:$.email,name:$.name,email_verified:$.emailVerified},$set_once:{first_seen_at:Z.toISOString(),signup_email_domain:G}}}}function Em1($){w$.identify(K$4($,new Date))}var nX$=D(()=>{N5()});import{decodeJwt as U$4}from"jose";import{sql as Ii}from"kysely";async function N$4($){let{user:Z,token:G}=$;if(!G?.idToken)return;let X;try{X=U$4(G.idToken)}catch{return}let{preferred_username:Q,upn:Y}=X,J=[Q,Y].filter((U)=>typeof U==="string"&&U.length>0&&U.toLowerCase()!==Z.email.toLowerCase()).map((U)=>U.toLowerCase());if(J.length===0)return;let{db:W}=P6(),K=await W.selectFrom("user").selectAll().where("email","in",J).where("id","!=",Z.id).executeTakeFirst();if(!K)return;try{await W.transaction().execute(async(U)=>{await Ii`UPDATE "account" SET "userId" = ${K.id} WHERE "userId" = ${Z.id}`.execute(U),await Ii`UPDATE "session" SET "userId" = ${K.id} WHERE "userId" = ${Z.id}`.execute(U),await Ii`
|
|
2212
2212
|
UPDATE "member" SET "userId" = ${K.id}
|
|
2213
2213
|
WHERE "userId" = ${Z.id}
|