decocms 4.186.5 → 4.187.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-BuFhkPjW.js → AlertCircle-KczI-CU4.js} +1 -1
- package/dist/client/assets/{AreaChart-tMFvaLFr.js → AreaChart-C4ImOsI6.js} +1 -1
- package/dist/client/assets/{ArrowUp-Dpr3PXpY.js → ArrowUp-Puvp0Fyx.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-FeXz1-eP.js → ArrowUpRight-BGg5iVdX.js} +1 -1
- package/dist/client/assets/{Check-C6iuqeCa.js → Check-Dhoc1Lst.js} +1 -1
- package/dist/client/assets/{CheckCircle-DuosICoI.js → CheckCircle-BPyDMGsL.js} +1 -1
- package/dist/client/assets/{ChevronDown-BtmIMCYI.js → ChevronDown-BoW3EdNl.js} +1 -1
- package/dist/client/assets/{ChevronRight-CcIYds1f.js → ChevronRight-DGgdWB7Q.js} +1 -1
- package/dist/client/assets/{ChevronUp-DnpGaTD4.js → ChevronUp-BfmqQ3El.js} +1 -1
- package/dist/client/assets/{Copy01-BjkMuSop.js → Copy01-DN3Xx-wy.js} +1 -1
- package/dist/client/assets/{CpuChip01-uVRH_vMc.js → CpuChip01-DvL6lI_3.js} +1 -1
- package/dist/client/assets/{CreditCard01-Ahegjt4i.js → CreditCard01-DQRUYITg.js} +1 -1
- package/dist/client/assets/{DotsVertical-B7ApCE-s.js → DotsVertical-HU79lr3G.js} +1 -1
- package/dist/client/assets/{Eye-CPDJnitO.js → Eye-C1OktLHw.js} +1 -1
- package/dist/client/assets/{FilterLines-DBLrLgPK.js → FilterLines-H7D9AZ8F.js} +1 -1
- package/dist/client/assets/{HardDrive-C6c9YnSs.js → HardDrive-C0Knj6z9.js} +1 -1
- package/dist/client/assets/{Key01-BJh_78xX.js → Key01-BHEq37J4.js} +1 -1
- package/dist/client/assets/{LayoutLeft-wyHeLWHb.js → LayoutLeft-BxmLtT9f.js} +1 -1
- package/dist/client/assets/{LinkExternal01-JrFW6Ggm.js → LinkExternal01-B1d60lbc.js} +1 -1
- package/dist/client/assets/{LogOut01-Def2dNtm.js → LogOut01-CwtBK3JF.js} +1 -1
- package/dist/client/assets/{Monitor01-w93oMMcR.js → Monitor01-DncSaKSN.js} +1 -1
- package/dist/client/assets/{Palette-CsifyrT9.js → Palette-CQsRGpaJ.js} +1 -1
- package/dist/client/assets/{Play-CmSYy_2H.js → Play-J2iKbkbr.js} +1 -1
- package/dist/client/assets/{Plus-CSPGnFOt.js → Plus-CuYtRh7P.js} +1 -1
- package/dist/client/assets/{SearchLg-D_wLtN2p.js → SearchLg-Br4HAS98.js} +1 -1
- package/dist/client/assets/{SearchMd-CSAYncOn.js → SearchMd-JvnPD3Ga.js} +1 -1
- package/dist/client/assets/{Settings02-CQDOSDIF.js → Settings02-DsuQo4S_.js} +1 -1
- package/dist/client/assets/{Shield01-BTrectWG.js → Shield01-DBvxzZEA.js} +1 -1
- package/dist/client/assets/{Star01-BpInO3Uq.js → Star01-B-eMI8Lc.js} +1 -1
- package/dist/client/assets/{Stars01-CnSLagZ6.js → Stars01-mJZ-hwii.js} +1 -1
- package/dist/client/assets/{Stars02-BkL3zwzc.js → Stars02-BmWwNPd7.js} +1 -1
- package/dist/client/assets/{Sun-oIKRaOud.js → Sun-DJy2ivtu.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-s9lH1DvI.js → SwitchHorizontal01-CB5Nt5i8.js} +1 -1
- package/dist/client/assets/{Tool01-Bzz7SFWe.js → Tool01-B5aWRWj3.js} +1 -1
- package/dist/client/assets/{Tool02-CQLEP5o6.js → Tool02-CUm7J-Ue.js} +1 -1
- package/dist/client/assets/{Trash01-Cl7U4IYc.js → Trash01-CNDXobjp.js} +1 -1
- package/dist/client/assets/{TrendUp01-Dgn1PFSH.js → TrendUp01-HTmwnH_3.js} +1 -1
- package/dist/client/assets/{Upload01-D7GECqHa.js → Upload01-B4oDU3__.js} +1 -1
- package/dist/client/assets/{User01-BrigYrAY.js → User01-XsUwJd-X.js} +1 -1
- package/dist/client/assets/{Users01-DzT0HFvI.js → Users01-BXDwCXK6.js} +1 -1
- package/dist/client/assets/{Users03-32StMAPG.js → Users03-DXCC9KhQ.js} +1 -1
- package/dist/client/assets/{X-vPeL8IIS.js → X-cU0vVjLw.js} +1 -1
- package/dist/client/assets/{XCircle-B3oJTK9U.js → XCircle-B9gHR2aV.js} +1 -1
- package/dist/client/assets/{XClose-CiIGMqbS.js → XClose-6fobFlqM.js} +1 -1
- package/dist/client/assets/{Zap-DJ4iAYGa.js → Zap-COITZTlR.js} +1 -1
- package/dist/client/assets/{ZapSquare-BJq8V5cG.js → ZapSquare-CaEeWyIO.js} +1 -1
- package/dist/client/assets/{access-gate-CYSG0IpG.js → access-gate-CoWZhdrL.js} +1 -1
- package/dist/client/assets/{add-section-modal-B5xvoilM.js → add-section-modal-Cbl7pBe8.js} +1 -1
- package/dist/client/assets/{agent-icon-B95O9Ir1.js → agent-icon-DnItcGJs.js} +1 -1
- package/dist/client/assets/{agents-list-C9f3BVn7.js → agents-list-CWm2OycI.js} +1 -1
- package/dist/client/assets/{ai-providers-B7uF3OlP.js → ai-providers-D5jx0aLC.js} +1 -1
- package/dist/client/assets/{alert-B70qVWPO.js → alert-BScEkD8H.js} +1 -1
- package/dist/client/assets/{alert-dialog-DEj93rlA.js → alert-dialog-RSQVVBER.js} +1 -1
- package/dist/client/assets/{app-editor-DuTEELkb.js → app-editor-BYmAqLDP.js} +1 -1
- package/dist/client/assets/{auth-Bg3bBhoI.js → auth-BzVU6bWh.js} +1 -1
- package/dist/client/assets/{auth-catchall-C7TysTHe.js → auth-catchall-5V-1LOXR.js} +1 -1
- package/dist/client/assets/{auth-entry-BEvJmEOH.js → auth-entry-Bz5e_tiR.js} +1 -1
- package/dist/client/assets/{auth-split-layout-BbFwLnbm.js → auth-split-layout-BVnzrUGM.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DqUiAM2d.js → authenticate-and-persist-oauth-W0vuFUDB.js} +1 -1
- package/dist/client/assets/{automation-list-row-bEMzh1zT.js → automation-list-row-BzBNPnzg.js} +1 -1
- package/dist/client/assets/{automation-runs-COn5vRuH.js → automation-runs-Bt-sFQEz.js} +1 -1
- package/dist/client/assets/{automations-BX2fbLKF.js → automations-B2OXxe1v.js} +1 -1
- package/dist/client/assets/{avatar-Ba-aHNYy.js → avatar-waBkYHG8.js} +1 -1
- package/dist/client/assets/{badge-By-VPeoP.js → badge-YEHrGACs.js} +1 -1
- package/dist/client/assets/{billing-Cbv1vlDc.js → billing-BSTcjZ1M.js} +1 -1
- package/dist/client/assets/{block-document-YlojyN00.js → block-document-D23Idkxj.js} +1 -1
- package/dist/client/assets/{brand-context-Dv9R-Bi1.js → brand-context-DdcHpmZP.js} +1 -1
- package/dist/client/assets/{buckets-D57-Mou7.js → buckets-BMWXl5oe.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-BevMtFk_.js → bulk-category-panel-C0Agxw_q.js} +1 -1
- package/dist/client/assets/{capability-load-error-DbOflvHY.js → capability-load-error-B-zvIo7q.js} +1 -1
- package/dist/client/assets/{card-BBd491uR.js → card-BvBEehJ6.js} +1 -1
- package/dist/client/assets/{category-editor-Yd32ktdG.js → category-editor-viXCncrv.js} +1 -1
- package/dist/client/assets/{chat-context-DVN6zs4v.js → chat-context-DDsV016d.js} +1 -1
- package/dist/client/assets/{checkbox-DoYYVNec.js → checkbox-CQCyGXT2.js} +1 -1
- package/dist/client/assets/{cli-auth-success-BeztJoKu.js → cli-auth-success-D8_zO846.js} +1 -1
- package/dist/client/assets/{collection-detail-Ct420ZT1.js → collection-detail-D3VwUbf3.js} +1 -1
- package/dist/client/assets/{collection-display-button-CBfmCJ_f.js → collection-display-button-CJFg2Aqc.js} +1 -1
- package/dist/client/assets/{collection-search-uro-w3iN.js → collection-search-CwoLRrr3.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-j1DUM_ko.js → collection-table-wrapper-CsRkZtVU.js} +1 -1
- package/dist/client/assets/{collection-tabs-CIf_8Jg2.js → collection-tabs-CkHDL7pi.js} +1 -1
- package/dist/client/assets/{command-vYhFgIXK.js → command-B6Ulnz09.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CQHK945A.js → commerce-onboarding-CqSTLoOZ.js} +1 -1
- package/dist/client/assets/{connect-CuLTTHgZ.js → connect-CR_-tWtu.js} +1 -1
- package/dist/client/assets/{connection-Bm78imAu.js → connection-BPSOj8bM.js} +1 -1
- package/dist/client/assets/{connection-card-DUAn27aB.js → connection-card-D7Gw_vYN.js} +1 -1
- package/dist/client/assets/{connection-detail-BqjheNhd.js → connection-detail-CfqiqVqL.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-9z0Ee9Ax.js → connection-form-helpers-DMlzOJDg.js} +1 -1
- package/dist/client/assets/{connections-H7bvKWLi.js → connections-vO2xAA-X.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-Dsho1jui.js → decopilot-sse-pool-BkM0-8we.js} +1 -1
- package/dist/client/assets/{dialog-CWRSEMxh.js → dialog-Bra3MyFJ.js} +1 -1
- package/dist/client/assets/{domain-settings-DSpyQKeq.js → domain-settings-BXDi19Mz.js} +1 -1
- package/dist/client/assets/{drawer-BAGB2i5e.js → drawer-DzFXmovp.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BBzbEvdx.js → dropdown-menu-BGVBD9az.js} +1 -1
- package/dist/client/assets/{empty-state-CJEZ2CIU.js → empty-state-CcPoG0UZ.js} +1 -1
- package/dist/client/assets/{extract-connection-data-D9-uOnkC.js → extract-connection-data-BzzkWkZV.js} +1 -1
- package/dist/client/assets/{file-explorer-C-nSYD2Z.js → file-explorer-Cz4AQihB.js} +1 -1
- package/dist/client/assets/{form-C4BCW6_K.js → form-CjZXtTSa.js} +1 -1
- package/dist/client/assets/{general-C7YvJ-e5.js → general-CqcMQz7S.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DbLNbWuL.js → github-repo-picker-D-88aPgK.js} +1 -1
- package/dist/client/assets/{hooks-kKeZ25fN.js → hooks-DcBuFhPd.js} +1 -1
- package/dist/client/assets/{index-BHQj04Pb.js → index-B2Bf_YcE.js} +1 -1
- package/dist/client/assets/{index-DMAeCPwc.js → index-BBiw4WW_.js} +3 -3
- package/dist/client/assets/{index-Bdt1MtDY.js → index-BGrWt8k2.js} +1 -1
- package/dist/client/assets/{index-iiHz_5As.js → index-BuFI8oC0.js} +1 -1
- package/dist/client/assets/{index-Dmmh4NNo.js → index-Bw_30boX.js} +1 -1
- package/dist/client/assets/{index-wSA3_tmV.js → index-CNvLwxuj.js} +1 -1
- package/dist/client/assets/{index-Bdm4_4e1.js → index-CQyWGbyW.js} +1 -1
- package/dist/client/assets/{index-OZtIPA3V.js → index-CbjUxvEk.js} +1 -1
- package/dist/client/assets/{index-DpjV5q-2.js → index-DonBlPEy.js} +5 -5
- package/dist/client/assets/{index-BUD_uLOp.js → index-DvX78KWV.js} +1 -1
- package/dist/client/assets/{index-CCUdcCF3.js → index-mtVuI_P1.js} +1 -1
- package/dist/client/assets/{index-redirect-FQs-8OMy.js → index-redirect-Bkuo-hDj.js} +1 -1
- package/dist/client/assets/{input-D2cgwgHs.js → input-C-zalgaE.js} +1 -1
- package/dist/client/assets/{integration-icon-D-4nYjxT.js → integration-icon-BuvhW-8p.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CmEO4b7j.js → invite-member-dialog-C7EZkOz2.js} +1 -1
- package/dist/client/assets/{label-Cih2lSUy.js → label-Cg5bA3Ox.js} +1 -1
- package/dist/client/assets/{layout-Be3dVDlW.js → layout-Dpj6E4mc.js} +1 -1
- package/dist/client/assets/{login-DcvFULic.js → login-nfeJPClS.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Di93u_nE.js → mcp-oauth-z0Dd20vj.js} +1 -1
- package/dist/client/assets/{members-Df3vyEpX.js → members-DnlrOgVj.js} +1 -1
- package/dist/client/assets/{monaco-editor-CsRzqy0G.js → monaco-editor-DsGHs-49.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DmIJqpsU.js → monitoring-stats-row-BoVaDogM.js} +1 -1
- package/dist/client/assets/{multi-select-Bl7q6QM5.js → multi-select-Ct9gqZAw.js} +1 -1
- package/dist/client/assets/{oauth-callback-Di2KsC7T.js → oauth-callback-D_gwd7xT.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CuDeSp4w.js → oauth-callback-ai-provider-fnm3-Muz.js} +1 -1
- package/dist/client/assets/{onboarding-BoX_rtxV.js → onboarding-CKoFrT-U.js} +1 -1
- package/dist/client/assets/{org-layout-CAR8y3Sz.js → org-layout-Du8CUmq2.js} +1 -1
- package/dist/client/assets/{organization-choice-DVmiUVYn.js → organization-choice-BT7aGbot.js} +1 -1
- package/dist/client/assets/{orgs-BUmjkff7.js → orgs-BvYX17Go.js} +1 -1
- package/dist/client/assets/{page-seo-form-B90103D7.js → page-seo-form-neTHfPuU.js} +1 -1
- package/dist/client/assets/{popover-CYvFDNCV.js → popover-BjTm0IXB.js} +1 -1
- package/dist/client/assets/{post-editor-Cj9tzQTd.js → post-editor-K8Gqwrnt.js} +1 -1
- package/dist/client/assets/{primitives-CYThaUhB.js → primitives-DGzP_CR6.js} +1 -1
- package/dist/client/assets/{profile-BVOtsJXF.js → profile-CXk4zgHq.js} +1 -1
- package/dist/client/assets/project-app-view-DGnyIRs5.js +1 -0
- package/dist/client/assets/record-editor-DIxqzGtw.js +1 -0
- package/dist/client/assets/{redirect-editor-BGlyHHxi.js → redirect-editor-CV4HqBb9.js} +1 -1
- package/dist/client/assets/registry-C-wMCIhO.js +2 -0
- package/dist/client/assets/{registry-layout-C9Ya5jYm.js → registry-layout-BXBDjqUg.js} +1 -1
- package/dist/client/assets/{reports-BVBYboiK.js → reports-1xVbqNaD.js} +1 -1
- package/dist/client/assets/{require-capability-BM9tAXSC.js → require-capability-BEJcYqn_.js} +1 -1
- package/dist/client/assets/{required-auth-layout-BdkooXmz.js → required-auth-layout-FQyEqYzo.js} +1 -1
- package/dist/client/assets/{reset-password-BXy-W4dD.js → reset-password-DbWuGCAS.js} +1 -1
- package/dist/client/assets/{roles-JOhtFprP.js → roles-DaYB9KCT.js} +1 -1
- package/dist/client/assets/{search-input-jm9rHuE0.js → search-input-Cc9IfjOQ.js} +1 -1
- package/dist/client/assets/{secrets-C2p7ualF.js → secrets-xVFgVvuf.js} +1 -1
- package/dist/client/assets/{sections-editor-BfdV_DMx.js → sections-editor-CjSC4I0U.js} +1 -1
- package/dist/client/assets/{select-Dzh6t1Qc.js → select-CfJpftJq.js} +1 -1
- package/dist/client/assets/{select-model-BfW94K4G.js → select-model-BKC4BmoK.js} +1 -1
- package/dist/client/assets/self-tool-result-De4daZvB.js +1 -0
- package/dist/client/assets/{seo-editor-CRkYIsrt.js → seo-editor-I4oOFhoY.js} +1 -1
- package/dist/client/assets/{settings-layout-Bsf-JBgC.js → settings-layout-DbBvcqeq.js} +1 -1
- package/dist/client/assets/{settings-section-DooKWQox.js → settings-section-CN6oPewm.js} +1 -1
- package/dist/client/assets/{shell-controls-2k-CdOGJ.js → shell-controls-Ct8R-j9Y.js} +1 -1
- package/dist/client/assets/{shell-layout-BfkP0M8k.js → shell-layout-BZrHG63z.js} +1 -1
- package/dist/client/assets/{sidebar-Bi14aJ6Q.js → sidebar-BiGG50b5.js} +1 -1
- package/dist/client/assets/{skeleton-B5MUnuf-.js → skeleton-B6az8LzG.js} +1 -1
- package/dist/client/assets/{spinner-DRLcUSvi.js → spinner-CvbVb1eZ.js} +1 -1
- package/dist/client/assets/{sso-LwXwOiv1.js → sso-CRf5WTH_.js} +1 -1
- package/dist/client/assets/{store-BlVrxeEP.js → store-Puqj5X6N.js} +1 -1
- package/dist/client/assets/store-registry-DqK0tAWN.js +2 -0
- package/dist/client/assets/{studio-tools-DXB56m-I.js → studio-tools-CPEJD8dS.js} +1 -1
- package/dist/client/assets/{switch-BJftNIuu.js → switch-CY5TdqDM.js} +1 -1
- package/dist/client/assets/{tab-id-BB5R77Zb.js → tab-id-D1oAGZ76.js} +1 -1
- package/dist/client/assets/{table-C24ebVr8.js → table-BfJxX96Q.js} +1 -1
- package/dist/client/assets/{tabs-bTtd-T4E.js → tabs-DbnHw0Q-.js} +1 -1
- package/dist/client/assets/{textarea-98BhtzTb.js → textarea-Uw8o2WKM.js} +1 -1
- package/dist/client/assets/{toggle-group-DRus78K2.js → toggle-group-C2tSd60y.js} +1 -1
- package/dist/client/assets/{toolbar-CMBY2dP9.js → toolbar-C1AkFBPG.js} +1 -1
- package/dist/client/assets/{tooltip-B1dzxtxl.js → tooltip-BwLKnB94.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DBCz8w-H.js → use-ai-providers-CoR4OWdo.js} +1 -1
- package/dist/client/assets/{use-automations-BXUkBG07.js → use-automations-BdHLTcR5.js} +1 -1
- package/dist/client/assets/{use-autosave-z9O2a3E2.js → use-autosave-umrMmWRg.js} +1 -1
- package/dist/client/assets/{use-capability-QCltGwJr.js → use-capability-y58qCjug.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DY--rUt9.js → use-clock-tick-CHjshdMv.js} +1 -1
- package/dist/client/assets/{use-connection-DTq_vVoq.js → use-connection-B9AnMmU_.js} +1 -1
- package/dist/client/assets/{use-copy-GU1QUF2W.js → use-copy-BQWR3Nyl.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CXKIqSEX.js → use-create-virtual-mcp-CciZvML4.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Zmb9T1D-.js → use-debounced-autosave-B-0WNvoE.js} +1 -1
- package/dist/client/assets/{use-debounced-value-Dmz0vYZQ.js → use-debounced-value-D_Wg4nEJ.js} +1 -1
- package/dist/client/assets/{use-deco-credits-BRBQWiSH.js → use-deco-credits-CVcn5Vt0.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-CdVUwq3q.js → use-decopilot-events-DvKGuIV9.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DcZ86UGx.js → use-delete-connection-BlAR4tSS.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-B_5ERRAe.js → use-deployment-admin-CrQoQloU.js} +1 -1
- package/dist/client/assets/{use-file-configs-BaQEYWlm.js → use-file-configs-CfkzXAKJ.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BQfm646h.js → use-infinite-scroll-C-YUX9ro.js} +1 -1
- package/dist/client/assets/{use-join-requests-CW4NM-Fq.js → use-join-requests-B8zkCy0E.js} +1 -1
- package/dist/client/assets/{use-mcp-client-DOcr5mrj.js → use-mcp-client-DGLnutwB.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Dde0_gbe.js → use-mcp-tools-DLPmIkoR.js} +1 -1
- package/dist/client/assets/{use-members-CAJIqsl1.js → use-members-BqJl464i.js} +1 -1
- package/dist/client/assets/{use-mobile-BY6OV0X_.js → use-mobile-Dn6AtDG-.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-p3kzJu9p.js → use-navigate-to-agent-D9xH0bMo.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-BdQQ1vKm.js → use-open-billing-url-DFoCErTP.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-B8kLvFMp.js → use-org-auth-client-D5ZZAlgp.js} +1 -1
- package/dist/client/assets/{use-org-sso-hk0q3waB.js → use-org-sso-CTPMeoXv.js} +1 -1
- package/dist/client/assets/{use-organization-roles-B03GRNcA.js → use-organization-roles-pj1XYysb.js} +1 -1
- package/dist/client/assets/{use-organization-settings-Phqg4PqT.js → use-organization-settings-m4Rxay8A.js} +1 -1
- package/dist/client/assets/{use-registry-connections-BemQpSSz.js → use-registry-connections-BGd4ggyw.js} +1 -1
- package/dist/client/assets/{use-secrets-BicjdZd3.js → use-secrets-D6UKv3Pf.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BsWsmFYM.js → use-status-sounds-C3VxcpZW.js} +1 -1
- package/dist/client/assets/{use-tags-5SE9S1Lq.js → use-tags-BTCF49fJ.js} +1 -1
- package/dist/client/assets/{use-view-mode-DzvDF325.js → use-view-mode-DNpApfOe.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-PhLsmZQO.js → use-virtual-mcp-Cu6-RjT3.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-yE7zn8x1.js +1 -0
- package/dist/client/assets/{useRouterState-DBRjjuns.js → useRouterState-DwqIhDDB.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DFOyO7uQ.js +1 -0
- package/dist/client/assets/{users-CBcpj_ww.js → users-_06PeWr0.js} +1 -1
- package/dist/client/assets/{variant-calendar-CwememIV.js → variant-calendar-S88qxrfK.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CQURbLhP.js → view-mode-toggle-CxQwDkSN.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +3 -3
- package/dist/server/server.js +3 -3
- package/package.json +1 -1
- package/dist/client/assets/project-app-view-Dcqil-Dd.js +0 -1
- package/dist/client/assets/record-editor-BVlXNnJb.js +0 -1
- package/dist/client/assets/registry-AS5BcbMh.js +0 -2
- package/dist/client/assets/self-tool-result-D_ABh5a-.js +0 -1
- package/dist/client/assets/store-registry-fUAr0lF_.js +0 -2
- package/dist/client/assets/useInfiniteQuery-DVfcwIte.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-QXBIm_Yf.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1565,7 +1565,7 @@ ${$.description}
|
|
|
1565
1565
|
Task description:
|
|
1566
1566
|
${Z.description}
|
|
1567
1567
|
`:"","How to work:",`- Call \`${K}\` with the task id below to find the pull request under review.`,J?`- The repository ${J.owner}/${J.name} is already cloned at your working directory and \`git\` and \`gh\` are authenticated \u2014 check the PR's branch out there to inspect / exercise the change.`:W?"- Your working directory is EMPTY. Call `mcp__studio__TASK_ADD_REPO` with the connectionId of the PR's repository FIRST; it clones the repository and waits for the checkout, and `git` and `gh` are authenticated once it returns.":"- Load the PR's repository to inspect / exercise the change.",`- End the run by calling \`${N}\` exactly once with the task id, reviewer "${X}", the reviewToken below, and your decision:`," - `approve` when it's good to ship. Include a short summary of what you verified."," - `request_changes` when something is wrong or missing. Include specific, actionable notes \u2014 the task goes back to the Super Agent with your notes.","- The reviewToken proves you are this reviewer \u2014 pass it through EXACTLY as given. Without it your approval won't count toward an automatic merge.",`- \`${N}\` is how the verdict is recorded. A review that ends without it is thrown away and the task stays stuck In Review, so call it even when your notes are short.`,"",`(task id: ${Z.id})`,`(reviewToken: ${G})`].join(`
|
|
1568
|
-
`);await jp($,Z,{title:`${ad[X]}: ${Z.title}`,prompt:F,temperature:0.3,...W?{harnessId:"claude-code",agent:{instructions:H,disallowedTools:IH4[X]}}:{},...J?{repo:J}:{}}),await a7($,{taskBoardItemId:Z.id,action:"review_requested",actorId:null,data:{reviewer:X}});let U=await $.storage.taskBoard.getById(Z.id,Y);if(U)t6(Y,U)}var RH4,IH4,qH4;var It0=B(()=>{MX();WK();o7();Lt0();Et0();RH4=new Set(["completed","failed","expired"]),IH4={qa:["Edit","NotebookEdit"],code_review:["Write","Edit","NotebookEdit"]},qH4={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function VH4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=RN$}async function PO0($,Z,X,G){if(X.status!=="in_review")return!1;if(X.assigneeId!==C6)return!1;if(G.conflict!==!0)return!1;let Q=(await $.storage.organizationSettings.get(Z))?.flags??{};if(Q.auto_merge!==!0)return!1;let J=lJ.filter((H)=>Q[aU[H]]===!0),W=await $.storage.taskBoard.listActivity(X.id,Z);if(!If(W,J,{verifiedOnly:!0}))return!1;if(VH4(W))return console.warn(`[task-board] conflict auto-resolve cap (${RN$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let K=G.pr,N=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!N)return!1;await a7($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),t6(Z,N);try{await yV($,N,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(H){throw await $.storage.taskBoard.update(N.id,Z,{status:"in_review"},"system").then((F)=>t6(Z,F)).catch((F)=>console.error("[task-board] conflict-resolution status revert failed",F)),H}return!0}var RN$=3;var qt0=B(()=>{MX();WK();o7();gV()});import{z as AO0}from"zod";async function Ap($,Z,X,G){if(X){let J=await $.storage.connections.findById(X,Z);if(J&&J.status==="active")return J}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=Y.filter((J)=>J.status==="active");if(G){let J=Q.find((W)=>{let K=VX(W);return K?.owner===G.owner&&K?.repo===G.name});if(J)return J}return Q.find((J)=>VX(J)===null)??Q[0]??null}function Tp($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((G)=>G.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function kt0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")}function CH4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&kt0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function _H4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[];for(let X of Z){let G=X&&typeof X.body==="string"?X.body:"";if(!G)continue;let Y=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(Y?.[1]&&kt0(Y[1]))return Y[1];let Q=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((J)=>kt0(J));if(Q)return Q}return null}function IN$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function MN$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,G=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:Q,conclusion:J}=Y;if(Q!=="completed")G=!0;else if(typeof J==="string"&&qN$.has(J))X=!0}if(X)return"failing";if(G)return"pending";return"passing"}function kN$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function vH4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let G of Z){if(!G||typeof G!=="object")continue;let Y=G;X.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return X}function bH4($){return $.status==="completed"&&$.conclusion!=null&&qN$.has($.conclusion)}async function fH4($,Z,X){try{let Y=Tp(await $.callTool({name:"GET_CHECK_RUN",arguments:{owner:Z.repoOwner,repo:Z.repoName,checkRunId:X}},void 0,{timeout:Pp}))?.output,Q=typeof Y?.summary==="string"?Y.summary:null,J=typeof Y?.text==="string"?Y.text:null;return Q??J??null}catch{return null}}async function SN$($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Y=await R5(G,$,!0),Q=async(J)=>Tp(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp}));try{let J=null;try{J=IN$(await Q("get_status"))}catch{}try{J=kN$(J,MN$(await Q("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function VN$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function CN$($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Y=await R5(G,$,!0);try{return VN$(Tp(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function xH4($,Z){let X=async(N)=>{try{return Tp(await $.callTool({name:"pull_request_read",arguments:{method:N,owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number}},void 0,{timeout:Pp}))}catch{return null}},[G,Y,Q]=await Promise.all([X("get_status"),X("get_check_runs"),X("get_comments")]),J=kN$(IN$(G),MN$(Y)),W=CH4(G)??_H4(Q),K=await Promise.all(vH4(Y).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:bH4(N)&&N.id!=null?await fH4($,Z,N.id):null})));return{checksStatus:J,checks:K,previewUrl:W}}async function Vt0($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return Mt0;let Y=await R5(G,$,!0);try{let[Q,J]=await Promise.all([Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp}),xH4(Y,X)]),W=Tp(Q);if(!W)return Mt0;let K=W.state,N=K==="open";return{title:typeof W.title==="string"?W.title:null,body:typeof W.body==="string"?W.body:null,state:K==="closed"?"closed":N?"open":null,draft:typeof W.draft==="boolean"?W.draft:null,merged:typeof W.merged==="boolean"?W.merged:null,mergeable:N&&typeof W.mergeable==="boolean"?W.mergeable:null,checksStatus:N?J.checksStatus:null,checks:N?J.checks:[],previewUrl:N?J.previewUrl:null}}catch{return Mt0}finally{await Y.close().catch(()=>{})}}var Pp=8000,Mt0,qN$,St0=($)=>{let Z=$.find((X)=>X.state==="open"&&!X.merged);return Z!=null&&Z.checksStatus!=="pending"&&Z.checksStatus!=="failing"},Ct0;var Rp=B(()=>{b0();$H();yW();MX();ZK();WK();o7();It0();qt0();yw0();Mt0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};qN$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);Ct0=d({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:AO0.object({taskBoardItemId:AO0.string()}),outputSchema:AO0.object({prs:AO0.array(MQ$)}),handler:async({taskBoardItemId:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);for(let K of G?.threads??[]){let N=K.lastMessage?Xy(K.lastMessage):null;if(!N)continue;try{await Z.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:X,url:N.url,prNumber:N.number,repoOwner:N.owner,repoName:N.repo,connectionId:null})}catch(H){console.error("[task-board] PR recovery from thread text failed",H)}}let Y=await Z.storage.taskBoard.listPrs($,X),Q=await Promise.all(Y.map(async(K)=>{let N=await Vt0(Z,X,K);return{url:K.url,number:K.number,repoOwner:K.repoOwner,repoName:K.repoName,createdAt:K.createdAt,...N}})),J=Q.find((K)=>K.state==="open"&&!K.merged);if(G&&G.status==="in_review"&&G.assigneeId===C6&&St0(Q))await jO0(Z,G).catch((K)=>{console.error("[task-board] reviewer auto-handoff failed",K)});let W=J?VN$({state:J.state,mergeable:J.mergeable}):null;if(G&&G.status==="in_review"&&G.assigneeId===C6&&J&&W===!0)await PO0(Z,X,G,{pr:{number:J.number,url:J.url},conflict:!0}).catch((K)=>{console.error("[task-board] conflict auto-resolve failed",K)});if(Q.some((K)=>K.merged))try{if(G&&G.status!=="done"){let K=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}}),t6(X,K)}}catch(K){console.error("[task-board] merge\u2192done reconcile failed",K)}return{prs:Q}}})});import{z as Uy}from"zod";function gH4($){return $.threads.filter((Z)=>Z.status!==null&&!sd.has(Z.status)).map((Z)=>Z.threadId)}var yH4="Superseded by a manual re-run of this task",_t0;var _N$=B(()=>{b0();MX();$L();WK();o7();gV();_t0=d({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Uy.object({id:Uy.string().describe("The task board item to re-run.")}),outputSchema:Uy.object({status:Uy.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:Uy.array(Uy.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);if(G.assigneeId!==C6)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");let Y=[];for(let J of gH4(G))if(await Z.storage.threads.failIfNotTerminal(J,yH4,"superseded"))Y.push(J);let Q=await Z.storage.taskBoard.update($,X,{status:"in_progress"},W1(Z));return await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:W1(Z),data:{from:G.status,to:"in_progress",reason:"rerun"}}),t6(X,Q),await yV(Z,Q),{status:Q.status,supersededThreadIds:Y}}})});async function TO0($,Z,X){let Y=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!Y)return!1;let Q=await SN$($,Z,Y);if(Q==="failing"||Q==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${Q} on PR #${Y.number}`),!1;let J=await Ap($,Z,Y.connectionId,{owner:Y.repoOwner,name:Y.repoName});if(!J)return!1;let W=await R5(J,$,!0);try{return!(await W.callTool({name:"merge_pull_request",arguments:{owner:Y.repoOwner,repo:Y.repoName,pullNumber:Y.number}},void 0,{timeout:hH4}))?.isError}catch(K){return console.error("[task-board] merge PR failed",K),!1}finally{await W.close().catch(()=>{})}}var hH4=15000;var vt0=B(()=>{$H();Rp()});import{z as KO}from"zod";async function uH4($,Z,X){let Y=(await $.storage.organizationSettings.get(Z))?.flags??{},Q=lJ.filter((W)=>Y[aU[W]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return If(J,Q,{verifiedOnly:!0})}var bt0;var vN$=B(()=>{b0();MX();ZK();WK();o7();gV();vt0();Rp();qt0();hN();bt0=d({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:KO.object({taskBoardItemId:KO.string(),reviewer:KO.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:KO.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:KO.enum(["approve","request_changes"]),notes:KO.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:KO.object({status:EH,merged:KO.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:G,notes:Y},Q)=>{$0(Q),await Q.access.check();let J=Q.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let W=await Q.storage.taskBoard.getById($,J);if(!W)throw Error(`Task board item not found: ${$}`);let N=(X?await Q.storage.taskBoard.resolveReviewClaimByToken($,X):null)?.reviewer===Z;if(G==="request_changes"){let D=await Q.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await a7(Q,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!D)return{status:(await Q.storage.taskBoard.getById($,J)??W).status,merged:!1};t6(J,D);let E=(await Q.storage.taskBoard.listPrs($,J))[0];return await yV(Q,D,{feedback:`${ad[Z]}: ${Y}`,pr:E?{number:E.number,url:E.url}:void 0}).catch((z)=>{if(z instanceof BQ)throw z;console.error("[task-board] request_changes re-enqueue failed",z)}),{status:D.status,merged:!1}}if(await a7(Q,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!await uH4(Q,J,$)){let D=await Q.storage.taskBoard.getById($,J)??W;return t6(J,D),{status:D.status,merged:!1}}let U=(await Q.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(U?await TO0(Q,J,$):!1){let D=await Q.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await a7(Q,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),t6(J,D),{status:D.status,merged:!0}}let O=await Q.storage.taskBoard.getById($,J)??W;if(U){let L=(await Q.storage.taskBoard.listPrs($,J))[0];if(L?await PO0(Q,J,O,{pr:{number:L.number,url:L.url},conflict:await CN$(Q,J,L)}).catch((z)=>{if(z instanceof BQ)throw z;return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await Q.storage.taskBoard.getById($,J)??O).status,merged:!1}}return t6(J,O),{status:O.status,merged:!1}}})});import{z as RO0}from"zod";function cH4($,Z,X){if($!=="in_review")return!1;return X.length===0||If(Z,X)}var ft0;var bN$=B(()=>{b0();MX();ZK();WK();o7();vt0();ft0=d({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:RO0.object({taskBoardItemId:RO0.string()}),outputSchema:RO0.object({status:EH,merged:RO0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);let Q=(await Z.storage.organizationSettings.get(X))?.flags??{},J=lJ.filter((H)=>Q[aU[H]]===!0),W=await Z.storage.taskBoard.listActivity($,X);if(!cH4(G.status,W,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await TO0(Z,X,$))return{status:G.status,merged:!1};let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);if(G.status!=="done")await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}});return t6(X,N),{status:N.status,merged:!0}}})});import{z as xQ}from"zod";function fN$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var lH4,xt0,yt0;var xN$=B(()=>{b0();lH4=xQ.object({externalKey:xQ.string(),dismissedBy:xQ.string(),dismissedAt:xQ.string()});xt0=d({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xQ.object({}),outputSchema:xQ.object({findings:xQ.array(lH4)}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=fN$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),yt0=d({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xQ.object({externalKeys:xQ.array(xQ.string()).optional()}),outputSchema:xQ.object({restored:xQ.number()}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=fN$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as f6}from"zod";function IO0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}var gt0,ht0,ut0,ct0,lt0;var yN$=B(()=>{b0();MX();Nw0();gt0=f6.object({id:f6.string(),taskBoardItemId:f6.string(),parentId:f6.string().nullable(),authorId:f6.string(),body:f6.string(),resolved:f6.boolean(),createdAt:f6.string(),updatedAt:f6.string()});ht0=d({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({taskBoardItemId:f6.string()}),outputSchema:f6.object({comments:f6.array(gt0)}),handler:async($,Z)=>{return $0(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,IO0(Z))}}}),ut0=d({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:f6.object({taskBoardItemId:f6.string(),body:f6.string().trim().min(1),parentId:f6.string().nullish()}),outputSchema:f6.object({comment:gt0}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:IO0(Z),parentId:$.parentId??null,authorId:Zp.getStore()?C6:W1(Z),body:$.body});if(!X)throw Error("Task board item not found");return{comment:X}}}),ct0=d({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string(),body:f6.string().trim().min(1).optional(),resolved:f6.boolean().optional()}),outputSchema:f6.object({comment:gt0}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:IO0(Z),callerId:W1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),lt0=d({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string()}),outputSchema:f6.object({success:f6.boolean()}),handler:async($,Z)=>{return $0(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,IO0(Z),W1(Z))}}})});var gN$=B(()=>{qQ$();EN$();PN$();AN$();TN$();Rp();_N$();vN$();bN$();WK();xN$();yN$()});import{z as TH}from"zod";var dt0;var hN$=B(()=>{b0();dt0=d({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:TH.object({}),outputSchema:TH.object({tags:TH.array(TH.object({id:TH.string(),organizationId:TH.string(),name:TH.string(),color:TH.string().nullable(),createdAt:TH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as KK}from"zod";var mt0;var uN$=B(()=>{b0();mt0=d({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:KK.object({name:KK.string().min(1).max(50).describe("Tag name"),color:KK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:KK.object({tag:KK.object({id:KK.string(),organizationId:KK.string(),name:KK.string(),color:KK.string().nullable(),createdAt:KK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z),G=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}}}})});import{z as qO0}from"zod";var it0;var cN$=B(()=>{b0();it0=d({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:qO0.object({tagId:qO0.string().describe("Tag ID to delete")}),outputSchema:qO0.object({success:qO0.boolean()}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z),G=await Z.storage.tags.getTag($.tagId);if(!G)throw Error("Tag not found");if(G.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as NK}from"zod";var nt0;var lN$=B(()=>{b0();nt0=d({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:NK.object({memberId:NK.string().describe("Member ID")}),outputSchema:NK.object({tags:NK.array(NK.object({id:NK.string(),organizationId:NK.string(),name:NK.string(),color:NK.string().nullable(),createdAt:NK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as yQ}from"zod";var pt0;var dN$=B(()=>{b0();pt0=d({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:yQ.object({memberId:yQ.string().describe("Member ID"),tagIds:yQ.array(yQ.string()).describe("Array of tag IDs to assign")}),outputSchema:yQ.object({success:yQ.boolean(),tags:yQ.array(yQ.object({id:yQ.string(),organizationId:yQ.string(),name:yQ.string(),createdAt:yQ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Q of $.tagIds){let J=await Z.storage.tags.getTag(Q);if(!J)throw Error(`Tag not found: ${Q}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${Q}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});var mN$=B(()=>{hN$();uN$();cN$();lN$();dN$()});import{z as iN$}from"zod";function pH4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Y],[,Q])=>{let J=Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(Q).map((K)=>K.createdAt??0))-J})[0]?.[0]}var iH4,nH4,tt0;var nN$=B(()=>{D6();b0();SV();EX();iH4=iN$.object({data:l3$.describe("Data for the new thread (id is auto-generated if not provided)")}),nH4=iN$.object({item:YK.describe("The created thread entity")});tt0=d({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:iH4,outputSchema:nH4,handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("User ID required to create thread");let{data:Y}=$,Q=Y.id??l8("thrd"),J=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,N=null;if(K)N=Y.branch??pH4(W?.sandboxMap,G)??Qw0(Yw0(Z.auth.user));let H=await Z.storage.threads.create({id:Q,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:N,created_by:G});if(H.isNew)y1.capture({distinctId:G,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Q,has_title:!!$.data.title,created_via:"tool"}});return{item:fQ(H)}}})});import{z as ot0}from"zod";var tH4,oH4,rt0;var pN$=B(()=>{D6();b0();SV();tH4=ot0.object({id:ot0.string().describe("ID of the thread to update"),data:d3$.describe("Partial thread data to update")}),oH4=ot0.object({item:YK.describe("The updated thread entity")}),rt0=d({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:tH4,outputSchema:oH4,handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("User ID required to update thread");let{id:Y,data:Q}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(Q.virtual_mcp_id!==void 0){let N=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,X.id);if(!N||N.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`)}if(Q.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:Q.title,description:Q.description,hidden:Q.hidden,updated_by:G};if(Q.status)W.status=Q.status;if(Q.metadata!==void 0)W.metadata=Q.metadata;if(Q.branch!==void 0)W.branch=Q.branch;if(Q.virtual_mcp_id!==void 0)W.virtual_mcp_id=Q.virtual_mcp_id;let K=await Z.storage.threads.update(Y,W);if(Q.hidden!==void 0&&Q.hidden!==J.hidden)y1.capture({distinctId:G,event:Q.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:fQ(K)}}})});var at0;var tN$=B(()=>{MQ();SV();D6();b0();at0=d({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:li,outputSchema:di(YK),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:fQ(G)}}})});var oN$=B(()=>{nN$();wp0();Op0();pN$();tN$();Bp0()});function aH4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function sH4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let G=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!G?.text||typeof G.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:aH4(G.text)}}})}function MO0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return sH4(Z)}import{z as x6}from"zod";var st0;var rN$=B(()=>{D6();b0();SQ();st0=d({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:x6.object({name:x6.string().min(1).max(255),virtual_mcp_id:x6.string(),messages:x6.union([x6.string(),x6.array(x6.looseObject({id:x6.string().optional(),role:x6.enum(["user","assistant","system"]),parts:x6.array(x6.record(x6.string(),x6.unknown())),metadata:x6.unknown().optional()}))]),models:x6.object({tier:Aw,modelId:x6.string().optional(),credentialId:x6.string().optional()}).loose().default({tier:"smart"}),tools:x6.array(x6.string()).nullable().optional(),maxAgentSteps:x6.number().int().min(1).max(100).nullable().optional(),temperature:x6.number().default(0.5),active:x6.boolean().default(!0)}),outputSchema:x6.object({id:x6.string(),name:x6.string(),active:x6.boolean(),created_at:x6.string()}),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("Unable to determine user identity");let Y=MO0($.messages),Q=await Z.storage.automations.create({organization_id:X.id,created_by:G,name:$.name,messages:JSON.stringify(Y),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 y1.capture({distinctId:G,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:Q.id,virtual_mcp_id:$.virtual_mcp_id,active:Q.active,tier:$.models.tier}}),{id:Q.id,name:Q.name,active:Q.active,created_at:Q.created_at}}})});import{z as T6}from"zod";var et0;var aN$=B(()=>{b0();et0=d({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:T6.object({id:T6.string()}),outputSchema:T6.object({automation:T6.object({id:T6.string(),name:T6.string(),active:T6.boolean(),created_by:T6.string(),created_at:T6.string(),updated_at:T6.string(),virtual_mcp_id:T6.string(),messages:T6.unknown(),models:T6.unknown(),tools:T6.array(T6.string()).nullable(),maxAgentSteps:T6.number().nullable(),temperature:T6.number(),triggers:T6.array(T6.object({id:T6.string(),type:T6.enum(["cron","event","webhook"]),cron_expression:T6.string().nullable(),connection_id:T6.string().nullable(),event_type:T6.string().nullable(),params:T6.unknown().nullable(),last_run_at:T6.string().nullable(),api_key_id:T6.string().nullable(),created_at:T6.string()}))}).nullable()}),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=await Z.storage.automations.findById($.id,X.id);if(!G)return{automation:null};let Y=await Z.storage.automations.listTriggers(G.id);return{automation:{id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,updated_at:G.updated_at,virtual_mcp_id:G.virtual_mcp_id,messages:JSON.parse(G.messages),models:JSON.parse(G.models),tools:G.tools?JSON.parse(G.tools):null,maxAgentSteps:G.max_agent_steps,temperature:G.temperature,triggers:Y.map((Q)=>({id:Q.id,type:Q.type,cron_expression:Q.cron_expression,connection_id:Q.connection_id,event_type:Q.event_type,params:Q.params?JSON.parse(Q.params):null,last_run_at:Q.last_run_at,api_key_id:Q.api_key_id,created_at:Q.created_at}))}}}})});import{z as SY}from"zod";var $o0;var sN$=B(()=>{b0();$o0=d({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:SY.object({virtual_mcp_id:SY.string().optional().nullable()}),outputSchema:SY.object({automations:SY.array(SY.object({id:SY.string(),name:SY.string(),active:SY.boolean(),created_by:SY.string(),created_at:SY.string(),trigger_count:SY.number(),nearest_next_run_at:SY.string().nullable(),virtual_mcp_id:SY.string()}))}),handler:async($,Z)=>{$0(Z);let X=a(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((Q)=>({id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,trigger_count:Q.trigger_count,nearest_next_run_at:Q.nearest_next_run_at,virtual_mcp_id:Q.virtual_mcp_id}))}}})});function eH4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function eN$($){return`${$}:context`}function $H$($,Z,X,G,Y){return{messages:JSON.parse($.messages).map((K,N)=>({...K,id:`${X}:${N}`})),models:{credentialId:G.credentialId,thinking:G.thinking,...G.image?{image:G.image}:{},...G.webSearch?{webSearch:G.webSearch}:{},...G.deepResearch?{deepResearch:G.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:eH4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...Y?{runMetadata:Y}:{},taskId:X}}function s7($,Z,X,G,Y,Q,J,W){return s7.fromTZ(s7.tp($,Z,X,G,Y,Q,J),W)}function Zo0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function $F4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=$.substring(9);return $.includes("Z")||G.includes("-")||G.includes("+")?s7.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):s7.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function ZF4($){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 gQ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new gQ($.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 Ip($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function XF4($){return Ip($)}function GF4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Xo0=32,qp,YH$,ZH$=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 gQ(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,qp),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,G){let Y=this[$],Q=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Q)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(G);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],X,G);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,G):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,G):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,G):Z!==""&&this.handleNumber(Z,$,X,G)}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,X,G){let Y=this.extractNth($,Z),Q=parseInt(Y[0],10)+X;if(isNaN(Q))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Q,Y[1]||G)}setPart($,Z,X){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,X);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]=X}handleRangeWithStepping($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Q===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=Q,N=parseInt(J,10)+X,H=parseInt(W,10)+X,F=parseInt(K,10);if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(N>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=N;U<=H;U+=F)this.setPart(Z,U,Y[1]||G)}extractNth($,Z){let X=$,G;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].split("-");if(Q.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Q[0],10)+X,W=parseInt(Q[1],10)+X;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,Y[1]||G)}handleStepping($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].split("/");if(Q.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Q[0]===""&&(Q[0]="*");let J=0;Q[0]!=="*"&&(J=parseInt(Q[0],10)+X);let W=parseInt(Q[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,Y[1]||G)}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[$]|Xo0;else if(Z===qp)this.dayOfWeek[$]=qp;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|YH$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},XH$,RH,gQ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,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,X,G,Y){let Q=new Date(Date.UTC(Z,X,G)).getUTCDay(),J=0;for(let W=1;W<=G;W++)new Date(Date.UTC(Z,X,W)).getUTCDay()===Q&&J++;if(Y&qp&&YH$[J-1]&Y)return!0;if(Y&Xo0){let W=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let K=G+1;K<=W;K++)if(new Date(Date.UTC(Z,X,K)).getUTCDay()===Q)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 X=s7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.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>XH$[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 X=s7.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(s7.fromTZISO(Z,this.tz))}findNext(Z,X,G,Y){let Q=this[X],J;G.lastDayOfMonth&&(this.month!==1?J=XH$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[X]+Y;K<G[X].length;K++){let N=G[X][K];if(X==="day"&&G.lastDayOfMonth&&K-Y==J&&(N=1),X==="day"&&!G.starDOW){let H=G.dayOfWeek[(W+(K-Y-1))%7];if(H&&H&qp)H=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!G.starDOM?N=N||H:N=N&&H}if(N)return this[X]=K-Y,Q!==this[X]?2:1}return 3}recurse(Z,X,G){let Y=this.findNext(X,RH[G][0],Z,RH[G][2]);if(Y>1){let Q=G+1;for(;Q<RH.length;)this[RH[Q][0]]=-RH[Q][2],Q++;if(Y===3)return this[RH[G][1]]++,this[RH[G][0]]=-RH[G][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,G-1)}return G+=1,G>=RH.length?this:this.year>=3000?null:this.recurse(Z,X,G)}increment(Z,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,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)):s7.fromTZ(s7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},GH$=30000,kO0,SO0=class{name;options;_states;fn;constructor($,Z,X){let G,Y;if(Ip(Z))Y=Z;else if(typeof Z=="object")G=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Ip(X))Y=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=ZF4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new ZH$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new gQ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new ZH$($,this.options.timezone),this.name){if(kO0.find((Q)=>Q.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");kO0.push(this)}return Y!==void 0&&XF4(Y)&&(this.fn=Y,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 X=[],G=Z||this._states.currentRun||void 0;for(;$--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return Z&&X&&G&&$!==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 gQ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new gQ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=kO0.indexOf(this);$>=0&&kO0.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(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>GH$&&(Z=GH$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&GF4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new gQ(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){Ip(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new gQ($,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,X=!this._states.paused&&Z.getTime()>=$.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&Ip(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new gQ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let G=this._states.once||new gQ($,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun($,Z){let X=new gQ(void 0,this.options.timezone||this.options.utcOffset),G=$;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Y=G.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)G=new gQ(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=G.getTime()+this.options.interval*1000;Z=!0}return G===null&&(G=void 0),[G,Z]}};var Go0=B(()=>{s7.fromTZISO=($,Z,X)=>s7.fromTZ($F4($,Z),X);s7.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),G=Zo0($.tz,X),Y=new Date(X.getTime()-G),Q=Zo0($.tz,Y);if(Q-G===0)return Y;{let J=new Date(X.getTime()-Q),W=Zo0($.tz,J);if(W-Q===0)return J;if(!Z&&W-Q>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};s7.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:Z}};s7.tp=($,Z,X,G,Y,Q,J)=>({y:$,m:Z,d:X,h:G,i:Y,s:Q,tz:J});s7.minitz=s7;qp=31|Xo0,YH$=[1,2,4,8,16],XH$=[31,28,31,30,31,30,31,31,30,31,30,31],RH=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];kO0=[]});function VO0($,Z){try{return new SO0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Yo0=B(()=>{Go0()});import{DBOS as X7,SchedulerMode as YF4}from"@dbos-inc/dbos-sdk";async function No0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
|
|
1568
|
+
`);await jp($,Z,{title:`${ad[X]}: ${Z.title}`,prompt:F,temperature:0.3,...W?{harnessId:"claude-code",agent:{instructions:H,disallowedTools:IH4[X]}}:{},...J?{repo:J}:{}}),await a7($,{taskBoardItemId:Z.id,action:"review_requested",actorId:null,data:{reviewer:X}});let U=await $.storage.taskBoard.getById(Z.id,Y);if(U)t6(Y,U)}var RH4,IH4,qH4;var It0=B(()=>{MX();WK();o7();Lt0();Et0();RH4=new Set(["completed","failed","expired"]),IH4={qa:["Edit","NotebookEdit"],code_review:["Write","Edit","NotebookEdit"]},qH4={qa:"You are the QA Agent. Your job is to confirm the task ACTUALLY SOLVED THE "+"PROBLEM \u2014 not to review code style. Exercise the feature/behavior the task "+"describes (use the PR's preview / dev server when available), check the acceptance criteria implied by the title and description, and look for regressions in the affected flow. Judge outcomes, not the diff.",code_review:"You are the Code Reviewer. Review the code changes for correctness, security, and quality. FIRST look for a review skill/command appropriate to this repository's stack (e.g. a `/review`, `code-review`, or `security-review` skill, or the repo's CONTRIBUTING/review guidelines) and use it. Read the diff critically and flag concrete issues with file/line references."}});function VH4($){return $.filter((X)=>X.action==="merge_conflict_resolution").length>=RN$}async function PO0($,Z,X,G){if(X.status!=="in_review")return!1;if(X.assigneeId!==C6)return!1;if(G.conflict!==!0)return!1;let Q=(await $.storage.organizationSettings.get(Z))?.flags??{};if(Q.auto_merge!==!0)return!1;let J=lJ.filter((H)=>Q[aU[H]]===!0),W=await $.storage.taskBoard.listActivity(X.id,Z);if(!If(W,J,{verifiedOnly:!0}))return!1;if(VH4(W))return console.warn(`[task-board] conflict auto-resolve cap (${RN$}) reached on task ${X.id} \u2014 leaving the PR for a human`),!1;let K=G.pr,N=await $.storage.taskBoard.claimConflictResolution(X.id,Z,X.updatedBy);if(!N)return!1;await a7($,{taskBoardItemId:X.id,action:"merge_conflict_resolution",actorId:null,data:{prNumber:K.number}}),t6(Z,N);try{await yV($,N,{pr:{number:K.number,url:K.url},resolveConflict:!0})}catch(H){throw await $.storage.taskBoard.update(N.id,Z,{status:"in_review"},"system").then((F)=>t6(Z,F)).catch((F)=>console.error("[task-board] conflict-resolution status revert failed",F)),H}return!0}var RN$=3;var qt0=B(()=>{MX();WK();o7();gV()});import{z as AO0}from"zod";async function Ap($,Z,X,G){if(X){let J=await $.storage.connections.findById(X,Z);if(J&&J.status==="active")return J}let{items:Y}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=Y.filter((J)=>J.status==="active");if(G){let J=Q.find((W)=>{let K=VX(W);return K?.owner===G.owner&&K?.repo===G.name});if(J)return J}return Q.find((J)=>VX(J)===null)??Q[0]??null}function Tp($){if(!$||typeof $!=="object")return null;let Z=$;if(Z.isError)return null;if(Z.structuredContent&&typeof Z.structuredContent==="object"&&Object.keys(Z.structuredContent).length>0)return Z.structuredContent;let X=Z.content?.find((G)=>G.type==="text")?.text;if(!X)return null;try{return JSON.parse(X)}catch{return null}}function kt0($){let Z;try{Z=new URL($).hostname.toLowerCase()}catch{return!1}return Z==="deco.site"||Z.endsWith(".decocdn.com")||Z.endsWith(".deco-cx.workers.dev")||Z.endsWith(".deco.site")}function CH4($){if(!$||!Array.isArray($.statuses))return null;let Z=$.statuses.map((X)=>X&&typeof X==="object"?X:null).filter((X)=>!!X&&typeof X.target_url==="string"&&kt0(X.target_url));if(Z.length===0)return null;return Z.find((X)=>X.state==="success")?.target_url??Z[0].target_url}function _H4($){let Z=Array.isArray($)?$:Array.isArray($?.comments)?$.comments:Array.isArray($?.items)?$.items:[];for(let X of Z){let G=X&&typeof X.body==="string"?X.body:"";if(!G)continue;let Y=G.match(/href=['"]([^'"]+)['"][^>]*>\s*Branch Preview/i);if(Y?.[1]&&kt0(Y[1]))return Y[1];let Q=(G.match(/https?:\/\/[^\s"'<>)\]]+/g)??[]).find((J)=>kt0(J));if(Q)return Q}return null}function IN$($){if(!$)return null;if((typeof $.total_count==="number"?$.total_count:null)===0)return null;switch($.state){case"success":return"passing";case"failure":case"error":return"failing";case"pending":return"pending";default:return null}}function MN$($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[];if(Z.length===0)return null;let X=!1,G=!1;for(let Y of Z){if(!Y||typeof Y!=="object")continue;let{status:Q,conclusion:J}=Y;if(Q!=="completed")G=!0;else if(typeof J==="string"&&qN$.has(J))X=!0}if(X)return"failing";if(G)return"pending";return"passing"}function kN$($,Z){if($==="failing"||Z==="failing")return"failing";if($==="pending"||Z==="pending")return"pending";if($==="passing"||Z==="passing")return"passing";return null}function vH4($){let Z=Array.isArray($)?$:Array.isArray($?.check_runs)?$.check_runs:[],X=[];for(let G of Z){if(!G||typeof G!=="object")continue;let Y=G;X.push({id:typeof Y.id==="number"?Y.id:null,name:typeof Y.name==="string"?Y.name:"",status:typeof Y.status==="string"?Y.status:"completed",conclusion:typeof Y.conclusion==="string"?Y.conclusion:null,detailsUrl:typeof Y.html_url==="string"?Y.html_url:typeof Y.details_url==="string"?Y.details_url:null})}return X}function bH4($){return $.status==="completed"&&$.conclusion!=null&&qN$.has($.conclusion)}async function fH4($,Z,X){try{let Y=Tp(await $.callTool({name:"GET_CHECK_RUN",arguments:{owner:Z.repoOwner,repo:Z.repoName,checkRunId:X}},void 0,{timeout:Pp}))?.output,Q=typeof Y?.summary==="string"?Y.summary:null,J=typeof Y?.text==="string"?Y.text:null;return Q??J??null}catch{return null}}async function SN$($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Y=await R5(G,$,!0),Q=async(J)=>Tp(await Y.callTool({name:"pull_request_read",arguments:{method:J,owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp}));try{let J=null;try{J=IN$(await Q("get_status"))}catch{}try{J=kN$(J,MN$(await Q("get_check_runs")))}catch{}return J}finally{await Y.close().catch(()=>{})}}function VN$($){if(!$)return null;if($.state!=="open")return!1;return typeof $.mergeable==="boolean"?!$.mergeable:null}async function CN$($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return null;let Y=await R5(G,$,!0);try{return VN$(Tp(await Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp})))}catch{return null}finally{await Y.close().catch(()=>{})}}async function xH4($,Z){let X=async(N)=>{try{return Tp(await $.callTool({name:"pull_request_read",arguments:{method:N,owner:Z.repoOwner,repo:Z.repoName,pullNumber:Z.number}},void 0,{timeout:Pp}))}catch{return null}},[G,Y,Q]=await Promise.all([X("get_status"),X("get_check_runs"),X("get_comments")]),J=kN$(IN$(G),MN$(Y)),W=CH4(G)??_H4(Q),K=await Promise.all(vH4(Y).map(async(N)=>({name:N.name,status:N.status,conclusion:N.conclusion,detailsUrl:N.detailsUrl,summary:bH4(N)&&N.id!=null?await fH4($,Z,N.id):null})));return{checksStatus:J,checks:K,previewUrl:W}}async function Vt0($,Z,X){let G=await Ap($,Z,X.connectionId,{owner:X.repoOwner,name:X.repoName});if(!G)return Mt0;let Y=await R5(G,$,!0);try{let[Q,J]=await Promise.all([Y.callTool({name:"pull_request_read",arguments:{method:"get",owner:X.repoOwner,repo:X.repoName,pullNumber:X.number}},void 0,{timeout:Pp}),xH4(Y,X)]),W=Tp(Q);if(!W)return Mt0;let K=W.state,N=K==="open";return{title:typeof W.title==="string"?W.title:null,body:typeof W.body==="string"?W.body:null,state:K==="closed"?"closed":N?"open":null,draft:typeof W.draft==="boolean"?W.draft:null,merged:typeof W.merged==="boolean"?W.merged:null,mergeable:N&&typeof W.mergeable==="boolean"?W.mergeable:null,checksStatus:N?J.checksStatus:null,checks:N?J.checks:[],previewUrl:N?J.previewUrl:null}}catch{return Mt0}finally{await Y.close().catch(()=>{})}}var Pp=8000,Mt0,qN$,St0=($)=>{let Z=$.find((X)=>X.state!=="closed"&&X.merged!==!0);return Z!=null&&Z.checksStatus!=="pending"&&Z.checksStatus!=="failing"},Ct0;var Rp=B(()=>{b0();$H();yW();MX();ZK();WK();o7();It0();qt0();yw0();Mt0={title:null,body:null,state:null,draft:null,merged:null,mergeable:null,checksStatus:null,checks:[],previewUrl:null};qN$=new Set(["failure","cancelled","timed_out","action_required","startup_failure","stale"]);Ct0=d({name:"TASK_BOARD_ITEM_PRS_GET",description:"Get the GitHub pull requests linked to a task board item, each enriched with live state (title, open/closed, draft, merged) fetched from GitHub.",annotations:{title:"Get Task Board Item Pull Requests",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:AO0.object({taskBoardItemId:AO0.string()}),outputSchema:AO0.object({prs:AO0.array(MQ$)}),handler:async({taskBoardItemId:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);for(let K of G?.threads??[]){let N=K.lastMessage?Xy(K.lastMessage):null;if(!N)continue;try{await Z.storage.taskBoard.linkPr({taskBoardItemId:$,organizationId:X,url:N.url,prNumber:N.number,repoOwner:N.owner,repoName:N.repo,connectionId:null})}catch(H){console.error("[task-board] PR recovery from thread text failed",H)}}let Y=await Z.storage.taskBoard.listPrs($,X),Q=await Promise.all(Y.map(async(K)=>{let N=await Vt0(Z,X,K);return{url:K.url,number:K.number,repoOwner:K.repoOwner,repoName:K.repoName,createdAt:K.createdAt,...N}})),J=Q.find((K)=>K.state==="open"&&!K.merged);if(G&&G.status==="in_review"&&G.assigneeId===C6&&St0(Q))await jO0(Z,G).catch((K)=>{console.error("[task-board] reviewer auto-handoff failed",K)});let W=J?VN$({state:J.state,mergeable:J.mergeable}):null;if(G&&G.status==="in_review"&&G.assigneeId===C6&&J&&W===!0)await PO0(Z,X,G,{pr:{number:J.number,url:J.url},conflict:!0}).catch((K)=>{console.error("[task-board] conflict auto-resolve failed",K)});if(Q.some((K)=>K.merged))try{if(G&&G.status!=="done"){let K=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}}),t6(X,K)}}catch(K){console.error("[task-board] merge\u2192done reconcile failed",K)}return{prs:Q}}})});import{z as Uy}from"zod";function gH4($){return $.threads.filter((Z)=>Z.status!==null&&!sd.has(Z.status)).map((Z)=>Z.threadId)}var yH4="Superseded by a manual re-run of this task",_t0;var _N$=B(()=>{b0();MX();$L();WK();o7();gV();_t0=d({name:"TASK_BOARD_ITEM_RERUN",description:"Re-run a task board item with the Super Agent, whatever lane it is in. Use this to retry a task that stalled, finished without doing the job, or is already assigned to the Super Agent (in which case re-assigning it does nothing). Fails any run still holding the task open, moves it to In Progress, and queues a fresh run.",annotations:{title:"Re-run Task",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:Uy.object({id:Uy.string().describe("The task board item to re-run.")}),outputSchema:Uy.object({status:Uy.string().describe("The task's lane after the re-run was queued."),supersededThreadIds:Uy.array(Uy.string()).describe("Runs that were failed to make room for this one.")}),handler:async({id:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);if(G.assigneeId!==C6)throw Error("Only a task assigned to the Super Agent can be re-run. Assign it to "+"the Super Agent instead \u2014 that queues a run by itself.");let Y=[];for(let J of gH4(G))if(await Z.storage.threads.failIfNotTerminal(J,yH4,"superseded"))Y.push(J);let Q=await Z.storage.taskBoard.update($,X,{status:"in_progress"},W1(Z));return await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:W1(Z),data:{from:G.status,to:"in_progress",reason:"rerun"}}),t6(X,Q),await yV(Z,Q),{status:Q.status,supersededThreadIds:Y}}})});async function TO0($,Z,X){let Y=(await $.storage.taskBoard.listPrs(X,Z))[0];if(!Y)return console.warn(`[task-board] merge skipped \u2014 no linked PR on ${X}`),!1;let Q=await SN$($,Z,Y);if(Q==="failing"||Q==="pending")return console.warn(`[task-board] merge blocked \u2014 checks ${Q} on PR #${Y.number}`),!1;let J=await Ap($,Z,Y.connectionId,{owner:Y.repoOwner,name:Y.repoName});if(!J)return console.warn("[task-board] merge blocked \u2014 no active GitHub connection for "+`${Y.repoOwner}/${Y.repoName} (PR #${Y.number})`),!1;let W=await R5(J,$,!0);try{let K=await W.callTool({name:"merge_pull_request",arguments:{owner:Y.repoOwner,repo:Y.repoName,pullNumber:Y.number}},void 0,{timeout:hH4});if(K?.isError)return console.error(`[task-board] merge refused by GitHub on PR #${Y.number}:`,JSON.stringify(K?.content)),!1;return!0}catch(K){return console.error("[task-board] merge PR failed",K),!1}finally{await W.close().catch(()=>{})}}var hH4=15000;var vt0=B(()=>{$H();Rp()});import{z as KO}from"zod";async function uH4($,Z,X){let Y=(await $.storage.organizationSettings.get(Z))?.flags??{},Q=lJ.filter((W)=>Y[aU[W]]===!0),J=await $.storage.taskBoard.listActivity(X,Z);return If(J,Q,{verifiedOnly:!0})}var bt0;var vN$=B(()=>{b0();MX();ZK();WK();o7();gV();vt0();Rp();qt0();hN();bt0=d({name:"TASK_BOARD_REVIEW_DECISION",description:"Record a reviewer's decision for a task under review. `approve` marks the pull request approved by that reviewer (and, once EVERY enabled reviewer has approved, merges it when the org enabled auto-merge, advancing the task to Done); `request_changes` hands the task back to the Super Agent with your notes so it can fix the PR.",annotations:{title:"Review Decision",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:KO.object({taskBoardItemId:KO.string(),reviewer:KO.enum(["qa","code_review"]).describe("Which reviewer you are: `qa` (QA Agent) or `code_review` (Code Reviewer)."),reviewToken:KO.string().optional().describe("The reviewToken from your prompt \u2014 proves you are this reviewer. "+"Pass it through exactly; an approval without a valid token is recorded but does NOT count toward an automatic merge."),decision:KO.enum(["approve","request_changes"]),notes:KO.string().min(1).describe("For approve: a short summary of what you verified. For request_changes: specific, actionable feedback the Super Agent must address.")}),outputSchema:KO.object({status:EH,merged:KO.boolean().describe("True when this approval completed the review and merged the PR.")}),handler:async({taskBoardItemId:$,reviewer:Z,reviewToken:X,decision:G,notes:Y},Q)=>{$0(Q),await Q.access.check();let J=Q.organization?.id;if(!J)throw Error("Organization ID required (no active organization in context)");let W=await Q.storage.taskBoard.getById($,J);if(!W)throw Error(`Task board item not found: ${$}`);let N=(X?await Q.storage.taskBoard.resolveReviewClaimByToken($,X):null)?.reviewer===Z;if(G==="request_changes"){let D=await Q.storage.taskBoard.claimReviewChangesBounce($,J,W.updatedBy);if(await a7(Q,{taskBoardItemId:$,action:"review_changes_requested",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!D)return{status:(await Q.storage.taskBoard.getById($,J)??W).status,merged:!1};t6(J,D);let E=(await Q.storage.taskBoard.listPrs($,J))[0];return await yV(Q,D,{feedback:`${ad[Z]}: ${Y}`,pr:E?{number:E.number,url:E.url}:void 0}).catch((z)=>{if(z instanceof BQ)throw z;console.error("[task-board] request_changes re-enqueue failed",z)}),{status:D.status,merged:!1}}if(await a7(Q,{taskBoardItemId:$,action:"review_approved",actorId:null,data:{reviewer:Z,notes:Y,verified:N}}),!await uH4(Q,J,$)){let D=await Q.storage.taskBoard.getById($,J)??W;return t6(J,D),{status:D.status,merged:!1}}let U=(await Q.storage.organizationSettings.get(J))?.flags?.auto_merge===!0;if(U?await TO0(Q,J,$):!1){let D=await Q.storage.taskBoard.update($,J,{status:"done"},W.updatedBy);return await a7(Q,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:W.status,to:"done"}}),t6(J,D),{status:D.status,merged:!0}}let O=await Q.storage.taskBoard.getById($,J)??W;if(U){let L=(await Q.storage.taskBoard.listPrs($,J))[0];if(L?await PO0(Q,J,O,{pr:{number:L.number,url:L.url},conflict:await CN$(Q,J,L)}).catch((z)=>{if(z instanceof BQ)throw z;return console.error("[task-board] conflict auto-resolve failed",z),!1}):!1)return{status:(await Q.storage.taskBoard.getById($,J)??O).status,merged:!1}}return t6(J,O),{status:O.status,merged:!1}}})});import{z as RO0}from"zod";function cH4($,Z,X){if($!=="in_review")return!1;return X.length===0||If(Z,X)}var ft0;var bN$=B(()=>{b0();MX();ZK();WK();o7();vt0();ft0=d({name:"TASK_BOARD_PROMOTE_TO_PRODUCTION",description:"Ship a reviewed task: merge its open pull request and move the task to Done. Used by the board's 'Ship to production' button after the enabled reviewers approved, when auto-merge is off (a human does the final merge).",annotations:{title:"Ship to Production",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!0},inputSchema:RO0.object({taskBoardItemId:RO0.string()}),outputSchema:RO0.object({status:EH,merged:RO0.boolean().describe("True when the PR was merged.")}),handler:async({taskBoardItemId:$},Z)=>{$0(Z),await Z.access.check();let X=Z.organization?.id;if(!X)throw Error("Organization ID required (no active organization in context)");let G=await Z.storage.taskBoard.getById($,X);if(!G)throw Error(`Task board item not found: ${$}`);let Q=(await Z.storage.organizationSettings.get(X))?.flags??{},J=lJ.filter((H)=>Q[aU[H]]===!0),W=await Z.storage.taskBoard.listActivity($,X);if(!cH4(G.status,W,J))throw Error("Task is not ready to ship: it must be In Review with every enabled reviewer approved");if(!await TO0(Z,X,$))return{status:G.status,merged:!1};let N=await Z.storage.taskBoard.update($,X,{status:"done"},G.updatedBy);if(G.status!=="done")await a7(Z,{taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:G.status,to:"done"}});return t6(X,N),{status:N.status,merged:!0}}})});import{z as xQ}from"zod";function fN$($){if(!$)throw Error("Organization ID required (no active organization in context)");return $}var lH4,xt0,yt0;var xN$=B(()=>{b0();lH4=xQ.object({externalKey:xQ.string(),dismissedBy:xQ.string(),dismissedAt:xQ.string()});xt0=d({name:"TASK_BOARD_DISMISSED_LIST",description:"List the diagnostic findings this organization has dismissed by deleting their task board cards. The import skips these until they're restored.",annotations:{title:"List Dismissed Findings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xQ.object({}),outputSchema:xQ.object({findings:xQ.array(lH4)}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=fN$(Z.organization?.id);return{findings:await Z.storage.taskBoard.listDismissedFindings(X)}}}),yt0=d({name:"TASK_BOARD_DISMISSED_RESTORE",description:"Un-dismiss diagnostic findings, returning their cards to the board. Omit externalKeys to restore every dismissed finding.",annotations:{title:"Restore Dismissed Findings",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:xQ.object({externalKeys:xQ.array(xQ.string()).optional()}),outputSchema:xQ.object({restored:xQ.number()}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=fN$(Z.organization?.id);return{restored:await Z.storage.taskBoard.restoreDismissedFindings(X,$.externalKeys)}}})});import{z as f6}from"zod";function IO0($){let Z=$.organization?.id;if(!Z)throw Error("Organization ID required (no active organization in context)");return Z}var gt0,ht0,ut0,ct0,lt0;var yN$=B(()=>{b0();MX();Nw0();gt0=f6.object({id:f6.string(),taskBoardItemId:f6.string(),parentId:f6.string().nullable(),authorId:f6.string(),body:f6.string(),resolved:f6.boolean(),createdAt:f6.string(),updatedAt:f6.string()});ht0=d({name:"TASK_BOARD_COMMENT_LIST",description:"List a task board item's comments (flat, oldest first; replies carry parentId).",annotations:{title:"List Task Comments",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({taskBoardItemId:f6.string()}),outputSchema:f6.object({comments:f6.array(gt0)}),handler:async($,Z)=>{return $0(Z),await Z.access.check(),{comments:await Z.storage.taskBoard.listComments($.taskBoardItemId,IO0(Z))}}}),ut0=d({name:"TASK_BOARD_COMMENT_CREATE",description:"Post a comment on a task board item, or a reply to one.",annotations:{title:"Create Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:f6.object({taskBoardItemId:f6.string(),body:f6.string().trim().min(1),parentId:f6.string().nullish()}),outputSchema:f6.object({comment:gt0}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=await Z.storage.taskBoard.createComment({taskBoardItemId:$.taskBoardItemId,organizationId:IO0(Z),parentId:$.parentId??null,authorId:Zp.getStore()?C6:W1(Z),body:$.body});if(!X)throw Error("Task board item not found");return{comment:X}}}),ct0=d({name:"TASK_BOARD_COMMENT_UPDATE",description:"Edit your own comment's body, or resolve/unresolve a comment thread (root only, any org member may toggle it).",annotations:{title:"Update Task Comment",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string(),body:f6.string().trim().min(1).optional(),resolved:f6.boolean().optional()}),outputSchema:f6.object({comment:gt0}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=await Z.storage.taskBoard.updateComment({id:$.id,organizationId:IO0(Z),callerId:W1(Z),body:$.body,resolved:$.resolved});if(!X)throw Error("Comment not found, or you can only edit your own comments");return{comment:X}}}),lt0=d({name:"TASK_BOARD_COMMENT_DELETE",description:"Delete your own comment. Deleting a thread root deletes its replies too.",annotations:{title:"Delete Task Comment",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:f6.object({id:f6.string()}),outputSchema:f6.object({success:f6.boolean()}),handler:async($,Z)=>{return $0(Z),await Z.access.check(),{success:await Z.storage.taskBoard.deleteComment($.id,IO0(Z),W1(Z))}}})});var gN$=B(()=>{qQ$();EN$();PN$();AN$();TN$();Rp();_N$();vN$();bN$();WK();xN$();yN$()});import{z as TH}from"zod";var dt0;var hN$=B(()=>{b0();dt0=d({name:"TAGS_LIST",description:"List all tags available in the organization.",annotations:{title:"List Tags",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:TH.object({}),outputSchema:TH.object({tags:TH.array(TH.object({id:TH.string(),organizationId:TH.string(),name:TH.string(),color:TH.string().nullable(),createdAt:TH.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);return{tags:(await Z.storage.tags.listOrgTags(X.id)).map((Y)=>({...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():String(Y.createdAt)}))}}})});import{z as KK}from"zod";var mt0;var uN$=B(()=>{b0();mt0=d({name:"TAGS_CREATE",description:"Create a new tag, usable on organization members and task board items.",annotations:{title:"Create Tag",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:KK.object({name:KK.string().min(1).max(50).describe("Tag name"),color:KK.string().regex(/^#[0-9a-fA-F]{6}$/).nullable().optional().describe('Hex color the tag renders its dot with, e.g. "#3b82f6"')}),outputSchema:KK.object({tag:KK.object({id:KK.string(),organizationId:KK.string(),name:KK.string(),color:KK.string().nullable(),createdAt:KK.string().describe("ISO 8601 timestamp")})}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z),G=await Z.storage.tags.createTag(X.id,$.name,$.color);return{tag:{...G,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():String(G.createdAt)}}}})});import{z as qO0}from"zod";var it0;var cN$=B(()=>{b0();it0=d({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:qO0.object({tagId:qO0.string().describe("Tag ID to delete")}),outputSchema:qO0.object({success:qO0.boolean()}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z),G=await Z.storage.tags.getTag($.tagId);if(!G)throw Error("Tag not found");if(G.organizationId!==X.id)throw Error("Tag does not belong to this organization");return await Z.storage.tags.deleteTag($.tagId),{success:!0}}})});import{z as NK}from"zod";var nt0;var lN$=B(()=>{b0();nt0=d({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:NK.object({memberId:NK.string().describe("Member ID")}),outputSchema:NK.object({tags:NK.array(NK.object({id:NK.string(),organizationId:NK.string(),name:NK.string(),color:NK.string().nullable(),createdAt:NK.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);return{tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});import{z as yQ}from"zod";var pt0;var dN$=B(()=>{b0();pt0=d({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:yQ.object({memberId:yQ.string().describe("Member ID"),tagIds:yQ.array(yQ.string()).describe("Array of tag IDs to assign")}),outputSchema:yQ.object({success:yQ.boolean(),tags:yQ.array(yQ.object({id:yQ.string(),organizationId:yQ.string(),name:yQ.string(),createdAt:yQ.string().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{$0(Z),await Z.access.check();let X=a(Z);if(!await Z.storage.tags.verifyMemberOrg($.memberId,X.id))throw Error(`Member not found in this organization: ${$.memberId}`);for(let Q of $.tagIds){let J=await Z.storage.tags.getTag(Q);if(!J)throw Error(`Tag not found: ${Q}`);if(J.organizationId!==X.id)throw Error(`Tag does not belong to this organization: ${Q}`)}return await Z.storage.tags.setMemberTags($.memberId,$.tagIds),{success:!0,tags:(await Z.storage.tags.getMemberTags($.memberId)).map((Q)=>({...Q,createdAt:Q.createdAt instanceof Date?Q.createdAt.toISOString():String(Q.createdAt)}))}}})});var mN$=B(()=>{hN$();uN$();cN$();lN$();dN$()});import{z as iN$}from"zod";function pH4($,Z){let X=$?.[Z];if(!X)return;return Object.entries(X).sort(([,Y],[,Q])=>{let J=Math.max(0,...Object.values(Y).map((K)=>K.createdAt??0));return Math.max(0,...Object.values(Q).map((K)=>K.createdAt??0))-J})[0]?.[0]}var iH4,nH4,tt0;var nN$=B(()=>{D6();b0();SV();EX();iH4=iN$.object({data:l3$.describe("Data for the new thread (id is auto-generated if not provided)")}),nH4=iN$.object({item:YK.describe("The created thread entity")});tt0=d({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:iH4,outputSchema:nH4,handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("User ID required to create thread");let{data:Y}=$,Q=Y.id??l8("thrd"),J=await Z.storage.virtualMcps.findById(Y.virtual_mcp_id,X.id);if(!J||J.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Y.virtual_mcp_id}`);let W=J.metadata,K=W?.githubRepo,N=null;if(K)N=Y.branch??pH4(W?.sandboxMap,G)??Qw0(Yw0(Z.auth.user));let H=await Z.storage.threads.create({id:Q,organization_id:X.id,title:Y.title,description:Y.description,virtual_mcp_id:Y.virtual_mcp_id,branch:N,created_by:G});if(H.isNew)y1.capture({distinctId:G,event:"chat_started",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Q,has_title:!!$.data.title,created_via:"tool"}});return{item:fQ(H)}}})});import{z as ot0}from"zod";var tH4,oH4,rt0;var pN$=B(()=>{D6();b0();SV();tH4=ot0.object({id:ot0.string().describe("ID of the thread to update"),data:d3$.describe("Partial thread data to update")}),oH4=ot0.object({item:YK.describe("The updated thread entity")}),rt0=d({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:tH4,outputSchema:oH4,handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("User ID required to update thread");let{id:Y,data:Q}=$,J=await Z.storage.threads.get(Y);if(!J)throw Error("Thread not found in organization");if(Q.virtual_mcp_id!==void 0){let N=await Z.storage.virtualMcps.findById(Q.virtual_mcp_id,X.id);if(!N||N.organization_id!==X.id)throw Error(`Virtual MCP not found: ${Q.virtual_mcp_id}`)}if(Q.branch===null&&J.virtual_mcp_id){if((await Z.storage.virtualMcps.findById(J.virtual_mcp_id,X.id))?.metadata?.githubRepo)throw Error("Cannot set branch=null on a github-linked thread (vMCP has githubRepo)")}let W={title:Q.title,description:Q.description,hidden:Q.hidden,updated_by:G};if(Q.status)W.status=Q.status;if(Q.metadata!==void 0)W.metadata=Q.metadata;if(Q.branch!==void 0)W.branch=Q.branch;if(Q.virtual_mcp_id!==void 0)W.virtual_mcp_id=Q.virtual_mcp_id;let K=await Z.storage.threads.update(Y,W);if(Q.hidden!==void 0&&Q.hidden!==J.hidden)y1.capture({distinctId:G,event:Q.hidden?"chat_archived":"chat_unarchived",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:Y}});return{item:fQ(K)}}})});var at0;var tN$=B(()=>{MQ();SV();D6();b0();at0=d({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:li,outputSchema:di(YK),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=await Z.storage.threads.get($.id);if(!G)throw Error(`Thread not found: ${$.id}`);await Z.storage.threads.delete($.id);let Y=W1(Z);if(Y)y1.capture({distinctId:Y,event:"chat_deleted",groups:{organization:X.id},properties:{organization_id:X.id,thread_id:$.id}});return{item:fQ(G)}}})});var oN$=B(()=>{nN$();wp0();Op0();pN$();tN$();Bp0()});function aH4($){return{type:"doc",content:[{type:"paragraph",content:[{type:"text",text:$}]}]}}function sH4($){return $.map((Z)=>{let X=Z.metadata;if(X?.tiptapDoc)return Z;let G=Z.parts.find((Y)=>Y.type==="text"&&typeof Y.text==="string");if(!G?.text||typeof G.text!=="string")return Z;return{...Z,metadata:{...X,tiptapDoc:aH4(G.text)}}})}function MO0($){let Z;if(typeof $==="string")try{let X=JSON.parse($);if(Array.isArray(X)&&X.length>0&&X[0]?.role&&Array.isArray(X[0]?.parts))Z=X;else Z=[{role:"user",parts:[{type:"text",text:$}]}]}catch{Z=[{role:"user",parts:[{type:"text",text:$}]}]}else Z=$;return sH4(Z)}import{z as x6}from"zod";var st0;var rN$=B(()=>{D6();b0();SQ();st0=d({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:x6.object({name:x6.string().min(1).max(255),virtual_mcp_id:x6.string(),messages:x6.union([x6.string(),x6.array(x6.looseObject({id:x6.string().optional(),role:x6.enum(["user","assistant","system"]),parts:x6.array(x6.record(x6.string(),x6.unknown())),metadata:x6.unknown().optional()}))]),models:x6.object({tier:Aw,modelId:x6.string().optional(),credentialId:x6.string().optional()}).loose().default({tier:"smart"}),tools:x6.array(x6.string()).nullable().optional(),maxAgentSteps:x6.number().int().min(1).max(100).nullable().optional(),temperature:x6.number().default(0.5),active:x6.boolean().default(!0)}),outputSchema:x6.object({id:x6.string(),name:x6.string(),active:x6.boolean(),created_at:x6.string()}),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=W1(Z);if(!G)throw Error("Unable to determine user identity");let Y=MO0($.messages),Q=await Z.storage.automations.create({organization_id:X.id,created_by:G,name:$.name,messages:JSON.stringify(Y),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 y1.capture({distinctId:G,event:"automation_created",groups:{organization:X.id},properties:{organization_id:X.id,automation_id:Q.id,virtual_mcp_id:$.virtual_mcp_id,active:Q.active,tier:$.models.tier}}),{id:Q.id,name:Q.name,active:Q.active,created_at:Q.created_at}}})});import{z as T6}from"zod";var et0;var aN$=B(()=>{b0();et0=d({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:T6.object({id:T6.string()}),outputSchema:T6.object({automation:T6.object({id:T6.string(),name:T6.string(),active:T6.boolean(),created_by:T6.string(),created_at:T6.string(),updated_at:T6.string(),virtual_mcp_id:T6.string(),messages:T6.unknown(),models:T6.unknown(),tools:T6.array(T6.string()).nullable(),maxAgentSteps:T6.number().nullable(),temperature:T6.number(),triggers:T6.array(T6.object({id:T6.string(),type:T6.enum(["cron","event","webhook"]),cron_expression:T6.string().nullable(),connection_id:T6.string().nullable(),event_type:T6.string().nullable(),params:T6.unknown().nullable(),last_run_at:T6.string().nullable(),api_key_id:T6.string().nullable(),created_at:T6.string()}))}).nullable()}),handler:async($,Z)=>{$0(Z);let X=a(Z);await Z.access.check();let G=await Z.storage.automations.findById($.id,X.id);if(!G)return{automation:null};let Y=await Z.storage.automations.listTriggers(G.id);return{automation:{id:G.id,name:G.name,active:G.active,created_by:G.created_by,created_at:G.created_at,updated_at:G.updated_at,virtual_mcp_id:G.virtual_mcp_id,messages:JSON.parse(G.messages),models:JSON.parse(G.models),tools:G.tools?JSON.parse(G.tools):null,maxAgentSteps:G.max_agent_steps,temperature:G.temperature,triggers:Y.map((Q)=>({id:Q.id,type:Q.type,cron_expression:Q.cron_expression,connection_id:Q.connection_id,event_type:Q.event_type,params:Q.params?JSON.parse(Q.params):null,last_run_at:Q.last_run_at,api_key_id:Q.api_key_id,created_at:Q.created_at}))}}}})});import{z as SY}from"zod";var $o0;var sN$=B(()=>{b0();$o0=d({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:SY.object({virtual_mcp_id:SY.string().optional().nullable()}),outputSchema:SY.object({automations:SY.array(SY.object({id:SY.string(),name:SY.string(),active:SY.boolean(),created_by:SY.string(),created_at:SY.string(),trigger_count:SY.number(),nearest_next_run_at:SY.string().nullable(),virtual_mcp_id:SY.string()}))}),handler:async($,Z)=>{$0(Z);let X=a(Z);return await Z.access.check(),{automations:(await Z.storage.automations.listWithTriggerCounts(X.id,$.virtual_mcp_id)).map((Q)=>({id:Q.id,name:Q.name,active:Q.active,created_by:Q.created_by,created_at:Q.created_at,trigger_count:Q.trigger_count,nearest_next_run_at:Q.nearest_next_run_at,virtual_mcp_id:Q.virtual_mcp_id}))}}})});function eH4($){if(!$)return null;try{let Z=JSON.parse($);if(Array.isArray(Z)&&Z.every((X)=>typeof X==="string"))return Z.length>0?Z:null}catch{}return null}function eN$($){return`${$}:context`}function $H$($,Z,X,G,Y){return{messages:JSON.parse($.messages).map((K,N)=>({...K,id:`${X}:${N}`})),models:{credentialId:G.credentialId,thinking:G.thinking,...G.image?{image:G.image}:{},...G.webSearch?{webSearch:G.webSearch}:{},...G.deepResearch?{deepResearch:G.deepResearch}:{}},agent:{id:$.virtual_mcp_id},toolAllowlist:eH4($.tools),maxAgentSteps:$.max_agent_steps??void 0,temperature:$.temperature??0.5,toolApprovalLevel:"auto",mode:"default",organizationId:$.organization_id,userId:$.created_by,harnessId:"decopilot",sandboxProviderKind:"agent-sandbox",triggerId:Z??void 0,...Y?{runMetadata:Y}:{},taskId:X}}function s7($,Z,X,G,Y,Q,J,W){return s7.fromTZ(s7.tp($,Z,X,G,Y,Q,J),W)}function Zo0($,Z=new Date){let X=Z.toLocaleString("en-US",{timeZone:$,timeZoneName:"shortOffset"}).split(" ").slice(-1)[0],G=Z.toLocaleString("en-US").replace(/[\u202f]/," ");return Date.parse(`${G} GMT`)-Date.parse(`${G} ${X}`)}function $F4($,Z){let X=new Date(Date.parse($));if(isNaN(X))throw Error("minitz: Invalid ISO8601 passed to parser.");let G=$.substring(9);return $.includes("Z")||G.includes("-")||G.includes("+")?s7.tp(X.getUTCFullYear(),X.getUTCMonth()+1,X.getUTCDate(),X.getUTCHours(),X.getUTCMinutes(),X.getUTCSeconds(),"Etc/UTC"):s7.tp(X.getFullYear(),X.getMonth()+1,X.getDate(),X.getHours(),X.getMinutes(),X.getSeconds(),Z)}function ZF4($){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 gQ($.startAt,$.timezone)),$.stopAt&&($.stopAt=new gQ($.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 Ip($){return Object.prototype.toString.call($)==="[object Function]"||typeof $=="function"||$ instanceof Function}function XF4($){return Ip($)}function GF4($){typeof Deno<"u"&&typeof Deno.unrefTimer<"u"?Deno.unrefTimer($):$&&typeof $.unref<"u"&&$.unref()}var Xo0=32,qp,YH$,ZH$=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 gQ(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,qp),this.dayOfWeek[7]&&(this.dayOfWeek[0]=this.dayOfWeek[7])}partToArray($,Z,X,G){let Y=this[$],Q=$==="day"&&this.lastDayOfMonth;if(Z===""&&!Q)throw TypeError("CronPattern: configuration entry "+$+" ("+Z+") is empty, check for trailing spaces.");if(Z==="*")return Y.fill(G);let J=Z.split(",");if(J.length>1)for(let W=0;W<J.length;W++)this.partToArray($,J[W],X,G);else Z.indexOf("-")!==-1&&Z.indexOf("/")!==-1?this.handleRangeWithStepping(Z,$,X,G):Z.indexOf("-")!==-1?this.handleRange(Z,$,X,G):Z.indexOf("/")!==-1?this.handleStepping(Z,$,X,G):Z!==""&&this.handleNumber(Z,$,X,G)}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,X,G){let Y=this.extractNth($,Z),Q=parseInt(Y[0],10)+X;if(isNaN(Q))throw TypeError("CronPattern: "+Z+" is not a number: '"+$+"'");this.setPart(Z,Q,Y[1]||G)}setPart($,Z,X){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,X);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]=X}handleRangeWithStepping($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].match(/^(\d+)-(\d+)\/(\d+)$/);if(Q===null)throw TypeError("CronPattern: Syntax error, illegal range with stepping: '"+$+"'");let[,J,W,K]=Q,N=parseInt(J,10)+X,H=parseInt(W,10)+X,F=parseInt(K,10);if(isNaN(N))throw TypeError("CronPattern: Syntax error, illegal lower range (NaN)");if(isNaN(H))throw TypeError("CronPattern: Syntax error, illegal upper range (NaN)");if(isNaN(F))throw TypeError("CronPattern: Syntax error, illegal stepping: (NaN)");if(F===0)throw TypeError("CronPattern: Syntax error, illegal stepping: 0");if(F>this[Z].length)throw TypeError("CronPattern: Syntax error, steps cannot be greater than maximum value of part ("+this[Z].length+")");if(N>H)throw TypeError("CronPattern: From value is larger than to value: '"+$+"'");for(let U=N;U<=H;U+=F)this.setPart(Z,U,Y[1]||G)}extractNth($,Z){let X=$,G;if(X.includes("#")){if(Z!=="dayOfWeek")throw Error("CronPattern: nth (#) only allowed in day-of-week field");G=X.split("#")[1],X=X.split("#")[0]}return[X,G]}handleRange($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].split("-");if(Q.length!==2)throw TypeError("CronPattern: Syntax error, illegal range: '"+$+"'");let J=parseInt(Q[0],10)+X,W=parseInt(Q[1],10)+X;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,Y[1]||G)}handleStepping($,Z,X,G){let Y=this.extractNth($,Z),Q=Y[0].split("/");if(Q.length!==2)throw TypeError("CronPattern: Syntax error, illegal stepping: '"+$+"'");Q[0]===""&&(Q[0]="*");let J=0;Q[0]!=="*"&&(J=parseInt(Q[0],10)+X);let W=parseInt(Q[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,Y[1]||G)}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[$]|Xo0;else if(Z===qp)this.dayOfWeek[$]=qp;else if(Z<6&&Z>0)this.dayOfWeek[$]=this.dayOfWeek[$]|YH$[Z-1];else throw TypeError(`CronPattern: nth weekday out of range, should be 1-5 or L. Value: ${Z}, Type: ${typeof Z}`)}},XH$,RH,gQ=class ${tz;ms;second;minute;hour;day;month;year;constructor(Z,X){if(this.tz=X,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,X,G,Y){let Q=new Date(Date.UTC(Z,X,G)).getUTCDay(),J=0;for(let W=1;W<=G;W++)new Date(Date.UTC(Z,X,W)).getUTCDay()===Q&&J++;if(Y&qp&&YH$[J-1]&Y)return!0;if(Y&Xo0){let W=new Date(Date.UTC(Z,X+1,0)).getUTCDate();for(let K=G+1;K<=W;K++)if(new Date(Date.UTC(Z,X,K)).getUTCDay()===Q)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 X=s7.toTZ(Z,this.tz);this.ms=Z.getMilliseconds(),this.second=X.s,this.minute=X.i,this.hour=X.h,this.day=X.d,this.month=X.m-1,this.year=X.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>XH$[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 X=s7.fromTZISO(Z);this.ms=X.getUTCMilliseconds(),this.second=X.getUTCSeconds(),this.minute=X.getUTCMinutes(),this.hour=X.getUTCHours(),this.day=X.getUTCDate(),this.month=X.getUTCMonth(),this.year=X.getUTCFullYear(),this.apply()}else return this.fromDate(s7.fromTZISO(Z,this.tz))}findNext(Z,X,G,Y){let Q=this[X],J;G.lastDayOfMonth&&(this.month!==1?J=XH$[this.month]:J=new Date(Date.UTC(this.year,this.month+1,0,0,0,0,0)).getUTCDate());let W=!G.starDOW&&X=="day"?new Date(Date.UTC(this.year,this.month,1,0,0,0,0)).getUTCDay():void 0;for(let K=this[X]+Y;K<G[X].length;K++){let N=G[X][K];if(X==="day"&&G.lastDayOfMonth&&K-Y==J&&(N=1),X==="day"&&!G.starDOW){let H=G.dayOfWeek[(W+(K-Y-1))%7];if(H&&H&qp)H=this.isNthWeekdayOfMonth(this.year,this.month,K-Y,H)?1:0;else if(H)throw Error(`CronDate: Invalid value for dayOfWeek encountered. ${H}`);Z.legacyMode&&!G.starDOM?N=N||H:N=N&&H}if(N)return this[X]=K-Y,Q!==this[X]?2:1}return 3}recurse(Z,X,G){let Y=this.findNext(X,RH[G][0],Z,RH[G][2]);if(Y>1){let Q=G+1;for(;Q<RH.length;)this[RH[Q][0]]=-RH[Q][2],Q++;if(Y===3)return this[RH[G][1]]++,this[RH[G][0]]=-RH[G][2],this.apply(),this.recurse(Z,X,0);if(this.apply())return this.recurse(Z,X,G-1)}return G+=1,G>=RH.length?this:this.year>=3000?null:this.recurse(Z,X,G)}increment(Z,X,G){return this.second+=X.interval!==void 0&&X.interval>1&&G?X.interval:1,this.ms=0,this.apply(),this.recurse(Z,X,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)):s7.fromTZ(s7.tp(this.year,this.month+1,this.day,this.hour,this.minute,this.second,this.tz),!1)}getTime(){return this.getDate(!1).getTime()}},GH$=30000,kO0,SO0=class{name;options;_states;fn;constructor($,Z,X){let G,Y;if(Ip(Z))Y=Z;else if(typeof Z=="object")G=Z;else if(Z!==void 0)throw Error("Cron: Invalid argument passed for optionsIn. Should be one of function, or object (options).");if(Ip(X))Y=X;else if(typeof X=="object")G=X;else if(X!==void 0)throw Error("Cron: Invalid argument passed for funcIn. Should be one of function, or object (options).");if(this.name=G?.name,this.options=ZF4(G),this._states={kill:!1,blocking:!1,previousRun:void 0,currentRun:void 0,once:void 0,currentTimeout:void 0,maxRuns:G?G.maxRuns:void 0,paused:G?G.paused:!1,pattern:new ZH$("* * * * *")},$&&($ instanceof Date||typeof $=="string"&&$.indexOf(":")>0)?this._states.once=new gQ($,this.options.timezone||this.options.utcOffset):this._states.pattern=new ZH$($,this.options.timezone),this.name){if(kO0.find((Q)=>Q.name===this.name))throw Error("Cron: Tried to initialize new named job '"+this.name+"', but name already taken.");kO0.push(this)}return Y!==void 0&&XF4(Y)&&(this.fn=Y,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 X=[],G=Z||this._states.currentRun||void 0;for(;$--&&(G=this.nextRun(G));)X.push(G);return X}getPattern(){return this._states.pattern?this._states.pattern.pattern:void 0}isRunning(){let $=this.nextRun(this._states.currentRun),Z=!this._states.paused,X=this.fn!==void 0,G=!this._states.kill;return Z&&X&&G&&$!==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 gQ||$ instanceof Date?Z.getTime()-$.getTime():Z.getTime()-new gQ($).getTime():null}stop(){this._states.kill=!0,this._states.currentTimeout&&clearTimeout(this._states.currentTimeout);let $=kO0.indexOf(this);$>=0&&kO0.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(),X=this.nextRun(this._states.currentRun);return Z==null||isNaN(Z)||X===null?this:(Z>GH$&&(Z=GH$),this._states.currentTimeout=setTimeout(()=>this._checkTrigger(X),Z),this._states.currentTimeout&&this.options.unref&&GF4(this._states.currentTimeout),this)}async _trigger($){if(this._states.blocking=!0,this._states.currentRun=new gQ(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){Ip(this.options.catch)&&this.options.catch(Z,this)}else this.fn!==void 0&&await this.fn(this,this.options.context);this._states.previousRun=new gQ($,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,X=!this._states.paused&&Z.getTime()>=$.getTime(),G=this._states.blocking&&this.options.protect;X&&!G?(this._states.maxRuns!==void 0&&this._states.maxRuns--,this._trigger()):X&&G&&Ip(this.options.protect)&&setTimeout(()=>this.options.protect(this),0),this.schedule()}_next($){let Z=!!($||this._states.currentRun),X=!1;!$&&this.options.startAt&&this.options.interval&&([$,Z]=this._calculatePreviousRun($,Z),X=!$),$=new gQ($,this.options.timezone||this.options.utcOffset),this.options.startAt&&$&&$.getTime()<this.options.startAt.getTime()&&($=this.options.startAt);let G=this._states.once||new gQ($,this.options.timezone||this.options.utcOffset);return!X&&G!==this._states.once&&(G=G.increment(this._states.pattern,this.options,Z)),this._states.once&&this._states.once.getTime()<=$.getTime()||G===null||this._states.maxRuns!==void 0&&this._states.maxRuns<=0||this._states.kill||this.options.stopAt&&G.getTime()>=this.options.stopAt.getTime()?null:G}_calculatePreviousRun($,Z){let X=new gQ(void 0,this.options.timezone||this.options.utcOffset),G=$;if(this.options.startAt.getTime()<=X.getTime()){G=this.options.startAt;let Y=G.getTime()+this.options.interval*1000;for(;Y<=X.getTime();)G=new gQ(G,this.options.timezone||this.options.utcOffset).increment(this._states.pattern,this.options,!0),Y=G.getTime()+this.options.interval*1000;Z=!0}return G===null&&(G=void 0),[G,Z]}};var Go0=B(()=>{s7.fromTZISO=($,Z,X)=>s7.fromTZ($F4($,Z),X);s7.fromTZ=function($,Z){let X=new Date(Date.UTC($.y,$.m-1,$.d,$.h,$.i,$.s)),G=Zo0($.tz,X),Y=new Date(X.getTime()-G),Q=Zo0($.tz,Y);if(Q-G===0)return Y;{let J=new Date(X.getTime()-Q),W=Zo0($.tz,J);if(W-Q===0)return J;if(!Z&&W-Q>0)return J;if(Z)throw Error("Invalid date passed to fromTZ()");return Y}};s7.toTZ=function($,Z){let X=$.toLocaleString("en-US",{timeZone:Z}).replace(/[\u202f]/," "),G=new Date(X);return{y:G.getFullYear(),m:G.getMonth()+1,d:G.getDate(),h:G.getHours(),i:G.getMinutes(),s:G.getSeconds(),tz:Z}};s7.tp=($,Z,X,G,Y,Q,J)=>({y:$,m:Z,d:X,h:G,i:Y,s:Q,tz:J});s7.minitz=s7;qp=31|Xo0,YH$=[1,2,4,8,16],XH$=[31,28,31,30,31,30,31,31,30,31,30,31],RH=[["month","year",0],["day","month",-1],["hour","day",0],["minute","hour",0],["second","minute",0]];kO0=[]});function VO0($,Z){try{return new SO0($,{timezone:"UTC"}).nextRun(Z)??null}catch{return null}}var Yo0=B(()=>{Go0()});import{DBOS as X7,SchedulerMode as YF4}from"@dbos-inc/dbos-sdk";async function No0($){try{let{rows:Z}=await $.query(`SELECT q.name FROM dbos.queues q
|
|
1569
1569
|
WHERE q.name LIKE $1
|
|
1570
1570
|
AND NOT EXISTS (
|
|
1571
1571
|
SELECT 1 FROM dbos.workflow_status w
|
|
@@ -2729,9 +2729,9 @@ Do NOT require review (requiresReview = false) when the changes are low-risk, su
|
|
|
2729
2729
|
|
|
2730
2730
|
When unsure between the two, lean toward NOT requiring review for small frontend-only diffs, and toward requiring it for anything backend or large.
|
|
2731
2731
|
|
|
2732
|
-
Respond with the structured verdict and a short reason.`,WC$;var NC$=B(()=>{S4();sw();G81();Q16=Y81.object({requiresReview:Y81.boolean().describe("true if the changes should go through pull-request review"),reason:Y81.string().describe("One short sentence explaining the decision (max ~120 chars)")});WC$={requiresReview:!1,reason:""}});function N16($){if(!$||$.includes(".."))return!1;return K16.test($)}function HC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!N16(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function FC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var K16;var UC$=B(()=>{K16=/^[\w./@-]+$/});function Q81($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function wC$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function OC$($,Z,X,G){if(!G.connectionId)throw new bg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new bg(u7);await qx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new bg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await bw(G.connectionId,G.owner,G.name,$.db,$.vault),K=iE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await aw(N,H16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var H16=10485760,bg;var BC$=B(()=>{Lw();r$1();en();Rn();bg=class bg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function U16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!F16.test(Z))throw Error(`Invalid branch name: ${$}`)}function _C($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(O16)])}function vC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function J81($,Z){let G=(nE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return nE0.set($,Y),Y.finally(()=>{if(nE0.get($)===Y)nE0.delete($)}),G}async function SZ($,Z,X){let G=vC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?D16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function D16($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function pE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function L16($){return EC$.includes($)}var F16,DC$=524288,w16=65536,O16=1e4,LC$=2000,B16,nE0,fY,EC$,zC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",B16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!L16(X))return Z.json({error:`step must be one of: ${EC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=a(Z.var.studioContext),Q=Xw0(G.virtualMcpMetadata);try{await Gw0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return tH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ZC$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(LC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(LC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return J81(G,async()=>{try{await a$1(J,X,G);let W=wC$(Y,Q);if(W)await OC$(J,X,G,W)}catch(W){if(W instanceof bg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return J81(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return J81(G,async()=>{try{await a$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:DC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=$81(K)&&H?[K,N]:await Promise.all([pE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),pE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await JC$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:DC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=$81(K)&&H?[K,N]:await Promise.all([pE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),pE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await KC$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=Q81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:w16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=HC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=FC$(Y,J.resolveType),K=Q81(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var jC$=B(()=>{u8();TC();vg();aV$();NH();eV$();B3();tw();$C$();XC$();An0();sn();G81();NC$();UC$();BC$();F16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B16=rV$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=W1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=a(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{U16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=zn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await LH(X,J,G),H=sV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await yX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});nE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};EC$=["clone","install","start"]});var PC$=($)=>{let Z=new D1;if(Z.use("*",AC),Z.route("/",KE0()),Z.route("/",fM$()),Z.route("/",yV$()),Z.route("/",fV$()),Z.route("/",lE0()),Z.route("/tools",mV$()),Z.route("/",cV$()),Z.route("/",LV$({kvStorage:$.kvStorage})),Z.route("/",BV$()),Z.route("/fs",kV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",zC$()),Z.route("/",_V$()),Z.route("/deco-sites",HE0()),Z.route("/sso",ZE0()),Z.route("/",dE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",MM$()),$.mountDevAssets)Z.route("/dev-assets",FE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Es1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",VV$()),Z.route("/mcp",xO0()),Z.route("/mcp/self",cE0()),Z.route("/mcp",hO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var AC$=B(()=>{u8();L11();kM$();A11();UE0();tt();B11();DV$();EV$();SV$();ki();J11();uO0();d$1();CV$();vV$();xV$();gV$();lV$();i$1();iV$();n$1();yO0();jC$()});function z16($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function j16($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(E16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var E16=1e4,P16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},TC$=()=>{let $=new D1;return $.use("*",P16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await j16(G,Y);return Z.json({apps:z16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var RC$=B(()=>{u8();V$()});import{z as M1}from"zod";function SK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function C16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function _16($,Z,X){try{return JSON.parse($)}catch{throw new MC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function v16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:_16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function b16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function f16($){if(!$)return;return{openai:{response_format:$}}}function x16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function IC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function qC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var A16=256,T16,R16,I16,q16,M16,k16,S16,V16,MC$,kC$,SC$;var VC$=B(()=>{S4();u8();vg();MH();T16=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),R16=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),I16=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(R16).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),q16=M1.object({type:M1.literal("text")}),M16=M1.object({type:M1.literal("json_object")}),k16=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),S16=M1.union([q16,M16,k16]),V16=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(I16),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(T16).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:S16.optional(),user:M1.string().optional()});MC$=class MC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};kC$=new D1;kC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(SK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(SK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(SK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=V16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(SK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=C16(Q.model);if(!J)return $.json(SK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>nB(z.providerId));if(!E)return $.json(SK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(SK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=v16(Q.messages),U=Q.tools?b16(Q.tools):void 0,w=f16(Q.response_format),O=x16(),D=Math.floor(Date.now()/1000);if(Q.stream)return tH($,async(L)=>{let E=IC$(H,F,U,Q,w,$.req.raw.signal);try{let z=_w(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=A16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:qC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=IC$(H,F,U,Q,w,$.req.raw.signal),E=await Vw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:qC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(SK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(SK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(SK(Y.message,"server_error"),500)}});SC$=kC$});var _C$;var CC$=B(()=>{_C$={name:"decocms",version:"4.186.5",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function h16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??g16}}var vC$,g16="https://ph.studio.decocms.com",bC$;var fC$=B(()=>{u8();VC0();vV();OZ();V$();Z11();CC$();vC$=new D1;vC$.get("/",($)=>{let Z={version:_C$.version,theme:TM1(),...aB().logo&&{logo:aB().logo},...QK()&&{internalUrl:I21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:lq$(),posthog:h16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!QK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bC$=vC$});function fg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function W81($){return(fg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function yC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(fg($))}&sz=${Z}`}function xC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function gC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?xC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):xC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as c0}from"zod";var bC,u16,c16,l16,d16,hC$;var uC$=B(()=>{bC=c0.enum(["good","bad","neutral"]),u16=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:bC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),c16=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(u16)),l16={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},d16=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:bC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:bC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:bC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:bC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(c16).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:bC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:bC.optional()})).min(1)})]),hC$=c0.object({...l16,template:d16})});function tE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=hC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var K81=B(()=>{uC$()});import{join as cC$}from"path";async function i16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(m16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=tE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||W81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function n16($,Z){let X=fg($),G=Z?.brand?.trim()||W81(X),Y=yC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=gC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
|
|
2732
|
+
Respond with the structured verdict and a short reason.`,WC$;var NC$=B(()=>{S4();sw();G81();Q16=Y81.object({requiresReview:Y81.boolean().describe("true if the changes should go through pull-request review"),reason:Y81.string().describe("One short sentence explaining the decision (max ~120 chars)")});WC$={requiresReview:!1,reason:""}});function N16($){if(!$||$.includes(".."))return!1;return K16.test($)}function HC$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!N16(Z))return null;let{__resolveType:X,...G}=$;return{resolveType:Z,payload:G}}function FC$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var K16;var UC$=B(()=>{K16=/^[\w./@-]+$/});function Q81($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function wC$($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function OC$($,Z,X,G){if(!G.connectionId)throw new bg("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new bg(u7);await qx({ctx:$,connectionId:G.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let F=H instanceof Error?H.message:u7;throw new bg(F)}});let{cloneUrl:Q,gitUserName:J,gitUserEmail:W}=await bw(G.connectionId,G.owner,G.name,$.db,$.vault),K=iE0($),N=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:Q},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!N.ok){let H=await aw(N,H16).catch(()=>N.statusText);throw Error(`Failed to refresh sandbox git credentials (${N.status}): ${H}`)}}var H16=10485760,bg;var BC$=B(()=>{Lw();r$1();en();Rn();bg=class bg extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function U16($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!F16.test(Z))throw Error(`Invalid branch name: ${$}`)}function _C($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(O16)])}function vC($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}function J81($,Z){let G=(nE0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=G.catch(()=>{});return nE0.set($,Y),Y.finally(()=>{if(nE0.get($)===Y)nE0.delete($)}),G}async function SZ($,Z,X){let G=vC($);if(G instanceof Response)return G;let{claimName:Y,userId:Q,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,N=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,N.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),N.set("content-type","application/json");let H=X?.signal,F={method:W,headers:N,body:K,...H?{signal:H}:{}},U=async()=>{let w=await G.proxyDaemonRequest(Y,Z,F);if(X?.map404to410&&w.status===404){try{await w.body?.cancel()}catch{}if(await G.adoptLiveClaim?.({userId:Q,projectRef:J},Y))w=await G.proxyDaemonRequest(Y,Z,F);if(w.status===404){try{await w.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...fY}})}}let O=await w.text(),D=X?.redactRepoDirUnlessDesktop&&G.kind!=="user-desktop"?D16(O):O,L=w.headers.get("content-type")??"application/json";return new Response(D,{status:w.status,headers:{"content-type":L,...fY}})};try{if(H){let w=U();return w.catch(()=>{}),await Promise.race([w,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:`Daemon unreachable: ${O}`},502)}}function D16($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function pE0($,Z,X,G="GET",Y){let Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null});if(Q.status===404&&Y){try{await Q.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))Q=await $.proxyDaemonRequest(Z,X,{method:G,headers:new Headers,body:null})}if(Q.status===404){try{await Q.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await Q.text();if(!Q.ok)try{let W=JSON.parse(J);throw Error(W.error??`Daemon error (${Q.status})`)}catch(W){if(W instanceof Error&&W.message!==J)throw W;throw Error(`Daemon error (${Q.status})`)}return JSON.parse(J)}function L16($){return EC$.includes($)}var F16,DC$=524288,w16=65536,O16=1e4,LC$=2000,B16,nE0,fY,EC$,zC$=()=>{let $=new D1;return $.use("/:virtualMcpId/:branch/*",B16),$.post("/:virtualMcpId/:branch/write",(Z)=>SZ(Z,"/_sandbox/write",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/unlink",(Z)=>SZ(Z,"/_sandbox/unlink",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/mkdir",(Z)=>SZ(Z,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/rename",(Z)=>SZ(Z,"/_sandbox/rename",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/read",(Z)=>SZ(Z,"/_sandbox/read",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/glob",(Z)=>SZ(Z,"/_sandbox/glob",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/grep",(Z)=>SZ(Z,"/_sandbox/grep",{forwardJsonBody:!0,signal:_C(Z)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Z)=>{let X=Z.req.param("script");if(!X)return Z.json({error:"missing script name"},400);return SZ(Z,`/_sandbox/exec/${encodeURIComponent(X)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(Z)=>SZ(Z,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Z)=>{let X=Z.req.param("step");if(!X||!L16(X))return Z.json({error:`step must be one of: ${EC$.join(", ")}`},400);if(X==="start"){let G=Z.get("vmClaim");if(G.runner){let Y=a(Z.var.studioContext),Q=Xw0(G.virtualMcpMetadata);try{await Gw0({ctx:Z.var.studioContext,runner:G.runner,handle:G.claimName,orgId:Y.id,userId:G.callerUserId,entries:Q})}catch(J){let W=J instanceof Error?J.message:String(J);return Z.json({error:`Failed to push env to daemon: ${W}`},502)}}}return SZ(Z,`/_sandbox/setup/${X}`,{signal:Z.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(Z)=>{let X=Z.get("vmClaim");if(!X.runner)return tH(Z,async(G)=>{await G.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ZC$(Z,{ctx:Z.var.studioContext,claimName:X.claimName,runner:X.runner,virtualMcpId:X.virtualMcpId,branch:X.branch,userId:X.userId,projectRef:X.projectRef,virtualMcpMetadata:X.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(LC$)])})),$.post("/:virtualMcpId/:branch/git/status",(Z)=>SZ(Z,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Z.req.raw.signal,AbortSignal.timeout(LC$)])})),$.post("/:virtualMcpId/:branch/git/diff",(Z)=>SZ(Z,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/git/publish",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,virtualMcpMetadata:Y,connectionIds:Q}=Z.get("vmClaim"),J=Z.var.studioContext;return J81(G,async()=>{try{await a$1(J,X,G);let W=wC$(Y,Q);if(W)await OC$(J,X,G,W)}catch(W){if(W instanceof bg)return Z.json({error:W.message},403,fY);let K=W instanceof Error?W.message:String(W);return Z.json({error:K},502,fY)}return SZ(Z,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",(Z)=>{let{claimName:X}=Z.get("vmClaim");return J81(X,()=>SZ(Z,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.var.studioContext;return J81(G,async()=>{try{await a$1(Y,X,G)}catch(Q){let J=Q instanceof Error?Q.message:String(Q);return Z.json({error:J},502,fY)}return SZ(Z,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",F7({maxSize:DC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=$81(K)&&H?[K,N]:await Promise.all([pE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),pE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await JC$(J,F,U);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.post("/:virtualMcpId/:branch/git/judge-review",F7({maxSize:DC$,onError:(Z)=>Z.json({error:"Payload too large"},413,fY)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G,userId:Y,projectRef:Q}=Z.get("vmClaim"),J=Z.var.studioContext;try{let W=await Z.req.json().catch(()=>({})),K=W.status,N=W.diff,H=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[F,U]=$81(K)&&H?[K,N]:await Promise.all([pE0(X,G,"/_sandbox/git/status","GET",{userId:Y,projectRef:Q}),pE0(X,G,"/_sandbox/git/diff","GET",{userId:Y,projectRef:Q})]),w=await KC$(J,F,U,typeof W.language==="string"?W.language:void 0);return Z.json(w,200,fY)}catch(W){let K=W instanceof Error?W.message:String(W);if(K==="SANDBOX_GONE")return Z.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,fY);return Z.json({error:K},502,fY)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y=Z.req.query("path");if(!Y||!Y.startsWith("/")||Y.startsWith("//")||Y.includes("..")||Y.includes("\\"))return Z.json({error:"Path not allowed"},403);let Q;try{Q=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Q)return Z.json({error:"Preview not available"},502);let J=Q.replace(/\/+$/,""),W=Q81(`${J}${Y}`),K;try{K=await fetch(W?.url??`${J}${Y}`,{...W?{headers:{host:W.hostHeader}}:{}})}catch{return Z.json({error:"Preview unreachable"},502)}let N;try{N=await K.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(N,{status:K.status,headers:{"content-type":K.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",F7({maxSize:w16,onError:(Z)=>Z.json({error:"Payload too large"},413)}),async(Z)=>{let X=vC(Z);if(X instanceof Response)return X;let{claimName:G}=Z.get("vmClaim"),Y;try{Y=await X.getPreviewUrl(G)}catch{return Z.json({error:"Preview not available"},502)}if(!Y)return Z.json({error:"Preview not available"},502);let Q;try{Q=await Z.req.json()}catch{return Z.json({error:"Invalid JSON body"},400)}if(!Q||typeof Q!=="object"||Array.isArray(Q))return Z.json({error:"Invalid JSON body"},400);let J=HC$(Q);if(!J)return Z.json({error:"Invalid or missing __resolveType"},400);let W=FC$(Y,J.resolveType),K=Q81(W),N;try{N=await fetch(K?.url??W,{method:"POST",headers:{"content-type":"application/json",...K?{host:K.hostHeader}:{}},body:JSON.stringify(J.payload),signal:AbortSignal.timeout(30000)})}catch{return Z.json({error:"Preview unreachable"},502)}let H;try{H=await N.text()}catch{return Z.json({error:"Preview unreachable"},502)}return new Response(H,{status:N.status,headers:{"content-type":N.headers.get("content-type")??"application/json"}})}),$};var jC$=B(()=>{u8();TC();vg();aV$();NH();eV$();B3();tw();$C$();XC$();An0();sn();G81();NC$();UC$();BC$();F16=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;B16=rV$(async($,Z)=>{let X=$.var.studioContext;try{$0(X)}catch{return $.json({error:"Unauthorized"},401)}let G=W1(X);if(!G)return $.json({error:"Unauthorized"},401);let Y;try{Y=a(X)}catch{return $.json({error:"Organization scope required"},403)}let Q=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!Q||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{U16(J)}catch(w){let O=w instanceof Error?w.message:String(w);return $.json({error:O},400)}let W=await X.storage.virtualMcps.findById(Q);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=zn({orgId:Y.id,virtualMcpId:Q,branch:J}),N=await LH(X,J,G),H=sV$({userId:N,projectRef:K}),F=W.metadata??null,U;try{U=(await yX(X,{userId:N,branch:J,virtualMcpMetadata:F})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:G,runner:U,virtualMcpId:Q,branch:J,userId:N,projectRef:K,virtualMcpMetadata:F,connectionIds:W.connections?.map((w)=>w.connection_id)??[]}),Z()});nE0=new Map;fY={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};EC$=["clone","install","start"]});var PC$=($)=>{let Z=new D1;if(Z.use("*",AC),Z.route("/",KE0()),Z.route("/",fM$()),Z.route("/",yV$()),Z.route("/",fV$()),Z.route("/",lE0()),Z.route("/tools",mV$()),Z.route("/",cV$()),Z.route("/",LV$({kvStorage:$.kvStorage})),Z.route("/",BV$()),Z.route("/fs",kV$({getConnection:$.getNatsConnection})),Z.route("/sandbox",zC$()),Z.route("/",_V$()),Z.route("/deco-sites",HE0()),Z.route("/sso",ZE0()),Z.route("/",dE0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",MM$()),$.mountDevAssets)Z.route("/dev-assets",FE0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",Es1()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",VV$()),Z.route("/mcp",xO0()),Z.route("/mcp/self",cE0()),Z.route("/mcp",hO0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var AC$=B(()=>{u8();L11();kM$();A11();UE0();tt();B11();DV$();EV$();SV$();ki();J11();uO0();d$1();CV$();vV$();xV$();gV$();lV$();i$1();iV$();n$1();yO0();jC$()});function z16($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}async function j16($,Z){let X=await fetch(`${$}/rest/v1/apps?select=name,title,description,logo,category,vendors(alias,url)`,{headers:{apikey:Z,Authorization:`Bearer ${Z}`,Accept:"application/json"},signal:AbortSignal.timeout(E16)});if(!X.ok){let G=await X.text().catch(()=>X.statusText);throw console.error(`[deco-apps] Supabase error (${X.status}): ${G.slice(0,200)}`),Error(`External service error (${X.status})`)}return await X.json()}var E16=1e4,P16=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},TC$=()=>{let $=new D1;return $.use("*",P16),$.get("/",async(Z)=>{let X=d0(),G=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!G||!Y)return Z.json({apps:[]});try{let Q=await j16(G,Y);return Z.json({apps:z16(Q)})}catch(Q){return console.error("[deco-apps] GET error:",Q),Z.json({error:"Failed to fetch apps"},502)}}),$};var RC$=B(()=>{u8();V$()});import{z as M1}from"zod";function SK($,Z="invalid_request_error",X=null,G=null){return{error:{message:$,type:Z,param:X,code:G}}}function C16($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),G=$.substring(Z+1);if(!X||!G)return null;return{credentialId:X,modelId:G}}function _16($,Z,X){try{return JSON.parse($)}catch{throw new MC$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function v16($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let G of X.tool_calls)Z[G.id]=G.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:_16(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let G=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:G,output:{type:"text",value:X.content}}]}}})}function b16($){let Z=$.map((X)=>{let G=X.function.parameters?BY(X.function.parameters):BY({type:"object",properties:{}});return[X.function.name,_$({description:X.function.description,inputSchema:G})]});return Object.fromEntries(Z)}function f16($){if(!$)return;return{openai:{response_format:$}}}function x16(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function IC$($,Z,X,G,Y,Q){let J={model:$,messages:Z,tools:X,temperature:G.temperature,maxTokens:G.max_tokens,topP:G.top_p,frequencyPenalty:G.frequency_penalty,presencePenalty:G.presence_penalty,stopSequences:G.stop?Array.isArray(G.stop)?G.stop:[G.stop]:void 0,abortSignal:Q};return Y?{...J,providerOptions:Y}:J}function qC$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var A16=256,T16,R16,I16,q16,M16,k16,S16,V16,MC$,kC$,SC$;var VC$=B(()=>{S4();u8();vg();MH();T16=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),R16=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),I16=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(R16).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),q16=M1.object({type:M1.literal("text")}),M16=M1.object({type:M1.literal("json_object")}),k16=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),S16=M1.union([q16,M16,k16]),V16=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(I16),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(T16).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:S16.optional(),user:M1.string().optional()});MC$=class MC$ extends Error{constructor($){super($);this.name="MessageConversionError"}};kC$=new D1;kC$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(SK("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(SK("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(SK("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let G=await $.req.json(),Y=V16.safeParse(G);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(SK(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let Q=Y.data,J=C16(Q.model);if(!J)return $.json(SK("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((z)=>nB(z.providerId));if(!E)return $.json(SK("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let N;try{N=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(SK(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=N.aiSdk.languageModel(K),F=v16(Q.messages),U=Q.tools?b16(Q.tools):void 0,w=f16(Q.response_format),O=x16(),D=Math.floor(Date.now()/1000);if(Q.stream)return tH($,async(L)=>{let E=IC$(H,F,U,Q,w,$.req.raw.signal);try{let z=_w(E),j=!1,A=0,P="",M=async()=>{if(P.length===0)return;let S=P;P="",await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{content:S},finish_reason:null}]})})};for await(let S of z.fullStream){if(!j&&(S.type==="text-delta"||S.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),j=!0;if(S.type==="text-delta"){if(P+=S.text,P.length>=A16)await M()}else if(S.type==="tool-call"){await M();let q=A++;await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{tool_calls:[{index:q,id:S.toolCallId,type:"function",function:{name:S.toolName,arguments:JSON.stringify(S.input)}}]},finish_reason:null}]})})}else if(S.type==="finish")await M(),await L.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:D,model:Q.model,choices:[{index:0,delta:{},finish_reason:qC$(S.finishReason)}],usage:S.totalUsage?{prompt_tokens:S.totalUsage.inputTokens??0,completion_tokens:S.totalUsage.outputTokens??0,total_tokens:S.totalUsage.totalTokens??0}:void 0})})}await M(),await L.writeSSE({data:"[DONE]"})}catch(z){let j=z;console.error("[openai-compat:stream] Error:",j.message),await L.writeSSE({data:JSON.stringify({error:{message:j.message,type:"server_error"}})})}});else{let L=IC$(H,F,U,Q,w,$.req.raw.signal),E=await Vw(L),z={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)z.tool_calls=E.toolCalls.map((j)=>({id:j.toolCallId,type:"function",function:{name:j.toolName,arguments:JSON.stringify("input"in j?j.input:{})}})),z.content=null;return $.json({id:O,object:"chat.completion",created:D,model:Q.model,choices:[{index:0,message:z,finish_reason:qC$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(G){let Y=G;if(Y.name==="AbortError")return $.json(SK("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(SK(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(SK(Y.message,"server_error"),500)}});SC$=kC$});var _C$;var CC$=B(()=>{_C$={name:"decocms",version:"4.187.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function h16(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??g16}}var vC$,g16="https://ph.studio.decocms.com",bC$;var fC$=B(()=>{u8();VC0();vV();OZ();V$();Z11();CC$();vC$=new D1;vC$.get("/",($)=>{let Z={version:_C$.version,theme:TM1(),...aB().logo&&{logo:aB().logo},...QK()&&{internalUrl:I21()},...d0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!d0().firecrawlApiKey,auth:lq$(),posthog:h16(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!QK()&&d0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});bC$=vC$});function fg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function W81($){return(fg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function yC$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(fg($))}&sz=${Z}`}function xC$($,Z){let X=$.trim();if(X.length<=Z)return X;let G=X.slice(0,Z-1),Y=G.lastIndexOf(" ");return`${(Y>Z*0.6?G.slice(0,Y):G).trimEnd()}\u2026`}function gC$($){let{brand:Z,domain:X,score:G,verdict:Y}=$,Q=typeof G==="number"?`${Z} commerce report \u2014 ${Math.round(G)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?xC$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):xC$(`How does ${X} really perform? ${J}`,200);return{title:Q,description:W}}import{z as c0}from"zod";var bC,u16,c16,l16,d16,hC$;var uC$=B(()=>{bC=c0.enum(["good","bad","neutral"]),u16=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:bC.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),c16=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(u16)),l16={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},d16=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:bC.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:bC.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:bC.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:bC.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(c16).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:bC.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:bC.optional()})).min(1)})]),hC$=c0.object({...l16,template:d16})});function tE0($){let Z=[],X=[...$.sections].sort((G,Y)=>G.position-Y.position).map((G)=>{let Y=hC$.safeParse(G.props);if(Y.success)return Y.data;let Q=Y.error.issues[0];return Z.push({section_type:G.section_type,position:G.position,reason:Q?`${Q.path.join(".")||"(root)"}: ${Q.message}`:"contract violation"}),null}).filter((G)=>G!==null);return{deck:{meta:{...$.meta,scores:$.summary?.scores},slides:X},drops:Z}}var K81=B(()=>{uC$()});import{join as cC$}from"path";async function i16($){try{let Z=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(m16)});if(!Z.ok)return null;let X=await Z.json(),{deck:G}=tE0(X);if(!G.slides.length)return null;let Y=G.slides.find((W)=>W.template.template==="cover"),Q=Y?.template,J=Q&&Q.template==="cover"?Q:void 0;return{brand:G.meta.brand?.trim()||W81($),score:G.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function xY($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function n16($,Z){let X=fg($),G=Z?.brand?.trim()||W81(X),Y=yC$(X,128),J=`${(d0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=gC$({brand:G,domain:X,score:Z?.score,verdict:Z?.verdict}),N=`${J}/og.png`,H=`${G} commerce report by decocms`;return[`<title>${xY(W)}</title>`,`<meta name="description" content="${xY(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${xY(W)}" />`,`<meta property="og:description" content="${xY(K)}" />`,`<meta property="og:url" content="${xY(J)}" />`,`<meta property="og:image" content="${xY(N)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${xY(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${xY(W)}" />`,`<meta name="twitter:description" content="${xY(K)}" />`,`<meta name="twitter:image" content="${xY(N)}" />`,`<meta name="twitter:image:alt" content="${xY(H)}" />`,`<link rel="canonical" href="${xY(J)}" />`,`<link rel="icon" href="${xY(Y)}" sizes="any" />`].join(`
|
|
2733
2733
|
`)}function p16($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2734
|
-
</head>`)}function lC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=fg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(cC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(t16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?cC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await i16(fg(G)),K=n16(G,W);return X.html(p16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var m16=2500,t16=1e4;var dC$=B(()=>{u8();K81();RD();V$()});function Po($,Z){return fetch(`${UW({})}${$}`,Z)}async function o16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Po(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=tE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var r16,_3,oE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},mC$;var iC$=B(()=>{u8();IQ();RD();K81();r16=new Set(["complete","errored","terminated","unknown"]),_3=new D1;_3.use("*",async($,Z)=>{let X=await E8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});_3.use("/run",oE0);_3.use("/status",oE0);_3.use("/link-token/*",oE0);_3.use("/suggest",oE0);_3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await o16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});_3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Po("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${TD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});_3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Po(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${TD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:r16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});_3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Po(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});_3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Po(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});mC$=_3});import{createHmac as a16,timingSafeEqual as s16}from"crypto";function nC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>e16)return!1;let W=a16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&s16(K,H)})}function pC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:VK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function $$6($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function VK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function rE0($){return typeof $==="number"?new Date($*1000):null}function F81($){return VK($)??VK(tQ($)?.id)}function Z$6($){return F81($.subscription)??VK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function X$6($){let Z=rE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function N81($,Z){let X=rE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function H81($,Z){let X=rE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function G$6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=VK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(VK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(VK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=VK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(VK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=F81(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(N81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:F81(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=VK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&N81(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":$$6(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:X$6(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=Z$6(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(N81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:rE0(X.period_end),lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function tC$($){let Z=new AW(c8().db),X=await G$6(Z,$);if(X.handled&&X.topUp)await sH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await Q1$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof J3&&(G.status===400||G.status===404)))throw G}return X}var e16=300;var oC$=B(()=>{YQ();$n();co0()});var Y$6=1048576,U81;var rC$=B(()=>{u8();TC();V$();oC$();U81=new D1;U81.post("/webhook",F7({maxSize:Y$6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!nC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=pC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await tC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function aC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var sC$,Q$6,J$6,eC$;var $_$=B(()=>{u8();AJ();Zy();Ev();sC$=new D1,Q$6=["range","if-none-match","if-modified-since"],J$6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];sC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Og($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Up(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&PJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return aC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of Q$6){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of J$6){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),aC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});eC$=sC$});var Ao=_((fC)=>{var W$6=fC&&fC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),K$6=fC&&fC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))W$6(Z,$,X)};Object.defineProperty(fC,"__esModule",{value:!0});K$6(tG(),fC)});var G_$=_((Z_$)=>{Object.defineProperty(Z_$,"__esModule",{value:!0});Z_$.version=void 0;Z_$.version="3.4.0"});var J_$=_((CK)=>{var N$6=CK&&CK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(CK,"__esModule",{value:!0});CK.NodeTransport=CK.VERSION=void 0;CK.nodeResolveHost=B$6;var h6=Ao(),H$6=j0("net"),w81=j0("tls"),F$6=j0("path"),Y_$=j0("fs"),U$6=N$6(j0("dns")),w$6=G_$();CK.VERSION=w$6.version;var O$6="nats.js";class Q_${socket;version;lang;yields=[];signal=(0,h6.deferred)();closedNotification=(0,h6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=O$6,this.version=CK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,h6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw h6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new h6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new h6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,h6.deferred)(),X,G=(0,H$6.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,h6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=h6.DataBuffer.concat(...this.yields),Y=(0,h6.extractProtocolMessage)(G);if(Y!=="")try{let Q=h6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,h6.deferred)();try{if($=(0,F$6.resolve)($),!(0,Y_$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Y_$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,h6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,h6.deferred)();try{let Y=(0,w81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,h6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,h6.deferred)();try{let G=(0,w81.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,h6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,h6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof w81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,h6.render)($)}`);let Z=(0,h6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,h6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,h6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}CK.NodeTransport=Q_$;function B$6($){let Z=(0,h6.deferred)();return U$6.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var F_$=_((H_$)=>{Object.defineProperty(H_$,"__esModule",{value:!0});H_$.connect=D$6;var W_$=J_$(),K_$=Ao(),N_$=Ao();function D$6($={}){if((0,N_$.hasWsProtocol)($))return Promise.reject(N_$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,K_$.setTransportFactory)({factory:()=>{return new W_$.NodeTransport},dnsResolveFn:W_$.nodeResolveHost}),K_$.NatsConnectionImpl.connect($)}});var U_$=_((oH)=>{var E$6=oH&&oH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),z$6=oH&&oH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))E$6(Z,$,X)};Object.defineProperty(oH,"__esModule",{value:!0});oH.connect=void 0;var j$6=F_$();Object.defineProperty(oH,"connect",{enumerable:!0,get:function(){return j$6.connect}});z$6(Ao(),oH)});function D_$($){let Z=$?.connectFn??R$6,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:T$6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=lG(A$6,P$6,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?w_$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=B_$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function R$6($){return O_$.connect($)}var w_$,O_$,B_$,P$6=100,A$6=3000,T$6=3000;var L_$=B(()=>{K5();w_$=k(Wh(),1),O_$=k(U_$(),1),B_$=k($B(),1)});function O81($,Z){return`${$}.${Z}`}class B81{cache;constructor($){this.cache=Hg({ttlMs:$?.ttlMs??I$6,maxSize:$?.maxSize??q$6})}async get($,Z){return this.cache.get(O81($,Z))??null}async set($,Z,X){this.cache.set(O81($,Z),X)}async invalidate($,Z){this.cache.delete(O81($,Z))}teardown(){this.cache.clear()}}var I$6=600000,q$6=5000;var E_$=()=>{};function aE0($,Z){return`${$}:${Z}`}function D81($){let Z=Hg({ttlMs:$?.ttlMs??M$6,maxSize:$?.maxSize??k$6}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(z_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(aE0(K,N))},set(K,N,H){Z.set(aE0(K,N),H)},invalidate(K,N){Z.delete(aE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(z_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(aE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var z_$="studio.ai-provider-keys.invalidate",M$6=30000,k$6=5000;var j_$=()=>{};class L81{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=P_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of P_$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var P_$;var A_$=B(()=>{P_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var T_$=($)=>{let Z;return()=>Z??=$()},E81,z81;var R_$=B(()=>{N5();E81=T_$(()=>W8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),z81=T_$(()=>W8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function f$6(){return{name:AH,subjects:[`${WO0}.>`],storage:v3.StorageType.File,max_age:C$6,max_bytes:v$6,max_msgs_per_subject:b$6,discard:v3.DiscardPolicy.Old,retention:v3.RetentionPolicy.Limits,duplicate_window:_$6,num_replicas:1}}class M_${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function I_$($){let Z=q_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function h$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,V$6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function u$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class j81{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=f$6(),X=await dG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await v3.jetstreamManager($);try{await G.streams.info(AH),await G.streams.update(AH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(AH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:u$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Q=h$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=bK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=op0(N,{runId:Z}),U=performance.now()-H;if(E81().record(U),z81().add(1,{"org.id":G??"unknown"}),g$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?I_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),y$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=op0(Z,{runId:$,dedup:X});if(E81().record(performance.now()-Y),z81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:I_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=vK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?v3.DeliverPolicy.New:v3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=JO($),W;try{W=await(await G.consumers.get(AH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=UO0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(KO0()).pipeThrough(NO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(AH,{filter:JO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var v3,q_$,S$6=($)=>{let Z;return()=>Z??=$()},V$6,C$6=86400000000000,_$6=120000000000,v$6=4294967296,b$6=500000,x$6,y$6,g$6;var k_$=B(()=>{K5();rp0();wO0();HO0();N5();R_$();v3=k($B(),1),q_$=k(Wh(),1),V$6=S$6(()=>W8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));x$6=process.env.STREAM_ENCODE_TRACE==="1",y$6=process.env.DECOPILOT_STREAM_TRACE==="1";g$6=x$6?new M_$:null});function sE0($,Z,X,G){if(!G)return!1;return $.emit(Z,e3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var S_$=B(()=>{B8()});class P81{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}class A81{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??c$6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??l$6,X=await this.taskBoard.listItemsPendingReview(Z,this.cursor),G=X.at(-1);this.cursor=X.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:Y,organizationId:Q}of X)try{if(await this.reconcileItem(Y,Q))$++}catch(J){console.error(`[task-board-review-sweeper] ${Y} failed`,J)}}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;for(let J of X.threads){let W=J.lastMessage?Xy(J.lastMessage):null;if(!W)continue;await this.taskBoard.linkPr({taskBoardItemId:$,organizationId:Z,url:W.url,prNumber:W.number,repoOwner:W.owner,repoName:W.repo,connectionId:null})}let G=await this.taskBoard.listPrs($,Z);if(G.length===0)return!1;let Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;let Q=await Promise.all(G.map(async(J)=>({...J,...await Vt0(Y,Z,J)})));if(!St0(Q))return!1;return await jO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var c$6=60000,l$6=50;var V_$=B(()=>{yw0();It0();Rp()});import{readdir as d$6,rm as eE0}from"fs/promises";import{join as $z0}from"path";async function Zz0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-m$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await xC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await C_$($,Y,Z);else if(!Y.startsWith(".")){let Q=$z0($,Y),J=await xC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await C_$(Q,K,Z)}if((await xC(Q)).length===0)await eE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function C_$($,Z,X){let G=0,Y=$z0($,Z),Q=await xC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=$z0(Y,W),N=await xC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=$z0(K,F);await eE0(w,{recursive:!0,force:!0}),G++}}if((await xC(K)).length===0)await eE0(K,{recursive:!0,force:!0})}if((await xC(Y)).length===0)await eE0(Y,{recursive:!0,force:!0});return G}async function xC($){try{return(await d$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var m$6=30;var T81=()=>{};import{DBOS as R81,SchedulerMode as i$6}from"@dbos-inc/dbos-sdk";async function p$6(){let $=[sQ(),yC(),fK()],Z=0;for(let X of $)try{Z+=await Zz0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function t$6($,Z){await R81.runStep(()=>p$6(),{name:"monitoringRetention"})}function v_$(){if(__$)return;__$=!0;let $=R81.registerWorkflow(t$6,{name:"monitoringRetentionWorkflow"});R81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:n$6,mode:i$6.ExactlyOncePerIntervalWhenActive})}var n$6="23 4 * * *",__$=!1;var b_$=B(()=>{mG();T81()});function f_$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Dw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await jc0($.db,Z,G.role);return Y.boundAuth=zc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new rD(X,void 0,Y.boundAuth,G.role,"self"),w50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var x_$=B(()=>{aD();Ii()});function o$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function a$6(){for(let $ of r$6)$()}function y_$($){let Z=[...I81.logs,$];I81={...I81,logs:Z.length>500?Z.slice(-500):Z},a$6()}function q81(){return s$6}var I81,r$6,s$6=!1;var M81=B(()=>{I81=o$6(),r$6=new Set});import{EventEmitter as e$6}from"events";var k81;var g_$=B(()=>{M81();k81=new e$6;k81.on("request",($)=>{y_$($)})});function h_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=xg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>xg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${o6.tool}${w}${o6.dim}(${L})${o6.reset}`}else if(U.method)Q=`${o6.dim}${xg(U.method)}${o6.reset}`}}catch{}}let W=xg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${o6.mcp}${xg(H.slice(0,12))}\u2026${o6.reset}`}else if(Y==="/mcp")W=`${o6.mcp}/mcp${o6.reset}`;else if(Y==="/mcp/registry")W=`${o6.mcp}/mcp/registry${o6.reset}`;let K=Z86(G),N=J?"\u25C0":"\u2190";if(!q81())console.log(`${o6.dim}${N}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=$86(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!q81())console.log(`${o6.dim}${O}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${o6.reset} ${o6.duration}${w}${o6.reset}`);k81.emit("request",{method:G,path:xg(Y),status:F,duration:H,timestamp:new Date})}}}var o6,$86=($)=>{if($>=500)return o6.serverError;if($>=400)return o6.clientError;if($>=300)return o6.redirect;return o6.ok},Z86=($)=>{return o6[$]||o6.reset},xg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var u_$=B(()=>{M81();g_$();o6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as m_$}from"crypto";import{mkdir as X86,readdir as G86,rm as c_$,stat as i_$}from"fs/promises";import{join as V81,relative as Y86}from"path";import{z as L$}from"zod";function p_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return V81(Q86,Z)}function t_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function S81($,Z){let X=p_$($),G=t_$(Z);return V81(X,G)}function J86($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return m_$("sha256",Y).update(Q).digest("hex")}function d_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=J86(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${t_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function o_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${m_$("md5","etag").update(G).digest("hex")}"`}async function r_$($,Z,X,G,Y){try{let Q=await G86($,{withFileTypes:!0});for(let J of Q){let W=V81($,J.name),N=Y86(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await r_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await i_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:o_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function a_$($,Z){let G=a($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=p_$(G);await X86(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await r_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=S81(G,Q.key),W=await i_$(J);return{contentType:R11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:o_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??l_$;return{url:d_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??l_$;return{url:d_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=S81(G,Q.key);try{return await c_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=S81(G,K);try{await c_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function C81($,Z,X){let G=a_$(Z,X),Y=new NW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:$5});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new hX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function s_$($,Z,X,G){let Q=a_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var Q86="./data/assets",l_$=3600,n_$,e_$;var $v$=B(()=>{V$();By();u8();Jl();cV();TX();UE0();n_$=new D1;n_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return C81($.req.raw,Z,G)});e_$=n_$});var Zv$={};N4(Zv$,{mountDevRoutes:()=>W86});function W86($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return C81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await s_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",e_$);let X=new D1;X.use("*",V3({mountPath:"/api/dev-assets"})),X.route("/",FE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Xv$=B(()=>{u8();D11();UE0();$v$()});import{sql as K86}from"kysely";import{randomUUID as Gv$}from"crypto";import{z as N86}from"zod";async function F86($){let Z=new Date().toISOString(),X=Gv$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Gv$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await K86`SELECT
|
|
2734
|
+
</head>`)}function lC$($){let Z=new D1;return Z.get("/:domain/og.png",async(X)=>{let G=fg(X.req.param("domain")),Y=async()=>{let Q=$?Bun.file(cC$($,"report-og-fallback.png")):null;if(!Q||!await Q.exists())return X.notFound();return X.body(new Uint8Array(await Q.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let Q=await fetch(`${UW({})}/api/v2/public/diagnostics/${encodeURIComponent(G)}/og.png`,{signal:AbortSignal.timeout(t16)}),J=Q.headers.get("content-type")??"";if(!Q.ok||!J.startsWith("image/")||!Q.body)return Y();return X.body(Q.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let G=X.req.param("domain"),Y=$?cC$($,"index.html"):null,Q=Y?Bun.file(Y):null;if(!Q||!await Q.exists())return X.notFound();let J=await Q.text();try{let W=await i16(fg(G)),K=n16(G,W);return X.html(p16(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var m16=2500,t16=1e4;var dC$=B(()=>{u8();K81();RD();V$()});function Po($,Z){return fetch(`${UW({})}${$}`,Z)}async function o16($,Z,X){let G=new URLSearchParams;if(Z)G.set("pw",Z);if(X)G.set("lang",X);let Y=G.toString()?`?${G.toString()}`:"",Q=await Po(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(Q.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!Q.ok)throw Error(`report read HTTP ${Q.status}`);let J=await Q.json(),{deck:W,drops:K}=tE0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var r16,_3,oE0=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},mC$;var iC$=B(()=>{u8();IQ();RD();K81();r16=new Set(["complete","errored","terminated","unknown"]),_3=new D1;_3.use("*",async($,Z)=>{let X=await E8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});_3.use("/run",oE0);_3.use("/status",oE0);_3.use("/link-token/*",oE0);_3.use("/suggest",oE0);_3.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),G=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let Q=await o16(Z,G,Y);if($.header("Cache-Control","private, no-store"),X||!Q.deck)return $.json(Q);return $.json({...Q,deck:{...Q.deck,slides:Q.deck.slides.slice(0,1)},truncated:Q.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});_3.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let G=typeof X.domain==="string"?X.domain.trim():"";if(!G)return $.json({error:"domain is required"},400);let Y=Z.email,Q=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Po("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${TD({})}`},body:JSON.stringify({url:G,email:Y,distinct_id:Q})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});_3.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Po(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${TD({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",Q={done:r16.has(Y),status:Y};return $.json(Q)}catch{return $.json({error:"status failed"},502)}});_3.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Po(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});_3.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Po(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let G=await X.json();return $.json({suggestions:Array.isArray(G.suggestions)?G.suggestions:[]})}catch{return $.json({suggestions:[]})}});mC$=_3});import{createHmac as a16,timingSafeEqual as s16}from"crypto";function nC$($,Z,X,G=Date.now()){if(!Z||!X)return!1;let Y,Q=[];for(let N of Z.split(",")){let H=N.indexOf("=");if(H<=0)continue;let F=N.slice(0,H).trim(),U=N.slice(H+1).trim();if(F==="t")Y=U;else if(F==="v1")Q.push(U)}if(!Y||Q.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(G/1000-J)>e16)return!1;let W=a16("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return Q.some((N)=>{let H=Buffer.from(N,"hex");return K.length===H.length&&s16(K,H)})}function pC$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=tQ(Z),G=tQ(tQ(X?.data)?.object);if(!X||typeof X.type!=="string"||!G)return null;return{id:VK(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:G}}}function $$6($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function VK($){return typeof $==="string"?$:void 0}function tQ($){return typeof $==="object"&&$!==null?$:void 0}function rE0($){return typeof $==="number"?new Date($*1000):null}function F81($){return VK($)??VK(tQ($)?.id)}function Z$6($){return F81($.subscription)??VK(tQ(tQ($.parent)?.subscription_details)?.subscription)}function X$6($){let Z=rE0($.current_period_end);if(Z)return Z;let X=tQ($.items)?.data;if(!Array.isArray(X))return null;let G=0;for(let Y of X){let Q=tQ(Y)?.current_period_end;if(typeof Q==="number"&&Q>G)G=Q}return G>0?new Date(G*1000):null}function N81($,Z){let X=rE0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function H81($,Z){let X=rE0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function G$6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let G=VK(tQ(X.metadata)?.orgId);if(!G)return{handled:!1,reason:"no orgId"};if(VK(tQ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(VK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=VK(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:G}),{handled:!1,reason:"topup session without id"};let W=Number(tQ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:G,creditCents:tQ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:G,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(VK(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(G);if(!Y)return{handled:!1,reason:"unknown org"};let Q=F81(X.subscription);if(Y.stripeSubscriptionId&&Q&&Y.stripeSubscriptionId!==Q)return console.error("stripe webhook: refused checkout rebind",{organizationId:G,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:Q};if(N81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(G,{stripeCustomerId:F81(X.customer),stripeSubscriptionId:Q,status:"active",lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:G}}case"customer.subscription.updated":case"customer.subscription.deleted":{let G=VK(X.id);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};let Q=Z.type==="customer.subscription.deleted";if(!Q&&N81(Z,Y))return{handled:!1,reason:"stale event"};let J=Q?"canceled":$$6(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:X$6(X),...Q&&{stripeSubscriptionId:null},lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let G=Z$6(X);if(!G)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(G);if(!Y)return{handled:!1,reason:"unknown subscription"};if(N81(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:rE0(X.period_end),lastStripeEventAt:H81(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}async function tC$($){let Z=new AW(c8().db),X=await G$6(Z,$);if(X.handled&&X.topUp)await sH$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId});if(!X.handled&&X.orphanSubscriptionId)try{await Q1$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(G){if(!(G instanceof J3&&(G.status===400||G.status===404)))throw G}return X}var e16=300;var oC$=B(()=>{YQ();$n();co0()});var Y$6=1048576,U81;var rC$=B(()=>{u8();TC();V$();oC$();U81=new D1;U81.post("/webhook",F7({maxSize:Y$6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=d0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!nC$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=pC$(X);if(!Y)return $.json({error:"invalid payload"},400);let Q=await tC$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...Q}),$.json({received:!0})})});function aC$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var sC$,Q$6,J$6,eC$;var $_$=B(()=>{u8();AJ();Zy();Ev();sC$=new D1,Q$6=["range","if-none-match","if-modified-since"],J$6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];sC$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Og($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new G$(401,{message:"Authentication required"})}if(!X)throw new G$(401,{message:"Organization context required"});let G=$.req.path.replace(/^.*\/files\//,"");if(!G)throw new G$(400,{message:"Missing file key"});let Y=await Up(G,Z);if(!Y)throw new G$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&PJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new G$(500,{message:"Invalid data URL from storage"});let[,N,H]=K,F=Buffer.from(H,"base64"),U=new Headers({"Content-Type":N,"Cache-Control":"private, max-age=86400"});return aC$(U,N),new Response(F,{status:200,headers:U})}let Q=new Headers;for(let K of Q$6){let N=$.req.header(K);if(N)Q.set(K,N)}let J=await fetch(Y,{headers:Q});if(J.status===403||J.status===404)throw new G$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,G),new G$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of J$6){let N=J.headers.get(K);if(N)W.set(K,N)}return W.set("Cache-Control","private, max-age=86400"),aC$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});eC$=sC$});var Ao=_((fC)=>{var W$6=fC&&fC.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),K$6=fC&&fC.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))W$6(Z,$,X)};Object.defineProperty(fC,"__esModule",{value:!0});K$6(tG(),fC)});var G_$=_((Z_$)=>{Object.defineProperty(Z_$,"__esModule",{value:!0});Z_$.version=void 0;Z_$.version="3.4.0"});var J_$=_((CK)=>{var N$6=CK&&CK.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(CK,"__esModule",{value:!0});CK.NodeTransport=CK.VERSION=void 0;CK.nodeResolveHost=B$6;var h6=Ao(),H$6=j0("net"),w81=j0("tls"),F$6=j0("path"),Y_$=j0("fs"),U$6=N$6(j0("dns")),w$6=G_$();CK.VERSION=w$6.version;var O$6="nats.js";class Q_${socket;version;lang;yields=[];signal=(0,h6.deferred)();closedNotification=(0,h6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=O$6,this.version=CK.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:G}=X||{};try{if(G===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,h6.checkOptions)(Y,Z);let{tls_required:Q,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!G&&(Q||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(Q&&this.socket.encrypted!==!0)throw h6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let Q=Y;if(!Q)Q=new h6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=Q,W=J==="ECONNREFUSED"?new h6.errors.ConnectionError("connection refused",{cause:Q}):Q;throw this.socket?.destroy(),W}}dial($){let Z=(0,h6.deferred)(),X,G=(0,H$6.createConnection)($.port,$.hostname,()=>{Z.resolve(G),G.removeAllListeners()});return G.on("error",(Y)=>{X=Y}),G.on("close",()=>{G.removeAllListeners(),Z.reject(X)}),G.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,h6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let G=h6.DataBuffer.concat(...this.yields),Y=(0,h6.extractProtocolMessage)(G);if(Y!=="")try{let Q=h6.INFO.exec(Y);if(!Q)throw Error("unexpected response from server");let J=JSON.parse(Q[1]);$.resolve(J)}catch(Q){$.reject(Q)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,h6.deferred)();try{if($=(0,F$6.resolve)($),!(0,Y_$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Y_$.readFile)($,(X,G)=>{if(X)return Z.reject(X);Z.resolve(G)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:G,ca:Y,keyFile:Q,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(Q){let W=await this.loadFile(Q);if(W)$.key=W}else if(J)$.key=J;if(G){let W=await this.loadFile(G);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,h6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}let G=(0,h6.deferred)();try{let Y=(0,w81.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),G.resolve(Y)});Y.on("error",(Q)=>{Z=Q}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{G.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){G.reject(new h6.errors.ConnectionError(Y.message,{cause:Y}))}return G}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let G=await this.loadClientCerts()||{};Z=(0,h6.extend)(Z,this.options.tls,G)}catch(G){return Promise.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}let X=(0,h6.deferred)();try{let G=(0,w81.connect)(Z,()=>{G.removeAllListeners(),X.resolve(G)});G.on("error",(Y)=>{$=Y}),G.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!G.authorized)throw G.authorizationError}),G.on("close",()=>{X.reject($),G.removeAllListeners()})}catch(G){X.reject(new h6.errors.ConnectionError(G.message,{cause:G}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,h6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,h6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof w81.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,h6.render)($)}`);let Z=(0,h6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,h6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,h6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}CK.NodeTransport=Q_$;function B$6($){let Z=(0,h6.deferred)();return U$6.default.lookup($,{all:!0},(X,G)=>{if(X){Z.reject(X);return}let Y=[];for(let Q of G)Y.push(Q.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var F_$=_((H_$)=>{Object.defineProperty(H_$,"__esModule",{value:!0});H_$.connect=D$6;var W_$=J_$(),K_$=Ao(),N_$=Ao();function D$6($={}){if((0,N_$.hasWsProtocol)($))return Promise.reject(N_$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,K_$.setTransportFactory)({factory:()=>{return new W_$.NodeTransport},dnsResolveFn:W_$.nodeResolveHost}),K_$.NatsConnectionImpl.connect($)}});var U_$=_((oH)=>{var E$6=oH&&oH.__createBinding||(Object.create?function($,Z,X,G){if(G===void 0)G=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,G,Y)}:function($,Z,X,G){if(G===void 0)G=X;$[G]=Z[X]}),z$6=oH&&oH.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))E$6(Z,$,X)};Object.defineProperty(oH,"__esModule",{value:!0});oH.connect=void 0;var j$6=F_$();Object.defineProperty(oH,"connect",{enumerable:!0,get:function(){return j$6.connect}});z$6(Ao(),oH)});function D_$($){let Z=$?.connectFn??R$6,X=null,G=null,Y=!1,Q=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function N(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let w of U.status())if(w.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(w.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,G=null,N()})().catch(()=>{})}async function F(U,w){let O=0;while(!Q)try{X=await Z({servers:U,timeout:T$6,reconnect:!0,maxReconnectAttempts:-1,...w?{authenticator:w}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),G=null,J=!1,H(X),N();return}catch{O++;let D=lG(A$6,P$6,O-1,2,0.5);await a$(D)}}return{init(U,w){if(Y)return;Y=!0,Q=!1;let O=w?.creds?w_$.credsAuthenticator(new TextEncoder().encode(w.creds)):void 0;F(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!G)G=B_$.jetstream(X);return G},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(Q=!0,Y=!1,G=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function R$6($){return O_$.connect($)}var w_$,O_$,B_$,P$6=100,A$6=3000,T$6=3000;var L_$=B(()=>{K5();w_$=k(Wh(),1),O_$=k(U_$(),1),B_$=k($B(),1)});function O81($,Z){return`${$}.${Z}`}class B81{cache;constructor($){this.cache=Hg({ttlMs:$?.ttlMs??I$6,maxSize:$?.maxSize??q$6})}async get($,Z){return this.cache.get(O81($,Z))??null}async set($,Z,X){this.cache.set(O81($,Z),X)}async invalidate($,Z){this.cache.delete(O81($,Z))}teardown(){this.cache.clear()}}var I$6=600000,q$6=5000;var E_$=()=>{};function aE0($,Z){return`${$}:${Z}`}function D81($){let Z=Hg({ttlMs:$?.ttlMs??M$6,maxSize:$?.maxSize??k$6}),X=$?.getConnection,G=crypto.randomUUID(),Y=new TextEncoder,Q=new TextDecoder,J=null;function W(K,N){let H=X?.();if(!H)return;try{H.publish(z_$,Y.encode(JSON.stringify({organizationId:K,keyId:N,originId:G})))}catch(F){console.warn("[ProviderKeyCache] Publish failed (non-critical):",F)}}return{get(K,N){return Z.get(aE0(K,N))},set(K,N,H){Z.set(aE0(K,N),H)},invalidate(K,N){Z.delete(aE0(K,N)),W(K,N)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(z_$),(async()=>{for await(let N of J)try{let H=JSON.parse(Q.decode(N.data));if(H.originId===G)continue;Z.delete(aE0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var z_$="studio.ai-provider-keys.invalidate",M$6=30000,k$6=5000;var j_$=()=>{};class L81{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=P_$.map((G)=>Z.subscribe(G));for(let G of this.subscriptions)(async()=>{for await(let Y of G)try{let Q=JSON.parse(X.decode(Y.data));if(Q.originId===this.originId)continue;if(Q.messageId&&this.hasSeen(Q.messageId))continue;this.onCancel?.(Q.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let G of P_$)Z.publish(G,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var P_$;var A_$=B(()=>{P_$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var T_$=($)=>{let Z;return()=>Z??=$()},E81,z81;var R_$=B(()=>{N5();E81=T_$(()=>W8.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),z81=T_$(()=>W8.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function f$6(){return{name:AH,subjects:[`${WO0}.>`],storage:v3.StorageType.File,max_age:C$6,max_bytes:v$6,max_msgs_per_subject:b$6,discard:v3.DiscardPolicy.Old,retention:v3.RetentionPolicy.Limits,duplicate_window:_$6,num_replicas:1}}class M_${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function I_$($){let Z=q_$.headers();for(let[X,G]of Object.entries($))Z.set(X,G);return Z}function h$6($,Z){let X=0;return{publish(G,Y,Q,J){G.publish(Y,Q,J?{headers:J}:void 0).catch((W)=>{if(X++,V$6().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function u$6($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class j81{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=f$6(),X=await dG(async()=>{let G=this.options.getJetStreamManager?await this.options.getJetStreamManager():await v3.jetstreamManager($);try{await G.streams.info(AH),await G.streams.update(AH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await G.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await G.streams.delete(AH),await G.streams.add(Z);else throw Y}return G},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:u$6});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,G){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let Q=h$6(Z,G),J=!1,W=()=>{if(J)return;J=!0;let N=bK$(Z);Y.publish(N.subject,N.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(N)=>{let H=performance.now(),F=op0(N,{runId:Z}),U=performance.now()-H;if(E81().record(U),z81().add(1,{"org.id":G??"unknown"}),g$6?.record(U,F.reduce((w,O)=>w+O.data.length,0)),F.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let w of F)Q.publish(Y,w.subject,w.data,w.headers?I_$(w.headers):void 0)};return(async()=>{let N=$.getReader(),H=0,F=0,U;try{while(!0){let{done:w,value:O}=await N.read();if(w)break;if(K(O),F++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(w){U=w,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,w?.message??w)}finally{if(N.releaseLock(),W(),y$6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:F,publishErrors:Q.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let G=this.js;if(!G)return!1;let Y=performance.now(),Q=op0(Z,{runId:$,dedup:X});if(E81().record(performance.now()-Y),z81().add(1),Q.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of Q)await G.publish(J.subject,J.data,{...J.headers?{headers:I_$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let G=this.js;if(!G)return!1;let Y=vK$({runId:$,fenceToken:Z,finalSeq:X});return await G.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let G=this.js;if(!G)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?v3.DeliverPolicy.New:v3.DeliverPolicy.All,Q=X?.closeOnDone??!1,J=JO($),W;try{W=await(await G.consumers.get(AH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=UO0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(KO0()).pipeThrough(NO0()).getReader(),F=!1,U=()=>{if(F)return;F=!0;try{H.releaseLock()}catch{}},w=!1,O=()=>{if(w)return;w=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){O(),D.close();return}let z=E;if(z.kind==="done"){if(Q){O(),D.close();return}continue}D.enqueue(z.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(AH,{filter:JO($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var v3,q_$,S$6=($)=>{let Z;return()=>Z??=$()},V$6,C$6=86400000000000,_$6=120000000000,v$6=4294967296,b$6=500000,x$6,y$6,g$6;var k_$=B(()=>{K5();rp0();wO0();HO0();N5();R_$();v3=k($B(),1),q_$=k(Wh(),1),V$6=S$6(()=>W8.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));x$6=process.env.STREAM_ENCODE_TRACE==="1",y$6=process.env.DECOPILOT_STREAM_TRACE==="1";g$6=x$6?new M_$:null});function sE0($,Z,X,G){if(!G)return!1;return $.emit(Z,e3(X,G.status,{title:G.title??void 0,virtualMcpId:G.virtual_mcp_id??void 0,createdBy:G.created_by??void 0,triggerId:G.trigger_id??null,branch:G.branch??null,harnessId:G.harness_id??void 0,createdAt:G.created_at,updatedAt:G.updated_at})),!0}var S_$=B(()=>{B8()});class P81{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}class A81{taskBoard;contextFactory;options;timer=null;running=!1;cursor=null;constructor($,Z,X={}){this.taskBoard=$;this.contextFactory=Z;this.options=X}start(){if(this.timer)return;let $=this.options.intervalMs??c$6;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??l$6,X=await this.taskBoard.listItemsPendingReview(Z,this.cursor),G=X.at(-1);this.cursor=X.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:Y,organizationId:Q}of X)try{if(await this.reconcileItem(Y,Q))$++}catch(J){console.error(`[task-board-review-sweeper] ${Y} failed`,J)}}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reconcileItem($,Z){let X=await this.taskBoard.getById($,Z);if(!X)return!1;for(let J of X.threads){let W=J.lastMessage?Xy(J.lastMessage):null;if(!W)continue;await this.taskBoard.linkPr({taskBoardItemId:$,organizationId:Z,url:W.url,prNumber:W.number,repoOwner:W.owner,repoName:W.repo,connectionId:null})}let G=await this.taskBoard.listPrs($,Z);if(G.length===0)return!1;let Y=await this.contextFactory(Z,X.assignedBy??X.createdBy);if(!Y)return!1;let Q=await Promise.all(G.map(async(J)=>({...J,...await Vt0(Y,Z,J)})));if(Q.every((J)=>J.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${Q.length} PR(s)) \u2014 proceeding on unknown`);if(!St0(Q))return!1;return await jO0(Y,X),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var c$6=60000,l$6=50;var V_$=B(()=>{yw0();It0();Rp()});import{readdir as d$6,rm as eE0}from"fs/promises";import{join as $z0}from"path";async function Zz0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-m$6),Z.setUTCHours(0,0,0,0);let X=0;try{let G=await xC($);for(let Y of G)if(/^\d{4}$/.test(Y))X+=await C_$($,Y,Z);else if(!Y.startsWith(".")){let Q=$z0($,Y),J=await xC(Q);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await C_$(Q,K,Z)}if((await xC(Q)).length===0)await eE0(Q,{recursive:!0,force:!0})}}catch(G){console.warn("monitoring retention cleanup failed:",G)}return X}async function C_$($,Z,X){let G=0,Y=$z0($,Z),Q=await xC(Y);for(let W of Q){if(!/^\d{2}$/.test(W))continue;let K=$z0(Y,W),N=await xC(K);for(let F of N){if(!/^\d{2}$/.test(F))continue;let U=new Date(`${Z}-${W}-${F}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let w=$z0(K,F);await eE0(w,{recursive:!0,force:!0}),G++}}if((await xC(K)).length===0)await eE0(K,{recursive:!0,force:!0})}if((await xC(Y)).length===0)await eE0(Y,{recursive:!0,force:!0});return G}async function xC($){try{return(await d$6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var m$6=30;var T81=()=>{};import{DBOS as R81,SchedulerMode as i$6}from"@dbos-inc/dbos-sdk";async function p$6(){let $=[sQ(),yC(),fK()],Z=0;for(let X of $)try{Z+=await Zz0(X)}catch(G){console.error("[monitoring-retention] cleanup failed:",G)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function t$6($,Z){await R81.runStep(()=>p$6(),{name:"monitoringRetention"})}function v_$(){if(__$)return;__$=!0;let $=R81.registerWorkflow(t$6,{name:"monitoringRetentionWorkflow"});R81.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:n$6,mode:i$6.ExactlyOncePerIntervalWhenActive})}var n$6="23 4 * * *",__$=!1;var b_$=B(()=>{mG();T81()});function f_$($){return async(Z,X)=>{let G=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!G)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await Dw.create();Y.auth.user={id:X,role:G.role},Y.organization={id:G.orgId,slug:G.orgSlug,name:G.orgName};let Q=await jc0($.db,Z,G.role);return Y.boundAuth=zc0({auth:Y.authInstance,headers:new Headers,role:G.role,permissions:Q,userId:X}),Y.access=new rD(X,void 0,Y.boundAuth,G.role,"self"),w50(Y,{id:G.orgId,slug:G.orgSlug}),Y}}var x_$=B(()=>{aD();Ii()});function o$6(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function a$6(){for(let $ of r$6)$()}function y_$($){let Z=[...I81.logs,$];I81={...I81,logs:Z.length>500?Z.slice(-500):Z},a$6()}function q81(){return s$6}var I81,r$6,s$6=!1;var M81=B(()=>{I81=o$6(),r$6=new Set});import{EventEmitter as e$6}from"events";var k81;var g_$=B(()=>{M81();k81=new e$6;k81.on("request",($)=>{y_$($)})});function h_$(){return async($,Z)=>{let X=Date.now(),G=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let Q="",J=!1;if(Y.startsWith("/mcp")&&G==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let w=xg(U.params.name),O=U.params.arguments||{},D=Object.keys(O).map((E)=>xg(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";Q=`${o6.tool}${w}${o6.dim}(${L})${o6.reset}`}else if(U.method)Q=`${o6.dim}${xg(U.method)}${o6.reset}`}}catch{}}let W=xg(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${o6.mcp}${xg(H.slice(0,12))}\u2026${o6.reset}`}else if(Y==="/mcp")W=`${o6.mcp}/mcp${o6.reset}`;else if(Y==="/mcp/registry")W=`${o6.mcp}/mcp/registry${o6.reset}`;let K=Z86(G),N=J?"\u25C0":"\u2190";if(!q81())console.log(`${o6.dim}${N}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""}`);try{await Z()}finally{let H=Date.now()-X,F=$.res.status,U=$86(F),w=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!q81())console.log(`${o6.dim}${O}${o6.reset} ${K}${G}${o6.reset} ${W}${Q?` ${Q}`:""} ${U}${F}${o6.reset} ${o6.duration}${w}${o6.reset}`);k81.emit("request",{method:G,path:xg(Y),status:F,duration:H,timestamp:new Date})}}}var o6,$86=($)=>{if($>=500)return o6.serverError;if($>=400)return o6.clientError;if($>=300)return o6.redirect;return o6.ok},Z86=($)=>{return o6[$]||o6.reset},xg=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var u_$=B(()=>{M81();g_$();o6={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as m_$}from"crypto";import{mkdir as X86,readdir as G86,rm as c_$,stat as i_$}from"fs/promises";import{join as V81,relative as Y86}from"path";import{z as L$}from"zod";function p_$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return V81(Q86,Z)}function t_$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function S81($,Z){let X=p_$($),G=t_$(Z);return V81(X,G)}function J86($,Z,X,G){let Y=d0().encryptionKey||"dev-secret",Q=`${$}:${Z}:${X}:${G}`;return m_$("sha256",Y).update(Q).digest("hex")}function d_$($,Z,X,G,Y){let Q=Math.floor(Date.now()/1000)+G,J=J86(Z,X,Q,Y),W=new URL(`/api/dev-assets/${Z}/${t_$(X)}`,$);return W.searchParams.set("expires",Q.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function o_$($,Z,X){let G=`${$}:${Z.getTime()}:${X}`;return`"${m_$("md5","etag").update(G).digest("hex")}"`}async function r_$($,Z,X,G,Y){try{let Q=await G86($,{withFileTypes:!0});for(let J of Q){let W=V81($,J.name),N=Y86(Z,W).replace(/\\/g,"/");if(X&&!N.startsWith(X))continue;if(J.isDirectory())if(G){let H=N+"/";if(!X||H.startsWith(X)){if(!(X?N.slice(X.length):N).includes("/"))Y.commonPrefixes.add(H)}}else await r_$(W,Z,X,G,Y);else if(J.isFile()){if(G&&X){let H=N.slice(X.length);if(H.includes(G)){let F=H.indexOf(G),U=X+H.slice(0,F+1);Y.commonPrefixes.add(U);continue}}try{let H=await i_$(W);Y.objects.push({key:N,size:H.size,lastModified:H.mtime.toISOString(),etag:o_$(W,H.mtime,H.size)})}catch{}}}}catch{}}function a_$($,Z){let G=a($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:L$.object({prefix:L$.string().optional(),maxKeys:L$.number().optional().default(1000),continuationToken:L$.string().optional(),delimiter:L$.string().optional()}),outputSchema:L$.object({objects:L$.array(L$.object({key:L$.string(),size:L$.number(),lastModified:L$.string(),etag:L$.string()})),nextContinuationToken:L$.string().optional(),isTruncated:L$.boolean(),commonPrefixes:L$.array(L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=Q.prefix||"",W=Q.maxKeys??1000,K=Q.delimiter,N=Q.continuationToken,H=p_$(G);await X86(H,{recursive:!0});let F={objects:[],commonPrefixes:new Set};await r_$(H,H,J,K,F),F.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(N){if(U=F.objects.findIndex((L)=>L.key>N),U===-1)U=F.objects.length}let w=F.objects.slice(U,U+W),O=U+W<F.objects.length,D=O?w[w.length-1]?.key:void 0;return{objects:w,isTruncated:O,nextContinuationToken:D,commonPrefixes:Array.from(F.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({contentType:L$.string().optional(),contentLength:L$.number(),lastModified:L$.string(),etag:L$.string(),metadata:L$.record(L$.string(),L$.string()).optional()}),handler:async(Y)=>{let Q=Y,J=S81(G,Q.key),W=await i_$(J);return{contentType:R11(Q.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:o_$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??l_$;return{url:d_$(Z,G,Q.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:L$.object({key:L$.string(),expiresIn:L$.number().optional(),contentType:L$.string().optional()}),outputSchema:L$.object({url:L$.string(),expiresIn:L$.number()}),handler:async(Y)=>{let Q=Y,J=Q.expiresIn??l_$;return{url:d_$(Z,G,Q.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:L$.object({key:L$.string()}),outputSchema:L$.object({success:L$.boolean(),key:L$.string()}),handler:async(Y)=>{let Q=Y,J=S81(G,Q.key);try{return await c_$(J),{success:!0,key:Q.key}}catch{return{success:!1,key:Q.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:L$.object({keys:L$.array(L$.string()).max(1000)}),outputSchema:L$.object({deleted:L$.array(L$.string()),errors:L$.array(L$.object({key:L$.string(),message:L$.string()}))}),handler:async(Y)=>{let Q=Y,J=[],W=[];return await Promise.all(Q.keys.map(async(K)=>{let N=S81(G,K);try{await c_$(N),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function C81($,Z,X){let G=a_$(Z,X),Y=new NW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:$5});for(let J of G){let W="shape"in J.inputSchema?J.inputSchema.shape:L$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:L$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(N)=>{try{let H=await J.handler(N);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let Q=new hX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(Q),hQ(Y,Q,$,"mcp:dev-assets")}async function s_$($,Z,X,G){let Q=a_$(X,G).find((J)=>J.name===$);if(!Q)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await Q.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var Q86="./data/assets",l_$=3600,n_$,e_$;var $v$=B(()=>{V$();By();u8();Jl();cV();TX();UE0();n_$=new D1;n_$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),G=`${X.protocol}//${X.host}`;return C81($.req.raw,Z,G)});e_$=n_$});var Zv$={};N4(Zv$,{mountDevRoutes:()=>W86});function W86($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`;return C81(G.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(G)=>{let Y=G.get("studioContext"),Q=new URL(G.req.url),J=`${Q.protocol}//${Q.host}`,W=G.req.param("toolName");if(!W)return G.json({error:"Missing tool name"},400);let K=await G.req.json(),N=await s_$(W,K,Y,J);if(N.isError)return G.json(N.content,500);return G.json(N.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",e_$);let X=new D1;X.use("*",V3({mountPath:"/api/dev-assets"})),X.route("/",FE0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Xv$=B(()=>{u8();D11();UE0();$v$()});import{sql as K86}from"kysely";import{randomUUID as Gv$}from"crypto";import{z as N86}from"zod";async function F86($){let Z=new Date().toISOString(),X=Gv$(),G=x4.SELF($.organizationId),Y="registry.publish_request.created",Q={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:G,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(Q),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",G)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Gv$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await K86`SELECT
|
|
2735
2735
|
pg_notify('studio_events', ${X}),
|
|
2736
2736
|
pg_notify('mesh_events', ${X})
|
|
2737
2737
|
`.execute($.db)}catch{}}async function U86($,Z){let G=(await $.selectFrom("organization").select(["id"]).where("id","=",Z).execute())[0];if(G?.id)return G.id;return(await $.selectFrom("organization").select(["id"]).where("slug","=",Z).execute())[0]?.id??null}async function w86($,Z){let X=await $.selectFrom("virtual_mcp_plugin_configs").innerJoin("connections","connections.id","virtual_mcp_plugin_configs.virtual_mcp_id").select(["virtual_mcp_plugin_configs.settings as settings"]).where("connections.organization_id","=",Z).where("virtual_mcp_plugin_configs.plugin_id","=",zC).execute();for(let G of X){let Y=G.settings,Q=typeof Y==="string"?(()=>{try{return JSON.parse(Y)}catch{return{}}})():Y??{};if(Q.acceptPublishRequests===!0){let J=Q.rateLimitWindow==="minute"?"minute":"hour",W=Q.rateLimitMax,K=typeof W==="number"&&Number.isFinite(W)&&W>=1?Math.floor(W):Qv$;return{acceptPublishRequests:!0,requireApiToken:Q.requireApiToken===!0,rateLimitEnabled:Q.rateLimitEnabled===void 0?Yv$:Q.rateLimitEnabled===!0,rateLimitWindow:J,rateLimitMax:K}}}return{acceptPublishRequests:!1,requireApiToken:!1,rateLimitEnabled:Yv$,rateLimitWindow:H86,rateLimitMax:Qv$}}async function O86($,Z,X){let G=X==="minute"?60000:3600000,Y=new Date(Date.now()-G).toISOString(),Q=await $.selectFrom("private_registry_publish_request").select((J)=>J.fn.countAll().as("count")).where("organization_id","=",Z).where("created_at",">=",Y).executeTakeFirst();return Number(Q?.count??0)}async function B86($,Z,X,G){let Y=await $.selectFrom("private_registry_item").select(["id","title"]).where("organization_id","=",Z).where((Q)=>Q.or([Q("id","=",X),Q("title","=",G)])).executeTakeFirst();return Y?{id:String(Y.id),title:String(Y.title)}:null}function Jv$($){let{db:Z,db:X}=$,G=new Bf(X),Y=new Df(X);return async(Q)=>{let J=Q.req.param("orgRef")??Q.req.param("org");if(!J)return Q.json({error:"Organization not found"},404);let W=await U86(Z,J);if(!W)return Q.json({error:"Organization not found"},404);let K=await w86(Z,W);if(!K.acceptPublishRequests)return Q.json({error:"Publish requests are not enabled for this registry."},403);if(K.requireApiToken){let w=Q.req.header("Authorization"),O=w?.startsWith("Bearer ")?w.slice(7).trim():null;if(!O)return Q.json({error:"API key required. Use Authorization: Bearer <key>"},401);if(!await Y.validate(W,O))return Q.json({error:"Invalid API key"},401)}if(K.rateLimitEnabled){if(await O86(X,W,K.rateLimitWindow)>=K.rateLimitMax)return Q.json({error:"Too many publish requests. Please try again later.",retryAfterSeconds:K.rateLimitWindow==="minute"?60:3600},429)}let N;try{N=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}let H=sR$.safeParse(N);if(!H.success)return Q.json({error:"Invalid publish request payload",details:N86.treeifyError(H.error)},400);let F=await B86(X,W,H.data.data.id,H.data.data.title);if(F)return Q.json({error:"A registry item with the same id or title already exists. Please use a different name/id.",conflict:F},409);let U=await G.createOrUpdate({organization_id:W,requested_id:H.data.data.id,title:H.data.data.title,description:H.data.data.description??null,_meta:H.data.data._meta,server:H.data.data.server,requester_name:H.data.requester?.name??null,requester_email:H.data.requester?.email??null});try{await F86({db:Z,organizationId:W,request:U})}catch(w){console.warn("[private-registry] failed to emit publish-request event:",w)}return y1.capture({distinctId:H.data.requester?.email??`org:${W}`,event:"registry_publish_request_submitted",groups:{organization:W},properties:{organization_id:W,request_id:U.id,requested_id:U.requested_id,title:H.data.data.title,requester_email:H.data.requester?.email??null}}),Q.json({id:U.id,requested_id:U.requested_id,status:U.status},201)}}var Yv$=!0,H86="hour",Qv$=100;var Wv$=B(()=>{D6();B8();Ug();hy0();uy0();e5()});var Kv$={};N4(Kv$,{createPublishRequestHandler:()=>Jv$,createPublicMCPHandler:()=>YI$});var Nv$=B(()=>{Fg();Wv$()});var Lv$={};N4(Lv$,{watchHandler:()=>Dv$,resolveCorsOrigin:()=>Bv$,isSsoExemptPath:()=>Ov$,createApp:()=>M86});import{readFileSync as D86}from"fs";import{PrometheusSerializer as L86}from"@opentelemetry/exporter-prometheus";import{DBOS as yg}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as A86,oAuthProtectedResourceMetadata as T86}from"better-auth/plugins";async function E86($){let Z=$.connect(),X;try{X=await Promise.race([Z,Fv$(Hv$)])}catch{return Z.then((G)=>G.release(!0)).catch(()=>{}),!1}try{return await Promise.race([X.query("SELECT 1"),Fv$(Hv$)]),X.release(),!0}catch{return X.release(!0),!1}}function Fv$($){return new Promise((Z,X)=>setTimeout(()=>X(Error("pg health-check timeout")),$))}async function z86($,Z){let{items:X}=await $.storage.connections.list(Z,{where:{field:["connection_url"],operator:"like",value:`${kq1}%`},limit:1}),G=X[0];if(!G?.configuration_state)return null;return G.configuration_state.project_locator}function j86($){let Z=new URLSearchParams;if($){let[X,G]=$.split("/");if(X)Z.set("workspace_hint",X);if(G)Z.set("project_hint",G)}else Z.set("auto_personal","true");return Z.set("force_new","true"),Z}function Ov$($){return $.startsWith("/api/org-sso/")||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${X11}/`)}function Bv$($,{baseUrl:Z,requestOrigin:X}){let G;try{G=new URL($).hostname}catch{return null}if(G==="localhost"||G==="127.0.0.1")return $;let Y=Z??X;try{if(new URL(Y).origin===$)return $}catch{}return null}async function M86($={}){let Z=$.database??c8(),X=!1;r5.stop().catch((i)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",i)});let G,Y,Q=new B81,J,W,K,N=null;if($.disableNats)J=D81(),G={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},Y=new kp,W={start:async()=>{},broadcast:()=>{},publishControlFrame:()=>{},stop:async()=>{}},K={init:async()=>{},pump:(i)=>{return(async()=>{let V0=i.getReader();try{while(!0){let{done:$1}=await V0.read();if($1)break}}catch{}finally{V0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{N=D_$();let i=d0().natsCredsPath,V0;if(i)try{V0=D86(i,"utf8")}catch(k0){console.error(`[app] failed to read NATS_CREDS at ${i}; connecting anonymously`,k0)}N.init(d0().natsUrls,V0?{creds:V0}:void 0);let $1=ty0()?new xf0({getJetStream:()=>N.getJetStream()}):null;$1?.init().catch(()=>{}),G=$1;let z1=new Bo0({getJetStream:()=>N.getJetStream()});z1.init().catch(()=>{}),Y=z1,J=D81({getConnection:()=>N.getConnection()}),W=new L81({getConnection:()=>N.getConnection()}),K=new j81({getConnection:()=>N.getConnection(),getJetStream:()=>N.getJetStream()}),Aq$(N),N.onReady(()=>{$1?.init().catch((k0)=>{console.error("[McpListCache] Deferred init failed:",k0)}),z1.init().catch((k0)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",k0)}),J.start(),Si1(()=>N.getConnection()),K.init().catch((k0)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",k0)})})}if(gO)await gO();yf0(G),Do0(Y);let F={storage:new Tf(Z.db),sseHub:r5,onThreadFinished:(i,V0)=>Yy(new uN(Z.db),i,V0,new AW(Z.db))},U=new Xt0(F),w=new od(Z.db),O=new P81(w);O.start(),W.start((i)=>{iw0(i),U.execute({type:"CANCEL",taskId:i}).catch((V0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",V0)})}).catch((i)=>{console.error("[Decopilot] CancelBroadcast start failed:",i)}),N?.onReady(()=>{W.start().catch((i)=>{console.error("[CancelBroadcast] Deferred start failed:",i)})});let D=()=>N?.getConnection()??null;N11(D),N?.onReady(()=>N11(D)),K.init().catch((i)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",i)}),gO=async()=>{await U.stopAll(),U.dispose(),O.dispose(),W.stop().catch(()=>{}),NM$(),K.teardown(),G?.teardown(),Q.teardown(),J.teardown(),Vi1(),Y.teardown(),yf0(null),Do0(null)};let L=new D1;if(L.use("*",RC0({enabled:(i)=>Pv(i,"debug")==="1"})),L.use("*",Pz0),L.use("/*",wM1({origin:(i,V0)=>Bv$(i,{baseUrl:d0().baseUrl,requestOrigin:new URL(V0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),L.use("*",async(i,V0)=>{if(await V0(),i.req.path.includes("/files/"))return;if(i.req.path.includes("/fs/")&&i.req.path.endsWith("/read"))return;i.header("X-Frame-Options","DENY"),i.header("Content-Security-Policy","frame-ancestors 'none'")}),!d0().noTui)L.use("*",h_$());L.use("*",async(i,V0)=>{if(await V0(),lg(i.req.path))return;if(i.res.status>=500){let z1=await i.res.clone().text();console.error(`[5xx Response] ${i.req.method} ${i.req.path} - ${i.res.status}:`,z1)}}),L.get(_Z.HEALTH,(i)=>{if(X)return i.json({status:"shutting_down"},503);return i.json({status:"ok"})}),L.get(_Z.HEALTH_LIVE,(i)=>{return i.json({status:"ok"})}),L.get(_Z.HEALTH_READY,async(i)=>{if(X)return i.json({status:"shutting_down"},503);let V0={};if(V0.postgres={status:await E86(Z.pool)?"up":"down"},N)V0.nats=N.isConnected()?{status:"up"}:{status:"down"};else V0.nats={status:"down"};let $1=V0.postgres.status==="up",z1=$1?200:503;return i.json({status:$1?"ready":"not_ready",services:V0},z1)}),L.get(_Z.METRICS,async(i)=>{try{let V0=await Iz0.collect(),$1=P86.serialize(V0.resourceMetrics);return i.text($1,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(V0){return console.error("Failed to collect metrics:",V0),i.text("# Error collecting metrics",500)}}),L.get(`${_Z.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(i)=>{let V0=i.req.param("queueName");if(!R86.has(V0))return i.json({error:`Unknown queue: ${V0}`},404);let $1=await yg.listQueuedWorkflows({queueName:V0,status:"ENQUEUED"});return i.json({queue_length:$1.length})}),L.get(_Z.HOSTED_RUN_PENDING,(i)=>{let{active:V0,pending:$1,max:z1}=NN$();return i.json({pending:$1,active:V0,max:z1})}),L.route("/api/config",bC$),L.route("/api/_reports",mC$),L.route("/api/_stripe",U81),L.route("/report",lC$($.clientDir)),L.route("/api/auth/custom",dq$),L.route("/api/auth/desktop",nq$),L.all("/api/auth/admin/*",rq$),L.all("/api/auth/*",async(i)=>{return await E8.handler(i.req.raw)});let E=Ls1();E.use("/.well-known/oauth-protected-resource/mcp/:connectionId",PC),E.use("/mcp/:connectionId/.well-known/oauth-protected-resource",PC),L.route("/",E),L.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",qi),L.route("/",Ps1()),L.use("/oauth-proxy/:connectionId/*",PC),L.all("/oauth-proxy/:connectionId/*",Uv$);let z=async(i)=>{let $1=await I86()(i.req.raw),z1=await $1.json();return Response.json(z1,$1)};L.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",PC),L.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",z);let j=async(i)=>{let $1=await q86()(i.req.raw),z1=await $1.json();return Response.json(z1,$1)};L.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",j);let A=zq$({ttlMs:120000}),P=await Zs1({db:Z.db,auth:E8,encryption:{key:d0().encryptionKey},observability:{tracer:aH,meter:W8},modelListCache:Q,providerKeyCache:J,memberRoleCache:A});Dw.set(P);let M=new TN(d0().encryptionKey);P21({db:Z.db,baseUrl:aX()});let S=P40(Z.db),q=new ud(Z.db),C=f_$({db:Z.db});Ho0({storage:S,studioContextFactory:C}),Dt0({studioContextFactory:C,deps:{runRegistry:U,cancelBroadcast:W,streamBuffer:K,sseHub:r5}}),Nt0({dispatchRunFn:IK$,studioContextFactory:C,deps:{runRegistry:U,cancelBroadcast:W,streamBuffer:K,sseHub:r5}});let c=new Tf(Z.db),b=new uN(Z.db),x=new A81(b,C);if(d0().taskBoardReviewSweeperEnabled){x.start();let i=gO;gO=async()=>{await i?.(),x.dispose()}}let p=new AW(Z.db);pK$({getJetStream:()=>N?.getJetStream()??null,getJetStreamManager:async()=>{let i=N?.getConnection();return i?await wv$.jetstreamManager(i):null},messageParts:c.messageParts(),resolveRun:async(i)=>{let V0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",i).executeTakeFirst();return V0?{orgId:V0.organization_id,createdBy:V0.created_by,version:V0.message_storage_version??1,status:V0.status,runFenceToken:V0.run_fence_token,title:V0.title??null}:null},completeRunIfNotCompleted:async(i,V0)=>{let $1=await c.completeRunIfNotCompleted(i,V0);if(sE0(r5,V0,i,$1),$1)await Yy(b,i,V0,p);return $1},markRunRequiresAction:async(i,V0)=>{let $1=await c.requiresActionIfInProgress(i,V0);return sE0(r5,V0,i,$1),$1},markRunFailed:async(i,V0,$1,z1)=>{let k0=await c.markRunFailed(i,V0,$1,z1);if(sE0(r5,V0,i,k0),k0)await Yy(b,i,V0,p);return k0},clearSynthesizedError:async(i,V0)=>{await c.messageParts().replaceMessageParts(i,QO(i,V0),[])},persistTitle:(i,V0,$1)=>c.update(i,V0,{title:$1}),onTitleUpdated:async({runId:i,orgId:V0,title:$1})=>{let z1=await c.get(i,V0).catch(()=>null);r5.emit(V0,e3(i,z1?.status??"in_progress",{title:$1,virtualMcpId:z1?.virtual_mcp_id??void 0,createdBy:z1?.created_by,triggerId:z1?.trigger_id,branch:z1?.branch??null,harnessId:z1?.harness_id??void 0,createdAt:z1?.created_at,updatedAt:z1?.updated_at}))},bumpProgress:async({runId:i,orgId:V0})=>{await c.bumpProgress(i,V0)},recordCompleted:async({runId:i,orgId:V0,distinctId:$1,usage:z1})=>{y1.capture({distinctId:$1,event:"chat_message_completed",groups:{organization:V0},properties:{organization_id:V0,thread_id:i,transport:"projector",input_tokens:z1.inputTokens,output_tokens:z1.outputTokens,total_tokens:z1.totalTokens}})},recordFailed:async({runId:i,orgId:V0,distinctId:$1,reason:z1,kind:k0})=>{y1.capture({distinctId:$1,event:"chat_message_failed",groups:{organization:V0},properties:{organization_id:V0,thread_id:i,transport:"projector",error_category:k0,error_message:z1}})},purgeRun:async(i)=>{K.purge(i)}}),pW$({studioContextFactory:C,systemDatabaseUrl:yS1(d0().databaseUrl,d0().databasePgSsl),streamBuffer:K}),v_$(),A21();let m=async(i,V0,$1)=>{let z1=await S.findById(i,V0);if(!z1)throw Error("Automation not found");return wo0({automationId:z1.id,organizationId:z1.organization_id,triggerId:null})},Y0=new Bg(S,({automation:i,trigger:V0,contextMessages:$1,idempotencyKey:z1})=>Mp({automationId:i.id,organizationId:i.organization_id,triggerId:V0.id,contextMessages:$1},{idempotencyKey:z1})),L0=[sQ(),yC(),fK()];for(let i of L0)Zz0(i).then(()=>{}).catch((V0)=>console.error("[monitoring] Retention cleanup failed:",V0));let E0=()=>Z.db.deleteFrom("apikey").where("expiresAt","<",new Date).execute().then(()=>{}).catch((i)=>console.error("[auth] Expired API key cleanup failed:",i));E0(),setInterval(E0,86400000).unref(),L.use("*",async(i,V0)=>{if(zz0(i.req.path))return V0();let $1={measure:async(k0,g1)=>{ZQ(i,k0);try{return await g1()}finally{JY(i,k0)}}},z1=await Dw.create(i.req.raw,{timings:$1});z1.automationRunner=m,i.set("studioContext",z1);try{await V0()}finally{let k0=z1.pendingRevalidations;if(k0.length>0)Promise.race([Promise.allSettled(k0),a$(30000)]).catch((J8)=>console.error("[studio] revalidation cleanup error:",J8))}}),L.use("/api/:org/decopilot/*",AC),L.use("/api/:org/v1/*",AC),L.use("/api/:org/files/*",AC),L.use("*",async(i,V0)=>{if(Ov$(i.req.path))return V0();let $1=i.get("studioContext");if(!$1?.organization?.id||!$1?.auth?.user?.id)return V0();if(!(await $1.storage.orgSsoConfig.getByOrgId($1.organization.id))?.enforced)return V0();if(!await $1.storage.orgSsoSessions.isValid($1.auth.user.id,$1.organization.id))return i.json({error:"SSO authentication required for this organization"},403);return V0()});let e=new D1;e.use("*",V3({mountPath:"/api/org-sso"})),e.route("/",ZE0()),L.route("/api/org-sso",e),L.get("/api/tools/management",(i)=>{return i.json({tools:qC0,grouped:rB()})}),L.use("/mcp/*",async(i,V0)=>{ZQ(i,"mcp");try{return await V0()}finally{JY(i,"mcp")}});let t=async(i,V0)=>{let $1=i.var.studioContext;if(!$1.auth.user?.id&&!$1.auth.apiKey?.id){let z1=new URL(i.req.url),k0=i.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g1=k0?`${k0}://${z1.host}`:z1.origin;return i.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g1}${z1.pathname}/.well-known/oauth-protected-resource"`}})}return await V0()};if(L.use("/mcp/:connectionId?",t),L.use("/mcp/gateway/:virtualMcpId?",t),L.use("/mcp/virtual-mcp/:virtualMcpId?",t),L.use("/mcp/self",t),PJ()){let{mountDevRoutes:i}=(Xv$(),Wz0(Zv$));i(L,t)}let P0=new D1;P0.use("*",V3({mountPath:"/mcp"})),P0.route("/",xO0()),L.route("/mcp",P0);let G0=new D1;G0.use("*",V3({mountPath:"/mcp/self"})),G0.route("/",cE0()),L.route("/mcp/self",G0);let z0=new D1;z0.use("*",V3({mountPath:"/mcp"})),z0.route("/",hO0()),L.route("/mcp",z0),L.use("/api/:org/models/*",async(i,V0)=>{ZQ(i,"llm_models");try{return await V0()}finally{JY(i,"llm_models")}});let f0=O11({cancelBroadcast:W,streamBuffer:K,runRegistry:U});L.route("/api",f0),L.use("/api/:org/files/*",AC),L.route("/api",eC$);let S0=new D1;S0.use("*",V3({mountPath:"/api"})),S0.route("/",lE0()),L.route("/api",S0),L.route("/api",SC$);let h0=new D1;h0.use("*",V3({mountPath:"/api"})),h0.route("/",dE0({tokenStorage:q,automationEventDispatcher:Y0})),L.route("/api",h0);let X0=new ld(Z.db),w0=new D1;w0.use("*",V3({mountPath:"/api"})),w0.route("/",KE0()),L.route("/api",w0),L.route("/api/deco-sites",_M$()),L.route("/api/deco-apps",TC$());let B0=new D1;B0.use("*",V3({mountPath:"/api/deco-sites"})),B0.route("/",HE0()),L.route("/api/deco-sites",B0);let{createPublishRequestHandler:I0,createPublicMCPHandler:r}=await Promise.resolve().then(() => (Nv$(),Kv$)),Z0={db:Z.db,vault:{encrypt:(i)=>M.encrypt(i),decrypt:(i)=>M.decrypt(i)}},R0=I0(Z0),Q0=r(Z0);L.use("/org/:orgRef/registry/publish-request",PC),L.post("/org/:orgRef/registry/publish-request",R0),L.use("/org/:orgSlug/registry/*",PC),L.all("/org/:orgSlug/registry/*",Q0),L.post("/api/:org/registry/publish-request",R0),L.all("/api/:org/registry/*",Q0),L.route(X11,aq$());let F0=PC$({kvStorage:X0,runRegistry:U,streamBuffer:K,sseHub:r5,cancelBroadcast:W,tokenStorage:q,automationEventDispatcher:Y0,mountDevAssets:PJ(),mcpAuth:t,oauthProxyHandler:Uv$,watchHandler:Dv$,betterAuthProtectedResourceHandler:z,getNatsConnection:()=>N?.getConnection()??null});return L.route("/api/:org",F0),L.notFound((i)=>{return i.json({error:"Not Found",path:i.req.path},404)}),L.onError(zM$),Object.assign(L,{markShuttingDown:()=>{X=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([r5.stop(),gO?Promise.resolve(gO()).finally(()=>{gO=null}):Promise.resolve()]),N)await N.drain().catch((i)=>console.error("[shutdown] NATS drain error:",i));console.log("[shutdown] Flushing telemetry..."),await uY().catch((i)=>console.error("[shutdown] Telemetry flush error:",i)),console.log("[shutdown] Closing database..."),await hS1(Z).catch((i)=>console.error("[shutdown] Database close error:",i)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await yg.registerQueue(hY,{partitionQueue:!0,concurrency:Wo0,minPollingIntervalMs:Ko0}),await yg.registerQueue(rQ,{partitionQueue:!0,concurrency:Ot0}),await yg.registerQueue(vK,{partitionQueue:!0,concurrency:Kt0}),await yg.registerQueue(rH,{partitionQueue:!0,concurrency:nW$}),await E11(S),await Promise.allSettled(["automations-gate","automations-global"].map((i)=>yg.deleteQueue(i))),await No0(Z.pool),Oh1().catch((i)=>{console.error("[studio-pack-backfill] failed:",i)}),T21().catch((i)=>{console.error("[org-fs] public-sets boot sync kick failed:",i)})}})}var wv$,Hv$=5000,gO=null,Uv$=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let X=$.req.path.split("/").filter(Boolean),G=X[X.length-1],Y=$.get("studioContext");if(!Y)Y=await Dw.create($.req.raw),$.set("studioContext",Y);let Q=$.req.param("org")?Y.organization?.id:void 0,J=await Y.storage.connections.findById(Z,Q);if(!J?.connection_url)return $.json({error:"Connection not found"},404);let W=await Wx(J.connection_url),K,N=new URL(J.connection_url),F=(typeof J.metadata?.oauthResource==="string"&&J.metadata.oauthResource.length>0?J.metadata.oauthResource:void 0)??J.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=N.origin;let U=await Mi(K);if(!U.ok)return $.json({error:"Failed to get auth server metadata"},502);let w=await U.json(),O;if(G==="authorize")O=w.authorization_endpoint;else if(G==="token")O=w.token_endpoint;else if(G==="register")O=w.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${G}`},404);let D=new URL(O),L=new URL($.req.url);if(D.search=L.search,G==="authorize"){let c=D.searchParams.get("redirect_uri");if(c){let b=d0().baseUrl??L.origin;try{let x=new URL(c),p=new URL(b);if(!(x.origin===p.origin||x.hostname==="localhost"))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}D.searchParams.set("redirect_uri",c)}if(D.searchParams.has("resource"))D.searchParams.set("resource",F);if(Sq1(J.connection_url))try{let b=await z86(Y,J.organization_id),x=j86(b);for(let[p,m]of x)D.searchParams.set(p,m)}catch(b){console.warn("[oauth-proxy] Failed to get smart OAuth params, proceeding without:",b)}return $.redirect(D.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let j=$.req.header("Authorization");if(j)E.Authorization=j;let A,P=null,M=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(G==="token"&&z?.includes("application/x-www-form-urlencoded")){if(j?.toLowerCase().startsWith("basic "))try{let m=atob(j.slice(6).trim()),Y0=m.indexOf(":");if(Y0!==-1){let L0=decodeURIComponent(m.slice(0,Y0)),E0=decodeURIComponent(m.slice(Y0+1));P=L0||null,M=E0||null}}catch{}let c=await $.req.formData();if(c.has("resource"))c.set("resource",F);let b=c.get("client_id"),x=c.get("client_secret");if(typeof b==="string"&&b)P=b;if(typeof x==="string"&&x)M=x;let p=new URLSearchParams;for(let[m,Y0]of c.entries())p.append(m,Y0.toString());A=p.toString()}else if(G==="register"&&z?.toLowerCase().includes("application/json")){let c=await Y.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",J.organization_id).executeTakeFirst(),b=await $.req.text(),x={};try{x=b?JSON.parse(b):{}}catch{A=b}let p=typeof x==="object"&&x!==null&&!Array.isArray(x);if(A===void 0&&!p)A=b;if(A===void 0){let m=x,Y0=m.metadata&&typeof m.metadata==="object"?m.metadata:{};m.metadata={...Y0,organization_id:J.organization_id,...c?.slug?{organization_slug:c.slug}:{},...c?.name?{organization_name:c.name}:{}},A=JSON.stringify(m),E["Content-Type"]="application/json"}}else A=$.req.raw.body??void 0;let S=await fetch(D.toString(),{method:$.req.method,headers:E,body:A,duplex:"half",redirect:"manual"}),q=new Headers,C=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[c,b]of S.headers.entries())if(!C.includes(c.toLowerCase()))q.set(c,b);if(G==="token"&&S.ok){let c=await S.text();try{let b=JSON.parse(c);if(typeof b.access_token==="string"&&b.access_token){let x=typeof b.expires_in==="number"?new Date(Date.now()+b.expires_in*1000):null,p=null;try{p=await Kx(J.connection_url)??O}catch{p=O}let m={connectionId:Z,accessToken:b.access_token,refreshToken:typeof b.refresh_token==="string"?b.refresh_token:null,scope:typeof b.scope==="string"?b.scope:null,expiresAt:x,clientId:P,clientSecret:M,tokenEndpoint:p};await new D5(Y.db,Y.vault).upsert(m)}}catch(b){console.error("[oauth-proxy] failed to persist downstream token:",b)}return new Response(c,{status:S.status,statusText:S.statusText,headers:q})}return new Response(S.body,{status:S.status,statusText:S.statusText,headers:q})},Dv$=async($)=>{let Z=$.var.studioContext;if(!(Z.auth.user?.id??Z.auth.apiKey?.userId))return $.json({error:"Unauthorized"},401);let G=Z.organization?.id;if(!G)return $.json({error:"organization id missing"},400);let Y=$.req.query("types"),Q=Y?Y.split(",").map((W)=>W.trim()).filter(Boolean):null,J=crypto.randomUUID();return tH($,async(W)=>{if(await W.writeSSE({event:"connected",data:JSON.stringify({listenerId:J,organizationId:G,typePatterns:Q,connectedAt:new Date().toISOString()})}),!r5.add({id:J,organizationId:G,typePatterns:Q?.length?Q:null,push:(H)=>{W.writeSSE({id:H.id,event:H.type,data:JSON.stringify(H)}).catch(()=>{r5.remove(G,J)})}})){await W.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let N=setInterval(()=>{W.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(N)})},30000);await new Promise((H)=>{W.onAbort(()=>{clearInterval(N),r5.remove(G,J),H()})})})},P86,R86,I86=()=>T86(E8),q86=()=>A86(E8);var Ev$=B(()=>{K5();V$();R21();OZ();Ev();B8();u8();$10();OM1();IC0();IQ();Ii();t01();YQ();N5();D6();Z11();pq$();sq$();J11();LM$();B11();$3();O50();D11();jM$();L11();AC$();A11();RC$();yO0();ki();VC$();uO0();n$1();fC$();dC$();iC$();rC$();$_$();i$1();d$1();vo();Vc();L_$();HY();d40();id();Eo0();E_$();j_$();A_$();H11();k_$();Gt0();S_$();Kg0();$L();o7();wg0();V_$();b_$();w80();T81();mG();z11();fV();Jt0();$t0();w80();JO0();Sy0();Vy0();x_$();Av();u_$();vg();t01();sw0();nw0();wv$=k($B(),1);P86=new L86,R86=new Set([hY,rQ,vK,rH])});var Av$={};N4(Av$,{resolveClientDir:()=>b86,resolveAssetPathWithTraversalCheck:()=>Pv$,isPathWithinDirectory:()=>jv$,createAssetHandler:()=>f86});import{resolve as To,dirname as k86,join as S86,extname as V86,basename as C86,sep as zv$}from"path";function _86($,Z){if($===Z||C86($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${zv$}assets${zv$}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function jv$($,Z){let X=To(Z),G=To($);return G===X||G.startsWith(X+"/")}function Pv$({requestPath:$,clientDir:Z}){let X=$.startsWith("/")?$.slice(1):$,G=To(Z,X);if(!jv$(G,Z))return null;return G}function b86($,Z="../client"){let X=new URL($),G=k86(X.pathname);return To(G,Z)}function f86($={}){let{env:Z="production",clientDir:X=v86,isServerPath:G=()=>!1}=$;if(Z==="development")return async function(Q){return null};return async function(Q){if(Q.method!=="GET")return null;let J=new URL(Q.url),W;try{W=decodeURIComponent(J.pathname)}catch{return null}if(G(W))return null;let K=Pv$({requestPath:W,clientDir:X});if(!K)return null;let N=S86(K,"index.html"),H=To(X,"index.html"),F=Q.headers.get("accept"),w=F?.includes("text/html")||F?.includes("*/*")&&["",".html"].includes(V86(K))?[N,H]:[];for(let O of[K,...w])try{let D=Bun.file(O);if(await D.exists())return new Response(D,{headers:_86(O,H)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var v86="./dist/client";var Tv$=()=>{};var Rv$={};N4(Rv$,{tryUpgradePreviewWs:()=>l86,tryHandlePreviewHttp:()=>c86,previewWebSocketHandler:()=>d86,parsePreviewBaseDomain:()=>u86,isPreviewWsData:()=>Xz0,extractHandleFromHost:()=>_81});function g86($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function h86(){return new Response(y86,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function u86($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,X;try{X=new URL(Z)}catch{return null}let G=X.hostname;if($.includes("{handle}")){let Y=G.indexOf(".");if(Y<=0||Y===G.length-1)return null;return G.slice(Y+1)}return G}function _81($,Z){if(!$||!Z)return null;let X=$.indexOf(":"),G=(X>=0?$.slice(0,X):$).toLowerCase(),Q=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!G.endsWith(Q))return null;let J=G.slice(0,G.length-Q.length);if(!J||J.includes("."))return null;return J}async function c86($,Z){let X=_81($.headers.get("host"),Z.baseDomain);if(!X)return null;let G=await Z.getRunner();if(!G)return Io(503,"preview proxy not configured");let Y=await G.proxyPreviewRequest(X,$);if(Y.headers.get(RV)&&g86($))return h86();return Y.headers.delete(RV),Y}function Io($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function Xz0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function l86($,Z,X){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let G=_81($.headers.get("host"),X.baseDomain);if(!G)return null;let Y=await X.getRunner();if(!Y)return Io(503,"preview proxy not configured");let Q=await Y.resolvePreviewUpstreamUrl(G);if(!Q)return Io(404,"sandbox not found");let J=new URL($.url);if(J.pathname.startsWith("/_sandbox")||J.pathname.startsWith("/_decopilot_vm"))return Io(404,"not found");let W=`${Q.replace(/^http/,"ws")}${J.pathname}${J.search}`,K=$.headers.get("sec-websocket-protocol"),N=K?K.split(",").map((U)=>U.trim()).filter(Boolean):[],H={kind:"preview",upstreamUrl:W,upstreamProtocols:N,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:H}))return Io(426,"upgrade failed");return}function Ro($,Z,X,G){if(Z.closed)return;Z.closed=!0;try{$.close(X,G)}catch{}try{Z.upstream?.close()}catch{}}var x86=256,y86='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',d86;var Iv$=B(()=>{Dn0();d86={open($){let Z=$.data;if(!Xz0(Z))return;let X;try{X=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(G){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${G instanceof Error?G.message:String(G)}`),Ro($,Z,1011,"upstream connect failed");return}X.binaryType="arraybuffer",Z.upstream=X,X.addEventListener("open",()=>{while(Z.pending.length>0){let G=Z.pending.shift();if(G!==void 0)X.send(G)}}),X.addEventListener("message",(G)=>{if(Z.closed)return;$.send(G.data)}),X.addEventListener("close",(G)=>{Ro($,Z,G.code||1000,G.reason||"")}),X.addEventListener("error",()=>{Ro($,Z,1011,"upstream error")})},message($,Z){let X=$.data;if(!Xz0(X))return;let G=X.upstream;if(G&&G.readyState===WebSocket.OPEN){G.send(Z);return}if(X.pending.length>=x86){Ro($,X,1011,"preview ws backlog overflow");return}X.pending.push(Z)},close($){let Z=$.data;if(!Xz0(Z))return;Ro($,Z,1000,"")}}});var Sv$={};N4(Sv$,{printBanner:()=>i86,bannerLines:()=>kv$,BANNER_LINES:()=>qv$,BANNER_GRADIENT:()=>Mv$});function m86($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function kv$($){let Z=qv$.map((X,G)=>{let[Y,Q,J]=m86(Mv$[G]);return`\x1B[38;2;${Y};${Q};${J}m${X}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function i86($){console.log("");for(let Z of kv$($))console.log(Z);console.log("")}var qv$,Mv$;var Vv$=B(()=>{qv$=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Mv$=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});K5();var d81="7";function m81($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:d81,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}V$();Hz0();N5();function nb$(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function kz0($,Z){for(let X=0;X<$.length;X++){let G=$[X];if(G===void 0)continue;if(G===Z)return $[X+1];if(G.startsWith(`${Z}=`))return G.slice(Z.length+1)}return}function M41(){let $=nb$();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:kz0($,"--cpu-prof-dir")??process.cwd(),name:kz0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(kz0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}Cz0();var xo;function x41(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let X=cO();if(!X)return;let G={};try{let{heapStats:Y}=await import("bun:jsc"),Q=Y(),J=Object.entries(Q.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);G={objectCount:Q.objectCount,heapSize:Q.heapSize,top:Object.fromEntries(J)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:X.rss,heapUsed:X.heapUsed,heapTotal:X.heapTotal,external:X.external,arrayBuffers:X.arrayBuffers,...G}))};return Z().catch(()=>{}),xo=setInterval(()=>void Z().catch(()=>{}),$),xo.unref?.(),process.on("SIGUSR2",()=>{try{let X=Bun.generateHeapSnapshot("v8"),G=typeof X==="string"?X:JSON.stringify(X),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,G),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(X){console.error("[heap-watch] snapshot failed:",X)}}),()=>{if(xo)clearInterval(xo)}}import*as ob$ from"bun:jsc";var{startSamplingProfiler:rb$,samplingProfilerStackTraces:ab$}=ob$;function y41(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{rb$()}catch(Q){return console.error("[stall-watchdog] failed to start sampling profiler:",Q),()=>{}}let X,G=performance.now()+Z,Y=()=>{let Q=performance.now(),J=Q-G;G=Q+Z;let W=[];try{W=ab$()?.traces??[]}catch{}if(J>$&&W.length>0){let K=new Map;for(let H of W){let F=H.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??H.frames[0];if(!F)continue;let U=(F.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),w=`${F.name??"?"} @ ${U}:${F.line??"?"}`;K.set(w,(K.get(w)??0)+1)}let N=[...K.entries()].sort((H,F)=>F[1]-H[1]).slice(0,8).map(([H,F])=>({frame:H,count:F}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(J),samplesInWindow:W.length,top:N}))}X=setTimeout(Y,Z),X.unref?.()};return X=setTimeout(Y,Z),X.unref?.(),()=>{if(X)clearTimeout(X)}}function g41(){M41();let $=[x41(),f41(),y41()];return()=>{for(let Z of $)Z()}}import{existsSync as e86}from"fs";var oQ=d0();R41();var{DBOS:qo,DBOSClient:n86}=await import("@dbos-inc/dbos-sdk");function fv$($,Z){if(!Z)return $;let X=new URL($);if(!X.searchParams.has("sslmode"))X.searchParams.set("sslmode","verify-full");return X.toString()}var p86=[hY,rQ,vK,rH],t86=oQ.dispatchRole==="worker"?p86:oQ.dispatchRole==="api"?[]:void 0;qo.setConfig(m81({systemDatabaseUrl:fv$(oQ.databaseUrl,oQ.databasePgSsl),poolSize:oQ.dbosPoolSize,executorID:oQ.podName,listenQueues:t86}));var{createApp:o86}=await Promise.resolve().then(() => (Ev$(),Lv$)),{isServerPath:r86}=await Promise.resolve().then(() => (vo(),W41)),{createAssetHandler:a86,resolveClientDir:xv$}=await Promise.resolve().then(() => (Tv$(),Av$)),s86=oQ.port,Cv$=xv$(import.meta.url,"../client"),yv$=e86(Cv$)?Cv$:xv$(import.meta.url,"../dist/client"),$46=a86({clientDir:yv$,isServerPath:r86}),Z46={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function X46($){let Z=new Headers($.headers);for(let[X,G]of Object.entries(Z46))Z.set(X,G);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:G46,tryHandlePreviewHttp:Y46,tryUpgradePreviewWs:Q46,previewWebSocketHandler:v81,isPreviewWsData:b81}=await Promise.resolve().then(() => (Iv$(),Rv$)),{getOrInitSharedRunner:J46}=await Promise.resolve().then(() => ($w0(),dY$)),gv$=G46(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),_v$={baseDomain:gv$??"",getRunner:J46},Gz0=await o86({clientDir:yv$}),f81=process.env.DBOS_CONDUCTOR_KEY?.trim(),vv$=process.env.DBOS_CONDUCTOR_URL?.trim();await qo.launch({...f81?{conductorKey:f81}:{},...f81&&vv$?{conductorURL:vv$}:{}});console.log(`[dbos] application version: ${qo.applicationVersion}`);var x81=5,y81=0;await dG(async()=>{y81++;try{return await Gz0.initDbos()}catch($){let Z=y81>=x81?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${y81}/${x81} failed, ${Z}`,$),$}},{maxAttempts:x81,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!oQ.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (Vv$(),Sv$));console.log("");for(let Z of $())console.log(Z)}var W46=Bun.serve({idleTimeout:0,port:s86,hostname:"0.0.0.0",fetch:async($,Z)=>{if(gv$){let G=await Q46($,Z,_v$);if(G===void 0)return;if(G)return G;let Y=await Y46($,_v$);if(Y)return Y}let X=await $46($);if(X)return X46(X);return Gz0.fetch($,{server:Z})},websocket:{open($){if(b81($.data))v81.open($)},message($,Z){if(b81($.data))v81.message($,Z)},close($){if(b81($.data))v81.close($)}},development:!1}),K46=g41();if(oQ.localMode)Promise.resolve().then(() => (vV(),bw0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:X})=>{try{let G=await X();if(G>0)console.log(`[local-mode] cleared ${G} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let Y=await $()}catch(G){console.error("Failed to seed local mode:",G)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (vV(),bw0));Z()}catch{}});var bv$=!1;async function N46($){let Z;try{Z=await n86.create({systemDatabaseUrl:fv$(oQ.databaseUrl,oQ.databasePgSsl),systemDatabaseSchemaName:"dbos"});let X=await Z.listWorkflows({status:"PENDING",queueName:rQ,executorId:$,loadInput:!1,loadOutput:!1});if(X.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let G=X.map((Y)=>Y.workflowID);await Z.resumeWorkflows(G,{queueName:rQ}),console.log(`[shutdown] re-enqueued ${G.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,G)}catch(X){console.error("[shutdown] thread-gate handoff failed:",X)}finally{await Z?.destroy().catch(()=>{})}}async function Yz0($){if(bv$)return;bv$=!0,console.log(`
|