decocms 4.344.1 → 4.344.3
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-BjMuYxmi.js → AlertCircle-C3hNX-U3.js} +1 -1
- package/dist/client/assets/{AreaChart-P5pArksK.js → AreaChart-V5K73xTf.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BwC_u33Q.js → ArrowLeft-xkekPehv.js} +1 -1
- package/dist/client/assets/{ArrowUp-B8VhBtFx.js → ArrowUp-CYfoVlFX.js} +1 -1
- package/dist/client/assets/{Check-DxQeYFcE.js → Check-BcH3mbli.js} +1 -1
- package/dist/client/assets/{CheckCircle-C_IlU8js.js → CheckCircle-efnyoYbr.js} +1 -1
- package/dist/client/assets/{ChevronRight-DPUKyX3B.js → ChevronRight-zWIGH7_7.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-YzQi0PQX.js → ChevronSelectorVertical-Q_MhqA-g.js} +1 -1
- package/dist/client/assets/{ChevronUp-C9LCQ5Al.js → ChevronUp-CcnNOmjW.js} +1 -1
- package/dist/client/assets/{Copy01-MwHtzLVF.js → Copy01-B-07BGuw.js} +1 -1
- package/dist/client/assets/{CreditCard01-Bi3-77w1.js → CreditCard01-DZdhUpRr.js} +1 -1
- package/dist/client/assets/{DotsVertical-B1I-mCuU.js → DotsVertical-Cha1vnex.js} +1 -1
- package/dist/client/assets/{Download01-DGJEMDLc.js → Download01-BH00OOK2.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-DJ1fmyx8.js → ErrorBarContext-DGy0g17o.js} +1 -1
- package/dist/client/assets/{Eye-D5g3w0j_.js → Eye-s_5OI3rP.js} +1 -1
- package/dist/client/assets/{GitBranch01-CnlwY1P_.js → GitBranch01-DPsdhEPj.js} +1 -1
- package/dist/client/assets/{Globe01-BLWkbDkc.js → Globe01-BOLRhWz3.js} +1 -1
- package/dist/client/assets/{HardDrive-DQDOqSUK.js → HardDrive-Jz5aKVF-.js} +1 -1
- package/dist/client/assets/{Image01-vgxUXrTy.js → Image01-Dde0njV5.js} +1 -1
- package/dist/client/assets/{Key01-BmgHvr4E.js → Key01-CL0l8cke.js} +1 -1
- package/dist/client/assets/{Link01-tJAsKN4V.js → Link01-c7H6evzR.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DhLc5AVD.js → LinkExternal01-mF6LE9cE.js} +1 -1
- package/dist/client/assets/{Monitor01-BC_tYrvH.js → Monitor01-CxZPUqxw.js} +1 -1
- package/dist/client/assets/{Package-gYdvPjZu.js → Package-D1Oz_AXu.js} +1 -1
- package/dist/client/assets/{Palette-CqySYNVO.js → Palette-BZi2CQIb.js} +1 -1
- package/dist/client/assets/{Play-Un8C-mAg.js → Play-DL08uuDR.js} +1 -1
- package/dist/client/assets/{Plus-D6AiOZHV.js → Plus-UnZHTGwg.js} +1 -1
- package/dist/client/assets/{SearchMd-By0JhV4t.js → SearchMd-BoghbLrR.js} +1 -1
- package/dist/client/assets/{Sector-DHsJol83.js → Sector-CwzoDHdp.js} +1 -1
- package/dist/client/assets/{Settings02-ClicUXGp.js → Settings02-CRvAtfO0.js} +1 -1
- package/dist/client/assets/{Share07-J9Tcg72Q.js → Share07-CTpIecy0.js} +1 -1
- package/dist/client/assets/{Shield01-CRcKuFYE.js → Shield01-DPL17IT0.js} +1 -1
- package/dist/client/assets/{Stars01-Dmq72XcE.js → Stars01-DveEX2vy.js} +1 -1
- package/dist/client/assets/{Sun-BXZfuBXP.js → Sun-cPKIj7uq.js} +1 -1
- package/dist/client/assets/{Tool01-DJvWUPsn.js → Tool01-DXqO9hP4.js} +1 -1
- package/dist/client/assets/{Tool02-eg3_S9Ak.js → Tool02-B4NLpHjP.js} +1 -1
- package/dist/client/assets/{Trash01-C8iWkF21.js → Trash01-CRSthTGO.js} +1 -1
- package/dist/client/assets/{TrendUp01-vUbGui7n.js → TrendUp01-Dug8rn5Y.js} +1 -1
- package/dist/client/assets/{Upload01-iR-rddab.js → Upload01-D_Fv189I.js} +1 -1
- package/dist/client/assets/{User01-B5-Ys5vY.js → User01-CDa2pgjQ.js} +1 -1
- package/dist/client/assets/{UserSquare-gcGLnQoD.js → UserSquare-CWhx4AsN.js} +1 -1
- package/dist/client/assets/{Users01-BVSUwlTI.js → Users01-DZlH1wbC.js} +1 -1
- package/dist/client/assets/{Users03-B9pTZPgz.js → Users03-CoUu6iB3.js} +1 -1
- package/dist/client/assets/{XCircle-4-8Jmfe4.js → XCircle-TCv3gxEk.js} +1 -1
- package/dist/client/assets/{XClose-COktzEMg.js → XClose-DqZ5Ef7p.js} +1 -1
- package/dist/client/assets/{Zap-g0qt0BwC.js → Zap-HRAvXFnr.js} +1 -1
- package/dist/client/assets/{ZoomOut-B_R5roqc.js → ZoomOut-DC7lYRrH.js} +1 -1
- package/dist/client/assets/{access-gate-DLbpI8LF.js → access-gate-LG7Db20W.js} +1 -1
- package/dist/client/assets/{agent-icon-CCMiedCg.js → agent-icon-B0j2UorE.js} +1 -1
- package/dist/client/assets/{agents-list-BQlnHJ-C.js → agents-list-DJgBBD1W.js} +1 -1
- package/dist/client/assets/{ai-providers-C8Gfn0sX.js → ai-providers-D9b6lp9s.js} +1 -1
- package/dist/client/assets/{alert-C6LsdoJV.js → alert-Yw6picdx.js} +1 -1
- package/dist/client/assets/{alert-dialog-CJkXwWO9.js → alert-dialog-B6LS36Sm.js} +1 -1
- package/dist/client/assets/{analytics-tab-C9SAGUgS.js → analytics-tab-D-B27giR.js} +1 -1
- package/dist/client/assets/api-keys-BpX-le77.js +1 -0
- package/dist/client/assets/{api-keys-Cfd6NXQe.js → api-keys-D7tL_p1k.js} +1 -1
- package/dist/client/assets/app-editor-Dr01DzC2.js +1 -0
- package/dist/client/assets/{auth-BPPezCXD.js → auth-DBYGTgFE.js} +1 -1
- package/dist/client/assets/{auth-catchall-BdTMMjlD.js → auth-catchall-DU8qDYnm.js} +1 -1
- package/dist/client/assets/{auth-entry-B9uhggZP.js → auth-entry-6o1YBMQ6.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CN54sM56.js → auth-split-layout-Csg-iIgy.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Cu9y6SFV.js → authenticate-and-persist-oauth-AGm_2YIv.js} +1 -1
- package/dist/client/assets/{automation-list-row-BfHNI8Ry.js → automation-list-row-yl7Jr9Us.js} +1 -1
- package/dist/client/assets/{automation-runs-xfHBNYfm.js → automation-runs-DBYd6ygh.js} +1 -1
- package/dist/client/assets/{automations-BG7aFgC9.js → automations-Dlvl2Sbn.js} +1 -1
- package/dist/client/assets/{autosend-CzXMxIBc.js → autosend-9lrcbCup.js} +1 -1
- package/dist/client/assets/{avatar-cGgzX6Q8.js → avatar-BusY4imm.js} +1 -1
- package/dist/client/assets/{badge-BOpZ6PkI.js → badge-COtyjjy2.js} +1 -1
- package/dist/client/assets/{block-document-Cx3WrG1X.js → block-document-pw3BZW3I.js} +1 -1
- package/dist/client/assets/{breadcrumb-KhPwJDYK.js → breadcrumb-aEyQOqqG.js} +1 -1
- package/dist/client/assets/{buckets-oJeZKYCe.js → buckets-CrIxq0vO.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-B3zkGj5A.js → bulk-category-panel-D7gbHLhl.js} +1 -1
- package/dist/client/assets/{capability-load-error-D4HyCPBw.js → capability-load-error-BeQsW5u1.js} +1 -1
- package/dist/client/assets/{cards-7EkyDZYV.js → cards-CAtXduAN.js} +1 -1
- package/dist/client/assets/{category-editor-6SA3LNZv.js → category-editor-CQj0g1PN.js} +1 -1
- package/dist/client/assets/{cdn-tab-DnbzvYlD.js → cdn-tab-VWG7A8ek.js} +1 -1
- package/dist/client/assets/{chart-D3GNpA8E.js → chart-BSIlcmgf.js} +1 -1
- package/dist/client/assets/{chat-context-CXRs08s6.js → chat-context-DU7jeH6U.js} +1 -1
- package/dist/client/assets/{checkbox-CpzwVXNS.js → checkbox-D1r9ixw9.js} +1 -1
- package/dist/client/assets/{choose-editor-B4YWcnMg.js → choose-editor-BEZHaCP7.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CgbANE02.js → cli-auth-success-ChhNt2lr.js} +1 -1
- package/dist/client/assets/{client-icons-rTmmY4Qu.js → client-icons-CqD2Q5XK.js} +1 -1
- package/dist/client/assets/{collection-detail-5_RmbhhY.js → collection-detail-Bc1N9_b4.js} +1 -1
- package/dist/client/assets/{collection-display-button-CxDVHK3I.js → collection-display-button-Bc0_77tr.js} +1 -1
- package/dist/client/assets/{collection-search-l1m_ppUw.js → collection-search-CkYj4zLQ.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-Cnb9LKHS.js → collection-table-wrapper-DRVe2c2R.js} +1 -1
- package/dist/client/assets/{collection-tabs-CwMFKn1n.js → collection-tabs-N31SqJ5M.js} +1 -1
- package/dist/client/assets/{command-BYlxLxTL.js → command-M5Hy4Bca.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DjThyQh0.js → commerce-onboarding-g6xIZGng.js} +1 -1
- package/dist/client/assets/{connect-Bkm3_g-O.js → connect-Cf-9oNPe.js} +1 -1
- package/dist/client/assets/{connect-layout-COVIZNxi.js → connect-layout-Z933g_CV.js} +1 -1
- package/dist/client/assets/{connection-C7aOtOZ9.js → connection-Cimig8VQ.js} +1 -1
- package/dist/client/assets/{connection-card-FoQxvuJf.js → connection-card-kDFhfbya.js} +1 -1
- package/dist/client/assets/{connection-detail-DKMftkhe.js → connection-detail-D3l8WE-Y.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-BuJtasnZ.js → connection-form-helpers-Bb00vWyO.js} +1 -1
- package/dist/client/assets/{connections-FZxsmgMU.js → connections-BS7ow6ak.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-G4OcSS8l.js → create-organization-dialog-DF7Gz0pf.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-L93pnfSs.js → decopilot-sse-pool-C6z-rtNE.js} +1 -1
- package/dist/client/assets/{dialog-OBxzAzom.js → dialog-CIbVvLCQ.js} +1 -1
- package/dist/client/assets/{domain-settings-BRznnLr6.js → domain-settings-Bmfy9jDz.js} +1 -1
- package/dist/client/assets/{drawer-C2xrNU8r.js → drawer-CJFC-0Fv.js} +1 -1
- package/dist/client/assets/{dropdown-menu-D7LCoNMq.js → dropdown-menu-BHHO3QAR.js} +1 -1
- package/dist/client/assets/{e2e-tab-ntnPl-ca.js → e2e-tab-DNyiIyOa.js} +1 -1
- package/dist/client/assets/{editor-CCRpAUKq.js → editor-D6mstx7z.js} +1 -1
- package/dist/client/assets/{empty-state-ADGxJSqy.js → empty-state-BOUJ1IRI.js} +1 -1
- package/dist/client/assets/{empty-state-DHwnQMV_.js → empty-state-CFTbSuP9.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BbqgTPgH.js → extract-connection-data-BAwcjEs9.js} +1 -1
- package/dist/client/assets/{file-explorer-Bw3GSfQk.js → file-explorer-Bh9n4VYl.js} +1 -1
- package/dist/client/assets/{file-type-icon-CAW_viSw.js → file-type-icon-VaomZQ4k.js} +1 -1
- package/dist/client/assets/{folder-icon-SMGV3EMO.js → folder-icon-BPPBLsSQ.js} +1 -1
- package/dist/client/assets/{form-S1ZESyeH.js → form-BLZF8D8t.js} +1 -1
- package/dist/client/assets/{general-SIMm3O8G.js → general-1KXfjgkN.js} +1 -1
- package/dist/client/assets/{github-icon-DbAmZ8nk.js → github-icon-BMwS5NHP.js} +1 -1
- package/dist/client/assets/{hooks-B2R9sLxn.js → hooks-Dx8_BRAv.js} +1 -1
- package/dist/client/assets/{hosting-tab-Ijx0TIC2.js → hosting-tab-HpfZRgGl.js} +1 -1
- package/dist/client/assets/{index-Un5MjpBc.js → index-816NyhfX.js} +1 -1
- package/dist/client/assets/{index-BchAOKlj.js → index-B_lUDZ9B.js} +2 -2
- package/dist/client/assets/{index-CY2FHft8.js → index-BnQgQVCt.js} +1 -1
- package/dist/client/assets/{index-DPgRZdG6.js → index-BozOu9tc.js} +1 -1
- package/dist/client/assets/{index-DhTvONYT.js → index-CIa7ef_A.js} +1 -1
- package/dist/client/assets/{index-lO6vP97d.js → index-CVcEeQb5.js} +1 -1
- package/dist/client/assets/{index-Dhhe2yhg.js → index-CiTAcnLT.js} +1 -1
- package/dist/client/assets/{index-BPhWztnJ.js → index-DSjfYpae.js} +6 -6
- package/dist/client/assets/{index-7sFGYlJb.js → index-Dd37LnAd.js} +1 -1
- package/dist/client/assets/{index-redirect-BK-AVO2r.js → index-redirect-CxyJoKV4.js} +1 -1
- package/dist/client/assets/{index-Buw64iTd.js → index-scWMkxhM.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-DdVambif.js → infiniteQueryObserver-CwY974C7.js} +1 -1
- package/dist/client/assets/{infra-billing-C3sspPa6.js → infra-billing-_yVOOYJd.js} +1 -1
- package/dist/client/assets/{input-DHP0RHlp.js → input-COX_MHDV.js} +1 -1
- package/dist/client/assets/{integration-icon-W2Q5PIck.js → integration-icon-DCPy_52o.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CtEorK5c.js → invite-member-dialog-BHafD7C7.js} +1 -1
- package/dist/client/assets/{label-C7PK-lHw.js → label-BWr2mmGs.js} +1 -1
- package/dist/client/assets/{layout-BnKlqv03.js → layout-C7V0gFy0.js} +1 -1
- package/dist/client/assets/{login-BgsirZAt.js → login-D1Nz670h.js} +1 -1
- package/dist/client/assets/{markdown-BsIXLS3b.js → markdown-BYbXDv7N.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-BTHF0AHF.js → mcp-app-renderer-C-wnTv6N.js} +1 -1
- package/dist/client/assets/{mcp-oauth-DEWFOPkn.js → mcp-oauth-D4bG2HDW.js} +1 -1
- package/dist/client/assets/{members-jBFFi-vT.js → members-wTEykKnV.js} +1 -1
- package/dist/client/assets/{monaco-editor-DZADfW6r.js → monaco-editor-YC0wWRXT.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-hKlWAt04.js → monitoring-stats-row-BvTSmQaL.js} +1 -1
- package/dist/client/assets/{multi-select-BLvZSTa1.js → multi-select-BmB9r4YL.js} +1 -1
- package/dist/client/assets/{oauth-callback-C51UB2D9.js → oauth-callback-D2Gp_wZF.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Dsv963Ta.js → oauth-callback-ai-provider-CoABKbtI.js} +1 -1
- package/dist/client/assets/{onboarding-BYN-WZdf.js → onboarding-CftT1nG0.js} +1 -1
- package/dist/client/assets/{org-layout-p6eqD620.js → org-layout-B1FHoYea.js} +1 -1
- package/dist/client/assets/{organization-choice-BLk1I6v9.js → organization-choice-CBe05Pnl.js} +1 -1
- package/dist/client/assets/{orgs-D_gvdKOu.js → orgs-CtakA9D0.js} +1 -1
- package/dist/client/assets/{page-seo-form-BDlAG2ny.js → page-seo-form-ZY8ZbyqT.js} +1 -1
- package/dist/client/assets/{popover-DkmR2lA6.js → popover-BGEouS4O.js} +1 -1
- package/dist/client/assets/{post-calendar-CZISCbTj.js → post-calendar-C4PHtaZV.js} +1 -1
- package/dist/client/assets/{post-editor-CYhhN1_z.js → post-editor-D6FwVD0B.js} +1 -1
- package/dist/client/assets/{primitives-CdRr57q-.js → primitives-BFeFdEFz.js} +1 -1
- package/dist/client/assets/{profile-CBONxCiy.js → profile-GTCpmwYq.js} +1 -1
- package/dist/client/assets/{project-app-view-BhoARCjd.js → project-app-view-BQZfjkf1.js} +1 -1
- package/dist/client/assets/{project-icon-DamXOjp8.js → project-icon-mS3w82ZB.js} +1 -1
- package/dist/client/assets/{prompts-B6rAIvaw.js → prompts-uofkMfaL.js} +1 -1
- package/dist/client/assets/record-editor-DZ_Ht_rf.js +1 -0
- package/dist/client/assets/redirect-editor-DLSqpC6c.js +1 -0
- package/dist/client/assets/registry-R33rTMC7.js +2 -0
- package/dist/client/assets/{registry-layout-DXwkRZOQ.js → registry-layout-YOADDKZS.js} +1 -1
- package/dist/client/assets/{reports-BdxqpCo4.js → reports-DYmaGRqW.js} +1 -1
- package/dist/client/assets/{repositories-CGubii5t.js → repositories-BgsdtnFm.js} +1 -1
- package/dist/client/assets/{repository-import-picker-BJ-zN9Ij.js → repository-import-picker-DKCHkj_0.js} +1 -1
- package/dist/client/assets/{repository-picker-BX_XSV19.js → repository-picker-hMZKUmSe.js} +1 -1
- package/dist/client/assets/{require-capability--DOt2ERE.js → require-capability-D7WPxMT8.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Dy1_df_6.js → required-auth-layout-BzHLhAY7.js} +1 -1
- package/dist/client/assets/{reset-password-98jWo32P.js → reset-password-Db8RpI71.js} +1 -1
- package/dist/client/assets/{review-settings-CMYzZWK1.js → review-settings-CcgZS4Qu.js} +1 -1
- package/dist/client/assets/{roles-CPs9PioP.js → roles-D5JKlKQL.js} +1 -1
- package/dist/client/assets/{schema-C65nFTu4.js → schema-7gcATtGd.js} +1 -1
- package/dist/client/assets/{scroll-area-TfVnAKMc.js → scroll-area-BV67BPd_.js} +1 -1
- package/dist/client/assets/{search-input-BQUFx9US.js → search-input-D-ESO_3b.js} +1 -1
- package/dist/client/assets/{secrets-C2HdSGM-.js → secrets-DslGN31D.js} +1 -1
- package/dist/client/assets/{sections-editor-BkMJ_oh_.js → sections-editor-Cl6Tz3LM.js} +1 -1
- package/dist/client/assets/{select-DrxveWhw.js → select-DrcEVnZ2.js} +1 -1
- package/dist/client/assets/{select-model-Chu6b8mZ.js → select-model-BxS8auXw.js} +1 -1
- package/dist/client/assets/{self-tool-result-DTVcCRcK.js → self-tool-result-BJzf7f_D.js} +1 -1
- package/dist/client/assets/{seo-editor-CuepF3pb.js → seo-editor-BE4i-LT0.js} +1 -1
- package/dist/client/assets/settings-layout-CUALOfuk.js +1 -0
- package/dist/client/assets/{settings-sidebar-DLrns6Fj.js → settings-sidebar-C6TvhfID.js} +1 -1
- package/dist/client/assets/{shell-controls-CQiUgtRO.js → shell-controls-BxmxydXV.js} +1 -1
- package/dist/client/assets/{shell-layout-BqV6fEBV.js → shell-layout-Bx5eb743.js} +1 -1
- package/dist/client/assets/{skill-preview-CllyAILl.js → skill-preview-DttG8VYN.js} +1 -1
- package/dist/client/assets/{skills-CFONQWW-.js → skills-DHAWKG4x.js} +1 -1
- package/dist/client/assets/{sso-0n7r8-x_.js → sso-Bx-8EZnD.js} +1 -1
- package/dist/client/assets/{store-B9HWO6cb.js → store-C6L68gEz.js} +1 -1
- package/dist/client/assets/store-registry-DGHd6xRw.js +2 -0
- package/dist/client/assets/{switch-D_cjCTgk.js → switch-6gOY7p_B.js} +1 -1
- package/dist/client/assets/{synced-repos-CoVXAmDk.js → synced-repos-5BNmNf6C.js} +1 -1
- package/dist/client/assets/{table-Cf1yQntK.js → table-CiqNoZ31.js} +1 -1
- package/dist/client/assets/{tabs-od0SPK7S.js → tabs-Bkqs8f-5.js} +1 -1
- package/dist/client/assets/{task-board-BnIBnE9V.js → task-board-DZmRPJBt.js} +1 -1
- package/dist/client/assets/{task-route-C8eS62da.js → task-route-DFWTcvum.js} +1 -1
- package/dist/client/assets/{tasks-Bd3sMm2P.js → tasks-CzRXtD5l.js} +1 -1
- package/dist/client/assets/{textarea-CtTIh5eo.js → textarea-BPKnRKFj.js} +1 -1
- package/dist/client/assets/{thread-intent-BUdj1oNO.js → thread-intent-CFtt_nS5.js} +1 -1
- package/dist/client/assets/{thread-route-BuMLLPC9.js → thread-route-Cqs0O0Ez.js} +1 -1
- package/dist/client/assets/{toggle-group-CRdE5vQF.js → toggle-group-dwqfI-na.js} +1 -1
- package/dist/client/assets/{toolbar-CsP7VfFt.js → toolbar-ClAV86ux.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-BuEXzagv.js → toolbar-icon-button-_od4zlTM.js} +1 -1
- package/dist/client/assets/{track-0QXSC0aR.js → track-DR1-LwVK.js} +1 -1
- package/dist/client/assets/{types-KEdMbDrR.js → types-CXQqC75q.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BdW_wf1z.js → use-ai-providers-dsyrDnO9.js} +1 -1
- package/dist/client/assets/{use-automations-DKOxPPAq.js → use-automations-GJZG9mot.js} +1 -1
- package/dist/client/assets/{use-autosave-BFL8sOAH.js → use-autosave-edA5EL24.js} +1 -1
- package/dist/client/assets/{use-connection-BRPceU75.js → use-connection-BRJSF7XV.js} +1 -1
- package/dist/client/assets/{use-copy-BeP1DGCD.js → use-copy-BYPpXCK2.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DhSsOf3L.js → use-create-virtual-mcp-CK3FIQpt.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-CqGJGe22.js → use-date-fns-locale-xY0hnak0.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-ORs7hX9x.js → use-debounced-autosave-BZz1Sh5T.js} +1 -1
- package/dist/client/assets/{use-debounced-value-8ClMD96D.js → use-debounced-value-BBOX-Vjy.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-kIL4-9J-.js → use-decopilot-events-CrymWsPY.js} +1 -1
- package/dist/client/assets/{use-delete-connection-DtqNWOLX.js → use-delete-connection-BwDOMJxj.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-Cm6pk0-i.js → use-deployment-admin-BHuzOYuO.js} +1 -1
- package/dist/client/assets/{use-destination-route-DSB7ygJ3.js → use-destination-route-OdrYRKi6.js} +1 -1
- package/dist/client/assets/{use-file-configs-CI0rcz5W.js → use-file-configs-B8jXjEAi.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-c0yQIbtU.js → use-infinite-scroll-DQ_XrNCL.js} +1 -1
- package/dist/client/assets/{use-join-requests-Dpj6-Adj.js → use-join-requests-35XhVVHr.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DhNUxu5f.js → use-mcp-auth-status-nQqJOE5j.js} +1 -1
- package/dist/client/assets/{use-mcp-client-dKCIRAKY.js → use-mcp-client-xRPKqtBd.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-W9hu3OsJ.js → use-mcp-prompts-BH2161nI.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Ci7UuYIf.js → use-mcp-tools-DhWg8eQ9.js} +1 -1
- package/dist/client/assets/{use-members-DfzsBCnJ.js → use-members-CTCpXWvz.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DsVT2aJv.js → use-navigate-to-agent-DEnupm5-.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-C1YRjV3w.js → use-org-auth-client-tX4pyhvY.js} +1 -1
- package/dist/client/assets/{use-org-notice-Cpu85Ukm.js → use-org-notice-BrqrQNrZ.js} +1 -1
- package/dist/client/assets/{use-org-sso-C2KOoYeA.js → use-org-sso-ax_WPM-e.js} +1 -1
- package/dist/client/assets/{use-organization-roles-t96LTPe2.js → use-organization-roles-le6n88uk.js} +1 -1
- package/dist/client/assets/{use-organization-settings-ux6449Xl.js → use-organization-settings-DeqTyhDT.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BvI2J3ls.js → use-panel-navigate-DufE4TQe.js} +1 -1
- package/dist/client/assets/{use-registry-connections-D8Shk9Ny.js → use-registry-connections-CnQcaAch.js} +1 -1
- package/dist/client/assets/{use-secrets-DFHzz6hG.js → use-secrets-BKeXLH1Q.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-jzmCaiCf.js → use-section-preview-base-C_rHbM66.js} +1 -1
- package/dist/client/assets/{use-status-sounds-DudWi0tR.js → use-status-sounds-Cw977hrS.js} +1 -1
- package/dist/client/assets/{use-tags-BN2t59T_.js → use-tags-C-FksPQ4.js} +1 -1
- package/dist/client/assets/{use-view-mode-DXxOuUTm.js → use-view-mode-BzXvEzDG.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CE2lvrwN.js → use-virtual-mcp-8rv5G58S.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-D-5t1K3F.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-CzeWzIJb.js +1 -0
- package/dist/client/assets/{users-COCvGep8.js → users-Hybgdqlv.js} +1 -1
- package/dist/client/assets/{variant-calendar-NUEWKCfJ.js → variant-calendar-CVemYhc_.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-uxtdvGkq.js → view-mode-toggle-ZMf_pu5n.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +4 -4
- package/dist/server/server.js +4 -4
- package/package.json +1 -1
- package/dist/client/assets/api-keys-D7hTNuqp.js +0 -1
- package/dist/client/assets/app-editor-CnMywu3-.js +0 -1
- package/dist/client/assets/record-editor-BGBP-klp.js +0 -1
- package/dist/client/assets/redirect-editor-BwCGTNSS.js +0 -1
- package/dist/client/assets/registry-XT_AT1wH.js +0 -2
- package/dist/client/assets/settings-layout-7f7HAulD.js +0 -1
- package/dist/client/assets/store-registry-tVyVxLd9.js +0 -2
- package/dist/client/assets/useInfiniteQuery-rTw2vfoi.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-C9r2I39H.js +0 -1
package/dist/server/cli.js
CHANGED
|
@@ -1939,7 +1939,7 @@ Usage: deco services <up|down|status>`),process.exit(1)}}var qr1=D(()=>{Fy()});f
|
|
|
1939
1939
|
`.execute($);if(Number(W.rows[0]?.cnt)===0){console.warn(`Failed to migrate ${G}/${K}, keeping in old table`);continue}}await bg`
|
|
1940
1940
|
DELETE FROM kysely_migration WHERE name = ${Q}
|
|
1941
1941
|
`.execute($)}}async function h1$($){await W64($),await H64($);let Z=new y1$({db:$,provider:{getMigrations:()=>Promise.resolve(Mo0)}}),{error:Q,results:X}=await Z.migrateToLatest(),Y=0;if(X?.forEach((J)=>{if(J.status==="Success")Y++;else if(J.status==="Error")console.error(`Failed to execute migration "${J.migrationName}"`)}),Q)throw console.error("Failed to migrate"),console.error(Q),Q;return Y}async function F64($){let{keepOpen:Z=!1,database:Q,skipBetterAuth:X=!1}=$??{},Y="skipped";if(!X&&!Q)Y=await Xi0();let J=Q??u$(),G=async()=>{if(!Z&&!Q)await uO(J).catch((K)=>{console.warn("Warning: Error closing database:",K)})};try{let K=await h1$(J.db);return await G(),{betterAuth:Y,kysely:K}}catch(K){throw await G(),K}}async function U64(){let $=u$(),Z=new y1$({db:$.db,provider:{getMigrations:()=>Promise.resolve(Mo0)}}),{error:Q,results:X}=await Z.migrateDown();if(X?.forEach((Y)=>{if(Y.status==="Success")console.log(`\u2705 Migration "${Y.migrationName}" rolled back successfully`);else if(Y.status==="Error")console.error(`\u274C Failed to rollback migration "${Y.migrationName}"`)}),Q)throw console.error("Failed to rollback migration"),console.error(Q),Q}var c1$=D(()=>{b1$();Yi0();wQ()});async function BX0($){let Z={...process.env},Q=X60($,Z);console.log(VP1(Q.settings.encryptionKey));let X=Q.settings.betterAuthSecret||(Q.settings.localMode?Ys1(Q.settings.dataDir):""),{ensureServices:Y}=await Promise.resolve().then(() => (DQ0(),OQ0)),{outputs:J,services:G}=await Y({home:Q.settings.dataDir,externalDatabaseUrl:Q.externalDatabaseUrl,externalNatsUrl:Q.externalNatsUrl});if(!Q.skipMigrations){let{migrateBetterAuth:W}=await Promise.resolve().then(() => (Yi0(),Gs1));await W(J.databaseUrl);let{createDatabase:H}=await Promise.resolve().then(() => (wQ(),Aa1)),{migrateToLatest:F}=await Promise.resolve().then(() => (c1$(),u1$)),U=H(J.databaseUrl);await F({keepOpen:!0,database:U,skipBetterAuth:!0})}let K={...Q.settings,betterAuthSecret:X,databaseUrl:J.databaseUrl,natsUrls:J.natsUrls,...J.s3?{s3Endpoint:J.s3.endpoint,s3Bucket:J.s3.bucket,s3AccessKeyId:J.s3.accessKeyId,s3SecretAccessKey:J.s3.secretAccessKey,s3ForcePathStyle:J.s3.forcePathStyle}:{}};return Mr1(K),{settings:K,services:G.map((W)=>({name:W.name==="PostgreSQL"?"Postgres":W.name,port:W.port})),managedServiceNames:G.filter((W)=>W.owner==="managed").map((W)=>W.name)}}var Vo0=D(()=>{Fy();Js1();A$()});var i1$={};e(i1$,{updateService:()=>bE,subscribeCliState:()=>Co0,setTuiConsoleIntercepted:()=>OX0,setServerUrl:()=>hn,setMigrationsDone:()=>gn,setDevMode:()=>B64,resetCliStateForTests:()=>N64,isTuiConsoleIntercepted:()=>DX0,getCliState:()=>So0,addLogEntry:()=>nO});function l1$(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function m1$(){return{services:l1$(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function N64(){KY=m1$()}function yn(){for(let $ of ko0)$()}function So0(){return KY}function Co0($){return ko0.add($),()=>ko0.delete($)}function bE($){KY={...KY,services:KY.services.map((Z)=>Z.name===$.name?$:Z)},yn()}function gn(){KY={...KY,migrationsStatus:"done"},yn()}function hn($){KY={...KY,serverUrl:$},yn()}function nO($){let Z=[...KY.logs,$];KY={...KY,logs:Z.length>500?Z.slice(-500):Z},yn()}function B64(){KY={...KY,services:[...l1$(),{name:"API",status:"pending",port:0},{name:"Vite",status:"pending",port:0}]},yn()}function OX0($){d1$=$}function DX0(){return d1$}var KY,ko0,d1$=!1;var yE=D(()=>{KY=m1$();ko0=new Set});import{createServer as p1$}from"net";function O64($){return new Promise((Z)=>{let Q=p1$();Q.once("error",()=>Z(!1)),Q.listen($,"0.0.0.0",()=>{Q.close(()=>Z(!0))})})}async function un($){if(await O64($))return $;let Z=await new Promise((Q,X)=>{let Y=p1$();Y.once("error",X),Y.listen(0,"0.0.0.0",()=>{let J=Y.address(),G=typeof J==="object"&&J?J.port:0;Y.close(()=>Q(G))})});return console.warn(`Port ${$} is in use, using port ${Z} instead.`),Z}var _o0=()=>{};var xo0={};e(xo0,{startDevServer:()=>L64,pipeToLogStore:()=>vo0});import{join as D64}from"path";function vo0($){let Z=$.getReader(),Q=new TextDecoder,X="";function Y(){let J=X.split(`
|
|
1942
|
-
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)nO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function L64($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await un(Number(Y)+1):await un(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await BX0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)bE({name:L.name,status:"ready",port:L.port});gn();let F=D64(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:J,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)vo0(N.stdout),vo0(N.stderr);hn(J),bE({name:"Vite",status:"ready",port:Number(Y)}),bE({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (DQ0(),OQ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var fo0=D(()=>{Vo0();yE();_o0()});var LX0;var bo0=D(()=>{LX0={name:"decocms",version:"4.344.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as j64,Text as n1$}from"ink";import{jsx as E64,jsxs as t1$}from"react/jsx-runtime";function o1$({version:$}){return t1$(j64,{flexDirection:"column",marginTop:1,children:[gQ0.map((Z,Q)=>E64(n1$,{color:hQ0[Q],children:Z},Q)),t1$(n1$,{dimColor:!0,children:[" v",$]})]})}var r1$=D(()=>{Rn()});import{Box as gE,Text as tO}from"ink";import{Spinner as z64}from"@inkjs/ui";import{jsx as TJ,jsxs as yg}from"react/jsx-runtime";function a1$({status:$}){if($==="pending")return TJ(z64,{label:""});return TJ(tO,{color:"green",children:"\u2713"})}function P64($){return`${$.name}: ${$.port||"...."}`}function s1$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return yg(gE,{flexDirection:"column",paddingBottom:1,children:[TJ(o1$,{version:LX0.version}),TJ(gE,{marginBottom:1,children:TJ(tO,{dimColor:!0,children:"\u2500".repeat(80)})}),TJ(gE,{children:yg(tO,{dimColor:!0,children:["Home: ",Q]})}),yg(gE,{gap:2,children:[$.map((Y)=>yg(gE,{gap:1,children:[TJ(tO,{children:P64(Y)}),TJ(a1$,{status:Y.status})]},Y.name)),yg(gE,{gap:1,children:[TJ(tO,{children:"Migrations"}),TJ(a1$,{status:Z})]})]}),TJ(gE,{children:X?yg(tO,{children:["Open in browser: ",TJ(tO,{color:"cyan",children:X})]}):TJ(tO,{dimColor:!0,children:"Starting..."})})]})}var e1$=D(()=>{bo0();r1$()});import{Box as A64,Text as cn}from"ink";import{jsx as yo0,jsxs as go0}from"react/jsx-runtime";function T64($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function $$$({logs:$}){return yo0(A64,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return yo0(cn,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return go0(cn,{children:[go0(cn,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),yo0(cn,{color:T64(Z.status),children:Z.status}),go0(cn,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var Z$$=()=>{};var ho0={};e(ho0,{App:()=>q64});import{Box as R64}from"ink";import{useSyncExternalStore as I64}from"react";import{jsx as Q$$,jsxs as M64}from"react/jsx-runtime";function q64({home:$}){let Z=I64(Co0,So0);return M64(R64,{flexDirection:"column",children:[Q$$(s1$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Q$$($$$,{logs:Z.logs})]})}var uo0=D(()=>{e1$();Z$$();yE()});var OK="thread-gate",nU="decopilot-hosted-harness",tU="decopilot-hosted-harness-sandboxed",lG="automations",oO="background-tools",hE="task-board-github-reads";var X$$="11";function Y$$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:X$$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var J$$=()=>{};import V64 from"pg";async function K$$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=k64}=$,Y=$.log??((W)=>console.log(W)),J=new V64.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[G$$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await B$(S64)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[G$$.toString()])}catch{}await J.end().catch(()=>{})}}var G$$=8314027461559302n,k64=600000,S64=500;var W$$=D(()=>{C8()});function C64(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function co0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function H$$(){let $=C64();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:co0($,"--cpu-prof-dir")??process.cwd(),name:co0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(co0($,"--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.'}))}function F$$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=_E();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),wX0=setInterval(()=>void Z().catch(()=>{}),$),wX0.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(wX0)clearInterval(wX0)}}var wX0;var U$$=()=>{};import*as _64 from"bun:jsc";function N$$(){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{v64()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=x64()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var v64,x64;var B$$=D(()=>{({startSamplingProfiler:v64,samplingProfilerStackTraces:x64}=_64)});function O$$(){H$$();let $=[F$$(),Oa1(),N$$()];return()=>{for(let Z of $)Z()}}var D$$=D(()=>{td0();U$$();B$$()});var uE=v((L$$)=>{Object.defineProperty(L$$,"__esModule",{value:!0});L$$.RepublishHeaders=L$$.DirectMsgHeaders=L$$.JsHeaders=L$$.AdvisoryKind=void 0;L$$.isOrderedPushConsumerOptions=f64;L$$.isPullConsumer=b64;L$$.isPushConsumer=y64;L$$.isBoundPushConsumerOptions=g64;function f64($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function b64($){return $.isPullConsumer()}function y64($){return $.isPushConsumer()}function g64($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}L$$.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};L$$.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};L$$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};L$$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var RJ=v((j$$)=>{Object.defineProperty(j$$,"__esModule",{value:!0});j$$.TD=j$$.TE=j$$.Empty=void 0;j$$.encode=n64;j$$.decode=t64;j$$.Empty=new Uint8Array(0);j$$.TE=new TextEncoder;j$$.TD=new TextDecoder;function p64(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function n64(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(j$$.TE.encode($[Q]));if(Z.length===0)return j$$.Empty;if(Z.length===1)return Z[0];return p64(...Z)}function t64($){if(!$||$.length===0)return"";return j$$.TD.decode($)}});var IJ=v((P$$)=>{Object.defineProperty(P$$,"__esModule",{value:!0});P$$.errors=P$$.PermissionViolationError=P$$.NoRespondersError=P$$.TimeoutError=P$$.RequestError=P$$.ProtocolError=P$$.ConnectionError=P$$.DrainingConnectionError=P$$.ClosedConnectionError=P$$.AuthorizationError=P$$.UserAuthenticationExpiredError=P$$.InvalidOperationError=P$$.InvalidArgumentError=P$$.InvalidSubjectError=void 0;class mo0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}P$$.InvalidSubjectError=mo0;class jX0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new jX0(`${$} ${Z}`,Q)}}P$$.InvalidArgumentError=jX0;class do0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}P$$.InvalidOperationError=do0;class EX0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new EX0($);return null}}P$$.UserAuthenticationExpiredError=EX0;class zX0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new zX0($);return null}}P$$.AuthorizationError=zX0;class io0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}P$$.ClosedConnectionError=io0;class po0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}P$$.DrainingConnectionError=po0;class no0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}P$$.ConnectionError=no0;class to0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}P$$.ProtocolError=to0;class oo0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof PX0}}P$$.RequestError=oo0;class ro0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}P$$.TimeoutError=ro0;class PX0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}P$$.NoRespondersError=PX0;class AX0 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new AX0($,Q,X,Y)}}P$$.PermissionViolationError=AX0;P$$.errors={AuthorizationError:zX0,ClosedConnectionError:io0,ConnectionError:no0,DrainingConnectionError:po0,InvalidArgumentError:jX0,InvalidOperationError:do0,InvalidSubjectError:mo0,NoRespondersError:PX0,PermissionViolationError:AX0,ProtocolError:to0,RequestError:oo0,TimeoutError:ro0,UserAuthenticationExpiredError:EX0}});var DK=v((q$$)=>{Object.defineProperty(q$$,"__esModule",{value:!0});q$$.SimpleMutex=q$$.Perf=void 0;q$$.extend=U54;q$$.render=N54;q$$.timeout=B54;q$$.delay=O54;q$$.deadline=D54;q$$.deferred=so0;q$$.debugDeferred=L54;q$$.shuffle=w54;q$$.collect=j54;q$$.jitter=I$$;q$$.backoff=E54;q$$.nanos=z54;q$$.millis=P54;q$$.randomToken=R54;var F54=RJ(),ao0=IJ();function U54($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function N54($){return F54.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function B54($,Z=!0){let Q=Z?new ao0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new ao0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function O54($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function D54($,Z=1000){let Q=so0(),X=setTimeout(()=>{Q.reject(new ao0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function so0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function L54(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function w54($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function j54($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class T$${timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}q$$.Perf=T$$;class R$${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=so0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}q$$.SimpleMutex=R$$;function I$$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function E54($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return I$$(Q>Z?$[Z]:$[Q])}}}function z54($){return $*1e6}function P54($){return Math.floor($/1e6)}var A54="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oU=new Uint8Array(62);for(let $=0;$<62;$++)oU[$]=A54.charCodeAt($);var T54=218340105584896;function R54(){let $=Math.floor(Math.random()*T54),Z=$%62,Q=oU[Z];$=($-Z)/62,Z=$%62;let X=oU[Z];$=($-Z)/62,Z=$%62;let Y=oU[Z];$=($-Z)/62,Z=$%62;let J=oU[Z];$=($-Z)/62,Z=$%62;let G=oU[Z];$=($-Z)/62,Z=$%62;let K=oU[Z];$=($-Z)/62,Z=$%62;let W=oU[Z];$=($-Z)/62;let H=oU[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var x$$=v((_$$)=>{Object.defineProperty(_$$,"__esModule",{value:!0});_$$.nuid=_$$.NuidImpl=void 0;var u54="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",rO=62,RX0=12,S$$=10,V$$=33,c54=333,k$$=RX0+S$$,$r0=new Uint8Array(rO);for(let $=0;$<rO;$++)$r0[$]=u54.charCodeAt($);var TX0=4294967296,C$$=BigInt(rO)**BigInt(S$$),ln=Number(C$$/(1n<<32n)),eo0=Number(C$$%(1n<<32n));function l54($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function m54($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else l54($)}class Zr0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(k$$),this.cbuf=new Uint8Array(RX0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(ln+1)),this.seqLo=Math.floor(Math.random()*TX0);while($++<8&&this.seqHi===ln&&this.seqLo>=eo0);if(this.seqHi===ln&&this.seqLo>=eo0)this.seqLo=0;this.inc=Math.random()*(c54-V$$)+V$$|0}setPre(){m54(this.cbuf);for(let $=0;$<RX0;$++)this.buf[$]=$r0[this.cbuf[$]%rO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=k$$-1;Q>=RX0;Q--){let X=Math.floor($/rO),J=($-X*rO)*TX0+Z,G=Math.floor(J/rO),K=J-G*rO;this.buf[Q]=$r0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=TX0)this.seqLo-=TX0,this.seqHi+=1;if(this.seqHi>ln||this.seqHi===ln&&this.seqLo>=eo0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}_$$.NuidImpl=Zr0;_$$.nuid=new Zr0});var g$$=v((b$$)=>{Object.defineProperty(b$$,"__esModule",{value:!0});b$$.nuid=b$$.Nuid=void 0;var f$$=x$$();b$$.Nuid=f$$.NuidImpl;b$$.nuid=f$$.nuid});var qX0=v((IX0)=>{Object.defineProperty(IX0,"__esModule",{value:!0});IX0.nuid=IX0.Nuid=void 0;var h$$=g$$();Object.defineProperty(IX0,"Nuid",{enumerable:!0,get:function(){return h$$.Nuid}});Object.defineProperty(IX0,"nuid",{enumerable:!0,get:function(){return h$$.nuid}})});var aO=v((u$$)=>{Object.defineProperty(u$$,"__esModule",{value:!0});u$$.DEFAULT_HOST=u$$.DEFAULT_PORT=u$$.Match=void 0;u$$.syncIterator=o54;u$$.createInbox=r54;var n54=qX0(),t54=IJ();u$$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function o54($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function r54($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw t54.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${n54.nuid.next()}`}u$$.DEFAULT_PORT=4222;u$$.DEFAULT_HOST="127.0.0.1"});var mn=v((d$$)=>{Object.defineProperty(d$$,"__esModule",{value:!0});d$$.DataBuffer=void 0;var l$$=RJ();class m$${buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return l$$.TE.encode($)}static toAscii($){return l$$.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}d$$.DataBuffer=m$$});var cE=v((n$$)=>{Object.defineProperty(n$$,"__esModule",{value:!0});n$$.LF=n$$.CR=n$$.CRLF=n$$.CR_LF_LEN=n$$.CR_LF=void 0;n$$.setTransportFactory=Y94;n$$.defaultPort=J94;n$$.getUrlParseFn=G94;n$$.newTransport=K94;n$$.getResolveFn=W94;n$$.protoLen=p$$;n$$.extractProtocolMessage=H94;var Z94=RJ(),Q94=aO(),X94=mn(),qJ;function Y94($){qJ=$}function J94(){return qJ!==void 0&&qJ.defaultPort!==void 0?qJ.defaultPort:Q94.DEFAULT_PORT}function G94(){return qJ!==void 0&&qJ.urlParseFn?qJ.urlParseFn:void 0}function K94(){if(!qJ||typeof qJ.factory!=="function")throw Error("transport fn is not set");return qJ.factory()}function W94(){return qJ!==void 0&&qJ.dnsResolveFn?qJ.dnsResolveFn:void 0}n$$.CR_LF=`\r
|
|
1942
|
+
`);X=J.pop()??"";for(let G of J){let K=Bun.stripANSI(G).replace(/^\[\d+\]\s*/,"").trim();if(!K)continue;nO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:K})}}(async()=>{try{for(;;){let{done:J,value:G}=await Z.read();if(J)break;X+=Q.decode(G,{stream:!0}),Y()}}catch{}if(X.trim()){let J=Bun.stripANSI(X).replace(/^\[\d+\]\s*/,"").trim();if(J)nO({method:"",path:"",status:0,duration:0,timestamp:new Date,rawLine:J})}})()}async function L64($){let{baseUrl:Z,noTui:Q}=$,X=process.env.HOST==="0.0.0.0"&&Boolean(process.env.PORT),Y=X?process.env.PORT:$.vitePort,J=Z||`http://localhost:${Y}`,G=X?await un(Number(Y)+1):await un(Number($.port)),{settings:K,services:W,managedServiceNames:H}=await BX0({port:String(G),home:$.home,baseUrl:$.baseUrl,localMode:$.localMode,skipMigrations:$.skipMigrations,noTui:$.noTui,vitePort:$.vitePort});for(let L of W)bE({name:L.name,status:"ready",port:L.port});gn();let F=D64(import.meta.dir,"..","..","..","..",".."),U=Q===!0,N=Bun.spawn(["bun","run","dev:servers"],{cwd:F,env:{...process.env,PORT:String(K.port),VITE_PORT:String(Y),DATABASE_URL:K.databaseUrl,NATS_URL:K.natsUrls.join(","),NODE_ENV:K.nodeEnv,BASE_URL:J,DECOCMS_LOCAL_MODE:String(K.localMode),DECOCMS_HOME:K.dataDir,DATA_DIR:K.dataDir,DECO_CLI:"1",...K.betterAuthSecret?{BETTER_AUTH_SECRET:K.betterAuthSecret}:{},...K.s3Endpoint?{S3_ENDPOINT:K.s3Endpoint,S3_BUCKET:K.s3Bucket??"",S3_ACCESS_KEY_ID:K.s3AccessKeyId??"",S3_SECRET_ACCESS_KEY:K.s3SecretAccessKey??"",S3_FORCE_PATH_STYLE:String(K.s3ForcePathStyle)}:{},...K.natsCredsPath?{NATS_CREDS:K.natsCredsPath}:{}},stdio:["inherit",U?"inherit":"pipe",U?"inherit":"pipe"]});if(!U)vo0(N.stdout),vo0(N.stderr);hn(J),bE({name:"Vite",status:"ready",port:Number(Y)}),bE({name:"API",status:"ready",port:Number(K.port)});let O=async(L)=>{if(N.kill(L),await N.exited,H.length>0){let{stopServices:w}=await Promise.resolve().then(() => (DQ0(),OQ0));await w(K.dataDir)}};return process.on("SIGINT",()=>O("SIGINT")),process.on("SIGTERM",()=>O("SIGTERM")),{port:Number(Y),process:N}}var fo0=D(()=>{Vo0();yE();_o0()});var LX0;var bo0=D(()=>{LX0={name:"decocms",version:"4.344.3",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});import{Box as j64,Text as n1$}from"ink";import{jsx as E64,jsxs as t1$}from"react/jsx-runtime";function o1$({version:$}){return t1$(j64,{flexDirection:"column",marginTop:1,children:[gQ0.map((Z,Q)=>E64(n1$,{color:hQ0[Q],children:Z},Q)),t1$(n1$,{dimColor:!0,children:[" v",$]})]})}var r1$=D(()=>{Rn()});import{Box as gE,Text as tO}from"ink";import{Spinner as z64}from"@inkjs/ui";import{jsx as TJ,jsxs as yg}from"react/jsx-runtime";function a1$({status:$}){if($==="pending")return TJ(z64,{label:""});return TJ(tO,{color:"green",children:"\u2713"})}function P64($){return`${$.name}: ${$.port||"...."}`}function s1$({services:$,migrationsStatus:Z,home:Q,serverUrl:X}){return yg(gE,{flexDirection:"column",paddingBottom:1,children:[TJ(o1$,{version:LX0.version}),TJ(gE,{marginBottom:1,children:TJ(tO,{dimColor:!0,children:"\u2500".repeat(80)})}),TJ(gE,{children:yg(tO,{dimColor:!0,children:["Home: ",Q]})}),yg(gE,{gap:2,children:[$.map((Y)=>yg(gE,{gap:1,children:[TJ(tO,{children:P64(Y)}),TJ(a1$,{status:Y.status})]},Y.name)),yg(gE,{gap:1,children:[TJ(tO,{children:"Migrations"}),TJ(a1$,{status:Z})]})]}),TJ(gE,{children:X?yg(tO,{children:["Open in browser: ",TJ(tO,{color:"cyan",children:X})]}):TJ(tO,{dimColor:!0,children:"Starting..."})})]})}var e1$=D(()=>{bo0();r1$()});import{Box as A64,Text as cn}from"ink";import{jsx as yo0,jsxs as go0}from"react/jsx-runtime";function T64($){if($>=500)return"red";if($>=400)return"yellow";if($>=300)return"cyan";return"green"}function $$$({logs:$}){return yo0(A64,{flexDirection:"column",children:$.map((Z,Q)=>{if(Z.rawLine)return yo0(cn,{dimColor:!0,children:Z.rawLine},Q);let X=Z.duration<1000?`${Z.duration}ms`:`${(Z.duration/1000).toFixed(1)}s`;return go0(cn,{children:[go0(cn,{dimColor:!0,children:[Z.method.padEnd(6)," ",Z.path.padEnd(30)," "]}),yo0(cn,{color:T64(Z.status),children:Z.status}),go0(cn,{dimColor:!0,children:[" ",X.padStart(8)]})]},Q)})})}var Z$$=()=>{};var ho0={};e(ho0,{App:()=>q64});import{Box as R64}from"ink";import{useSyncExternalStore as I64}from"react";import{jsx as Q$$,jsxs as M64}from"react/jsx-runtime";function q64({home:$}){let Z=I64(Co0,So0);return M64(R64,{flexDirection:"column",children:[Q$$(s1$,{services:Z.services,migrationsStatus:Z.migrationsStatus,home:$,serverUrl:Z.serverUrl}),Q$$($$$,{logs:Z.logs})]})}var uo0=D(()=>{e1$();Z$$();yE()});var OK="thread-gate",nU="decopilot-hosted-harness",tU="decopilot-hosted-harness-sandboxed",lG="automations",oO="background-tools",hE="task-board-github-reads";var X$$="11";function Y$$($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:X$$,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}var J$$=()=>{};import V64 from"pg";async function K$$($,Z){let{databaseUrl:Q,lockTimeoutMs:X=k64}=$,Y=$.log??((W)=>console.log(W)),J=new V64.Client({connectionString:Q});await J.connect();let G=Date.now(),K=!1;try{while(!K){if(K=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[G$$.toString()])).rows[0]?.locked===!0,K)break;if(Date.now()-G>=X)throw Error(`Timed out after ${X}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await B$(S64)}let W=Date.now()-G;if(W>1000)Y(`[dbos] waited ${W}ms for the migration lock; another process migrated first`);return await Z()}finally{if(K)try{await J.query("SELECT pg_advisory_unlock($1)",[G$$.toString()])}catch{}await J.end().catch(()=>{})}}var G$$=8314027461559302n,k64=600000,S64=500;var W$$=D(()=>{C8()});function C64(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function co0($,Z){for(let Q=0;Q<$.length;Q++){let X=$[Q];if(X===void 0)continue;if(X===Z)return $[Q+1];if(X.startsWith(`${Z}=`))return X.slice(Z.length+1)}return}function H$$(){let $=C64();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:co0($,"--cpu-prof-dir")??process.cwd(),name:co0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number(co0($,"--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.'}))}function F$$(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=_E();if(!Q)return;let X={};try{let{heapStats:Y}=await import("bun:jsc"),J=Y(),G=Object.entries(J.objectTypeCounts).sort((K,W)=>W[1]-K[1]).slice(0,20);X={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...X}))};return Z().catch(()=>{}),wX0=setInterval(()=>void Z().catch(()=>{}),$),wX0.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),X=typeof Q==="string"?Q:JSON.stringify(Q),Y=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(Y,X),console.log(JSON.stringify({msg:"heap-snapshot-written",path:Y}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(wX0)clearInterval(wX0)}}var wX0;var U$$=()=>{};import*as _64 from"bun:jsc";function N$$(){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{v64()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,X=performance.now()+Z,Y=()=>{let J=performance.now(),G=J-X;X=J+Z;let K=[];try{K=x64()?.traces??[]}catch{}if(G>$&&K.length>0){let W=new Map;for(let F of K){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;W.set(B,(W.get(B)??0)+1)}let H=[...W.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:K.length,top:H}))}Q=setTimeout(Y,Z),Q.unref?.()};return Q=setTimeout(Y,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}var v64,x64;var B$$=D(()=>{({startSamplingProfiler:v64,samplingProfilerStackTraces:x64}=_64)});function O$$(){H$$();let $=[F$$(),Oa1(),N$$()];return()=>{for(let Z of $)Z()}}var D$$=D(()=>{td0();U$$();B$$()});var uE=v((L$$)=>{Object.defineProperty(L$$,"__esModule",{value:!0});L$$.RepublishHeaders=L$$.DirectMsgHeaders=L$$.JsHeaders=L$$.AdvisoryKind=void 0;L$$.isOrderedPushConsumerOptions=f64;L$$.isPullConsumer=b64;L$$.isPushConsumer=y64;L$$.isBoundPushConsumerOptions=g64;function f64($){if($&&typeof $==="object")return"name_prefix"in $||"deliver_subject_prefix"in $||"filter_subjects"in $||"filter_subject"in $||"deliver_policy"in $||"opt_start_seq"in $||"opt_start_time"in $||"replay_policy"in $||"inactive_threshold"in $||"headers_only"in $||"deliver_prefix"in $;return!1}function b64($){return $.isPullConsumer()}function y64($){return $.isPushConsumer()}function g64($){if($&&typeof $==="object")return"deliver_subject"in $||"deliver_group"in $||"idle_heartbeat"in $;return!1}L$$.AdvisoryKind={API:"api_audit",StreamAction:"stream_action",ConsumerAction:"consumer_action",SnapshotCreate:"snapshot_create",SnapshotComplete:"snapshot_complete",RestoreCreate:"restore_create",RestoreComplete:"restore_complete",MaxDeliver:"max_deliver",Terminated:"terminated",Ack:"consumer_ack",StreamLeaderElected:"stream_leader_elected",StreamQuorumLost:"stream_quorum_lost",ConsumerLeaderElected:"consumer_leader_elected",ConsumerQuorumLost:"consumer_quorum_lost"};L$$.JsHeaders={StreamSourceHdr:"Nats-Stream-Source",LastConsumerSeqHdr:"Nats-Last-Consumer",LastStreamSeqHdr:"Nats-Last-Stream",ConsumerStalledHdr:"Nats-Consumer-Stalled",MessageSizeHdr:"Nats-Msg-Size",RollupHdr:"Nats-Rollup",RollupValueSubject:"sub",RollupValueAll:"all",PendingMessagesHdr:"Nats-Pending-Messages",PendingBytesHdr:"Nats-Pending-Bytes",RequiredApiLevel:"Nats-Required-Api-Level"};L$$.DirectMsgHeaders={Stream:"Nats-Stream",Sequence:"Nats-Sequence",TimeStamp:"Nats-Time-Stamp",Subject:"Nats-Subject",LastSequence:"Nats-Last-Sequence",NumPending:"Nats-Num-Pending"};L$$.RepublishHeaders={Stream:"Nats-Stream",Subject:"Nats-Subject",Sequence:"Nats-Sequence",LastSequence:"Nats-Last-Sequence",Size:"Nats-Msg-Size"}});var RJ=v((j$$)=>{Object.defineProperty(j$$,"__esModule",{value:!0});j$$.TD=j$$.TE=j$$.Empty=void 0;j$$.encode=n64;j$$.decode=t64;j$$.Empty=new Uint8Array(0);j$$.TE=new TextEncoder;j$$.TD=new TextDecoder;function p64(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}function n64(...$){let Z=[];for(let Q=0;Q<$.length;Q++)Z.push(j$$.TE.encode($[Q]));if(Z.length===0)return j$$.Empty;if(Z.length===1)return Z[0];return p64(...Z)}function t64($){if(!$||$.length===0)return"";return j$$.TD.decode($)}});var IJ=v((P$$)=>{Object.defineProperty(P$$,"__esModule",{value:!0});P$$.errors=P$$.PermissionViolationError=P$$.NoRespondersError=P$$.TimeoutError=P$$.RequestError=P$$.ProtocolError=P$$.ConnectionError=P$$.DrainingConnectionError=P$$.ClosedConnectionError=P$$.AuthorizationError=P$$.UserAuthenticationExpiredError=P$$.InvalidOperationError=P$$.InvalidArgumentError=P$$.InvalidSubjectError=void 0;class mo0 extends Error{constructor($,Z){super(`illegal subject: '${$}'`,Z);this.name="InvalidSubjectError"}}P$$.InvalidSubjectError=mo0;class jX0 extends Error{constructor($,Z){super($,Z);this.name="InvalidArgumentError"}static format($,Z,Q){if(Array.isArray(Z)&&Z.length>1)Z=Z[0];if(Array.isArray($))$=$.map((X)=>`'${X}'`),$=$.join(",");else $=`'${$}'`;return new jX0(`${$} ${Z}`,Q)}}P$$.InvalidArgumentError=jX0;class do0 extends Error{constructor($,Z){super($,Z);this.name="InvalidOperationError"}}P$$.InvalidOperationError=do0;class EX0 extends Error{constructor($,Z){super($,Z);this.name="UserAuthenticationExpiredError"}static parse($){if($.toLowerCase().indexOf("user authentication expired")!==-1)return new EX0($);return null}}P$$.UserAuthenticationExpiredError=EX0;class zX0 extends Error{constructor($,Z){super($,Z);this.name="AuthorizationError"}static parse($){let Z=["authorization violation","account authentication expired","authentication timeout"],Q=$.toLowerCase();for(let X=0;X<Z.length;X++)if(Q.indexOf(Z[X])!==-1)return new zX0($);return null}}P$$.AuthorizationError=zX0;class io0 extends Error{constructor(){super("closed connection");this.name="ClosedConnectionError"}}P$$.ClosedConnectionError=io0;class po0 extends Error{constructor(){super("connection draining");this.name="DrainingConnectionError"}}P$$.DrainingConnectionError=po0;class no0 extends Error{constructor($,Z){super($,Z);this.name="ConnectionError"}}P$$.ConnectionError=no0;class to0 extends Error{constructor($,Z){super($,Z);this.name="ProtocolError"}}P$$.ProtocolError=to0;class oo0 extends Error{constructor($="",Z){super($,Z);this.name="RequestError"}isNoResponders(){return this.cause instanceof PX0}}P$$.RequestError=oo0;class ro0 extends Error{constructor($){super("timeout",$);this.name="TimeoutError"}}P$$.TimeoutError=ro0;class PX0 extends Error{subject;constructor($,Z){super(`no responders: '${$}'`,Z);this.subject=$,this.name="NoResponders"}}P$$.NoRespondersError=PX0;class AX0 extends Error{operation;subject;queue;constructor($,Z,Q,X,Y){super($,Y);this.name="PermissionViolationError",this.operation=Z,this.subject=Q,this.queue=X}static parse($){if(($?$.toLowerCase():"").indexOf("permissions violation")===-1)return null;let Q="publish",X="",Y=void 0,J=$.match(/(Publish|Subscription) to "(\S+)"/);if(J){if(Q=J[1].toLowerCase(),X=J[2],Q==="subscription"){let G=$.match(/using queue "(\S+)"/);if(G)Y=G[1]}}return new AX0($,Q,X,Y)}}P$$.PermissionViolationError=AX0;P$$.errors={AuthorizationError:zX0,ClosedConnectionError:io0,ConnectionError:no0,DrainingConnectionError:po0,InvalidArgumentError:jX0,InvalidOperationError:do0,InvalidSubjectError:mo0,NoRespondersError:PX0,PermissionViolationError:AX0,ProtocolError:to0,RequestError:oo0,TimeoutError:ro0,UserAuthenticationExpiredError:EX0}});var DK=v((q$$)=>{Object.defineProperty(q$$,"__esModule",{value:!0});q$$.SimpleMutex=q$$.Perf=void 0;q$$.extend=U54;q$$.render=N54;q$$.timeout=B54;q$$.delay=O54;q$$.deadline=D54;q$$.deferred=so0;q$$.debugDeferred=L54;q$$.shuffle=w54;q$$.collect=j54;q$$.jitter=I$$;q$$.backoff=E54;q$$.nanos=z54;q$$.millis=P54;q$$.randomToken=R54;var F54=RJ(),ao0=IJ();function U54($,...Z){for(let Q=0;Q<Z.length;Q++){let X=Z[Q];Object.keys(X).forEach(function(Y){$[Y]=X[Y]})}return $}function N54($){return F54.TD.decode($).replace(/\n/g,"\u240A").replace(/\r/g,"\u240D")}function B54($,Z=!0){let Q=Z?new ao0.TimeoutError:null,X,Y,J=new Promise((G,K)=>{X={cancel:()=>{if(Y)clearTimeout(Y)}},Y=setTimeout(()=>{if(Q===null)K(new ao0.TimeoutError);else K(Q)},$)});return Object.assign(J,X)}function O54($=0){let Z,Q=new Promise((X)=>{let Y=setTimeout(()=>{X()},$);Z={cancel:()=>{if(Y)clearTimeout(Y),X()}}});return Object.assign(Q,Z)}async function D54($,Z=1000){let Q=so0(),X=setTimeout(()=>{Q.reject(new ao0.TimeoutError)},Z);try{return await Promise.race([$,Q])}finally{clearTimeout(X)}}function so0(){let $={},Z=new Promise((Q,X)=>{$={resolve:Q,reject:X}});return Object.assign(Z,$)}function L54(){let $={},Z=new Promise((Q,X)=>{$={resolve:(Y)=>{console.trace("resolve",Y),Q(Y)},reject:(Y)=>{console.trace("reject"),X(Y)}}});return Object.assign(Z,$)}function w54($){for(let Z=$.length-1;Z>0;Z--){let Q=Math.floor(Math.random()*(Z+1));[$[Z],$[Q]]=[$[Q],$[Z]]}return $}async function j54($){let Z=[];for await(let Q of $)Z.push(Q);return Z}class T$${timers;measures;constructor(){this.timers=new Map,this.measures=new Map}mark($){this.timers.set($,performance.now())}measure($,Z,Q){let X=this.timers.get(Z);if(X===void 0)throw Error(`${Z} is not defined`);let Y=this.timers.get(Q);if(Y===void 0)throw Error(`${Q} is not defined`);this.measures.set($,Y-X)}getEntries(){let $=[];return this.measures.forEach((Z,Q)=>{$.push({name:Q,duration:Z})}),$}}q$$.Perf=T$$;class R$${max;current;waiting;constructor($=1){this.max=$,this.current=0,this.waiting=[]}lock(){if(this.current++,this.current<=this.max)return Promise.resolve();let $=so0();return this.waiting.push($),$}unlock(){this.current--,this.waiting.pop()?.resolve()}}q$$.SimpleMutex=R$$;function I$$($){if($===0)return 0;return Math.floor($/2+Math.random()*$)}function E54($=[0,250,250,500,500,3000,5000]){if(!Array.isArray($))$=[0,250,250,500,500,3000,5000];let Z=$.length-1;return{backoff(Q){return I$$(Q>Z?$[Z]:$[Q])}}}function z54($){return $*1e6}function P54($){return Math.floor($/1e6)}var A54="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",oU=new Uint8Array(62);for(let $=0;$<62;$++)oU[$]=A54.charCodeAt($);var T54=218340105584896;function R54(){let $=Math.floor(Math.random()*T54),Z=$%62,Q=oU[Z];$=($-Z)/62,Z=$%62;let X=oU[Z];$=($-Z)/62,Z=$%62;let Y=oU[Z];$=($-Z)/62,Z=$%62;let J=oU[Z];$=($-Z)/62,Z=$%62;let G=oU[Z];$=($-Z)/62,Z=$%62;let K=oU[Z];$=($-Z)/62,Z=$%62;let W=oU[Z];$=($-Z)/62;let H=oU[$];return String.fromCharCode(Q,X,Y,J,G,K,W,H)}});var x$$=v((_$$)=>{Object.defineProperty(_$$,"__esModule",{value:!0});_$$.nuid=_$$.NuidImpl=void 0;var u54="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",rO=62,RX0=12,S$$=10,V$$=33,c54=333,k$$=RX0+S$$,$r0=new Uint8Array(rO);for(let $=0;$<rO;$++)$r0[$]=u54.charCodeAt($);var TX0=4294967296,C$$=BigInt(rO)**BigInt(S$$),ln=Number(C$$/(1n<<32n)),eo0=Number(C$$%(1n<<32n));function l54($){for(let Z=0;Z<$.length;Z++)$[Z]=Math.floor(Math.random()*256)}function m54($){if(globalThis?.crypto?.getRandomValues)globalThis.crypto.getRandomValues($);else l54($)}class Zr0{buf;cbuf;seqHi;seqLo;inc;inited;constructor(){this.buf=new Uint8Array(k$$),this.cbuf=new Uint8Array(RX0),this.inited=!1}init(){this.inited=!0,this.setPre(),this.initSeqAndInc(),this.fillSeq()}initSeqAndInc(){let $=0;do this.seqHi=Math.floor(Math.random()*(ln+1)),this.seqLo=Math.floor(Math.random()*TX0);while($++<8&&this.seqHi===ln&&this.seqLo>=eo0);if(this.seqHi===ln&&this.seqLo>=eo0)this.seqLo=0;this.inc=Math.random()*(c54-V$$)+V$$|0}setPre(){m54(this.cbuf);for(let $=0;$<RX0;$++)this.buf[$]=$r0[this.cbuf[$]%rO]}fillSeq(){let $=this.seqHi,Z=this.seqLo;for(let Q=k$$-1;Q>=RX0;Q--){let X=Math.floor($/rO),J=($-X*rO)*TX0+Z,G=Math.floor(J/rO),K=J-G*rO;this.buf[Q]=$r0[K],$=X,Z=G}}next(){if(!this.inited)this.init();if(this.seqLo+=this.inc,this.seqLo>=TX0)this.seqLo-=TX0,this.seqHi+=1;if(this.seqHi>ln||this.seqHi===ln&&this.seqLo>=eo0)this.setPre(),this.initSeqAndInc();this.fillSeq();let $=this.buf;return String.fromCharCode($[0],$[1],$[2],$[3],$[4],$[5],$[6],$[7],$[8],$[9],$[10],$[11],$[12],$[13],$[14],$[15],$[16],$[17],$[18],$[19],$[20],$[21])}reset(){this.init()}}_$$.NuidImpl=Zr0;_$$.nuid=new Zr0});var g$$=v((b$$)=>{Object.defineProperty(b$$,"__esModule",{value:!0});b$$.nuid=b$$.Nuid=void 0;var f$$=x$$();b$$.Nuid=f$$.NuidImpl;b$$.nuid=f$$.nuid});var qX0=v((IX0)=>{Object.defineProperty(IX0,"__esModule",{value:!0});IX0.nuid=IX0.Nuid=void 0;var h$$=g$$();Object.defineProperty(IX0,"Nuid",{enumerable:!0,get:function(){return h$$.Nuid}});Object.defineProperty(IX0,"nuid",{enumerable:!0,get:function(){return h$$.nuid}})});var aO=v((u$$)=>{Object.defineProperty(u$$,"__esModule",{value:!0});u$$.DEFAULT_HOST=u$$.DEFAULT_PORT=u$$.Match=void 0;u$$.syncIterator=o54;u$$.createInbox=r54;var n54=qX0(),t54=IJ();u$$.Match={Exact:"exact",CanonicalMIME:"canonical",IgnoreCase:"insensitive"};function o54($){let Z=$[Symbol.asyncIterator]();return{async next(){let Q=await Z.next();if(Q.done)return Promise.resolve(null);return Promise.resolve(Q.value)}}}function r54($=""){if($=$||"_INBOX",typeof $!=="string")throw TypeError("prefix must be a string");return $.split(".").forEach((Z)=>{if(Z==="*"||Z===">")throw t54.InvalidArgumentError.format("prefix",`cannot have wildcards ('${$}')`)}),`${$}.${n54.nuid.next()}`}u$$.DEFAULT_PORT=4222;u$$.DEFAULT_HOST="127.0.0.1"});var mn=v((d$$)=>{Object.defineProperty(d$$,"__esModule",{value:!0});d$$.DataBuffer=void 0;var l$$=RJ();class m$${buffers;byteLength;constructor(){this.buffers=[],this.byteLength=0}static concat(...$){let Z=0;for(let Y=0;Y<$.length;Y++)Z+=$[Y].length;let Q=new Uint8Array(Z),X=0;for(let Y=0;Y<$.length;Y++)Q.set($[Y],X),X+=$[Y].length;return Q}static fromAscii($){if(!$)$="";return l$$.TE.encode($)}static toAscii($){return l$$.TD.decode($)}reset(){this.buffers.length=0,this.byteLength=0}pack(){if(this.buffers.length>1){let $=new Uint8Array(this.byteLength),Z=0;for(let Q=0;Q<this.buffers.length;Q++)$.set(this.buffers[Q],Z),Z+=this.buffers[Q].length;this.buffers.length=0,this.buffers.push($)}}shift(){if(this.buffers.length){let $=this.buffers.shift();if($)return this.byteLength-=$.length,$}return new Uint8Array(0)}drain($){if(this.buffers.length){this.pack();let Z=this.buffers.pop();if(Z){let Q=this.byteLength;if($===void 0||$>Q)$=Q;let X=Z.subarray(0,$);if(Q>$)this.buffers.push(Z.subarray($));return this.byteLength=Q-$,X}}return new Uint8Array(0)}fill($,...Z){if($)this.buffers.push($),this.byteLength+=$.length;for(let Q=0;Q<Z.length;Q++)if(Z[Q]&&Z[Q].length)this.buffers.push(Z[Q]),this.byteLength+=Z[Q].length}peek(){if(this.buffers.length)return this.pack(),this.buffers[0];return new Uint8Array(0)}size(){return this.byteLength}length(){return this.buffers.length}}d$$.DataBuffer=m$$});var cE=v((n$$)=>{Object.defineProperty(n$$,"__esModule",{value:!0});n$$.LF=n$$.CR=n$$.CRLF=n$$.CR_LF_LEN=n$$.CR_LF=void 0;n$$.setTransportFactory=Y94;n$$.defaultPort=J94;n$$.getUrlParseFn=G94;n$$.newTransport=K94;n$$.getResolveFn=W94;n$$.protoLen=p$$;n$$.extractProtocolMessage=H94;var Z94=RJ(),Q94=aO(),X94=mn(),qJ;function Y94($){qJ=$}function J94(){return qJ!==void 0&&qJ.defaultPort!==void 0?qJ.defaultPort:Q94.DEFAULT_PORT}function G94(){return qJ!==void 0&&qJ.urlParseFn?qJ.urlParseFn:void 0}function K94(){if(!qJ||typeof qJ.factory!=="function")throw Error("transport fn is not set");return qJ.factory()}function W94(){return qJ!==void 0&&qJ.dnsResolveFn?qJ.dnsResolveFn:void 0}n$$.CR_LF=`\r
|
|
1943
1943
|
`;n$$.CR_LF_LEN=n$$.CR_LF.length;n$$.CRLF=X94.DataBuffer.fromAscii(n$$.CR_LF);n$$.CR=new Uint8Array(n$$.CRLF)[0];n$$.LF=new Uint8Array(n$$.CRLF)[1];function p$$($){for(let Z=0;Z<$.length;Z++){let Q=Z+1;if($.byteLength>Q&&$[Z]===n$$.CR&&$[Q]===n$$.LF)return Q+1}return 0}function H94($){let Z=p$$($);if(Z>0){let X=new Uint8Array($).slice(0,Z);return Z94.TD.decode(X)}return""}});var Gr0=v((Z8$)=>{Object.defineProperty(Z8$,"__esModule",{value:!0});Z8$.ipV4=s$$;Z8$.isIP=z94;Z8$.parseIP=e$$;var dn=4,lE=16,MX0=48,a$$=57,o$$=65,j94=70,r$$=97,E94=102,Jr0=16777215;function s$$($,Z,Q,X){let Y=new Uint8Array(lE);return[0,0,0,0,0,0,0,0,0,0,255,255].forEach((G,K)=>{Y[K]=G}),Y[12]=$,Y[13]=Z,Y[14]=Q,Y[15]=X,Y}function z94($){return e$$($)!==void 0}function e$$($){for(let Z=0;Z<$.length;Z++)switch($[Z]){case".":return $8$($);case":":return P94($)}return}function $8$($){let Z=new Uint8Array(dn);for(let Q=0;Q<dn;Q++){if($.length===0)return;if(Q>0){if($[0]!==".")return;$=$.substring(1)}let{n:X,c:Y,ok:J}=A94($);if(!J||X>255)return;$=$.substring(Y),Z[Q]=X}return s$$(Z[0],Z[1],Z[2],Z[3])}function P94($){let Z=new Uint8Array(lE),Q=-1;if($.length>=2&&$[0]===":"&&$[1]===":"){if(Q=0,$=$.substring(2),$.length===0)return Z}let X=0;while(X<lE){let{n:Y,c:J,ok:G}=T94($);if(!G||Y>65535)return;if(J<$.length&&$[J]==="."){if(Q<0&&X!=lE-dn)return;if(X+dn>lE)return;let K=$8$($);if(K===void 0)return;Z[X]=K[12],Z[X+1]=K[13],Z[X+2]=K[14],Z[X+3]=K[15],$="",X+=dn;break}if(Z[X]=Y>>8,Z[X+1]=Y,X+=2,$=$.substring(J),$.length===0)break;if($[0]!==":"||$.length==1)return;if($=$.substring(1),$[0]===":"){if(Q>=0)return;if(Q=X,$=$.substring(1),$.length===0)break}}if($.length!==0)return;if(X<lE){if(Q<0)return;let Y=lE-X;for(let J=X-1;J>=Q;J--)Z[J+Y]=Z[J];for(let J=Q+Y-1;J>=Q;J--)Z[J]=0}else if(Q>=0)return;return Z}function A94($){let Z=0,Q=0;for(Z=0;Z<$.length&&MX0<=$.charCodeAt(Z)&&$.charCodeAt(Z)<=a$$;Z++)if(Q=Q*10+($.charCodeAt(Z)-MX0),Q>=Jr0)return{n:Jr0,c:Z,ok:!1};if(Z===0)return{n:0,c:0,ok:!1};return{n:Q,c:Z,ok:!0}}function T94($){let Z=0,Q=0;for(Q=0;Q<$.length;Q++){if(MX0<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=a$$)Z*=16,Z+=$.charCodeAt(Q)-MX0;else if(r$$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=E94)Z*=16,Z+=$.charCodeAt(Q)-r$$+10;else if(o$$<=$.charCodeAt(Q)&&$.charCodeAt(Q)<=j94)Z*=16,Z+=$.charCodeAt(Q)-o$$+10;else break;if(Z>=Jr0)return{n:0,c:Q,ok:!1}}if(Q===0)return{n:0,c:Q,ok:!1};return{n:Z,c:Q,ok:!0}}});var Nr0=v((X8$)=>{Object.defineProperty(X8$,"__esModule",{value:!0});X8$.Servers=X8$.ServerImpl=void 0;X8$.isIPV4OrHostname=Q8$;X8$.hostPort=Ur0;var Kr0=cE(),Wr0=DK(),Hr0=Gr0(),M94=aO(),V94=IJ();function Q8$($){if($.indexOf("[")!==-1||$.indexOf("::")!==-1)return!1;if($.indexOf(".")!==-1)return!0;if($.split(":").length<=2)return!0;return!1}function Fr0($){return!Q8$($)}function k94($){let Q=$.toUpperCase().indexOf("::FFFF:");if(Q!==-1&&$.indexOf(".")!==-1){let X=$.substring(Q+7);return X=X.replace("[",""),X.replace("]","")}return $}function Ur0($){if($=$.trim(),$.match(/^(.*:\/\/)(.*)/m))$=$.replace(/^(.*:\/\/)(.*)/gm,"$2");if($=k94($),Fr0($)&&$.indexOf("[")===-1)$=`[${$}]`;let Z=Fr0($)?$.match(/(]:)(\d+)/):$.match(/(:)(\d+)/),Q=Z&&Z.length===3&&Z[1]&&Z[2]?parseInt(Z[2]):M94.DEFAULT_PORT,Y=new URL(`${Q===80?"https":"http"}://${$}`);Y.port=`${Q}`;let J=Y.hostname;if(J.charAt(0)==="[")J=J.substring(1,J.length-1);return{listen:Y.host,hostname:J,port:Q}}class gg{src;listen;hostname;port;didConnect;reconnects;lastConnect;gossiped;tlsName;resolves;constructor($,Z=!1){this.src=$,this.tlsName="";let Q=Ur0($);this.listen=Q.listen,this.hostname=Q.hostname,this.port=Q.port,this.didConnect=!1,this.reconnects=0,this.lastConnect=0,this.gossiped=Z}toString(){return this.listen}async resolve($){if(!$.fn||$.resolve===!1)return[this];let Z=[];if((0,Hr0.isIP)(this.hostname))return[this];else{let Q=await $.fn(this.hostname);if($.debug)console.log(`resolve ${this.hostname} = ${Q.join(",")}`);for(let X of Q){let Y=this.port===80?"https":"http",J=new URL(`${Y}://${Fr0(X)?"["+X+"]":X}`);J.port=`${this.port}`;let G=new gg(J.host,!1);G.tlsName=this.hostname,Z.push(G)}}if($.randomize)(0,Wr0.shuffle)(Z);return this.resolves=Z,Z}}X8$.ServerImpl=gg;class VX0{firstSelect;servers;currentServer;tlsName;randomize;constructor($={}){this.firstSelect=!0,this.servers=[],this.tlsName="",this.randomize=$.randomize||!1}setServers($){if(!Array.isArray($)||$.length===0)throw V94.InvalidArgumentError.format("servers","cannot be empty");let Z=(0,Kr0.getUrlParseFn)(),Q=new Map;for(let Y of this.servers)Q.set(Y.listen,Y);let X=[];for(let Y of $){Y=Z?Z(Y):Y;let{listen:J}=Ur0(Y),G=Q.get(J);if(G)G.gossiped=!1,X.push(G);else X.push(new gg(Y))}if(this.randomize)(0,Wr0.shuffle)(X);if(this.servers=X,this.currentServer===void 0||!X.includes(this.currentServer))this.currentServer=X[0],this.firstSelect=!0}clear(){this.servers.length=0}updateTLSName(){let $=this.getCurrentServer();if(!(0,Hr0.isIP)($.hostname))this.tlsName=$.hostname,this.servers.forEach((Z)=>{if(Z.gossiped)Z.tlsName=this.tlsName})}getCurrentServer(){return this.currentServer}addServer($,Z=!1){let Q=(0,Kr0.getUrlParseFn)();$=Q?Q($):$;let X=new gg($,Z);if((0,Hr0.isIP)(X.hostname))X.tlsName=this.tlsName;this.servers.push(X)}selectServer(){if(this.firstSelect)return this.firstSelect=!1,this.currentServer;let $=this.servers.shift();if($)this.servers.push($),this.currentServer=$;return $}removeCurrentServer(){this.removeServer(this.currentServer)}removeServer($){if($){let Z=this.servers.indexOf($);this.servers.splice(Z,1)}}snapshot(){return VX0.freezeAll(this.servers)}snapshotForHandler(){let $=this.currentServer;if(!$)return this.snapshot();let Z=this.servers.indexOf($);if(Z<=0)return this.snapshot();return VX0.freezeAll([$,...this.servers.slice(0,Z),...this.servers.slice(Z+1)])}static freezeAll($){return $.map((Z)=>Object.freeze({hostname:Z.hostname,port:Z.port,listen:Z.listen,src:Z.src,tlsName:Z.tlsName,reconnects:Z.reconnects,lastConnect:Z.lastConnect,gossiped:Z.gossiped,didConnect:Z.didConnect}))}find($){return this.servers.find((Z)=>Z.listen===$.listen)}setCurrent($){this.currentServer=$}length(){return this.servers.length}next(){return this.servers.length?this.servers[0]:void 0}getServers(){return this.servers}update($,Z){let Q=[],X=[],Y=(0,Kr0.getUrlParseFn)(),J=new Map;if($.connect_urls&&$.connect_urls.length>0)$.connect_urls.forEach((K)=>{K=Y?Y(K,Z):K;let W=new gg(K,!0);J.set(K,W)});let G=[];if(this.servers.forEach((K,W)=>{let H=K.listen;if(K.gossiped&&this.currentServer.listen!==H&&J.get(H)===void 0)G.push(W);J.delete(H)}),G.reverse(),G.forEach((K)=>{let W=this.servers.splice(K,1);X=X.concat(W[0].listen)}),J.forEach((K,W)=>{this.servers.push(K),Q.push(W)}),this.randomize&&Q.length>0){let K=this.currentServer,W=this.servers.filter((H)=>H!==K);(0,Wr0.shuffle)(W),this.servers=K?[K,...W]:W}return{added:Q,deleted:X}}}X8$.Servers=VX0});var kX0=v((K8$)=>{Object.defineProperty(K8$,"__esModule",{value:!0});K8$.QueuedIteratorImpl=void 0;var Br0=DK(),J8$=IJ();class G8${inflight;processed;received;noIterator;iterClosed;done;signal;yields;filtered;pendingFiltered;ctx;_data;err;time;profile;yielding;didBreak;constructor(){this.inflight=0,this.filtered=0,this.pendingFiltered=0,this.processed=0,this.received=0,this.noIterator=!1,this.done=!1,this.signal=(0,Br0.deferred)(),this.yields=[],this.iterClosed=(0,Br0.deferred)(),this.time=0,this.yielding=!1,this.didBreak=!1,this.profile=!1}[Symbol.asyncIterator](){return this.iterate()}push($){if(this.done)return;if(this.didBreak){if(typeof $==="function"){let Z=$;try{Z()}catch(Q){}}return}if(typeof $==="function")this.pendingFiltered++;this.yields.push($),this.signal.resolve()}async*iterate(){if(this.noIterator)throw new J8$.InvalidOperationError("iterator cannot be used when a callback is registered");if(this.yielding)throw new J8$.InvalidOperationError("iterator is already yielding");this.yielding=!0;try{while(!0){if(this.yields.length===0)await this.signal;if(this.err)throw this.err;let $=this.yields;this.inflight=$.length,this.yields=[];for(let Z=0;Z<$.length;Z++){if(typeof $[Z]==="function"){this.pendingFiltered--;let X=$[Z];try{X()}catch(Y){throw Y}if(this.err)throw this.err;continue}this.processed++,this.inflight--;let Q=this.profile?Date.now():0;yield $[Z],this.time=this.profile?Date.now()-Q:0}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,Br0.deferred)()}}finally{this.didBreak=!0,this.stop()}}stop($){if(this.done)return;this.err=$,this.done=!0,this.signal.resolve(),this.iterClosed.resolve($)}getProcessed(){return this.noIterator?this.received:this.processed}getPending(){return this.yields.length+this.inflight-this.pendingFiltered}getReceived(){return this.received-this.filtered}}K8$.QueuedIteratorImpl=G8$});var Or0=v((U8$)=>{Object.defineProperty(U8$,"__esModule",{value:!0});U8$.MuxSubscription=void 0;var v94=aO(),H8$=IJ();class F8${baseInbox;reqs;constructor(){this.reqs=new Map}size(){return this.reqs.size}init($){return this.baseInbox=`${(0,v94.createInbox)($)}.`,this.baseInbox}add($){if(!isNaN($.received))$.received=0;this.reqs.set($.token,$)}get($){return this.reqs.get($)}cancel($){this.reqs.delete($.token)}getToken($){let Z=$.subject||"";if(Z.indexOf(this.baseInbox)===0)return Z.substring(this.baseInbox.length);return null}all(){return Array.from(this.reqs.values())}handleError($,Z){if($)return this.all().forEach((Q)=>{Q.resolver(Z,{})}),!0;if(Z.operation==="publish"){let Q=this.all().find((X)=>{return X.requestSubject===Z.subject});if(Q)return Q.resolver(Z,{}),!0}return!1}dispatcher(){return($,Z)=>{let Q=this.getToken(Z);if(Q){let X=this.get(Q);if(X){if($===null)$=Z?.data?.length===0&&Z.headers?.code===503?new H8$.NoRespondersError(X.requestSubject):null;X.resolver($,Z)}}}}close(){let $=new H8$.RequestError("connection closed");this.reqs.forEach((Z)=>{Z.resolver($,{})})}}U8$.MuxSubscription=F8$});var Dr0=v((O8$)=>{Object.defineProperty(O8$,"__esModule",{value:!0});O8$.Heartbeat=void 0;var x94=DK();class B8${ph;interval;maxOut;timer;pendings;constructor($,Z,Q){this.ph=$,this.interval=Z,this.maxOut=Q,this.pendings=[]}start(){this.cancel(),this._schedule()}cancel($){if(this.timer)clearTimeout(this.timer),this.timer=void 0;if(this._reset(),$)this.ph.disconnect()}_schedule(){this.timer=setTimeout(()=>{if(this.ph.dispatchStatus({type:"ping",pendingPings:this.pendings.length+1}),this.pendings.length===this.maxOut){this.cancel(!0);return}let $=(0,x94.deferred)();this.ph.flush($).then(()=>{this._reset()}).catch(()=>{this.cancel()}),this.pendings.push($),this._schedule()},this.interval)}_reset(){this.pendings=this.pendings.filter(($)=>{return $.resolve(),!1})}}O8$.Heartbeat=B8$});var jr0=v((E8$)=>{Object.defineProperty(E8$,"__esModule",{value:!0});E8$.DenoBuffer=E8$.MAX_SIZE=E8$.AssertionError=void 0;E8$.assert=w8$;E8$.concat=j8$;E8$.append=b94;E8$.readAll=y94;E8$.writeAll=g94;var f94=RJ();class Lr0 extends Error{constructor($){super($);this.name="AssertionError"}}E8$.AssertionError=Lr0;function w8$($,Z="Assertion failed."){if(!$)throw new Lr0(Z)}var L8$=32768;E8$.MAX_SIZE=4294967294;function SX0($,Z,Q=0){let X=Z.byteLength-Q;if($.byteLength>X)$=$.subarray(0,X);return Z.set($,Q),$.byteLength}function j8$($,Z){if($===void 0&&Z===void 0)return new Uint8Array(0);if($===void 0)return Z;if(Z===void 0)return $;let Q=new Uint8Array($.length+Z.length);return Q.set($,0),Q.set(Z,$.length),Q}function b94($,Z){return j8$($,Uint8Array.of(Z))}class wr0{_buf;_off;constructor($){if(this._off=0,$==null){this._buf=new Uint8Array(0);return}this._buf=new Uint8Array($)}bytes($={copy:!0}){if($.copy===!1)return this._buf.subarray(this._off);return this._buf.slice(this._off)}empty(){return this._buf.byteLength<=this._off}get length(){return this._buf.byteLength-this._off}get capacity(){return this._buf.buffer.byteLength}truncate($){if($===0){this.reset();return}if($<0||$>this.length)throw Error("bytes.Buffer: truncation out of range");this._reslice(this._off+$)}reset(){this._reslice(0),this._off=0}_tryGrowByReslice($){let Z=this._buf.byteLength;if($<=this.capacity-Z)return this._reslice(Z+$),Z;return-1}_reslice($){w8$($<=this._buf.buffer.byteLength),this._buf=new Uint8Array(this._buf.buffer,0,$)}readByte(){let $=new Uint8Array(1);if(this.read($))return $[0];return null}read($){if(this.empty()){if(this.reset(),$.byteLength===0)return 0;return null}let Z=SX0(this._buf.subarray(this._off),$);return this._off+=Z,Z}writeByte($){return this.write(Uint8Array.of($))}writeString($){return this.write(f94.TE.encode($))}write($){let Z=this._grow($.byteLength);return SX0($,this._buf,Z)}_grow($){let Z=this.length;if(Z===0&&this._off!==0)this.reset();let Q=this._tryGrowByReslice($);if(Q>=0)return Q;let X=this.capacity;if($<=Math.floor(X/2)-Z)SX0(this._buf.subarray(this._off),this._buf);else if(X+$>E8$.MAX_SIZE)throw Error("The buffer cannot be grown beyond the maximum size.");else{let Y=new Uint8Array(Math.min(2*X+$,E8$.MAX_SIZE));SX0(this._buf.subarray(this._off),Y),this._buf=Y}return this._off=0,this._reslice(Math.min(Z+$,E8$.MAX_SIZE)),Z}grow($){if($<0)throw Error("Buffer._grow: negative count");let Z=this._grow($);this._reslice(Z)}readFrom($){let Z=0,Q=new Uint8Array(L8$);while(!0){let X=this.capacity-this.length<L8$,Y=X?Q:new Uint8Array(this._buf.buffer,this.length),J=$.read(Y);if(J===null)return Z;if(X)this.write(Y.subarray(0,J));else this._reslice(this.length+J);Z+=J}}}E8$.DenoBuffer=wr0;function y94($){let Z=new wr0;return Z.readFrom($),Z.bytes()}function g94($,Z){let Q=0;while(Q<Z.length)Q+=$.write(Z.subarray(Q))}});var Pr0=v((R8$)=>{Object.defineProperty(R8$,"__esModule",{value:!0});R8$.cc=R8$.State=R8$.Parser=R8$.Kind=void 0;R8$.describe=i94;var Er0=jr0(),zr0=RJ();R8$.Kind={OK:0,ERR:1,MSG:2,INFO:3,PING:4,PONG:5};function i94($){let Z,Q="";switch($.kind){case R8$.Kind.MSG:Z="MSG";break;case R8$.Kind.OK:Z="OK";break;case R8$.Kind.ERR:Z="ERR",Q=zr0.TD.decode($.data);break;case R8$.Kind.PING:Z="PING";break;case R8$.Kind.PONG:Z="PONG";break;case R8$.Kind.INFO:Z="INFO",Q=zr0.TD.decode($.data)}return`${Z}: ${Q}`}function P8$(){let $={};return $.sid=-1,$.hdr=-1,$.size=-1,$}var A8$=48,p94=57,hg=67108864;class T8${dispatcher;state;as;drop;hdr;ma;argBuf;msgBuf;constructor($){this.dispatcher=$,this.state=R8$.State.OP_START,this.as=0,this.drop=0,this.hdr=0}parse($){let Z;for(Z=0;Z<$.length;Z++){let Q=$[Z];switch(this.state){case R8$.State.OP_START:switch(Q){case R8$.cc.M:case R8$.cc.m:this.state=R8$.State.OP_M,this.hdr=-1,this.ma=P8$();break;case R8$.cc.H:case R8$.cc.h:this.state=R8$.State.OP_H,this.hdr=0,this.ma=P8$();break;case R8$.cc.P:case R8$.cc.p:this.state=R8$.State.OP_P;break;case R8$.cc.PLUS:this.state=R8$.State.OP_PLUS;break;case R8$.cc.MINUS:this.state=R8$.State.OP_MINUS;break;case R8$.cc.I:case R8$.cc.i:this.state=R8$.State.OP_I;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_H:switch(Q){case R8$.cc.M:case R8$.cc.m:this.state=R8$.State.OP_M;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_M:switch(Q){case R8$.cc.S:case R8$.cc.s:this.state=R8$.State.OP_MS;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MS:switch(Q){case R8$.cc.G:case R8$.cc.g:this.state=R8$.State.OP_MSG;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MSG:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:this.state=R8$.State.OP_MSG_SPC;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MSG_SPC:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:continue;default:this.state=R8$.State.MSG_ARG,this.as=Z}break;case R8$.State.MSG_ARG:switch(Q){case R8$.cc.CR:this.drop=1;break;case R8$.cc.NL:{let X=this.argBuf?this.argBuf.bytes():$.subarray(this.as,Z-this.drop);this.processMsgArgs(X),this.drop=0,this.as=Z+1,this.state=R8$.State.MSG_PAYLOAD,Z=this.as+this.ma.size-1;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;case R8$.State.MSG_PAYLOAD:if(this.msgBuf)if(this.msgBuf.length>=this.ma.size){let X=this.msgBuf.bytes({copy:!1});this.dispatcher.push({kind:R8$.Kind.MSG,msg:this.ma,data:X}),this.argBuf=void 0,this.msgBuf=void 0,this.state=R8$.State.MSG_END}else{let X=this.ma.size-this.msgBuf.length,Y=$.length-Z;if(Y<X)X=Y;if(X>0)this.msgBuf.write($.subarray(Z,Z+X)),Z=Z+X-1;else this.msgBuf.writeByte(Q)}else if(Z-this.as>=this.ma.size)this.dispatcher.push({kind:R8$.Kind.MSG,msg:this.ma,data:$.subarray(this.as,Z)}),this.argBuf=void 0,this.msgBuf=void 0,this.state=R8$.State.MSG_END;break;case R8$.State.MSG_END:switch(Q){case R8$.cc.NL:this.drop=0,this.as=Z+1,this.state=R8$.State.OP_START;break;default:continue}break;case R8$.State.OP_PLUS:switch(Q){case R8$.cc.O:case R8$.cc.o:this.state=R8$.State.OP_PLUS_O;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PLUS_O:switch(Q){case R8$.cc.K:case R8$.cc.k:this.state=R8$.State.OP_PLUS_OK;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PLUS_OK:switch(Q){case R8$.cc.NL:this.dispatcher.push({kind:R8$.Kind.OK}),this.drop=0,this.state=R8$.State.OP_START;break}break;case R8$.State.OP_MINUS:switch(Q){case R8$.cc.E:case R8$.cc.e:this.state=R8$.State.OP_MINUS_E;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MINUS_E:switch(Q){case R8$.cc.R:case R8$.cc.r:this.state=R8$.State.OP_MINUS_ER;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MINUS_ER:switch(Q){case R8$.cc.R:case R8$.cc.r:this.state=R8$.State.OP_MINUS_ERR;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MINUS_ERR:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:this.state=R8$.State.OP_MINUS_ERR_SPC;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_MINUS_ERR_SPC:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:continue;default:this.state=R8$.State.MINUS_ERR_ARG,this.as=Z}break;case R8$.State.MINUS_ERR_ARG:switch(Q){case R8$.cc.CR:this.drop=1;break;case R8$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:R8$.Kind.ERR,data:X}),this.drop=0,this.as=Z+1,this.state=R8$.State.OP_START;break}default:if(this.argBuf)this.argBuf.write(Uint8Array.of(Q))}break;case R8$.State.OP_P:switch(Q){case R8$.cc.I:case R8$.cc.i:this.state=R8$.State.OP_PI;break;case R8$.cc.O:case R8$.cc.o:this.state=R8$.State.OP_PO;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PO:switch(Q){case R8$.cc.N:case R8$.cc.n:this.state=R8$.State.OP_PON;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PON:switch(Q){case R8$.cc.G:case R8$.cc.g:this.state=R8$.State.OP_PONG;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PONG:switch(Q){case R8$.cc.NL:this.dispatcher.push({kind:R8$.Kind.PONG}),this.drop=0,this.state=R8$.State.OP_START;break}break;case R8$.State.OP_PI:switch(Q){case R8$.cc.N:case R8$.cc.n:this.state=R8$.State.OP_PIN;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PIN:switch(Q){case R8$.cc.G:case R8$.cc.g:this.state=R8$.State.OP_PING;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_PING:switch(Q){case R8$.cc.NL:this.dispatcher.push({kind:R8$.Kind.PING}),this.drop=0,this.state=R8$.State.OP_START;break}break;case R8$.State.OP_I:switch(Q){case R8$.cc.N:case R8$.cc.n:this.state=R8$.State.OP_IN;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_IN:switch(Q){case R8$.cc.F:case R8$.cc.f:this.state=R8$.State.OP_INF;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_INF:switch(Q){case R8$.cc.O:case R8$.cc.o:this.state=R8$.State.OP_INFO;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_INFO:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:this.state=R8$.State.OP_INFO_SPC;break;default:throw this.fail($.subarray(Z))}break;case R8$.State.OP_INFO_SPC:switch(Q){case R8$.cc.SPACE:case R8$.cc.TAB:continue;default:this.state=R8$.State.INFO_ARG,this.as=Z}break;case R8$.State.INFO_ARG:switch(Q){case R8$.cc.CR:this.drop=1;break;case R8$.cc.NL:{let X;if(this.argBuf)X=this.argBuf.bytes(),this.argBuf=void 0;else X=$.subarray(this.as,Z-this.drop);this.dispatcher.push({kind:R8$.Kind.INFO,data:X}),this.drop=0,this.as=Z+1,this.state=R8$.State.OP_START;break}default:if(this.argBuf)this.argBuf.writeByte(Q)}break;default:throw this.fail($.subarray(Z))}}if((this.state===R8$.State.MSG_ARG||this.state===R8$.State.MINUS_ERR_ARG||this.state===R8$.State.INFO_ARG)&&!this.argBuf)this.argBuf=new Er0.DenoBuffer($.subarray(this.as,Z-this.drop));if(this.state===R8$.State.MSG_PAYLOAD&&!this.msgBuf){if(!this.argBuf)this.cloneMsgArg();this.msgBuf=new Er0.DenoBuffer($.subarray(this.as))}}cloneMsgArg(){let $=this.ma.subject.length,Z=this.ma.reply?this.ma.reply.length:0,Q=new Uint8Array($+Z);if(Q.set(this.ma.subject),this.ma.reply)Q.set(this.ma.reply,$);if(this.argBuf=new Er0.DenoBuffer(Q),this.ma.subject=Q.subarray(0,$),this.ma.reply)this.ma.reply=Q.subarray($)}processMsgArgs($){if(this.hdr>=0)return this.processHeaderMsgArgs($);let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case R8$.cc.SPACE:case R8$.cc.TAB:case R8$.cc.CR:case R8$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 3:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.size=this.protoParseInt(Z[2],hg);break;case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.size=this.protoParseInt(Z[3],hg);break;default:throw this.fail($,"processMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processMsgArgs Bad or Missing Sid Error");if(this.ma.size<0)throw this.fail($,"processMsgArgs Bad or Missing Size Error")}fail($,Z=""){if(!Z)Z=`parse error [${this.state}]`;else Z=`${Z} [${this.state}]`;return Error(`${Z}: ${zr0.TD.decode($)}`)}processHeaderMsgArgs($){let Z=[],Q=-1;for(let X=0;X<$.length;X++)switch($[X]){case R8$.cc.SPACE:case R8$.cc.TAB:case R8$.cc.CR:case R8$.cc.NL:if(Q>=0)Z.push($.subarray(Q,X)),Q=-1;break;default:if(Q<0)Q=X}if(Q>=0)Z.push($.subarray(Q));switch(Z.length){case 4:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=void 0,this.ma.hdr=this.protoParseInt(Z[2],hg),this.ma.size=this.protoParseInt(Z[3],hg);break;case 5:this.ma.subject=Z[0],this.ma.sid=this.protoParseInt(Z[1]),this.ma.reply=Z[2],this.ma.hdr=this.protoParseInt(Z[3],hg),this.ma.size=this.protoParseInt(Z[4],hg);break;default:throw this.fail($,"processHeaderMsgArgs Parse Error")}if(this.ma.sid<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Sid Error");if(this.ma.hdr<0||this.ma.hdr>this.ma.size)throw this.fail($,"processHeaderMsgArgs Bad or Missing Header Size Error");if(this.ma.size<0)throw this.fail($,"processHeaderMsgArgs Bad or Missing Size Error")}protoParseInt($,Z){if($.length===0||$.length>15)return-1;let Q=0;for(let X=0;X<$.length;X++){if($[X]<A8$||$[X]>p94)return-1;Q=Q*10+($[X]-A8$)}return Z!==void 0&&Q>Z?-1:Q}}R8$.Parser=T8$;R8$.State={OP_START:0,OP_PLUS:1,OP_PLUS_O:2,OP_PLUS_OK:3,OP_MINUS:4,OP_MINUS_E:5,OP_MINUS_ER:6,OP_MINUS_ERR:7,OP_MINUS_ERR_SPC:8,MINUS_ERR_ARG:9,OP_M:10,OP_MS:11,OP_MSG:12,OP_MSG_SPC:13,MSG_ARG:14,MSG_PAYLOAD:15,MSG_END:16,OP_H:17,OP_P:18,OP_PI:19,OP_PIN:20,OP_PING:21,OP_PO:22,OP_PON:23,OP_PONG:24,OP_I:25,OP_IN:26,OP_INF:27,OP_INFO:28,OP_INFO_SPC:29,INFO_ARG:30};R8$.cc={CR:13,E:69,e:101,F:70,f:102,G:71,g:103,H:72,h:104,I:73,i:105,K:75,k:107,M:77,m:109,MINUS:45,N:78,n:110,NL:10,O:79,o:111,P:80,p:112,PLUS:43,R:82,r:114,S:83,s:115,SPACE:32,TAB:9}});var vX0=v((q8$)=>{Object.defineProperty(q8$,"__esModule",{value:!0});q8$.MsgHdrsImpl=void 0;q8$.canonicalMIMEHeaderKey=Tr0;q8$.headers=o94;var I8$=RJ(),LK=aO(),_X0=IJ();function Tr0($){let F=!0,U=Array($.length);for(let N=0;N<$.length;N++){let B=$.charCodeAt(N);if(B===58||B<33||B>126)throw _X0.InvalidArgumentError.format("header",`'${$[N]}' is not a valid character in a header name`);if(F&&97<=B&&B<=122)B-=32;else if(!F&&65<=B&&B<=90)B+=32;U[N]=B,F=B==45}return String.fromCharCode(...U)}function o94($=0,Z=""){if($===0&&Z!=="")throw _X0.InvalidArgumentError.format("code","is required");else if($>0&&Z==="")throw _X0.InvalidArgumentError.format("description","is required");return new ug($,Z)}var Ar0="NATS/1.0";class ug{_code;headers;_description;constructor($=0,Z=""){this._code=$,this._description=Z,this.headers=new Map}[Symbol.iterator](){return this.headers.entries()}size(){return this.headers.size}equals($){if($&&this.headers.size===$.headers.size&&this._code===$._code){for(let[Z,Q]of this.headers){let X=$.values(Z);if(Q.length!==X.length)return!1;let Y=[...Q].sort(),J=[...X].sort();for(let G=0;G<Y.length;G++)if(Y[G]!==J[G])return!1}return!0}return!1}static decode($){let Z=new ug,X=I8$.TD.decode($).split(`\r
|
|
1944
1944
|
`),Y=X[0];if(Y!==Ar0){let J=Y.replace(Ar0,"").trim();if(J.length>0){if(Z._code=parseInt(J,10),isNaN(Z._code))Z._code=0;let G=Z._code.toString();J=J.replace(G,""),Z._description=J.trim()}}if(X.length>=1)X.slice(1).map((J)=>{if(J){let G=J.indexOf(":");if(G>-1){let K=J.slice(0,G),W=J.slice(G+1).trim();Z.append(K,W)}}});return Z}toString(){if(this.headers.size===0&&this._code===0)return"";let $=Ar0;if(this._code>0&&this._description!=="")$+=` ${this._code} ${this._description}`;for(let[Z,Q]of this.headers)for(let X=0;X<Q.length;X++)$=`${$}\r
|
|
1945
1945
|
${Z}: ${Q[X]}`;return`${$}\r
|
|
@@ -1993,7 +1993,7 @@ You are running the brand-context onboarding for the user's organization. Your o
|
|
|
1993
1993
|
4. Do NOT call any other tools in this thread. Do NOT call \`brand_context_setup\` more than once.
|
|
1994
1994
|
|
|
1995
1995
|
If the tool returns an error, surface the error message to the user and ask whether they want to try a different URL.
|
|
1996
|
-
`.trim();dJ$=oG("site-diagnostics_"),rv5=dJ$.is,av5=dJ$.get,iJ$=oG("commerce-discovery_"),sv5=iJ$.is,WG0=iJ$.get;jz={AUTOMATION_MANAGER:oG("studio-automation-manager_"),CONNECTION_MANAGER:oG("studio-connection-manager_"),API_KEY_MANAGER:oG("studio-api-key-manager_"),STORE_MANAGER:oG("studio-store-manager_"),BRAND_MANAGER:oG("studio-brand-manager_"),USAGE_MANAGER:oG("studio-usage-manager_")},rG={AUTOMATION_MANAGER:jz.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:jz.CONNECTION_MANAGER.get,API_KEY_MANAGER:jz.API_KEY_MANAGER.get,STORE_MANAGER:jz.STORE_MANAGER.get,BRAND_MANAGER:jz.BRAND_MANAGER.get,USAGE_MANAGER:jz.USAGE_MANAGER.get};t01=["studio-agent-manager_","studio-task-manager_"],ev5=t01.map(oG)});function aJ$($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function oO4($){return aJ$($).includes("deepresearch")}function sJ$($){let Z=aJ$($);if(Z.includes("deepresearch"))return!1;return rO4.some((Q)=>Z.includes(Q))}function aO4($){return $.asyncResearch!==!0&&sJ$($.modelId)}function sO4($){return $.asyncResearch===!0||oO4($.modelId)||sJ$($.modelId)}function hh($,Z,Q,X){for(let Y of Q){let J=$.find((G)=>G.modelId===Y);if(J)return{keyId:Z,modelId:J.modelId,title:J.title}}for(let Y of Q){let J=$.find((G)=>G.modelId.includes(Y));if(J)return{keyId:Z,modelId:J.modelId,title:J.title}}if(X){let Y=$.find(X);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function eJ$($,Z){let Q={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let X of $){let Y=Z[X.id]??[],J=X.providerId;if(!Q.chat.fast)Q.chat.fast=hh(Y,X.id,mO4[J]??[]);if(!Q.chat.smart)Q.chat.smart=hh(Y,X.id,dO4[J]??[]);if(!Q.chat.thinking)Q.chat.thinking=hh(Y,X.id,iO4[J]??[]);if(!Q.image)Q.image=hh(Y,X.id,pO4[J]??[],(G)=>G.capabilities?.includes("image")===!0);if(!Q.webSearch)Q.webSearch=hh(Y,X.id,nO4[J]??[],aO4);if(!Q.deepResearch)Q.deepResearch=hh(Y,X.id,tO4[J]??[],sO4)}return Q}var mO4,dO4,iO4,pO4,nO4,tO4,rO4;var $G$=D(()=>{mO4={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},dO4={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},iO4={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},pO4={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},nO4={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},tO4={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};rO4=["sonar","searchpreview","online"]});function HG0($){if(!$)return;let Z={};for(let Q in $){let X=$[Q];if(typeof X==="object"&&X!==null){let Y={};for(let J of eO4)if(J in X)Y[J]=X[J];Z[Q]=Y}}return Object.keys(Z).length>0?Z:void 0}var eO4;var ZG$=D(()=>{eO4=["usage","cost","model"]});var x8=D(()=>{bY0();rJ$();$G$();ZG$()});function FG0($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function SD($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),X=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return FG0(X)}catch{return FG0($.connection_url)}if($.title)return FG0($.title);return $.id??"unknown"}var UG0=()=>{};var uh=300000,NG0=5000,BG0=1e4,o01=3,r01=30000,QG$=65000,OG0=1000,ch=3,XG$=5,YG$=60000,JG$=300000,a01=60000;function GG$(){if(DN.size<OG0)return;let $=null,Z=1/0;for(let[Q,X]of DN)if(X.lastFailureAt<Z)Z=X.lastFailureAt,$=Q;if($)DN.delete($)}function KG$($){let Z=DN.get($);if(!Z)return GG$(),DN.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=ch};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=ch}}function s01($){let Z=DN.get($);if(Z){Z.disabled=!0;return}GG$(),DN.set($,{consecutiveFailures:ch,disabled:!0,lastFailureAt:Date.now()})}function WG$($){return DN.get($)?.disabled??!1}function HG$($){DN.delete($)}var DN;var FG$=D(()=>{DN=new Map});import{sql as a$}from"kysely";function NG$($){if($.length===0)return null;let Z=$[0];if($.length===1&&ZD4.has(Z))return a$.ref(Z);if($.length===2&&UG$.has(Z)){let Q=$[1];return a$`${a$.ref(Z)}->>${a$.lit(Q)}`}if($.length>2&&UG$.has(Z)){let Q=`{${$.slice(1).join(",")}}`;return a$`${a$.ref(Z)}#>>${a$.lit(Q)}`}return null}function BG$($){if("conditions"in $){let{operator:J,conditions:G}=$;if(G.length===0)return a$`true`;let K=G.map((W)=>BG$(W));switch(J){case"and":return a$`(${a$.join(K,a$` AND `)})`;case"or":return a$`(${a$.join(K,a$` OR `)})`;case"not":return a$`NOT (${a$.join(K,a$` AND `)})`;default:return a$`true`}}let{field:Z,operator:Q,value:X}=$,Y=NG$(Z);if(!Y)return a$`true`;switch(Q){case"eq":return X===null?a$`${Y} IS NULL`:a$`${Y} = ${a$.val(X)}`;case"gt":return a$`${Y} > ${a$.val(X)}`;case"gte":return a$`${Y} >= ${a$.val(X)}`;case"lt":return a$`${Y} < ${a$.val(X)}`;case"lte":return a$`${Y} <= ${a$.val(X)}`;case"in":if(!Array.isArray(X)||X.length===0)return a$`false`;return a$`${Y} IN (${a$.join(X.map((J)=>a$.val(J)))})`;case"like":return a$`${Y} ILIKE ${a$.val(X)}`;case"contains":{let J=String(X).replace(/[%_\\]/g,"\\$&");return a$`${Y} ILIKE ${a$.val(`%${J}%`)}`}default:return a$`true`}}class wo{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??v8("conn"),Q=new Date().toISOString(),X=await this.db.selectFrom("connections").select("organization_id").where("id","=",Z).executeTakeFirst();if(X){if(X.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=SD($),J=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:Q,updated_at:Q}),G;try{G=await this.db.insertInto("connections").values(J).returningAll().executeTakeFirst()}catch(K){if(K instanceof Error&&(K.message.includes("duplicate key")||K.message.includes("unique constraint")))throw Error("Connection ID already exists");throw K}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async createNew($){let Z=$.id??v8("conn"),Q=new Date().toISOString(),X=SD($),Y=await this.serializeConnection({...$,id:Z,slug:X,status:"active",created_at:Q,updated_at:Q}),J;try{J=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(G){if(G instanceof Error&&(G.message.includes("duplicate key")||G.message.includes("unique constraint")))throw Error("Connection ID already exists");throw G}if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async findById($,Z){let Q=IQ($);if(Q)return oJ$(Z??Q);let X=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)X=X.where("organization_id","=",Z);let Y=await X.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async findBySanitizedId($){let Z=$.replace(/-/g,"_"),Q=await this.db.selectFrom("connections").selectAll().where(a$`replace(id, '-', '_')`,"=",Z).where("id","!=",$).executeTakeFirst();return Q?this.deserializeConnection(Q):null}async list($,Z){let Q=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)Q=Q.where("connection_type","!=","VIRTUAL");if(Z?.slug)Q=Q.where("slug","=",Z.slug);if(Z?.where)Q=Q.where(BG$(Z.where));let J=(await this.db.selectFrom(Q.as("filtered")).select(a$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let W of Z.orderBy){let H=NG$(W.field);if(!H)continue;let F=W.direction==="desc"?a$`desc`:a$`asc`,U=W.nulls==="first"?a$`nulls first`:a$`nulls last`;Q=Q.orderBy(a$`${H} ${F} ${U}`)}if(Z?.limit!==void 0)Q=Q.limit(Z.limit);if(Z?.offset)Q=Q.offset(Z.offset);let G=await Q.execute();return{items:await Promise.all(G.map((W)=>this.deserializeConnection(W))),totalCount:J}}async update($,Z){let{id:Q,organization_id:X,created_by:Y,created_at:J,...G}=Z;if(Z=G,Object.keys(Z).length===0){let U=await this.findById($);if(!U)throw Error("Connection not found");return U}let K={...Z},W=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(W){let U=(N)=>Z[N]===void 0?W[N]:Z[N];K.slug=SD({app_name:U("app_name"),connection_url:U("connection_url"),title:U("title"),id:$})}let H=await this.serializeConnection({...K,updated_at:new Date().toISOString()}),F=await this.db.updateTable("connections").set(H).where("id","=",$).returningAll().executeTakeFirst();if(!F)throw Error("Connection not found after update");return this.deserializeConnection(F)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(a$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let Q=await this.findById($);if(!Q)throw Error("Connection not found");let X=Date.now();if(Q.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-X};if(!Q.connection_url)return{healthy:!1,latencyMs:Date.now()-X};try{if(await gh(Q.connection_url))return{healthy:!1,latencyMs:Date.now()-X};let J=Q.connection_headers,G=await kD()(Q.connection_url,{method:"POST",signal:AbortSignal.timeout(1e4),headers:{"Content-Type":"application/json",...Q.connection_token&&{Authorization:`Bearer ${Q.connection_token}`},...J?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})});return{healthy:G.ok||G.status===404,latencyMs:Date.now()-X}}catch{return{healthy:!1,latencyMs:Date.now()-X}}}async serializeConnection($){let Z={};for(let[Q,X]of Object.entries($)){if(X===void 0)continue;if(Q==="tools")continue;if(Q==="connection_token"&&X)Z[Q]=await this.vault.encrypt(X);else if(Q==="configuration_state"&&X){let Y=JSON.stringify(X);Z[Q]=await this.vault.encrypt(Y)}else if(Q==="oauth_config"&&X)Z[Q]=await this.vault.encrypt(JSON.stringify(X));else if(Q==="connection_headers"&&X){let Y=X;if(PH(Y)&&Y.envVars){let J={};for(let[G,K]of Object.entries(Y.envVars))J[G]=await this.vault.encrypt(K);Z[Q]=JSON.stringify({...Y,envVars:J})}else Z[Q]=JSON.stringify(Y)}else if($D4.includes(Q))Z[Q]=X?JSON.stringify(X):null;else Z[Q]=X}return Z}async handleDecryptFailures($,Z){let Q=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(WG$($.id))return;if($.status!=="active"){s01($.id);return}let{thresholdCrossed:X}=KG$($.id);if(!X){for(let{label:Y,error:J}of Z)console.error(`Failed to decrypt ${Y} for ${Q}:`,J);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),s01($.id),console.error(`Disabled ${Q} after ${ch} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${Q} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],Q=null;if($.connection_token)try{Q=await this.vault.decrypt($.connection_token)}catch(K){Z.push({label:"connection token",error:K})}let X=null;if($.configuration_state)try{let K=await this.vault.decrypt($.configuration_state);X=JSON.parse(K)}catch(K){Z.push({label:"configuration state",error:K})}let Y=null;if(typeof $.oauth_config==="string")try{Y=JSON.parse(await this.vault.decrypt($.oauth_config))}catch{try{Y=JSON.parse($.oauth_config)}catch(K){Z.push({label:"oauth config",error:K})}}else Y=$.oauth_config;if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state||$.oauth_config)HG$($.id);let J=null;if($.connection_headers)try{let K=JSON.parse($.connection_headers);if(PH(K)&&K.envVars){let W={};for(let[H,F]of Object.entries(K.envVars))try{W[H]=await this.vault.decrypt(F)}catch{W[H]=F}J={...K,envVars:W}}else J=K}catch(K){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,K)}let G=(K)=>{if(K===null)return null;if(typeof K==="string")try{return JSON.parse(K)}catch{return null}return K};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:Q,connection_headers:J,oauth_config:Y,configuration_state:X,configuration_scopes:G($.configuration_scopes),metadata:G($.metadata),tools:null,bindings:G($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var $D4,ZD4,UG$;var e01=D(()=>{TH();wz();RQ();x8();UG0();FG$();$D4=["connection_headers","configuration_scopes","metadata","bindings"],ZD4=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),UG$=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as QD4,randomBytes as XD4,timingSafeEqual as Rx5}from"crypto";function JD4($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Z11($){return QD4("sha256").update($).digest("hex")}function LG$($){let Z=$11.length+1,Q=Z+DG$;if(!$.startsWith(`${$11}_`)||$.length<=Q+1||$[Q]!=="_")return null;let X=$.slice(Z,Q),Y=$.slice(Q+1);if(!OG$.test(X)||!OG$.test(Y))return null;return X}function wG$(){let $=JD4(XD4(YD4)),Z=$.slice(0,DG$),Q=`${$11}_${Z}_${$}`;return{plaintext:Q,prefix:Z,hash:Z11(Q)}}var $11="stv",YD4=32,DG$=12,OG$;var jG$=D(()=>{OG$=/^[A-Za-z0-9_-]+$/});function EG$($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class Q11{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(X)=>{if(!await X.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let J=wG$(),G=new Date().toISOString();await X.updateTable("connection_workload_tokens").set({revoked_at:G,updated_at:G}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let K=await X.insertInto("connection_workload_tokens").values({id:v8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:J.hash,token_prefix:J.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:G,updated_at:G}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:J.plaintext,record:EG$(K)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?EG$(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=LG$($);if(!Z)return null;let Q=Z11($),X=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",Q).where("revoked_at","is",null).executeTakeFirst();if(!X)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",X.id).execute(),{tokenId:X.id,tokenPrefix:X.token_prefix,organizationId:X.organization_id,subjectConnectionId:X.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let X=[...new Set($.grants.map((G)=>G.targetConnectionId))];if(X.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",X).execute()).length!==X.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),J=$.grants.map((G)=>({id:v8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:G.targetConnectionId,scope:G.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(J).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var DG0="credential:access-token:read",LG0="credential:configuration:read";var wG0=D(()=>{RQ();jG$()});function zG$($,Z){let Q=!1,X={...$},Y=$.pinnedViews;if(Array.isArray(Y)){let K=Y.filter((W)=>W.connectionId!==Z);if(K.length!==Y.length)Q=!0,X.pinnedViews=K.length>0?K:null}let J=$.homeTile;if(J&&J.connectionId===Z)Q=!0,X.homeTile=null;let G=$.homeTiles;if(Array.isArray(G)){let K=G.filter((W)=>W.connectionId!==Z);if(K.length!==G.length)Q=!0,X.homeTiles=K.length>0?K:null}return{ui:X,changed:Q}}function GD4($){return $.replace(/\\/g,"\\\\").replace(/%/g,"\\%").replace(/_/g,"\\_")}function PG$($){let Z=$?.githubRepo?.repositoryId;return typeof Z==="string"&&Z.length>0?Z:null}class lh{db;constructor($){this.db=$}async create($,Z,Q,X){let Y=X?.id??v8("vir"),J=new Date().toISOString();await this.db.transaction().execute(async(K)=>{if(await K.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,updated_by:Z,title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:Q.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata?JSON.stringify(Q.metadata):null,repository_id:PG$(Q.metadata),bindings:null,status:Q.status??"active",created_at:J,updated_at:J}).execute(),Q.connections.length>0)await K.insertInto("connection_aggregations").values(Q.connections.map((W)=>({id:v8("agg"),parent_connection_id:Y,child_connection_id:W.connection_id,selected_tools:W.selected_tools?JSON.stringify(W.selected_tools):null,selected_resources:W.selected_resources?JSON.stringify(W.selected_resources):null,selected_prompts:W.selected_prompts?JSON.stringify(W.selected_prompts):null,dependency_mode:"direct",created_at:J}))).execute()});let G=await this.findById(Y);if(!G)throw Error(`Failed to create virtual MCP with id: ${Y}`);return G}async findById($,Z){let Q=IQ($);if(Q)return{...n01(Z??Q),pinned:!1,connections:[]};let X=KG0($);if(X)return{...mJ$(Z??X),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let Q=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!Q)return null;let X=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(Q,X)}async searchAcrossMemberships($){let{userId:Z,term:Q,limit:X,offset:Y=0,organizationId:J}=$,G=`%${GD4(Q)}%`,K=this.db.selectFrom("connections").innerJoin("member",(H)=>H.onRef("member.organizationId","=","connections.organization_id").on("member.userId","=",Z)).innerJoin("organization","organization.id","connections.organization_id").where("connections.connection_type","=","VIRTUAL").where((H)=>H.or([H("connections.title","ilike",G),H("connections.description","ilike",G)]));if(J)K=K.where("connections.organization_id","=",J);return(await K.select(["connections.id as id","connections.title as title","connections.icon as icon","connections.metadata as metadata","connections.organization_id as organization_id","organization.name as organization_name","organization.slug as organization_slug","organization.metadata as organization_metadata"]).orderBy("connections.updated_at","desc").orderBy("connections.id","asc").limit(X).offset(Y).execute()).map((H)=>({id:H.id,title:H.title,icon:H.icon,metadata:this.parseJson(H.metadata),organization_id:H.organization_id,organization_name:H.organization_name,organization_slug:H.organization_slug,organization_metadata:H.organization_metadata}))}async list($,Z){let Q=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)Q=Q.where("pinned","=",!0);let X=await Q.orderBy("created_at","asc").orderBy("id","asc").execute(),Y=X.map((K)=>K.id);if(Y.length===0)return[];let J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),G=new Map;for(let K of J){let W=G.get(K.parent_connection_id)??[];W.push(K),G.set(K.parent_connection_id,W)}return X.map((K)=>this.deserializeVirtualMCPEntity(K,G.get(K.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let Q=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Q.length===0)return[];let X=Q.map((G)=>G.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",X).where("dependency_mode","=","direct").execute(),J=new Map;for(let G of Y){let K=J.get(G.parent_connection_id)??[];K.push(G),J.set(G.parent_connection_id,K)}return Q.map((G)=>this.deserializeVirtualMCPEntity(G,J.get(G.id)??[]))}async listByConnectionId($,Z){let X=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((W)=>W.parent_connection_id);if(X.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",X).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let J=Y.map((W)=>W.id),G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",J).where("dependency_mode","=","direct").execute(),K=new Map;for(let W of G){let H=K.get(W.parent_connection_id)??[];H.push(W),K.set(W.parent_connection_id,H)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,K.get(W.id)??[]))}async update($,Z,Q){let X=new Date().toISOString(),Y={updated_at:X,updated_by:Z};if(Q.title!==void 0)Y.title=Q.title;if(Q.description!==void 0)Y.description=Q.description;if(Q.icon!==void 0)Y.icon=Q.icon;if(Q.status!==void 0)Y.status=Q.status;if(Q.pinned!==void 0)Y.pinned=Q.pinned;if(Q.metadata!==void 0)Y.repository_id=PG$(Q.metadata),Y.metadata=Q.metadata?JSON.stringify(Q.metadata):null;let J=[];await this.db.transaction().execute(async(K)=>{if(await K.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),Q.connections!==void 0){let W=await K.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(W.map((U)=>U.child_connection_id));if(await K.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),Q.connections.length>0)await K.insertInto("connection_aggregations").values(Q.connections.map((U)=>({id:v8("agg"),parent_connection_id:$,child_connection_id:U.connection_id,selected_tools:U.selected_tools?JSON.stringify(U.selected_tools):null,selected_resources:U.selected_resources?JSON.stringify(U.selected_resources):null,selected_prompts:U.selected_prompts?JSON.stringify(U.selected_prompts):null,dependency_mode:"direct",created_at:X}))).execute();let F=new Set(Q.connections.map((U)=>U.connection_id));for(let U of H)if(!F.has(U))J.push(U)}});for(let K of J)await this.cleanOrphanedPinnedViews([$],K);let G=await this.findById($);if(!G)throw Error("Virtual MCP not found after update");return G}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((Q)=>Q.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let Q of $){let X=await this.db.selectFrom("connections").select("metadata").where("id","=",Q).executeTakeFirst();if(!X?.metadata)continue;let Y;try{Y=typeof X.metadata==="string"?JSON.parse(X.metadata):X.metadata}catch{continue}let J=Y.ui??null;if(!J)continue;let{ui:G,changed:K}=zG$(J,Z);if(!K)continue;let W={...Y,ui:G};await this.db.updateTable("connections").set({metadata:JSON.stringify(W)}).where("id","=",Q).execute()}}deserializeVirtualMCPEntity($,Z){let Q=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,X=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",J=this.parseJson($.metadata),{sandboxMap:G,...K}=J??{},W=G!==void 0?Bs0(G):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:Q,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...K,instructions:J?.instructions??null,...W!==void 0?{sandboxMap:W}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function AG$($){let Z=new Map,Q=(X,Y)=>{let J=Z.get(X);if(J)return J;let G=Y();return Z.set(X,G),G};return new Proxy($,{get(X,Y,J){if(Y==="list")return(G,K)=>Q(`list:${G}:${K?.pinnedOnly?1:0}`,()=>X.list(G,K));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...G)=>{return Z.clear(),X[Y](...G)};return Reflect.get(X,Y,J)}})}var X11=D(()=>{RQ();x8()});function zz($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function I$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function s8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function WD4($){if(!KD4.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function Y11($){if(!HD4.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function W11($){return $.replace(/^\$\./,"").split(".").map((Q)=>`'${I$(Q)}'`).join(", ")}function ND4($){let Z=FD4.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let Q=parseInt(Z[1],10),X=Z[2],Y=UD4[X];if(Q<1||Q>Y)throw Error(`Invalid interval amount: ${Q}${X} (max ${Y}${X})`);return{amount:Q,unit:X}}function CD($,Z,Q="timestamp"){let{amount:X,unit:Y}=ND4($),G={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${X} ${G}', CAST(${Q} AS TIMESTAMP))`;return`toStartOfInterval(${Q}, INTERVAL ${X} ${G})`}function jo($,Z,Q){if(Q==="duckdb")return`json_extract_string(${$}, '${Z}')`;let X=W11(Z);return`JSONExtractString(${$}, ${X})`}function BD4($,Z,Q){if(Q==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let X=W11(Z);return`JSONExtractFloat(${$}, ${X})`}function TG$($,Z,Q){if(Q==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let X=W11(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${X}))`}function J11($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function G11($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:J11($.input),output:J11($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),Q=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(Q.getTime())?Z:Q.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?J11($.properties):null}}function MG$($,Z){let Q=[];if($.properties)for(let[X,Y]of Object.entries($.properties)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${J}') = '${G}'`);else Q.push(`JSONExtractString(properties, '${J}') = '${G}'`)}if($.propertyKeys)for(let X of $.propertyKeys){let Y=I$(X);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else Q.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[X,Y]of Object.entries($.propertyPatterns)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${J}') ILIKE '${G}'`);else Q.push(`JSONExtractString(properties, '${J}') ILIKE '${G}'`)}if($.propertyInValues)for(let[X,Y]of Object.entries($.propertyInValues)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`list_contains(string_split(json_extract_string(properties, '$.${J}'), ','), '${G}')`);else Q.push(`has(splitByChar(',', JSONExtractString(properties, '${J}')), '${G}')`)}return Q}function IG$($,Z){let Q=[];if(sG(Q,Z?.startDate,$),!Z)return Q;if(Z.connectionIds?.length){let X=Z.connectionIds.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`connection_id IN (${X})`)}if(Z.toolNames?.length){let X=Z.toolNames.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`tool_name IN (${X})`)}if(Z.virtualMcpIds?.length){let X=Z.virtualMcpIds.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`virtual_mcp_id IN (${X})`)}if(Z.endDate)Q.push(aG(Z.endDate,$));if(Z.propertyFilters)Q.push(...MG$(Z.propertyFilters,$));return Q}function qG$($,Z,Q="timestamp"){if(Z==="duckdb")return`CAST(${Q} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(Q==="bucket")return`${Q} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${Q} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function aG($,Z,Q="timestamp"){if(Z==="duckdb")return`CAST(${Q} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(Q==="bucket")return`${Q} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${Q} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function sG($,Z,Q,X="timestamp"){if(Z)$.push(qG$(Z,Q,X));else if(Q==="clickhouse")$.push(qG$(new Date(Date.now()-OD4),Q,X))}class H11{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,Q,X,Y="clickhouse",J=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=Q;this.metricSourceFactory=X;this.dialect=Y;this.metricsFromLogs=J}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`];if($.connectionId)Q.push(`connection_id = '${I$($.connectionId)}'`);if($.excludeConnectionIds?.length){let N=$.excludeConnectionIds.map((B)=>`'${I$(B)}'`).join(",");Q.push(`connection_id NOT IN (${N})`)}if($.virtualMcpId)Q.push(`virtual_mcp_id = '${I$($.virtualMcpId)}'`);if($.toolName)Q.push(`tool_name = '${I$($.toolName)}'`);if($.isError!==void 0)Q.push(`is_error = ${$.isError?1:0}`);if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));if($.propertyFilters)Q.push(...MG$($.propertyFilters,this.dialect));let X=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),X),J=Math.max(0,Math.floor($.offset??0)),G=Q.join(" AND ");if(this.dialect==="duckdb"){let N=`SELECT ${RG$}, count(*) OVER () AS _total FROM ${Z} WHERE ${G} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${J}`,B=await this.engine.query(N);if(B.length===0)return{logs:[],total:0};let O=Number(B[0]._total??0);return{logs:B.map(G11),total:O}}let K=`SELECT count(*) AS total FROM ${Z} WHERE ${G}`,W=`SELECT ${RG$} FROM ${Z} WHERE ${G} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${J}`,[H,F]=await Promise.all([this.engine.query(K),this.engine.query(W)]),U=Number(H[0]?.total??0);return{logs:F.map(G11),total:U}}async getById($,Z){if(!$||!Z)return null;let X=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${I$($)}' AND id = '${I$(Z)}' LIMIT 1`,Y=await this.engine.query(X);if(Y.length===0)return null;return G11(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`];if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));let X=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${Q.join(" AND ")}`,J=(await this.engine.query(X))[0]??{};return{totalCalls:Number(J.total_calls??0),errorRate:Number(J.error_rate??0),avgDurationMs:Number(J.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let G=$.filters.virtualMcpIds.map((K)=>`'${I$(K)}'`).join(",");Q.push(`virtual_mcp_id IN (${G})`)}if($.filters?.excludeConnectionIds?.length){let G=$.filters.excludeConnectionIds.map((K)=>`'${I$(K)}'`).join(",");Q.push(`connection_id NOT IN (${G})`)}if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));let X=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${Q.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${X}`;return{cells:(await this.engine.query(Y)).map((G)=>({virtualMcpId:G.virtual_mcp_id?String(G.virtual_mcp_id):null,toolName:String(G.tool_name??""),calls:Number(G.calls??0),errors:Number(G.errors??0),outputSize:Number(G.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let Q=this.dialect,X=Q==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),J=CD($.interval,Q,"timestamp"),G=(j)=>`coalesce(${TG$("properties",`$.${j}`,Q)}, 0)`,K=X?"count()":"count(*)",W=X?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(j)=>X?`quantile(${j})(duration_ms)`:`quantile_cont(duration_ms, ${j})`,F=[`organization_id = '${I$($.organizationId)}'`,`connection_id = '${I$($.connectionId)}'`];if(sG(F,$.startDate,Q),$.endDate)F.push(aG($.endDate,Q));if($.userIds?.length){let j=$.userIds.slice(0,100).map((E)=>`'${I$(E)}'`).join(",");F.push(`user_id IN (${j})`)}let U=F.join(" AND "),N=Math.min(Math.max(1,Math.floor($.topN??5)),20),B=`${K} AS calls,
|
|
1996
|
+
`.trim();dJ$=oG("site-diagnostics_"),rv5=dJ$.is,av5=dJ$.get,iJ$=oG("commerce-discovery_"),sv5=iJ$.is,WG0=iJ$.get;jz={AUTOMATION_MANAGER:oG("studio-automation-manager_"),CONNECTION_MANAGER:oG("studio-connection-manager_"),API_KEY_MANAGER:oG("studio-api-key-manager_"),STORE_MANAGER:oG("studio-store-manager_"),BRAND_MANAGER:oG("studio-brand-manager_"),USAGE_MANAGER:oG("studio-usage-manager_")},rG={AUTOMATION_MANAGER:jz.AUTOMATION_MANAGER.get,CONNECTION_MANAGER:jz.CONNECTION_MANAGER.get,API_KEY_MANAGER:jz.API_KEY_MANAGER.get,STORE_MANAGER:jz.STORE_MANAGER.get,BRAND_MANAGER:jz.BRAND_MANAGER.get,USAGE_MANAGER:jz.USAGE_MANAGER.get};t01=["studio-agent-manager_","studio-task-manager_"],ev5=t01.map(oG)});function aJ$($){return $.toLowerCase().replace(/[^a-z0-9]/g,"")}function oO4($){return aJ$($).includes("deepresearch")}function sJ$($){let Z=aJ$($);if(Z.includes("deepresearch"))return!1;return rO4.some((Q)=>Z.includes(Q))}function aO4($){return $.asyncResearch!==!0&&sJ$($.modelId)}function sO4($){return $.asyncResearch===!0||oO4($.modelId)||sJ$($.modelId)}function hh($,Z,Q,X){for(let Y of Q){let J=$.find((G)=>G.modelId===Y);if(J)return{keyId:Z,modelId:J.modelId,title:J.title}}for(let Y of Q){let J=$.find((G)=>G.modelId.includes(Y));if(J)return{keyId:Z,modelId:J.modelId,title:J.title}}if(X){let Y=$.find(X);if(Y)return{keyId:Z,modelId:Y.modelId,title:Y.title}}return null}function eJ$($,Z){let Q={chat:{fast:null,smart:null,thinking:null},image:null,webSearch:null,deepResearch:null};for(let X of $){let Y=Z[X.id]??[],J=X.providerId;if(!Q.chat.fast)Q.chat.fast=hh(Y,X.id,mO4[J]??[]);if(!Q.chat.smart)Q.chat.smart=hh(Y,X.id,dO4[J]??[]);if(!Q.chat.thinking)Q.chat.thinking=hh(Y,X.id,iO4[J]??[]);if(!Q.image)Q.image=hh(Y,X.id,pO4[J]??[],(G)=>G.capabilities?.includes("image")===!0);if(!Q.webSearch)Q.webSearch=hh(Y,X.id,nO4[J]??[],aO4);if(!Q.deepResearch)Q.deepResearch=hh(Y,X.id,tO4[J]??[],sO4)}return Q}var mO4,dO4,iO4,pO4,nO4,tO4,rO4;var $G$=D(()=>{mO4={anthropic:["claude-haiku-4-5","claude-haiku"],openrouter:["qwen/qwen3.5-flash","anthropic/claude-haiku-4.5","anthropic/claude-haiku","google/gemini-3-flash"],deco:["qwen/qwen3.5-flash","anthropic/claude-haiku"],llmapi:["claude-haiku-4-5","claude-haiku","gpt-4o-mini"],google:["gemini-2.5-flash","gemini-3-flash"]},dO4={anthropic:["claude-sonnet-5","claude-sonnet"],openrouter:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude-opus-4.8","google/gemini-3-pro"],deco:["anthropic/claude-sonnet-5","anthropic/claude-sonnet","anthropic/claude"],llmapi:["claude-sonnet-4-6","claude-sonnet"],google:["gemini-3-pro","gemini-3-flash"]},iO4={anthropic:["claude-opus-4-8","claude-sonnet-5","claude-sonnet","claude-fable-5"],openrouter:["anthropic/claude-opus-4.8:extended","anthropic/claude-opus-4.8","anthropic/claude-sonnet-5:extended","anthropic/claude-sonnet-5","google/gemini-3-pro","anthropic/claude-fable-5"],deco:["anthropic/claude-opus","anthropic/claude-sonnet-4.6","anthropic/claude-sonnet","anthropic/claude-fable"],llmapi:["claude-opus-4-8","claude-opus","claude-sonnet-4-6"],google:["gemini-3-pro"]},pO4={openrouter:["openai/gpt-image-1","google/gemini-2.0-flash-image"],deco:["openai/gpt-image-1","google/gemini-2.0-flash-image"],llmapi:["gemini-2.5-flash-image","gpt-image-1"],google:["gemini-2.0-flash-image"]},nO4={openrouter:["perplexity/sonar","perplexity/sonar-pro"],deco:["perplexity/sonar","perplexity/sonar-pro"]},tO4={openrouter:["perplexity/deep-research","perplexity/sonar-pro"],deco:["perplexity/deep-research","perplexity/sonar-pro"]};rO4=["sonar","searchpreview","online"]});function HG0($){if(!$)return;let Z={};for(let Q in $){let X=$[Q];if(typeof X==="object"&&X!==null){let Y={};for(let J of eO4)if(J in X)Y[J]=X[J];Z[Q]=Y}}return Object.keys(Z).length>0?Z:void 0}var eO4;var ZG$=D(()=>{eO4=["usage","cost","model"]});var x8=D(()=>{bY0();rJ$();$G$();ZG$()});function FG0($){return $.toLowerCase().trim().replace(/\//g,"-").replace(/[^a-z0-9\s_-]+/g,"").replace(/[\s_-]+/g,"-").replace(/^-+|-+$/g,"")}function SD($){if($.app_name)return $.app_name;if($.connection_url)try{let Z=new URL($.connection_url),X=((Z.port?`${Z.hostname}-${Z.port}`:Z.hostname)+Z.pathname).replace(/\/+$/,"");return FG0(X)}catch{return FG0($.connection_url)}if($.title)return FG0($.title);return $.id??"unknown"}var UG0=()=>{};var uh=300000,NG0=5000,BG0=1e4,o01=3,r01=30000,QG$=65000,OG0=1000,ch=3,XG$=5,YG$=60000,JG$=300000,a01=60000;function GG$(){if(DN.size<OG0)return;let $=null,Z=1/0;for(let[Q,X]of DN)if(X.lastFailureAt<Z)Z=X.lastFailureAt,$=Q;if($)DN.delete($)}function KG$($){let Z=DN.get($);if(!Z)return GG$(),DN.set($,{consecutiveFailures:1,disabled:!1,lastFailureAt:Date.now()}),{consecutiveFailures:1,thresholdCrossed:1>=ch};return Z.consecutiveFailures++,Z.lastFailureAt=Date.now(),{consecutiveFailures:Z.consecutiveFailures,thresholdCrossed:Z.consecutiveFailures>=ch}}function s01($){let Z=DN.get($);if(Z){Z.disabled=!0;return}GG$(),DN.set($,{consecutiveFailures:ch,disabled:!0,lastFailureAt:Date.now()})}function WG$($){return DN.get($)?.disabled??!1}function HG$($){DN.delete($)}var DN;var FG$=D(()=>{DN=new Map});import{sql as a$}from"kysely";function NG$($){if($.length===0)return null;let Z=$[0];if($.length===1&&ZD4.has(Z))return a$.ref(Z);if($.length===2&&UG$.has(Z)){let Q=$[1];return a$`${a$.ref(Z)}->>${a$.lit(Q)}`}if($.length>2&&UG$.has(Z)){let Q=`{${$.slice(1).join(",")}}`;return a$`${a$.ref(Z)}#>>${a$.lit(Q)}`}return null}function BG$($){if("conditions"in $){let{operator:J,conditions:G}=$;if(G.length===0)return a$`true`;let K=G.map((W)=>BG$(W));switch(J){case"and":return a$`(${a$.join(K,a$` AND `)})`;case"or":return a$`(${a$.join(K,a$` OR `)})`;case"not":return a$`NOT (${a$.join(K,a$` AND `)})`;default:return a$`true`}}let{field:Z,operator:Q,value:X}=$,Y=NG$(Z);if(!Y)return a$`true`;switch(Q){case"eq":return X===null?a$`${Y} IS NULL`:a$`${Y} = ${a$.val(X)}`;case"gt":return a$`${Y} > ${a$.val(X)}`;case"gte":return a$`${Y} >= ${a$.val(X)}`;case"lt":return a$`${Y} < ${a$.val(X)}`;case"lte":return a$`${Y} <= ${a$.val(X)}`;case"in":if(!Array.isArray(X)||X.length===0)return a$`false`;return a$`${Y} IN (${a$.join(X.map((J)=>a$.val(J)))})`;case"like":return a$`${Y} ILIKE ${a$.val(X)}`;case"contains":{let J=String(X).replace(/[%_\\]/g,"\\$&");return a$`${Y} ILIKE ${a$.val(`%${J}%`)}`}default:return a$`true`}}class wo{db;vault;constructor($,Z){this.db=$;this.vault=Z}async create($){let Z=$.id??v8("conn"),Q=new Date().toISOString(),X=await this.db.selectFrom("connections").select("organization_id").where("id","=",Z).executeTakeFirst();if(X){if(X.organization_id!==$.organization_id)throw Error("Connection ID already exists");return this.update(Z,$)}let Y=SD($),J=await this.serializeConnection({...$,id:$.id??Z,slug:Y,status:"active",created_at:Q,updated_at:Q}),G;try{G=await this.db.insertInto("connections").values(J).returningAll().executeTakeFirst()}catch(K){if(K instanceof Error&&(K.message.includes("duplicate key")||K.message.includes("unique constraint")))throw Error("Connection ID already exists");throw K}if(!G)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(G)}async createNew($){let Z=$.id??v8("conn"),Q=new Date().toISOString(),X=SD($),Y=await this.serializeConnection({...$,id:Z,slug:X,status:"active",created_at:Q,updated_at:Q}),J;try{J=await this.db.insertInto("connections").values(Y).returningAll().executeTakeFirst()}catch(G){if(G instanceof Error&&(G.message.includes("duplicate key")||G.message.includes("unique constraint")))throw Error("Connection ID already exists");throw G}if(!J)throw Error(`Failed to create connection with id: ${Z}`);return this.deserializeConnection(J)}async findById($,Z){let Q=IQ($);if(Q)return oJ$(Z??Q);let X=this.db.selectFrom("connections").selectAll().where("id","=",$);if(Z)X=X.where("organization_id","=",Z);let Y=await X.executeTakeFirst();return Y?this.deserializeConnection(Y):null}async findBySanitizedId($){let Z=$.replace(/-/g,"_"),Q=await this.db.selectFrom("connections").selectAll().where(a$`replace(id, '-', '_')`,"=",Z).where("id","!=",$).executeTakeFirst();return Q?this.deserializeConnection(Q):null}async list($,Z){let Q=this.db.selectFrom("connections").selectAll().where("organization_id","=",$);if(!Z?.includeVirtual)Q=Q.where("connection_type","!=","VIRTUAL");if(Z?.slug)Q=Q.where("slug","=",Z.slug);if(Z?.where)Q=Q.where(BG$(Z.where));let J=(await this.db.selectFrom(Q.as("filtered")).select(a$`count(*)::int`.as("count")).executeTakeFirst())?.count??0;if(Z?.orderBy&&Z.orderBy.length>0)for(let W of Z.orderBy){let H=NG$(W.field);if(!H)continue;let F=W.direction==="desc"?a$`desc`:a$`asc`,U=W.nulls==="first"?a$`nulls first`:a$`nulls last`;Q=Q.orderBy(a$`${H} ${F} ${U}`)}if(Z?.limit!==void 0)Q=Q.limit(Z.limit);if(Z?.offset)Q=Q.offset(Z.offset);let G=await Q.execute();return{items:await Promise.all(G.map((W)=>this.deserializeConnection(W))),totalCount:J}}async update($,Z){let{id:Q,organization_id:X,created_by:Y,created_at:J,...G}=Z;if(Z=G,Object.keys(Z).length===0){let U=await this.findById($);if(!U)throw Error("Connection not found");return U}let K={...Z},W=await this.db.selectFrom("connections").select(["app_name","connection_url","title"]).where("id","=",$).executeTakeFirst();if(W){let U=(N)=>Z[N]===void 0?W[N]:Z[N];K.slug=SD({app_name:U("app_name"),connection_url:U("connection_url"),title:U("title"),id:$})}let H=await this.serializeConnection({...K,updated_at:new Date().toISOString()}),F=await this.db.updateTable("connections").set(H).where("id","=",$).returningAll().executeTakeFirst();if(!F)throw Error("Connection not found after update");return this.deserializeConnection(F)}async isReferencedByThread($){return await this.db.selectFrom("threads").select("id").where(a$`metadata -> 'githubRepo' ->> 'connectionId' = ${$}`).limit(1).executeTakeFirst()!==void 0}async delete($){await this.db.deleteFrom("connections").where("id","=",$).execute()}async testConnection($,Z){let Q=await this.findById($);if(!Q)throw Error("Connection not found");let X=Date.now();if(Q.connection_type==="STDIO")return{healthy:!0,latencyMs:Date.now()-X};if(!Q.connection_url)return{healthy:!1,latencyMs:Date.now()-X};try{if(await gh(Q.connection_url))return{healthy:!1,latencyMs:Date.now()-X};let J=Q.connection_headers,G=await kD()(Q.connection_url,{method:"POST",signal:AbortSignal.timeout(1e4),headers:{"Content-Type":"application/json",...Q.connection_token&&{Authorization:`Bearer ${Q.connection_token}`},...J?.headers,...Z},body:JSON.stringify({jsonrpc:"2.0",method:"ping",id:1})});return{healthy:G.ok||G.status===404,latencyMs:Date.now()-X}}catch{return{healthy:!1,latencyMs:Date.now()-X}}}async serializeConnection($){let Z={};for(let[Q,X]of Object.entries($)){if(X===void 0)continue;if(Q==="tools")continue;if(Q==="connection_token"&&X)Z[Q]=await this.vault.encrypt(X);else if(Q==="configuration_state"&&X){let Y=JSON.stringify(X);Z[Q]=await this.vault.encrypt(Y)}else if(Q==="oauth_config"&&X)Z[Q]=await this.vault.encrypt(JSON.stringify(X));else if(Q==="connection_headers"&&X){let Y=X;if(PH(Y)&&Y.envVars){let J={};for(let[G,K]of Object.entries(Y.envVars))J[G]=await this.vault.encrypt(K);Z[Q]=JSON.stringify({...Y,envVars:J})}else Z[Q]=JSON.stringify(Y)}else if($D4.includes(Q))Z[Q]=X?JSON.stringify(X):null;else Z[Q]=X}return Z}async handleDecryptFailures($,Z){let Q=`connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title})`;if(WG$($.id))return;if($.status!=="active"){s01($.id);return}let{thresholdCrossed:X}=KG$($.id);if(!X){for(let{label:Y,error:J}of Z)console.error(`Failed to decrypt ${Y} for ${Q}:`,J);return}try{await this.db.updateTable("connections").set({status:"error"}).where("id","=",$.id).execute(),s01($.id),console.error(`Disabled ${Q} after ${ch} consecutive decryption failures.`,Z[0]?.error)}catch(Y){console.error(`Failed to disable ${Q} after decryption failures:`,Y)}}async deserializeConnection($){let Z=[],Q=null;if($.connection_token)try{Q=await this.vault.decrypt($.connection_token)}catch(W){Z.push({label:"connection token",error:W})}let X=null;if($.configuration_state)try{let W=await this.vault.decrypt($.configuration_state);X=JSON.parse(W)}catch(W){Z.push({label:"configuration state",error:W})}let Y=null;if(typeof $.oauth_config==="string")try{Y=JSON.parse(await this.vault.decrypt($.oauth_config))}catch{try{Y=JSON.parse($.oauth_config)}catch(W){Z.push({label:"oauth config",error:W})}}else Y=$.oauth_config;let J=null,G=!1;if($.connection_headers)try{let W=JSON.parse($.connection_headers);if(PH(W)&&W.envVars){G=!0;let H={};for(let[F,U]of Object.entries(W.envVars))try{H[F]=await this.vault.decrypt(U)}catch(N){H[F]="",Z.push({label:`env var "${F}"`,error:N})}J={...W,envVars:H}}else J=W}catch(W){console.error(`Failed to parse connection_headers for connection ${$.id} (org: ${$.organization_id}, type: ${$.connection_type}, title: ${$.title}):`,W)}if(Z.length>0)await this.handleDecryptFailures($,Z);else if($.connection_token||$.configuration_state||$.oauth_config||G)HG$($.id);let K=(W)=>{if(W===null)return null;if(typeof W==="string")try{return JSON.parse(W)}catch{return null}return W};return{id:$.id,organization_id:$.organization_id,created_by:$.created_by,updated_by:$.updated_by??void 0,title:$.title,description:$.description,icon:$.icon,app_name:$.app_name,app_id:$.app_id,slug:$.slug,connection_type:$.connection_type,connection_url:$.connection_url,connection_token:Q,connection_headers:J,oauth_config:Y,configuration_state:X,configuration_scopes:K($.configuration_scopes),metadata:K($.metadata),tools:null,bindings:K($.bindings),status:$.status,created_at:$.created_at,updated_at:$.updated_at}}}var $D4,ZD4,UG$;var e01=D(()=>{TH();wz();RQ();x8();UG0();FG$();$D4=["connection_headers","configuration_scopes","metadata","bindings"],ZD4=new Set(["id","organization_id","created_by","updated_by","title","description","icon","app_name","app_id","slug","connection_type","connection_url","status","created_at","updated_at"]),UG$=new Set(["metadata","configuration_scopes","bindings"])});import{createHash as QD4,randomBytes as XD4,timingSafeEqual as Rx5}from"crypto";function JD4($){return $.toString("base64").replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/g,"")}function Z11($){return QD4("sha256").update($).digest("hex")}function LG$($){let Z=$11.length+1,Q=Z+DG$;if(!$.startsWith(`${$11}_`)||$.length<=Q+1||$[Q]!=="_")return null;let X=$.slice(Z,Q),Y=$.slice(Q+1);if(!OG$.test(X)||!OG$.test(Y))return null;return X}function wG$(){let $=JD4(XD4(YD4)),Z=$.slice(0,DG$),Q=`${$11}_${Z}_${$}`;return{plaintext:Q,prefix:Z,hash:Z11(Q)}}var $11="stv",YD4=32,DG$=12,OG$;var jG$=D(()=>{OG$=/^[A-Za-z0-9_-]+$/});function EG$($){return{id:$.id,organizationId:$.organization_id,subjectConnectionId:$.subject_connection_id,tokenHash:$.token_hash,tokenPrefix:$.token_prefix,name:$.name,revokedAt:$.revoked_at,lastUsedAt:$.last_used_at,createdAt:$.created_at,updatedAt:$.updated_at}}class Q11{db;constructor($){this.db=$}async createOrRotateWorkloadToken($){let Z=$.name??"default";return await this.db.transaction().execute(async(X)=>{if(!await X.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Subject connection not found in organization");let J=wG$(),G=new Date().toISOString();await X.updateTable("connection_workload_tokens").set({revoked_at:G,updated_at:G}).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",Z).where("revoked_at","is",null).execute();let K=await X.insertInto("connection_workload_tokens").values({id:v8("cwt"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,token_hash:J.hash,token_prefix:J.prefix,name:Z,revoked_at:null,last_used_at:null,created_at:G,updated_at:G}).returningAll().executeTakeFirstOrThrow();return{plaintextToken:J.plaintext,record:EG$(K)}})}async findActiveWorkloadToken($){let Z=await this.db.selectFrom("connection_workload_tokens").selectAll().where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("name","=",$.name??"default").where("revoked_at","is",null).executeTakeFirst();return Z?EG$(Z):null}async revokeWorkloadToken($){let Z=new Date().toISOString();await this.db.updateTable("connection_workload_tokens").set({revoked_at:Z,updated_at:Z}).where("id","=",$.tokenId).where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("revoked_at","is",null).execute()}async authenticateWorkloadToken($){let Z=LG$($);if(!Z)return null;let Q=Z11($),X=await this.db.selectFrom("connection_workload_tokens").select(["id","organization_id","subject_connection_id","token_prefix"]).where("token_prefix","=",Z).where("token_hash","=",Q).where("revoked_at","is",null).executeTakeFirst();if(!X)return null;let Y=new Date().toISOString();return await this.db.updateTable("connection_workload_tokens").set({last_used_at:Y,updated_at:Y}).where("id","=",X.id).execute(),{tokenId:X.id,tokenPrefix:X.token_prefix,organizationId:X.organization_id,subjectConnectionId:X.subject_connection_id}}async replaceGrantsForSubject($){await this.db.transaction().execute(async(Z)=>{if(!await Z.selectFrom("connections").select("id").where("id","=",$.subjectConnectionId).where("organization_id","=",$.organizationId).executeTakeFirst())throw Error("Referenced connection not found in organization");let X=[...new Set($.grants.map((G)=>G.targetConnectionId))];if(X.length>0){if((await Z.selectFrom("connections").select("id").where("organization_id","=",$.organizationId).where("id","in",X).execute()).length!==X.length)throw Error("Referenced connection not found in organization")}if(await Z.deleteFrom("connection_credential_grants").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).execute(),$.grants.length===0)return;let Y=new Date().toISOString(),J=$.grants.map((G)=>({id:v8("ccg"),organization_id:$.organizationId,subject_connection_id:$.subjectConnectionId,target_connection_id:G.targetConnectionId,scope:G.scope,created_by:$.createdBy,created_at:Y,updated_at:Y}));await Z.insertInto("connection_credential_grants").values(J).execute()})}async hasGrant($){return!!await this.db.selectFrom("connection_credential_grants").select("id").where("organization_id","=",$.organizationId).where("subject_connection_id","=",$.subjectConnectionId).where("target_connection_id","=",$.targetConnectionId).where("scope","=",$.scope).executeTakeFirst()}}var DG0="credential:access-token:read",LG0="credential:configuration:read";var wG0=D(()=>{RQ();jG$()});function zG$($,Z){let Q=!1,X={...$},Y=$.pinnedViews;if(Array.isArray(Y)){let K=Y.filter((W)=>W.connectionId!==Z);if(K.length!==Y.length)Q=!0,X.pinnedViews=K.length>0?K:null}let J=$.homeTile;if(J&&J.connectionId===Z)Q=!0,X.homeTile=null;let G=$.homeTiles;if(Array.isArray(G)){let K=G.filter((W)=>W.connectionId!==Z);if(K.length!==G.length)Q=!0,X.homeTiles=K.length>0?K:null}return{ui:X,changed:Q}}function GD4($){return $.replace(/\\/g,"\\\\").replace(/%/g,"\\%").replace(/_/g,"\\_")}function PG$($){let Z=$?.githubRepo?.repositoryId;return typeof Z==="string"&&Z.length>0?Z:null}class lh{db;constructor($){this.db=$}async create($,Z,Q,X){let Y=X?.id??v8("vir"),J=new Date().toISOString();await this.db.transaction().execute(async(K)=>{if(await K.insertInto("connections").values({id:Y,organization_id:$,created_by:Z,updated_by:Z,title:Q.title,description:Q.description??null,icon:Q.icon??null,app_name:null,app_id:null,connection_type:"VIRTUAL",pinned:Q.pinned??!1,connection_url:`virtual://${Y}`,connection_token:null,connection_headers:null,oauth_config:null,configuration_state:null,configuration_scopes:null,metadata:Q.metadata?JSON.stringify(Q.metadata):null,repository_id:PG$(Q.metadata),bindings:null,status:Q.status??"active",created_at:J,updated_at:J}).execute(),Q.connections.length>0)await K.insertInto("connection_aggregations").values(Q.connections.map((W)=>({id:v8("agg"),parent_connection_id:Y,child_connection_id:W.connection_id,selected_tools:W.selected_tools?JSON.stringify(W.selected_tools):null,selected_resources:W.selected_resources?JSON.stringify(W.selected_resources):null,selected_prompts:W.selected_prompts?JSON.stringify(W.selected_prompts):null,dependency_mode:"direct",created_at:J}))).execute()});let G=await this.findById(Y);if(!G)throw Error(`Failed to create virtual MCP with id: ${Y}`);return G}async findById($,Z){let Q=IQ($);if(Q)return{...n01(Z??Q),pinned:!1,connections:[]};let X=KG0($);if(X)return{...mJ$(Z??X),pinned:!1,connections:[]};return this.findByIdInternal(this.db,$)}async findByIdInternal($,Z){let Q=await $.selectFrom("connections").selectAll().where("id","=",Z).where("connection_type","=","VIRTUAL").executeTakeFirst();if(!Q)return null;let X=await $.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","=",Z).where("dependency_mode","=","direct").execute();return this.deserializeVirtualMCPEntity(Q,X)}async searchAcrossMemberships($){let{userId:Z,term:Q,limit:X,offset:Y=0,organizationId:J}=$,G=`%${GD4(Q)}%`,K=this.db.selectFrom("connections").innerJoin("member",(H)=>H.onRef("member.organizationId","=","connections.organization_id").on("member.userId","=",Z)).innerJoin("organization","organization.id","connections.organization_id").where("connections.connection_type","=","VIRTUAL").where((H)=>H.or([H("connections.title","ilike",G),H("connections.description","ilike",G)]));if(J)K=K.where("connections.organization_id","=",J);return(await K.select(["connections.id as id","connections.title as title","connections.icon as icon","connections.metadata as metadata","connections.organization_id as organization_id","organization.name as organization_name","organization.slug as organization_slug","organization.metadata as organization_metadata"]).orderBy("connections.updated_at","desc").orderBy("connections.id","asc").limit(X).offset(Y).execute()).map((H)=>({id:H.id,title:H.title,icon:H.icon,metadata:this.parseJson(H.metadata),organization_id:H.organization_id,organization_name:H.organization_name,organization_slug:H.organization_slug,organization_metadata:H.organization_metadata}))}async list($,Z){let Q=this.db.selectFrom("connections").selectAll().where("organization_id","=",$).where("connection_type","=","VIRTUAL");if(Z?.pinnedOnly)Q=Q.where("pinned","=",!0);let X=await Q.orderBy("created_at","asc").orderBy("id","asc").execute(),Y=X.map((K)=>K.id);if(Y.length===0)return[];let J=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",Y).where("dependency_mode","=","direct").execute(),G=new Map;for(let K of J){let W=G.get(K.parent_connection_id)??[];W.push(K),G.set(K.parent_connection_id,W)}return X.map((K)=>this.deserializeVirtualMCPEntity(K,G.get(K.id)??[]))}async listByIds($,Z){if(Z.length===0)return[];let Q=await this.db.selectFrom("connections").selectAll().where("id","in",Z).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Q.length===0)return[];let X=Q.map((G)=>G.id),Y=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",X).where("dependency_mode","=","direct").execute(),J=new Map;for(let G of Y){let K=J.get(G.parent_connection_id)??[];K.push(G),J.set(G.parent_connection_id,K)}return Q.map((G)=>this.deserializeVirtualMCPEntity(G,J.get(G.id)??[]))}async listByConnectionId($,Z){let X=(await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",Z).execute()).map((W)=>W.parent_connection_id);if(X.length===0)return[];let Y=await this.db.selectFrom("connections").selectAll().where("id","in",X).where("organization_id","=",$).where("connection_type","=","VIRTUAL").execute();if(Y.length===0)return[];let J=Y.map((W)=>W.id),G=await this.db.selectFrom("connection_aggregations").selectAll().where("parent_connection_id","in",J).where("dependency_mode","=","direct").execute(),K=new Map;for(let W of G){let H=K.get(W.parent_connection_id)??[];H.push(W),K.set(W.parent_connection_id,H)}return Y.map((W)=>this.deserializeVirtualMCPEntity(W,K.get(W.id)??[]))}async update($,Z,Q){let X=new Date().toISOString(),Y={updated_at:X,updated_by:Z};if(Q.title!==void 0)Y.title=Q.title;if(Q.description!==void 0)Y.description=Q.description;if(Q.icon!==void 0)Y.icon=Q.icon;if(Q.status!==void 0)Y.status=Q.status;if(Q.pinned!==void 0)Y.pinned=Q.pinned;if(Q.metadata!==void 0)Y.repository_id=PG$(Q.metadata),Y.metadata=Q.metadata?JSON.stringify(Q.metadata):null;let J=[];await this.db.transaction().execute(async(K)=>{if(await K.updateTable("connections").set(Y).where("id","=",$).where("connection_type","=","VIRTUAL").execute(),Q.connections!==void 0){let W=await K.selectFrom("connection_aggregations").select("child_connection_id").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),H=new Set(W.map((U)=>U.child_connection_id));if(await K.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).where("dependency_mode","=","direct").execute(),Q.connections.length>0)await K.insertInto("connection_aggregations").values(Q.connections.map((U)=>({id:v8("agg"),parent_connection_id:$,child_connection_id:U.connection_id,selected_tools:U.selected_tools?JSON.stringify(U.selected_tools):null,selected_resources:U.selected_resources?JSON.stringify(U.selected_resources):null,selected_prompts:U.selected_prompts?JSON.stringify(U.selected_prompts):null,dependency_mode:"direct",created_at:X}))).execute();let F=new Set(Q.connections.map((U)=>U.connection_id));for(let U of H)if(!F.has(U))J.push(U)}});for(let K of J)await this.cleanOrphanedPinnedViews([$],K);let G=await this.findById($);if(!G)throw Error("Virtual MCP not found after update");return G}async delete($){await this.db.transaction().execute(async(Z)=>{await Z.deleteFrom("threads").where("virtual_mcp_id","=",$).execute(),await Z.deleteFrom("connection_aggregations").where("parent_connection_id","=",$).execute(),await Z.deleteFrom("connections").where("id","=",$).where("connection_type","=","VIRTUAL").execute()})}async removeConnectionReferences($){let Z=await this.db.selectFrom("connection_aggregations").select("parent_connection_id").where("child_connection_id","=",$).execute();await this.db.deleteFrom("connection_aggregations").where("child_connection_id","=",$).execute(),await this.cleanOrphanedPinnedViews(Z.map((Q)=>Q.parent_connection_id),$)}async cleanOrphanedPinnedViews($,Z){for(let Q of $){let X=await this.db.selectFrom("connections").select("metadata").where("id","=",Q).executeTakeFirst();if(!X?.metadata)continue;let Y;try{Y=typeof X.metadata==="string"?JSON.parse(X.metadata):X.metadata}catch{continue}let J=Y.ui??null;if(!J)continue;let{ui:G,changed:K}=zG$(J,Z);if(!K)continue;let W={...Y,ui:G};await this.db.updateTable("connections").set({metadata:JSON.stringify(W)}).where("id","=",Q).execute()}}deserializeVirtualMCPEntity($,Z){let Q=$.created_at instanceof Date?$.created_at.toISOString():$.created_at,X=$.updated_at instanceof Date?$.updated_at.toISOString():$.updated_at,Y=$.status==="active"?"active":"inactive",J=this.parseJson($.metadata),{sandboxMap:G,...K}=J??{},W=G!==void 0?Bs0(G):void 0;return{id:$.id,organization_id:$.organization_id,title:$.title,description:$.description,icon:$.icon,status:Y,pinned:$.pinned,created_at:Q,updated_at:X,created_by:$.created_by,updated_by:$.updated_by??void 0,metadata:{...K,instructions:J?.instructions??null,...W!==void 0?{sandboxMap:W}:{}},connections:Z.map((H)=>({connection_id:H.child_connection_id,selected_tools:this.parseJson(H.selected_tools),selected_resources:this.parseJson(H.selected_resources),selected_prompts:this.parseJson(H.selected_prompts)}))}}parseJson($){if($===null)return null;if(typeof $==="string")try{return JSON.parse($)}catch{return null}return $}}function AG$($){let Z=new Map,Q=(X,Y)=>{let J=Z.get(X);if(J)return J;let G=Y();return Z.set(X,G),G};return new Proxy($,{get(X,Y,J){if(Y==="list")return(G,K)=>Q(`list:${G}:${K?.pinnedOnly?1:0}`,()=>X.list(G,K));if(Y==="create"||Y==="update"||Y==="delete"||Y==="removeConnectionReferences")return(...G)=>{return Z.clear(),X[Y](...G)};return Reflect.get(X,Y,J)}})}var X11=D(()=>{RQ();x8()});function zz($){let Z=String($??"");if(Z&&!Z.includes("T"))return Z.replace(" ","T")+"Z";return Z}function I$($){return $.replace(/\0/g,"").replace(/\\/g,"\\\\").replace(/'/g,"''")}function s8($){let Z=Number($??0);return Number.isFinite(Z)?Z:0}function WD4($){if(!KD4.has($))throw Error(`Invalid groupByColumn: ${$}`);return $}function Y11($){if(!HD4.test($))throw Error(`Invalid JSONPath: ${$}`);if($.startsWith("$."))return $;if($.startsWith("."))return`$${$}`;return`$.${$}`}function W11($){return $.replace(/^\$\./,"").split(".").map((Q)=>`'${I$(Q)}'`).join(", ")}function ND4($){let Z=FD4.exec($);if(!Z||!Z[1]||!Z[2])throw Error(`Invalid interval: ${$}`);let Q=parseInt(Z[1],10),X=Z[2],Y=UD4[X];if(Q<1||Q>Y)throw Error(`Invalid interval amount: ${Q}${X} (max ${Y}${X})`);return{amount:Q,unit:X}}function CD($,Z,Q="timestamp"){let{amount:X,unit:Y}=ND4($),G={m:"MINUTE",h:"HOUR",d:"DAY"}[Y];if(Z==="duckdb")return`time_bucket(INTERVAL '${X} ${G}', CAST(${Q} AS TIMESTAMP))`;return`toStartOfInterval(${Q}, INTERVAL ${X} ${G})`}function jo($,Z,Q){if(Q==="duckdb")return`json_extract_string(${$}, '${Z}')`;let X=W11(Z);return`JSONExtractString(${$}, ${X})`}function BD4($,Z,Q){if(Q==="duckdb")return`CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let X=W11(Z);return`JSONExtractFloat(${$}, ${X})`}function TG$($,Z,Q){if(Q==="duckdb")return`TRY_CAST(json_extract_string(${$}, '${Z}') AS DOUBLE)`;let X=W11(Z);return`toFloat64OrZero(JSONExtractString(${$}, ${X}))`}function J11($){if($===null||$===void 0)return{};if(typeof $==="object")return $;let Z=String($);try{return JSON.parse(Z)}catch{return{_decocms_truncated:Z}}}function G11($){return{id:String($.id??""),organizationId:String($.organization_id??""),connectionId:String($.connection_id??""),toolName:String($.tool_name??""),input:J11($.input),output:J11($.output),isError:$.is_error===1||$.is_error===!0||$.is_error==="1"||typeof $.is_error==="bigint"&&$.is_error===1n,errorMessage:$.error_message!=null?String($.error_message):null,durationMs:Number($.duration_ms??0),timestamp:(()=>{if($.timestamp instanceof Date)return $.timestamp.toISOString();let Z=String($.timestamp??""),Q=new Date(Z.includes("T")?Z:Z.replace(" ","T")+"Z");return Number.isNaN(Q.getTime())?Z:Q.toISOString()})(),userId:$.user_id!=null?String($.user_id):null,requestId:String($.request_id??""),userAgent:$.user_agent!=null?String($.user_agent):null,virtualMcpId:$.virtual_mcp_id!=null?String($.virtual_mcp_id):null,properties:$.properties?J11($.properties):null}}function MG$($,Z){let Q=[];if($.properties)for(let[X,Y]of Object.entries($.properties)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${J}') = '${G}'`);else Q.push(`JSONExtractString(properties, '${J}') = '${G}'`)}if($.propertyKeys)for(let X of $.propertyKeys){let Y=I$(X);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${Y}') IS NOT NULL AND json_extract_string(properties, '$.${Y}') != ''`);else Q.push(`JSONExtractString(properties, '${Y}') IS NOT NULL AND JSONExtractString(properties, '${Y}') != ''`)}if($.propertyPatterns)for(let[X,Y]of Object.entries($.propertyPatterns)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`json_extract_string(properties, '$.${J}') ILIKE '${G}'`);else Q.push(`JSONExtractString(properties, '${J}') ILIKE '${G}'`)}if($.propertyInValues)for(let[X,Y]of Object.entries($.propertyInValues)){let J=I$(X),G=I$(Y);if(Z==="duckdb")Q.push(`list_contains(string_split(json_extract_string(properties, '$.${J}'), ','), '${G}')`);else Q.push(`has(splitByChar(',', JSONExtractString(properties, '${J}')), '${G}')`)}return Q}function IG$($,Z){let Q=[];if(sG(Q,Z?.startDate,$),!Z)return Q;if(Z.connectionIds?.length){let X=Z.connectionIds.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`connection_id IN (${X})`)}if(Z.toolNames?.length){let X=Z.toolNames.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`tool_name IN (${X})`)}if(Z.virtualMcpIds?.length){let X=Z.virtualMcpIds.map((Y)=>`'${I$(Y)}'`).join(",");Q.push(`virtual_mcp_id IN (${X})`)}if(Z.endDate)Q.push(aG(Z.endDate,$));if(Z.propertyFilters)Q.push(...MG$(Z.propertyFilters,$));return Q}function qG$($,Z,Q="timestamp"){if(Z==="duckdb")return`CAST(${Q} AS TIMESTAMP) >= TIMESTAMP '${$.toISOString()}'`;if(Q==="bucket")return`${Q} >= parseDateTimeBestEffort('${$.toISOString()}')`;return`${Q} >= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function aG($,Z,Q="timestamp"){if(Z==="duckdb")return`CAST(${Q} AS TIMESTAMP) <= TIMESTAMP '${$.toISOString()}'`;if(Q==="bucket")return`${Q} <= parseDateTimeBestEffort('${$.toISOString()}')`;return`${Q} <= parseDateTime64BestEffort('${$.toISOString()}', 9)`}function sG($,Z,Q,X="timestamp"){if(Z)$.push(qG$(Z,Q,X));else if(Q==="clickhouse")$.push(qG$(new Date(Date.now()-OD4),Q,X))}class H11{engine;sourceFactory;metricEngine;metricSourceFactory;dialect;metricsFromLogs;constructor($,Z,Q,X,Y="clickhouse",J=!1){this.engine=$;this.sourceFactory=Z;this.metricEngine=Q;this.metricSourceFactory=X;this.dialect=Y;this.metricsFromLogs=J}async query($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`];if($.connectionId)Q.push(`connection_id = '${I$($.connectionId)}'`);if($.excludeConnectionIds?.length){let N=$.excludeConnectionIds.map((B)=>`'${I$(B)}'`).join(",");Q.push(`connection_id NOT IN (${N})`)}if($.virtualMcpId)Q.push(`virtual_mcp_id = '${I$($.virtualMcpId)}'`);if($.toolName)Q.push(`tool_name = '${I$($.toolName)}'`);if($.isError!==void 0)Q.push(`is_error = ${$.isError?1:0}`);if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));if($.propertyFilters)Q.push(...MG$($.propertyFilters,this.dialect));let X=1000,Y=Math.min(Math.max(1,Math.floor($.limit??50)),X),J=Math.max(0,Math.floor($.offset??0)),G=Q.join(" AND ");if(this.dialect==="duckdb"){let N=`SELECT ${RG$}, count(*) OVER () AS _total FROM ${Z} WHERE ${G} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${J}`,B=await this.engine.query(N);if(B.length===0)return{logs:[],total:0};let O=Number(B[0]._total??0);return{logs:B.map(G11),total:O}}let K=`SELECT count(*) AS total FROM ${Z} WHERE ${G}`,W=`SELECT ${RG$} FROM ${Z} WHERE ${G} ORDER BY timestamp DESC LIMIT ${Y} OFFSET ${J}`,[H,F]=await Promise.all([this.engine.query(K),this.engine.query(W)]),U=Number(H[0]?.total??0);return{logs:F.map(G11),total:U}}async getById($,Z){if(!$||!Z)return null;let X=`SELECT * FROM ${this.sourceFactory($)} WHERE organization_id = '${I$($)}' AND id = '${I$(Z)}' LIMIT 1`,Y=await this.engine.query(X);if(Y.length===0)return null;return G11(Y[0])}async getStats($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`];if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));let X=`SELECT count(*) AS total_calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1.0 ELSE 0.0 END) / NULLIF(count(*), 0), 0) AS error_rate, coalesce(avg(duration_ms), 0) AS avg_duration_ms FROM ${Z} WHERE ${Q.join(" AND ")}`,J=(await this.engine.query(X))[0]??{};return{totalCalls:Number(J.total_calls??0),errorRate:Number(J.error_rate??0),avgDurationMs:Number(J.avg_duration_ms??0)}}async queryToolCallHeatmap($){if(!$.organizationId)throw Error("organizationId is required");let Z=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),Q=[`organization_id = '${I$($.organizationId)}'`,"type = 'tool_call'"];if($.filters?.virtualMcpIds?.length){let G=$.filters.virtualMcpIds.map((K)=>`'${I$(K)}'`).join(",");Q.push(`virtual_mcp_id IN (${G})`)}if($.filters?.excludeConnectionIds?.length){let G=$.filters.excludeConnectionIds.map((K)=>`'${I$(K)}'`).join(",");Q.push(`connection_id NOT IN (${G})`)}if(sG(Q,$.startDate,this.dialect),$.endDate)Q.push(aG($.endDate,this.dialect));let X=Math.min(Math.max(1,Math.floor($.limit??500)),1000),Y=`SELECT virtual_mcp_id, tool_name, count(*) AS calls, coalesce(sum(CASE WHEN is_error = 1 THEN 1 ELSE 0 END), 0) AS errors, coalesce(sum(length(output)), 0) AS output_size FROM ${Z} WHERE ${Q.join(" AND ")} GROUP BY virtual_mcp_id, tool_name ORDER BY calls DESC LIMIT ${X}`;return{cells:(await this.engine.query(Y)).map((G)=>({virtualMcpId:G.virtual_mcp_id?String(G.virtual_mcp_id):null,toolName:String(G.tool_name??""),calls:Number(G.calls??0),errors:Number(G.errors??0),outputSize:Number(G.output_size??0)}))}}async queryLlmUsageStats($){let Z={totalCalls:0,totalErrors:0,avgDurationMs:0,p50DurationMs:0,p95DurationMs:0,totalInputTokens:0,totalOutputTokens:0,totalTokens:0,totalCostUsd:0,topTools:[],timeseries:[]};if(!$.organizationId||!$.connectionId)return Z;let Q=this.dialect,X=Q==="clickhouse",Y=this.sourceFactory($.organizationId,{startDate:$.startDate,endDate:$.endDate}),J=CD($.interval,Q,"timestamp"),G=(j)=>`coalesce(${TG$("properties",`$.${j}`,Q)}, 0)`,K=X?"count()":"count(*)",W=X?"countIf(is_error = 1)":"count(*) FILTER (WHERE is_error = 1)",H=(j)=>X?`quantile(${j})(duration_ms)`:`quantile_cont(duration_ms, ${j})`,F=[`organization_id = '${I$($.organizationId)}'`,`connection_id = '${I$($.connectionId)}'`];if(sG(F,$.startDate,Q),$.endDate)F.push(aG($.endDate,Q));if($.userIds?.length){let j=$.userIds.slice(0,100).map((E)=>`'${I$(E)}'`).join(",");F.push(`user_id IN (${j})`)}let U=F.join(" AND "),N=Math.min(Math.max(1,Math.floor($.topN??5)),20),B=`${K} AS calls,
|
|
1997
1997
|
${W} AS errors,
|
|
1998
1998
|
avg(duration_ms) AS avg,
|
|
1999
1999
|
sum(${G("input_tokens")}) AS in_tok,
|
|
@@ -2689,7 +2689,7 @@ You are the Usage Manager. You analyze how this workspace is actually used \u201
|
|
|
2689
2689
|
`,W),U=F===-1?$.slice(W):$.slice(W,F);Q+=U,W+=U.length-1;continue}if($.startsWith("/*",W)){let F=1,U=W+2;while(F>0&&U<$.length)if($.startsWith("/*",U))F++,U+=2;else if($.startsWith("*/",U))F--,U+=2;else U++;let N=$.slice(W,U);Q+=N,W+=N.length-1;continue}}if(K!==null){let F=`$${K}$`;if($.startsWith(F,W))Q+=F,W+=F.length-1,K=null;else Q+=H;continue}if(Y&&G&&H==="\\"&&W+1<$.length){Q+=H+$[W+1],W+=1;continue}if(!J&&H==="'"){if(!Y){let F=$[W-1],U=$[W-2]??"";G=(F==="e"||F==="E")&&!/[A-Za-z0-9_]/.test(U)}Y=!Y,Q+=H;continue}if(!Y&&H==='"'){J=!J,Q+=H;continue}if(!Y&&!J&&H==="$"){let F=/^\$(\d+)/.exec($.slice(W)),U=F?Number(F[1])-1:-1;if(F&&U>=0&&U<Z.length){Q+=Mj$(Z[U]),W+=F[0].length-1;continue}let N=/^\$([A-Za-z_][A-Za-z0-9_]*)?\$/.exec($.slice(W));if(N){K=N[1]??"",Q+=N[0],W+=N[0].length-1;continue}}else if(!Y&&!J&&H==="?"&&X<Z.length){Q+=Mj$(Z[X]),X++;continue}Q+=H}return Q}function Vj$($){return $.replace(/-/g,"_")}function P_4($){return`app_${Vj$($)}`}function A_4($){return`app_role_${Vj$($)}`}function T_4($){if($ instanceof Error){let Z=$.message.toLowerCase(),Q=$.code;return Q==="3F000"||Q==="42704"||Q==="22023"||Z.includes("schema")&&Z.includes("does not exist")||Z.includes("role")&&Z.includes("does not exist")}return!1}async function R_4($,Z,Q){if(await m4`CREATE SCHEMA IF NOT EXISTS ${m4.id(Z)}`.execute($),!(await m4`
|
|
2690
2690
|
SELECT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = ${Q}) as exists
|
|
2691
2691
|
`.execute($)).rows[0]?.exists)await m4`CREATE ROLE ${m4.id(Q)} NOLOGIN`.execute($);await m4`GRANT ${m4.id(Q)} TO CURRENT_USER`.execute($),await m4`GRANT USAGE, CREATE ON SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`GRANT ALL ON ALL TABLES IN SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`GRANT ALL ON ALL SEQUENCES IN SCHEMA ${m4.id(Z)} TO ${m4.id(Q)}`.execute($),await m4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${m4.id(Z)} GRANT ALL ON TABLES TO ${m4.id(Q)}`.execute($),await m4`ALTER DEFAULT PRIVILEGES IN SCHEMA ${m4.id(Z)} GRANT ALL ON SEQUENCES TO ${m4.id(Q)}`.execute($),await m4`REVOKE ALL ON SCHEMA public FROM ${m4.id(Q)}`.execute($)}async function I_4($,Z,Q,X){try{return await $.transaction().execute(async(Y)=>{return await m4`SET LOCAL ROLE ${m4.id(Q)}`.execute(Y),await m4`SET LOCAL search_path TO ${m4.id(Z)}`.execute(Y),await m4.raw(X).execute(Y)})}catch(Y){if(T_4(Y))return await R_4($,Z,Q),await $.transaction().execute(async(J)=>{return await m4`SET LOCAL ROLE ${m4.id(Q)}`.execute(J),await m4`SET LOCAL search_path TO ${m4.id(Z)}`.execute(J),await m4.raw(X).execute(J)});throw Y}}var j_4,z_4,kj$;var Sj$=D(()=>{M0();j_4=oH.object({results:oH.array(oH.unknown()).optional(),success:oH.boolean().optional()});z_4=oH.object({sql:oH.string().describe("The SQL query to run"),params:oH.array(oH.unknown()).describe("The parameters to pass to the SQL query").optional()});kj$=h({name:"DATABASES_RUN_SQL",description:"Run a SQL query in a connection-scoped isolated schema. Supports SELECT, DDL, and DML.",annotations:{title:"Run SQL Query",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:z_4,outputSchema:oH.object({result:oH.array(j_4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=E_4($.sql,$.params||[]);if(!Z.connectionId)throw Error("Connection context required for database access");console.warn("DATABASES_RUN_SQL invoked",{"tool.deprecation_probe":"DATABASES_RUN_SQL","connection.id":Z.connectionId,"organization.id":Z.organization?.id??null,"user.id":Z.auth.user?.id??null});let X=P_4(Z.connectionId),Y=A_4(Z.connectionId);return{result:[{results:(await I_4(Z.db,X,Y,Q)).rows,success:!0}]}}})});function FW0($){let Z=$.access.getRole();if(!RZ(Z))throw new CJ("Only organization owners and admins can change org-wide pin status")}var M61=D(()=>{zX();GN()});async function UW0($,Z,Q){let X=[...new Set(Q)],Y=await Promise.all(X.map((G)=>$.storage.connections.findById(G,Z))),J=X.filter((G,K)=>!Y[K]);if(J.length>0)throw Error(`Connection not found: ${J.join(", ")}`)}function RN($){return $.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"")}function NW0($){let Z=2166136261;for(let Q=0;Q<$.length;Q++)Z=Math.imul(Z^$.charCodeAt(Q),16777619);return`a${(Z>>>0).toString(36).padStart(6,"0").slice(-6)}`}function BW0($){if($&&typeof $==="object"&&"gatewayClientId"in $&&typeof $.gatewayClientId==="string")return $.gatewayClientId;return}function OW0($,Z){if(!Z)return $;let Q=`${NW0(Z)}_`;return $.startsWith(Q)?$.slice(Q.length):$}function M_4($){return $.split(/[-_]/).map((Z)=>Z?Z.charAt(0).toUpperCase()+Z.slice(1):Z).join(" ")}function V_4($,Z,Q){let X,Y=new Promise((J,G)=>{X=setTimeout(()=>G(Error(Q)),Z)});return Promise.race([$,Y]).finally(()=>clearTimeout(X))}var LP;var Cj$=D(()=>{kH();LP=class LP extends $Z{static MAX_PAGES_PER_CLIENT=1000;static DEFAULT_LIST_TIMEOUT_MS=30000;clients;slugToKey=new Map;resolvedClients=new Map;toolsCache=null;resourcesCache=null;resourceTemplatesCache=null;promptsCache=null;resourceRouteMap=new Map;listTimeoutMs;constructor($,Z){super(Z?.clientInfo??{name:"gateway-client",version:"1.0.0"},{capabilities:Z?.capabilities});this.clients=$,this.listTimeoutMs=Z?.listTimeoutMs??LP.DEFAULT_LIST_TIMEOUT_MS;for(let Q of Object.keys($)){let X=NW0(Q);if(this.slugToKey.has(X))throw Error(`GatewayClient: duplicate namespace code "${X}" from keys "${this.slugToKey.get(X)}" and "${Q}"`);this.slugToKey.set(X,Q)}}namespace($,Z){return`${NW0($)}_${Z}`}async resolveNamespacedTarget($,Z,Q){let X=$.indexOf("_");if(X!==-1){let Y=$.slice(0,X),J=this.slugToKey.get(Y);if(J)return[J,$.slice(X+1)]}for(let Y of await Q()){let J=BW0(Y._meta);if(!J)continue;if(OW0(Y.name,J)===$)return[J,$]}if(X===-1)throw Error(`GatewayClient: could not resolve ${Z} "${$}" \u2014 no namespace prefix and not found in any client`);throw Error(`GatewayClient: unknown namespace "${$.slice(0,X)}" in "${$}" and not found by original name in any client`)}resolveToolTarget($){return this.resolveNamespacedTarget($,"tool",async()=>(await this.listTools()).tools)}resolvePromptTarget($){return this.resolveNamespacedTarget($,"prompt",async()=>(await this.listPrompts()).prompts)}resolveClient($){let Z=this.resolvedClients.get($);if(Z)return Z;let Q=this.clients[$];if(!Q)return Promise.reject(Error(`GatewayClient: unknown client key "${$}"`));let X=Q.client,Y;try{Y=typeof X==="function"?Promise.resolve(X()):Promise.resolve(X)}catch(G){return Promise.reject(G)}let J=Y.catch((G)=>{throw this.resolvedClients.delete($),G});return this.resolvedClients.set($,J),J}getResolvedClient($){return this.resolveClient($)}async listFromClient($,Z,Q){try{return await V_4((async()=>{let X=await this.resolveClient($);return await Z(X)})(),this.listTimeoutMs,`timed out after ${this.listTimeoutMs}ms`)}catch(X){return console.warn(`GatewayClient: skipping ${Q} from client "${$}" \u2014 ${X?.message??X}`),[]}}listFromAllClients($,Z){return Promise.all(Object.entries(this.clients).map(async([Q,X])=>[Q,X,await this.listFromClient(Q,(Y)=>$(Y,Q),Z)]))}async paginate($,Z,Q){let X=[],Y,J=0;do{let G=await Q(Y);X.push(...G.items),Y=G.nextCursor,J++}while(Y&&J<LP.MAX_PAGES_PER_CLIENT);if(Y)console.warn(`GatewayClient: client "${$}" exceeded ${LP.MAX_PAGES_PER_CLIENT} pages listing ${Z} \u2014 truncating`);return X}fetchAllTools($,Z){return this.paginate(Z,"tools",async(Q)=>{let X=await $.listTools(Q?{cursor:Q}:void 0);return{items:X.tools,nextCursor:X.nextCursor}})}fetchAllResources($,Z){return this.paginate(Z,"resources",async(Q)=>{let X=await $.listResources(Q?{cursor:Q}:void 0);return{items:X.resources,nextCursor:X.nextCursor}})}fetchAllResourceTemplates($,Z){return this.paginate(Z,"resource templates",async(Q)=>{let X=await $.listResourceTemplates(Q?{cursor:Q}:void 0);return{items:X.resourceTemplates,nextCursor:X.nextCursor}})}fetchAllPrompts($,Z){return this.paginate(Z,"prompts",async(Q)=>{let X=await $.listPrompts(Q?{cursor:Q}:void 0);return{items:X.prompts,nextCursor:X.nextCursor}})}listTools($,Z){if(!this.toolsCache)this.toolsCache=this.aggregateTools();return this.toolsCache}async aggregateTools(){let $=[],Z=await this.listFromAllClients((Q,X)=>this.fetchAllTools(Q,X),"tools");for(let[Q,X,Y]of Z){let J=X.tools,G=J?new Set(J):null;for(let K of Y){if(G&&!G.has(K.name))continue;$.push({...K,name:this.namespace(Q,K.name),_meta:{...K._meta??{},gatewayClientId:Q}})}}return{tools:$}}listResources($,Z){if(!this.resourcesCache)this.resourcesCache=this.aggregateResources();return this.resourcesCache}async aggregateResources(){let $=new Set,Z=[],Q=new Map,X=await this.listFromAllClients((Y,J)=>this.fetchAllResources(Y,J),"resources");for(let[Y,J,G]of X){let K=J.resources,W=K?new Set(K):null;for(let H of G){if(W&&!W.has(H.uri)&&!(H.name&&W.has(H.name)))continue;if($.has(H.uri)){console.warn(`GatewayClient: duplicate resource "${H.uri}" from client "${Y}" \u2014 skipping`);continue}$.add(H.uri),Q.set(H.uri,Y),Z.push({...H,_meta:{...H._meta??{},gatewayClientId:Y}})}}return this.resourceRouteMap=Q,{resources:Z}}listResourceTemplates($,Z){if(!this.resourceTemplatesCache)this.resourceTemplatesCache=this.aggregateResourceTemplates();return this.resourceTemplatesCache}async aggregateResourceTemplates(){let $=new Set,Z=[],Q=await this.listFromAllClients((X,Y)=>this.fetchAllResourceTemplates(X,Y),"resource templates");for(let[X,Y,J]of Q)for(let G of J){if($.has(G.uriTemplate)){console.warn(`GatewayClient: duplicate resource template "${G.uriTemplate}" from client "${X}" \u2014 skipping`);continue}$.add(G.uriTemplate),Z.push({...G,_meta:{...G._meta??{},gatewayClientId:X}})}return{resourceTemplates:Z}}listPrompts($,Z){if(!this.promptsCache)this.promptsCache=this.aggregatePrompts();return this.promptsCache}async aggregatePrompts(){let $=[],Z=await this.listFromAllClients((Q,X)=>this.fetchAllPrompts(Q,X),"prompts");for(let[Q,X,Y]of Z){let J=X.prompts,G=J?new Set(J):null;for(let K of Y){if(G&&!G.has(K.name))continue;$.push({...K,name:this.namespace(Q,K.name),title:K.title??M_4(K.name),_meta:{...K._meta??{},gatewayClientId:Q}})}}return{prompts:$}}async callTool($,Z,Q){let[X,Y]=await this.resolveToolTarget($.name);return(await this.resolveClient(X)).callTool({...$,name:Y},Z,Q)}async readResource($,Z){let Q=await this.resolveResourceRoute($.uri);return(await this.resolveClient(Q)).readResource($)}async getPrompt($,Z){let[Q,X]=await this.resolvePromptTarget($.name);return(await this.resolveClient(Q)).getPrompt({...$,name:X})}async resolveResourceRoute($){let Z=this.resourceRouteMap.get($);if(Z)return Z;if(this.resourcesCache=null,await this.listResources(),Z=this.resourceRouteMap.get($),Z)return Z;throw Error(`GatewayClient: resource "${$}" not found in any upstream client`)}getServerCapabilities(){return{tools:{},resources:{},prompts:{}}}getInstructions(){return}refresh(){this.toolsCache=null,this.resourcesCache=null,this.resourceTemplatesCache=null,this.promptsCache=null}async close(){let $=[...this.resolvedClients.values()].map((Z)=>Z.then((Q)=>Q.close()).catch(()=>{}));await Promise.allSettled($),await super.close()}}});var DW0=D(()=>{Cj$()});function k61($){return RN($)}function S_4($,Z){let Q=RN(Z)||"prompt";return`${String($).padStart(k_4,"0")}-${Q}`}async function S61($,Z,Q){try{await $.delete(LW0,k61(Z),{actor:Q})}catch(X){console.error("[agent-prompts] failed to delete prompts",{agentId:Z,err:X})}}async function wW0($,Z,Q,X){let Y=k61(Z);await S61($,Z,Q),await Promise.all(X.slice(0,V61).map(async(J,G)=>{let K=S_4(G,J.title),W={name:K,title:J.title,description:J.description,text:J.text};try{await $.write(LW0,`${Y}/${K}.json`,JSON.stringify(W),{actor:Q,contentType:"application/json"})}catch(H){console.error("[agent-prompts] failed to seed prompt",{agentId:Z,name:K,err:H})}}))}async function _j$($,Z){let Q=k61(Z),X;try{X=await $.listDir(LW0,Q)}catch{return[]}let Y=X.filter((G)=>G.kind==="file"&&G.path.endsWith(".json")).slice(0,V61),J=[];for(let G of Y)try{let K=await $.read(LW0,G.path),W=JSON.parse(new TextDecoder().decode(K));if(W&&typeof W.name==="string"&&typeof W.title==="string"&&typeof W.text==="string")J.push(W)}catch{}return J}var LW0="agent-prompts",V61=20,k_4;var fa=D(()=>{DW0();k_4=String(V61-1).length});function jc($){if(!$)return $;let Z={...$};return delete Z.sandboxMap,Z}import{z as fj$}from"zod";function C_4(){let $=vj$[Math.floor(Math.random()*vj$.length)];return`icon://${xj$[Math.floor(Math.random()*xj$.length)]}?color=${$}`}var vj$,xj$,__4,v_4,wP;var C61=D(()=>{M0();LL();M61();fa();vj$=["red","orange","amber","yellow","lime","green","emerald","cyan","sky","blue","indigo","violet","purple","fuchsia","pink","rose"],xj$=["Star01","Zap","Heart","Globe01","Compass03","Lightbulb02","Rocket01","Flag01","BookOpen01","Shield01","Key01","Diamond01","Cube01","Target04","Award01","Briefcase01","Coffee","Feather","Hexagon01","Layers3_01","Map01","Palette","Package","Terminal"];__4=fj$.object({data:_Y0.describe("Data for the new virtual MCP")}),v_4=fj$.object({item:zQ.describe("The created virtual MCP entity")}),wP=h({name:"COLLECTION_VIRTUAL_MCP_CREATE",description:"Create a Virtual MCP (agent) that aggregates tools from multiple connections into one endpoint. Pass `prompts` to seed the agent with kickstart prompts (conversation starters shown as icebreakers). Author them from the agent's role/instructions and the descriptions of the tools it will have, so the starters are coherent and immediately useful.",annotations:{title:"Create Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:__4,outputSchema:v_4,handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to create virtual MCP");if($.data.pinned===!0)FW0(Z);let{prompts:Y,metadata:J,...G}=$.data,K=jc(J);if(G.connections.length>0)await UW0(Z,Q.id,G.connections.map((F)=>F.connection_id));let W={...G,metadata:K,icon:G.icon??C_4()},H=await Z.storage.virtualMcps.create(Q.id,X,W);if(Y?.length&&Z.orgFs&&H.id)await wW0(Z.orgFs,H.id,X,Y);return{item:H}}})});function x_4($){let Z=[],Q=0;while(Q<$.length){let X=$[Q];if(X==="%")Z.push(".*");else if(X==="_")Z.push(".");else if(/[.*+?^${}()|[\]\\]/.test(X))Z.push("\\"+X);else Z.push(X);Q++}return Z.join("")}function IL($){return typeof $==="string"||typeof $==="number"}function _61($,Z){let Q=Z.split("."),X=$;for(let Y of Q){if(X==null||typeof X!=="object")return;X=X[Y]}return X}function f_4($,Z){return $.connections.some((Q)=>Q.connection_id===Z)}function jW0($,Z){if("conditions"in Z){let{operator:K,conditions:W}=Z;switch(K){case"and":return W.every((H)=>jW0($,H));case"or":return W.some((H)=>jW0($,H));case"not":return!W.every((H)=>jW0($,H));default:return!0}}let{field:Q,operator:X,value:Y}=Z,J=Q.join(".");if(J==="connection_id"){if(X!=="eq"||typeof Y!=="string")return!1;return f_4($,Y)}let G=_61($,J);switch(X){case"eq":return G===Y;case"gt":return IL(G)&&IL(Y)&&G>Y;case"gte":return IL(G)&&IL(Y)&&G>=Y;case"lt":return IL(G)&&IL(Y)&&G<Y;case"lte":return IL(G)&&IL(Y)&&G<=Y;case"in":return Array.isArray(Y)&&Y.includes(G);case"like":if(typeof G!=="string"||typeof Y!=="string")return!1;if(Y.length>100)return!1;let K=x_4(Y);return new RegExp(`^${K}$`,"i").test(G);case"contains":if(typeof G!=="string"||typeof Y!=="string")return!1;return G.toLowerCase().includes(Y.toLowerCase());default:return!0}}function b_4($,Z){return[...$].sort((Q,X)=>{for(let Y of Z){let J=Y.field.join("."),G=_61(Q,J),K=_61(X,J),W=0;if(G==null&&K==null)continue;if(G==null)W=Y.nulls==="first"?-1:1;else if(K==null)W=Y.nulls==="first"?1:-1;else if(typeof G==="string"&&typeof K==="string")W=G.localeCompare(K);else if(typeof G==="number"&&typeof K==="number")W=G-K;else W=String(G).localeCompare(String(K));if(W!==0)return Y.direction==="desc"?-W:W}return 0})}var y_4,g_4,jP;var v61=D(()=>{J3();M0();LL();y_4=nK,g_4=AN(zQ),jP=h({name:"COLLECTION_VIRTUAL_MCP_LIST",description:"List all MCP virtual MCPs in the organization",annotations:{title:"List Virtual MCPs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:y_4,outputSchema:g_4,handler:async($,Z)=>{await Z.access.check();let Q=t(Z),X=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="connection_id"&&$.where.operator==="eq"&&typeof $.where.value==="string"?$.where.value:void 0,Y=$.where&&!("conditions"in $.where)&&$.where.field.join(".")==="pinned"&&$.where.operator==="eq"&&typeof $.where.value==="boolean"?$.where.value:void 0,G=X?await Z.storage.virtualMcps.listByConnectionId(Q.id,X):await Z.storage.virtualMcps.list(Q.id,Y!==void 0?{pinnedOnly:Y}:void 0);if($.where)G=G.filter((N)=>jW0(N,$.where));if($.orderBy&&$.orderBy.length>0)G=b_4(G,$.orderBy);let K=G.length,W=$.offset??0,H=$.limit??100,F=G.slice(W,W+H),U=W+H<K;return{items:F,totalCount:K,hasMore:U}}})});import{z as x61}from"zod";var h_4,u_4,EP;var f61=D(()=>{M0();LL();h_4=x61.object({id:x61.string().describe("ID of the virtual MCP to retrieve")}),u_4=x61.object({item:zQ.nullable().describe("The retrieved virtual MCP, or null if not found")}),EP=h({name:"COLLECTION_VIRTUAL_MCP_GET",description:"Get a Virtual MCP's configuration, connections, and virtual tools by ID.",annotations:{title:"Get Virtual MCP",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:h_4,outputSchema:u_4,handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let X=await Z.storage.virtualMcps.findById($.id);if(X&&X.organization_id!==Q.id)return{item:null};if(!X)return{item:null};return{item:X}}})});function CX($){return b61.test($)}function bj$($){let Z=(Q)=>typeof Q==="string"?Q.trim().toLowerCase():"";return Z($?.metadata?.siteSlug)||Z($?.title)||null}var b61;var IN=D(()=>{b61=/^[a-z0-9][a-z0-9-]{0,59}$/});function yj$($){let{nextTitle:Z,currentTitle:Q,currentSiteSlug:X}=$;if(X?.trim())return null;if(Z===void 0||Z===Q)return null;let Y=Q?.trim().toLowerCase()??"";return CX(Y)?Y:null}var gj$=D(()=>{IN()});import{z as y61}from"zod";var c_4,l_4,zP;var g61=D(()=>{M0();fa();LL();M61();gj$();c_4=y61.object({id:y61.string().describe("ID of the virtual MCP to update"),data:vY0.describe("Partial virtual MCP data to update")}),l_4=y61.object({item:zQ.describe("The updated virtual MCP entity")}),zP=h({name:"COLLECTION_VIRTUAL_MCP_UPDATE",description:"Update a Virtual MCP's name, slug, connection list, or kickstart prompts. Pass `prompts` to replace the agent's conversation starters (full set; empty array clears them).",annotations:{title:"Update Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:c_4,outputSchema:l_4,handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let X=o0(Z);if(!X)throw Error("User ID required to update virtual MCP");let Y=await Z.storage.virtualMcps.findById($.id);if(!Y)throw Error(`Virtual MCP not found: ${$.id}`);if(Y.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${$.id}`);let{prompts:J,metadata:G,...K}=$.data,W=jc(G);if(W&&Y.metadata)W={...Y.metadata,...W};else if(W===null&&Y.metadata?.sandboxMap)W={sandboxMap:Y.metadata.sandboxMap};let H={...K,...G!==void 0?{metadata:W}:{}},F=yj$({nextTitle:H.title,currentTitle:Y.title,currentSiteSlug:Y.metadata?.siteSlug});if(F)H.metadata={...Y.metadata,...H.metadata,siteSlug:F};if(H.pinned!==void 0&&H.pinned!==Y.pinned)FW0(Z);if(H.connections?.length)await UW0(Z,Q.id,H.connections.map((N)=>N.connection_id));let U=await Z.storage.virtualMcps.update($.id,X,H);if(J!==void 0&&Z.orgFs)await wW0(Z.orgFs,$.id,X,J);return{item:U}}})});function u61($){if(!$)return!1;let Z=ba.join("|");return new RegExp(`permission\\s+"?(?:${Z})"?\\s+is not allowed`,"i").test($)||/permissions exceed what the github app/i.test($)}function hj$($){let Z={...$};for(let Q of ba)Z[Q]="read";return Z}async function uj$($,Z){let Q={...Z};for(;;){let X=await $(Q);if(!X.isError)return{result:X,grantedPermissions:Q};let Y=X.content?.find((W)=>W.type==="text")?.text,J=ba.find((W)=>(W in Q));if(!J||!u61(Y))return{result:X,grantedPermissions:Q};let{[J]:G,...K}=Q;Q=K}}function m_4($){if(!$||typeof $!=="object"||Array.isArray($))return EW0;let Z=$;if(Object.values(Z).some((Q)=>typeof Q!=="string"))return EW0;return Z}function d_4($){if(typeof $!=="number"||!Number.isFinite($)||!Number.isInteger($)||$<=0)return;return $}function J9($){let Z=$.metadata?.repoScope;if(!Z||typeof Z.installationId!=="number"||!Number.isFinite(Z.installationId)||!Number.isInteger(Z.installationId)||Z.installationId<=0||typeof Z.owner!=="string"||typeof Z.repo!=="string"||Z.owner.length===0||Z.repo.length===0)return null;let Q=d_4(Z.repositoryId);return{sourceConnectionId:typeof Z.sourceConnectionId==="string"?Z.sourceConnectionId:void 0,installationId:Z.installationId,repositoryId:Q,owner:Z.owner,repo:Z.repo,permissions:m_4(Z.permissions),grantProvider:Z.grantProvider==="github-mcp"?"github-mcp":void 0}}function qL($){return $.metadata?.orgShared===!0}function cj$($){let Z=new Set,Q=[];for(let X of $??[]){if(X.status!=="active")continue;let Y=J9(X);if(Y===null)continue;let J=h61(Y.owner,Y.repo);if(Z.has(J))continue;Z.add(J),Q.push(`${Y.owner}/${Y.repo}`)}return Q}function zW0($,Z,Q){let X=h61(Z,Q),Y=($??[]).filter((J)=>{if(J.status&&J.status!=="active")return!1;let G=J9(J);return G!==null&&h61(G.owner,G.repo)===X});return Y.find(qL)??Y[0]??null}var EW0,ba,h61=($,Z)=>`${$}/${Z}`.toLowerCase();var TY=D(()=>{EW0={contents:"write",metadata:"read",pull_requests:"write",issues:"write",checks:"read",deployments:"read"},ba=["deployments","checks"]});function lj$($){return IQ($)!==null||KG0($)!==null}var mj$=D(()=>{x8()});import{z as c61}from"zod";var i_4,p_4,PP;var l61=D(()=>{TY();tK();M0();fa();LL();mj$();i_4=c61.object({id:c61.string().describe("ID of the virtual MCP to delete")}),p_4=c61.object({item:zQ.describe("The deleted virtual MCP entity")}),PP=h({name:"COLLECTION_VIRTUAL_MCP_DELETE",description:"Permanently delete a Virtual MCP and its virtual tools.",annotations:{title:"Delete Virtual MCP",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:i_4,outputSchema:p_4,handler:async($,Z)=>{r(Z);let Q=t(Z);if(await Z.access.check(),lj$($.id))throw Error(`Virtual MCP not found: ${$.id}`);let X=await Z.storage.virtualMcps.findById($.id);if(!X)throw Error(`Virtual MCP not found: ${$.id}`);if(X.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${$.id}`);if(await Z.storage.virtualMcps.delete($.id),Z.orgFs)await S61(Z.orgFs,$.id,o0(Z)??"system");let Y=X.metadata?.githubRepo?.connectionId;if(Y)try{let J=await Z.storage.connections.findById(Y,Q.id),G=J&&(qL(J)||(await Z.storage.virtualMcps.listByConnectionId(Q.id,Y)).length>0||await Z.storage.connections.isReferencedByThread(Y));if(J&&J9(J)&&!G){let W=await new C5(Z.db,Z.vault).get(Y);if(W?.accessToken)try{await fetch("https://api.github.com/installation/token",{method:"DELETE",headers:{Authorization:`Bearer ${W.accessToken}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(5000)})}catch{}await Z.storage.connections.delete(Y)}}catch(J){console.error("[VIRTUAL_MCP_DELETE] failed to tear down repo-scoped connection",{childConnectionId:Y,error:J.message})}return{item:X}}})});import{z as RY}from"zod";var n_4,AP;var m61=D(()=>{M0();n_4=RY.object({id:RY.string(),virtualMcpId:RY.string(),pluginId:RY.string(),connectionId:RY.string().nullable(),settings:RY.record(RY.string(),RY.unknown()).nullable(),createdAt:RY.string(),updatedAt:RY.string()}),AP=h({name:"VIRTUAL_MCP_PLUGIN_CONFIG_GET",description:"Get a plugin's current configuration for a specific virtual MCP.",annotations:{title:"Get Virtual MCP Plugin Config",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:RY.object({virtualMcpId:RY.string().describe("Virtual MCP ID"),pluginId:RY.string().describe("Plugin ID")}),outputSchema:RY.object({config:n_4.nullable()}),handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let{virtualMcpId:X,pluginId:Y}=$,J=await Z.storage.connections.findById(X);if(!J||J.organization_id!==Q.id)return{config:null};if(J.connection_type!=="VIRTUAL")return{config:null};let G=await Z.storage.virtualMcpPluginConfigs.get(X,Y);if(!G)return{config:null};return{config:{id:G.id,virtualMcpId:G.virtualMcpId,pluginId:G.pluginId,connectionId:G.connectionId,settings:G.settings,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}})});import{z as K7}from"zod";var t_4,TP;var d61=D(()=>{M0();BP();V5();t_4=K7.object({id:K7.string(),virtualMcpId:K7.string(),pluginId:K7.string(),connectionId:K7.string().nullable(),settings:K7.record(K7.string(),K7.unknown()).nullable(),createdAt:K7.string(),updatedAt:K7.string()}),TP=h({name:"VIRTUAL_MCP_PLUGIN_CONFIG_UPDATE",description:"Set or update a plugin's configuration for a specific virtual MCP.",annotations:{title:"Update Virtual MCP Plugin Config",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:K7.object({virtualMcpId:K7.string().describe("Virtual MCP ID"),pluginId:K7.string().describe("Plugin ID"),connectionId:K7.string().nullable().optional().describe("MCP connection to bind"),settings:K7.record(K7.string(),K7.unknown()).nullable().optional().describe("Plugin-specific settings")}),outputSchema:K7.object({config:t_4}),handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let{virtualMcpId:X,pluginId:Y,connectionId:J,settings:G}=$,K=o0(Z),W=await Z.storage.connections.findById(X);if(!W)throw Error(`Connection not found: ${X}`);if(W.organization_id!==Q.id)throw Error(`Connection not found: ${X}`);if(W.connection_type!=="VIRTUAL")throw Error(`Connection not found: ${X}`);let H=J?await Z.storage.connections.findById(J):null;if(J&&H&&H.organization_id!==Q.id)throw Error(`Connection not found: ${J}`);if(J&&W.organization_id&&!H&&AY()&&Bc(J,W.organization_id)){if(!K)throw Error("User ID required to create dev-assets connection");let U=Oc(W.organization_id,l5());await Z.storage.connections.create({...U,organization_id:W.organization_id,created_by:K})}else if(J&&!H)throw Error(`Connection not found: ${J}`);let F=await Z.storage.virtualMcpPluginConfigs.upsert(X,Y,{connectionId:J,settings:G});return{config:{id:F.id,virtualMcpId:F.virtualMcpId,pluginId:F.pluginId,connectionId:F.connectionId,settings:F.settings,createdAt:F.createdAt instanceof Date?F.createdAt.toISOString():F.createdAt,updatedAt:F.updatedAt instanceof Date?F.updatedAt.toISOString():F.updatedAt}}}})});function dj$($,Z){let Q=$!==null&&typeof $==="object"&&!Array.isArray($)?$:null;if(Z===void 0)return Q;return{...Q??{},...Z}}import{z as _X}from"zod";var o_4,RP;var i61=D(()=>{M0();LL();o_4=_X.object({connectionId:_X.string(),toolName:_X.string(),label:_X.string(),icon:_X.string().nullable().optional()}),RP=h({name:"VIRTUAL_MCP_PINNED_VIEWS_UPDATE",description:"Update the pinned sidebar views for a virtual MCP. Replaces all current pins.",annotations:{title:"Update Pinned Views",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:_X.object({virtualMcpId:_X.string().describe("Virtual MCP ID"),pinnedViews:_X.array(o_4).describe("Pinned views to set for the virtual MCP sidebar"),layout:_X.object({defaultMainView:_X.object({type:_X.string(),id:_X.string().optional(),toolName:_X.string().optional()}).nullable().optional(),chatDefaultOpen:_X.boolean().nullable().optional()}).optional()}),outputSchema:_X.object({item:zQ.nullable()}),handler:async($,Z)=>{r(Z);let Q=t(Z);await Z.access.check();let{virtualMcpId:X,pinnedViews:Y,layout:J}=$,G=o0(Z),K=await Z.storage.virtualMcps.findById(X);if(!K)throw Error(`Virtual MCP not found: ${X}`);if(K.organization_id!==Q.id)throw Error(`Virtual MCP not found: ${X}`);let W=K.metadata?.ui??{},H={...W,pinnedViews:Y.length>0?Y:null,layout:dj$(W.layout,J)};return{item:await Z.storage.virtualMcps.update(X,G??"system",{metadata:{...K.metadata,ui:H}})}}})});import{z as qN}from"zod";var r_4,a_4,p61;var ij$=D(()=>{M0();r_4=qN.object({ids:qN.array(qN.string()).max(1000).describe("Virtual MCP ids to look up")}),a_4=qN.object({items:qN.array(qN.object({id:qN.string(),last_used_at:qN.string().optional(),last_used_by:qN.string().optional()}))}),p61=h({name:"VIRTUAL_MCP_LAST_USED_LIST",description:"Get last-used info (timestamp + user) for one or more virtual MCPs, derived from the most recent thread per agent.",annotations:{title:"List Virtual MCP Last Used",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:r_4,outputSchema:a_4,handler:async($,Z)=>{r(Z),t(Z),await Z.access.check();let Q=await Z.storage.threads.findLastUsedByVirtualMcpIds($.ids);return{items:$.ids.map((X)=>({id:X,last_used_at:Q.get(X)?.last_used_at,last_used_by:Q.get(X)?.last_used_by}))}}})});var pj$=D(()=>{C61();v61();f61();g61();l61();m61();d61();i61();ij$()});import{z as CQ}from"zod";var n61;var nj$=D(()=>{U6();M0();n61=h({name:"MONITORING_HEATMAP",description:"Get tool-call volume broken down by agent and tool name, for spotting heavily-used tools per agent.",annotations:{title:"Get Tool-Call Heatmap",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:CQ.object({startDate:CQ.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:CQ.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),virtualMcpIds:CQ.array(CQ.string()).max(100).optional().describe("Filter by specific agent (Virtual MCP) IDs"),excludeConnectionIds:CQ.array(CQ.string()).max(100).optional().describe("Exclude tool calls from these connection IDs"),limit:CQ.number().int().min(1).max(1000).optional().describe("Max number of (agent, tool) cells to return")}),outputSchema:CQ.object({cells:CQ.array(CQ.object({virtualMcpId:CQ.string().nullable(),toolName:CQ.string(),calls:CQ.number(),errors:CQ.number(),outputSize:CQ.number().describe("Sum of tool-output character length \u2014 a proxy for context weight, not LLM token count")}))}),handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),await GY(),Z.storage.monitoring.queryToolCallHeatmap({organizationId:Q.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{virtualMcpIds:$.virtualMcpIds,excludeConnectionIds:$.excludeConnectionIds},limit:$.limit})}})});import{z as _5}from"zod";var t61;var tj$=D(()=>{U6();M0();t61=h({name:"MONITORING_LOG_GET",description:"Get a single monitoring log by ID with full input and output data.",annotations:{title:"Get Monitoring Log",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_5.object({id:_5.string().describe("Log ID to fetch")}),outputSchema:_5.object({log:_5.object({id:_5.string().optional(),organizationId:_5.string(),connectionId:_5.string(),toolName:_5.string(),input:_5.record(_5.string(),_5.unknown()),output:_5.record(_5.string(),_5.unknown()),isError:_5.boolean(),errorMessage:_5.string().nullish(),durationMs:_5.number(),timestamp:_5.string(),userId:_5.string().nullish(),requestId:_5.string(),userAgent:_5.string().nullish(),virtualMcpId:_5.string().nullish(),properties:_5.record(_5.string(),_5.string()).nullish()}).nullable().describe("The monitoring log, or null if not found")}),handler:async($,Z)=>{await Z.access.check(),await GY();let Q=t(Z),X=await Z.storage.monitoring.getById(Q.id,$.id);if(!X)return{log:null};return{log:{...X,timestamp:X.timestamp instanceof Date?X.timestamp.toISOString():X.timestamp}}}})});import{z as A8}from"zod";var e_4,o61;var oj$=D(()=>{U6();M0();e_4=A8.object({id:A8.string().optional().describe("Unique log identifier"),organizationId:A8.string().describe("Organization ID"),connectionId:A8.string().describe("Connection ID"),toolName:A8.string().describe("Name of the tool that was called"),isError:A8.boolean().describe("Whether the call resulted in an error"),errorMessage:A8.string().nullish().describe("Error message if applicable"),durationMs:A8.number().describe("Call duration in milliseconds"),timestamp:A8.string().describe("ISO 8601 timestamp of the call"),userId:A8.string().nullish().describe("User who triggered the call"),requestId:A8.string().describe("Unique request identifier"),userAgent:A8.string().nullish().describe("Client identifier (x-studio-client header)"),virtualMcpId:A8.string().nullish().describe("Virtual MCP (Agent) ID if routed through an agent"),properties:A8.record(A8.string(),A8.string()).nullish().describe("Custom key-value metadata attached to the log")}),o61=h({name:"MONITORING_LOGS_LIST",description:"List monitoring logs for tool calls with filtering and pagination.",annotations:{title:"List Monitoring Logs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:A8.object({connectionId:A8.string().optional().describe("Filter by connection ID"),excludeConnectionIds:A8.array(A8.string()).optional().describe("Exclude logs from these connection IDs (e.g. system connections)"),virtualMcpId:A8.string().optional().describe("Filter by Virtual MCP (Agent) ID"),toolName:A8.string().optional().describe("Filter by tool name"),isError:A8.boolean().optional().describe("Filter by error status"),startDate:A8.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:A8.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),limit:A8.number().default(20).describe("Maximum number of results"),offset:A8.number().default(0).describe("Offset for pagination"),properties:A8.record(A8.string(),A8.string()).optional().describe("Filter by exact property key=value matches"),propertyKeys:A8.array(A8.string()).optional().describe("Filter by logs that have these property keys"),propertyPatterns:A8.record(A8.string(),A8.string()).optional().describe("Filter by property value patterns (SQL LIKE, use % as wildcard)"),propertyInValues:A8.record(A8.string(),A8.string()).optional().describe("Filter by exact match within comma-separated values (e.g., user_tags in 'Engineering')")}),outputSchema:A8.object({logs:A8.array(e_4).describe("Array of monitoring logs"),total:A8.number().describe("Total number of logs matching filters"),offset:A8.number().describe("Current offset for pagination"),limit:A8.number().describe("Current limit for pagination")}),handler:async($,Z)=>{await Z.access.check(),await GY();let Q=t(Z),Y=$.properties||$.propertyKeys||$.propertyPatterns||$.propertyInValues?{properties:$.properties,propertyKeys:$.propertyKeys,propertyPatterns:$.propertyPatterns,propertyInValues:$.propertyInValues}:void 0,J={organizationId:Q.id,connectionId:$.connectionId,excludeConnectionIds:$.excludeConnectionIds,virtualMcpId:$.virtualMcpId,toolName:$.toolName,isError:$.isError,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,limit:$.limit,offset:$.offset,propertyFilters:Y},G=await Z.storage.monitoring.query(J);return{logs:G.logs.map(({input:K,output:W,...H})=>({...H,timestamp:H.timestamp instanceof Date?H.timestamp.toISOString():H.timestamp})),total:G.total,offset:$.offset,limit:$.limit}}})});import{z as O$}from"zod";var r61;var rj$=D(()=>{U6();M0();r61=h({name:"MONITORING_STATS",description:"Get aggregated statistics (counts, latency, error rates) for tool call monitoring.",annotations:{title:"Get Monitoring Stats",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:O$.object({startDate:O$.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:O$.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)"),interval:O$.string().regex(/^\d+[mhd]$/).optional().describe("Bucket interval for timeseries data (e.g. 1m, 5m, 2h, 1d). When provided, returns timeseries array."),connectionIds:O$.array(O$.string()).max(100).optional().describe("Filter by specific connection IDs (max 100)"),excludeConnectionIds:O$.array(O$.string()).max(100).optional().describe("Exclude specific connection IDs (max 100)"),toolNames:O$.array(O$.string()).max(100).optional().describe("Filter by specific tool names (max 100)"),status:O$.enum(["success","error"]).optional().describe("Filter metrics by execution status"),topN:O$.number().int().min(1).max(20).optional().describe("When provided with interval, also return top tools and their timeseries"),userIds:O$.array(O$.string()).max(100).optional().describe("Filter LLM usage by user IDs (only applied when llmUsage is true)"),llmUsage:O$.boolean().optional().describe("Aggregate LLM-call usage (tokens + USD cost) from raw log rows for the given connection. Returns token/cost totals and timeseries. Requires interval.")}),outputSchema:O$.object({totalCalls:O$.number().describe("Total number of tool calls"),errorRate:O$.number().optional().describe("Error rate as a decimal (0 to 1)"),avgDurationMs:O$.number().describe("Average call duration in milliseconds"),errorRatePercent:O$.string().optional().describe("Error rate as a percentage string"),totalErrors:O$.number().optional().describe("Total number of errors"),p50DurationMs:O$.number().optional().describe("50th percentile duration in milliseconds"),p95DurationMs:O$.number().optional().describe("95th percentile duration in milliseconds"),connectionBreakdown:O$.array(O$.object({connectionId:O$.string(),calls:O$.number(),errors:O$.number(),errorRate:O$.number(),avgDurationMs:O$.number()})).optional().describe("Per-connection metric breakdown"),totalInputTokens:O$.number().optional().describe("Total input tokens (LLM usage mode)"),totalOutputTokens:O$.number().optional().describe("Total output tokens (LLM usage mode)"),totalTokens:O$.number().optional().describe("Total tokens (LLM usage mode)"),totalCostUsd:O$.number().optional().describe("Total USD cost (LLM usage mode; only non-zero for providers that report cost)"),topTools:O$.array(O$.object({toolName:O$.string(),connectionId:O$.string().nullable(),calls:O$.number(),inputTokens:O$.number().optional(),outputTokens:O$.number().optional(),costUsd:O$.number().optional()})).optional().describe("Top tools ranked by calls"),topToolsTimeseries:O$.array(O$.object({timestamp:O$.string(),toolName:O$.string(),calls:O$.number(),errors:O$.number(),avg:O$.number(),p95:O$.number()})).optional().describe("Per-tool metric timeseries for the top tools"),timeseries:O$.array(O$.object({timestamp:O$.string(),calls:O$.number(),errors:O$.number(),errorRate:O$.number(),avg:O$.number(),p50:O$.number(),p95:O$.number(),inputTokens:O$.number().optional(),outputTokens:O$.number().optional(),totalTokens:O$.number().optional(),costUsd:O$.number().optional()})).optional().describe("Timeseries data points bucketed by interval")}),handler:async($,Z)=>{let Q=t(Z);if(await Z.access.check(),await GY(),$.interval&&$.llmUsage)return Z.storage.monitoring.queryLlmUsageStats({organizationId:Q.id,interval:$.interval,connectionId:$.connectionIds?.[0]??"decopilot",startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,userIds:$.userIds,topN:$.topN});if($.interval){let Y=await Z.storage.monitoring.queryMetricTimeseries({organizationId:Q.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});if(!$.topN)return Y;let J=await Z.storage.monitoring.queryMetricTopToolsTimeseries({organizationId:Q.id,interval:$.interval,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0,topN:$.topN,filters:{connectionIds:$.connectionIds,excludeConnectionIds:$.excludeConnectionIds,toolNames:$.toolNames,status:$.status}});return{...Y,topTools:J.topTools,topToolsTimeseries:J.timeseries}}let X=await Z.storage.monitoring.getStats({organizationId:Q.id,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0});return{...X,errorRatePercent:(X.errorRate*100).toFixed(2)}}})});import{z as vX}from"zod";var a61;var aj$=D(()=>{U6();M0();a61=h({name:"MONITORING_THREAD_USAGE",description:"Aggregate LLM token usage and USD cost per thread for the given thread IDs.",annotations:{title:"Get Thread Usage",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:vX.object({threadIds:vX.array(vX.string()).min(1).max(500).describe("Thread IDs to aggregate usage for (max 500)"),connectionId:vX.string().optional().describe("LLM connection ID (defaults to 'decopilot')"),startDate:vX.string().datetime().optional().describe("Filter by start date (ISO 8601 datetime string)"),endDate:vX.string().datetime().optional().describe("Filter by end date (ISO 8601 datetime string)")}),outputSchema:vX.object({items:vX.array(vX.object({threadId:vX.string(),calls:vX.number(),inputTokens:vX.number(),outputTokens:vX.number(),totalTokens:vX.number(),costUsd:vX.number()}))}),handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),await GY(),{items:await Z.storage.monitoring.queryThreadUsage({organizationId:Q.id,connectionId:$.connectionId??"decopilot",threadIds:$.threadIds,startDate:$.startDate?new Date($.startDate):void 0,endDate:$.endDate?new Date($.endDate):void 0})}}})});var sj$=D(()=>{nj$();tj$();oj$();rj$();aj$()});function PW0($){return typeof $==="string"&&Zv4.has($.trim().toLowerCase())}var Zv4;var s61=D(()=>{Zv4=new Set([".well-known","_admin","api","auth","choose-editor","cli","commerce-onboarding","dbos-queue-depth","health","hosted-run-pending","login","mcp","metrics","oauth","oauth-proxy","onboarding","org","report","reset-password"])});import{z as gJ}from"zod";var e61;var ej$=D(()=>{M0();s61();e61=h({name:"ORGANIZATION_CREATE",description:"Create a new organization. The caller becomes the owner automatically.",annotations:{title:"Create Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!1,openWorldHint:!1},inputSchema:gJ.object({slug:gJ.string().min(1).max(50).regex(/^[a-z0-9-]+$/,"Slug must be lowercase alphanumeric with hyphens").refine(($)=>!PW0($),"Slug is reserved by Studio"),name:gJ.string().min(1).max(255),description:gJ.string().optional()}),outputSchema:gJ.object({id:gJ.string(),name:gJ.string(),slug:gJ.string(),logo:gJ.string().nullable().optional(),metadata:gJ.any().optional(),createdAt:gJ.string().datetime().describe("ISO 8601 timestamp"),members:gJ.array(gJ.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=o0(Z);if(!Q)throw Error("User ID required to create organization");let X=await Z.boundAuth.organization.create({name:$.name,slug:$.slug,metadata:$.description?{description:$.description}:void 0,userId:Q});if(!X)throw Error("Failed to create organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as rH}from"zod";var $51;var $E$=D(()=>{M0();$51=h({name:"ORGANIZATION_LIST",description:"List organizations the current user belongs to.",annotations:{title:"List Organizations",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:rH.object({}),outputSchema:rH.object({organizations:rH.array(rH.object({id:rH.string(),name:rH.string(),slug:rH.string(),logo:rH.string().nullable().optional(),metadata:rH.any().optional(),createdAt:rH.string().datetime().describe("ISO 8601 timestamp")}))}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),!o0(Z))throw Error("User ID required to list organizations");return{organizations:(await Z.boundAuth.organization.list()).map((X)=>({...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}))}}})});import{z as W3}from"zod";var Z51;var ZE$=D(()=>{M0();Z51=h({name:"ORGANIZATION_GET",description:"Get an organization's details, members, and settings by slug or ID.",annotations:{title:"Get Organization",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:W3.object({}),outputSchema:W3.object({id:W3.string(),name:W3.string(),slug:W3.string(),logo:W3.string().nullable().optional(),metadata:W3.any().optional(),createdAt:W3.string().datetime().describe("ISO 8601 timestamp"),members:W3.array(W3.any()).optional(),invitations:W3.array(W3.any()).optional()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.boundAuth.organization.get(Q);if(!X)throw Error("No active organization found");let Y=new Date,J=X.invitations?.filter((G)=>new Date(G.expiresAt)>Y);return{...X,invitations:J,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as oK}from"zod";var Q51;var QE$=D(()=>{M0();Q51=h({name:"ORGANIZATION_UPDATE",description:"Update an organization's name or description.",annotations:{title:"Update Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:oK.object({id:oK.string(),name:oK.string().min(1).max(255).optional(),description:oK.string().optional()}),outputSchema:oK.object({id:oK.string(),name:oK.string(),slug:oK.string(),logo:oK.string().nullable().optional(),metadata:oK.any().optional(),createdAt:oK.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let Q={};if($.name)Q.name=$.name;if($.description!==void 0){let Y=await Z.boundAuth.organization.get($.id);Q.metadata={...Y?.metadata,description:$.description}}let X=await Z.boundAuth.organization.update({organizationId:$.id,data:Q});if(!X)throw Error("Failed to update organization");return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt}}})});import{z as ya}from"zod";var X51;var XE$=D(()=>{M0();X51=h({name:"ORGANIZATION_DELETE",description:"Archive an organization (soft delete).",annotations:{title:"Delete Organization",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:ya.object({id:ya.string()}),outputSchema:ya.object({success:ya.boolean(),id:ya.string()}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),$.id!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=(await Z.boundAuth.organization.get($.id))?.metadata??{};if(X.archived===!0)return{success:!0,id:$.id};return await Z.boundAuth.organization.update({organizationId:$.id,data:{metadata:{...X,archived:!0,archivedAt:new Date().toISOString()}}}),{success:!0,id:$.id}}})});import{z as i1}from"zod";function xX($,Z){let Q=$?.[Z];return Qv4.has(Z)?Q!==!1:Q===!0}function JE$($){let Z=$?.auto_resolve_conflicts;return typeof Z==="boolean"?Z:$?.auto_merge===!0}var VN=500,ga,ha,MN,YE$,ML,ua,ca,la,IP,Qv4,AW0=262144,Xv4=50,hJ=500,Yv4=5000,VL;var JZ=D(()=>{ga=i1.object({title:i1.string().max(VN),url:i1.string().max(VN),icon:i1.string().max(VN)}),ha=i1.object({registries:i1.record(i1.string().max(VN),i1.object({enabled:i1.boolean()})).describe("Per-registry enabled/disabled state. Key is connection ID. Absent registries are treated as enabled."),blockedMcps:i1.array(i1.string().max(VN)).describe("List of MCP app_name or app_id values to hide from the store.")}),MN=i1.object({keyId:i1.string().max(VN),modelId:i1.string().max(VN),title:i1.string().max(VN).optional()}).nullable(),YE$=i1.enum(["fast","smart","thinking","image","web_search","deep_research"]),ML=i1.enum(["fast","smart","thinking"]),ua=i1.object({tiers:i1.object({fast:MN,smart:MN,thinking:MN,image:MN,web_search:MN,deep_research:MN})}),ca=i1.object({tiers:i1.object({fast:MN.optional(),smart:MN.optional(),thinking:MN.optional()})}),la=i1.object({ids:i1.array(i1.string().max(VN)).describe("Ordered list of custom virtual MCP agent ids to show on the home view.")}),IP=i1.object({demo_mode:i1.boolean().optional().describe("Curated demo org: the commerce connect modal proceeds without a configured required data source."),reports_only:i1.boolean().optional().describe("Curated commerce (reports) look: hides agent navigation, the home Customize button, and the Settings/Automations tabs. Defaulted on for orgs created by commerce onboarding."),reviewer_enabled:i1.boolean().optional().describe("Run the Reviewer on a task's pull request once it's In Review \u2014 it reviews the code with the repo's stack-appropriate skills, fixes what it finds on the PR's own branch, then exercises the change on the deploy preview and approves or hands the card to a human."),qa_agent_enabled:i1.boolean().optional().describe("Deprecated: see reviewer_enabled."),code_reviewer_enabled:i1.boolean().optional().describe("Deprecated: see reviewer_enabled."),auto_merge:i1.boolean().optional().describe("When the Reviewer approves a task's pull request, merge it automatically instead of leaving the merge to a human."),auto_resolve_conflicts:i1.boolean().optional().describe("When an approved pull request can't be merged because it conflicts with its base branch, hand it back to the Super Agent to resolve the conflict (check out the branch, merge the base, push). Unset, it follows `auto_merge`; set it explicitly to run one without the other."),cheap_reviewer_model:i1.boolean().optional().describe("Run the Reviewer on a cheaper model than the Super Agent that wrote the code. On by default \u2014 turning it off trades cost for some review depth."),coding_agent_org_mcps:i1.boolean().optional().describe("Give a coding-agent run (the claude-code harness in a sandbox) every MCP connection in the org as its own MCP server, on top of the narrow task-run surface it always gets. Off by default: each connection is one more server the agent connects to at session start, and all of their tools land in its context."),coding_agents_claude_code:i1.boolean().optional().describe("Run chats on a Code Agent (an agent imported from a GitHub repo) with the claude-code harness inside its sandbox, instead of hosted Decopilot. Off by default: it changes the runtime of every such chat, and claude-code flushes whole turns rather than streaming tokens."),auto_assign_report_tasks_to_super_agent:i1.boolean().optional().describe("When a report import creates a task board item without an assignee, delegate it to the Super Agent automatically instead of leaving it unassigned."),hosting_enabled:i1.boolean().optional().describe("Per-site Hosting tab (deployments, domains, deploy outcomes). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),deco_analytics_enabled:i1.boolean().optional().describe("Per-site Deco Analytics tab (traffic, realtime, usage & limits). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),e2e_enabled:i1.boolean().optional().describe("Per-site E2E tab (end-to-end test runs). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. `HOSTING_CONTROL_PLANE_GA` opens it (and its peers) to every org at once."),monitor_enabled:i1.boolean().optional().describe("Per-site Monitor tab (CDN Performance + Audience from the stats-lake warehouse). Off by default. deco.cx staff and local dev always see it; this flag is the per-client lever to open it to one external org. Its own deployment-wide switch `MONITOR_GA` opens it to every org at once (independent of the control-plane trio)."),delivery_lanes_enabled:i1.boolean().optional().describe("Board lanes for shipping: Approved, Merged and Post-deploy Validation sit between In Review and Done, and a merged pull request lands on Merged instead of Done. For teams whose release process continues after the merge. Off by default \u2014 with it off the board and the state machine behave exactly as if the lanes did not exist."),cms_auto_fresh_branch:i1.boolean().optional().describe("When a user opens the CMS on a branch whose last commit is older than the staleness window (2 days), move the session to a freshly minted branch cut from the default branch. The stale branch is left intact on GitHub. Off by default.")}),Qv4=new Set(["reviewer_enabled","cheap_reviewer_model"]);VL=i1.object({id:i1.string().describe("Brand context ID"),name:i1.string().max(hJ).describe("Company name"),domain:i1.string().max(hJ).describe("Company domain (e.g. example.com)"),overview:i1.string().max(Yv4).describe("Company overview / description"),logo:i1.string().max(hJ).nullable().optional().describe("Logo URL"),favicon:i1.string().max(hJ).nullable().optional().describe("Favicon URL"),ogImage:i1.string().max(hJ).nullable().optional().describe("OG image URL"),fonts:i1.object({heading:i1.string().max(hJ).optional().describe("Font family for headings"),body:i1.string().max(hJ).optional().describe("Font family for body text"),code:i1.string().max(hJ).optional().describe("Font family for code / monospace")}).nullable().optional().describe("Font families by semantic role"),colors:i1.object({primary:i1.string().max(hJ).optional().describe("Primary brand color (hex)"),secondary:i1.string().max(hJ).optional().describe("Secondary brand color (hex)"),accent:i1.string().max(hJ).optional().describe("Accent / highlight color (hex)"),background:i1.string().max(hJ).optional().describe("Background color (hex)"),foreground:i1.string().max(hJ).optional().describe("Foreground / text color (hex)")}).nullable().optional().describe("Semantic color palette"),images:i1.array(i1.record(i1.string(),i1.unknown())).max(Xv4).nullable().optional().refine(($)=>$===null||$===void 0||JSON.stringify($).length<=AW0,{message:`images must serialize to at most ${AW0} bytes`}).describe("Brand images"),metadata:i1.record(i1.string(),i1.unknown()).nullable().optional().refine(($)=>$===null||$===void 0||JSON.stringify($).length<=AW0,{message:`metadata must serialize to at most ${AW0} bytes`}).describe("Extra design tokens (typography, components, spacing, layout, tone, etc.)"),archivedAt:i1.string().nullable().optional().describe("Archive timestamp (null to unarchive)"),isDefault:i1.boolean().optional().describe("Whether this is the default brand for the organization")})});import{z as kL}from"zod";var Y51;var GE$=D(()=>{M0();JZ();Y51=h({name:"ORGANIZATION_SETTINGS_GET",description:"Get organization-level settings including sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Get Organization Settings",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:kL.object({}),outputSchema:kL.object({organizationId:kL.string(),sidebar_items:kL.array(ga).nullable().optional(),enabled_plugins:kL.array(kL.string()).nullable().optional(),registry_config:ha.nullable().optional(),simple_mode:ua.nullable().optional(),default_home_agents:la.nullable().optional(),flags:IP.nullable().optional(),createdAt:kL.string().datetime().optional().describe("ISO 8601 timestamp"),updatedAt:kL.string().datetime().optional().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.organizationSettings.get(Q);if(!X)return{organizationId:Q};return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as GZ}from"zod";var Jv4=50,Gv4=500,Kv4=100,Wv4=200,KE$=200,TW0=500,J51;var WE$=D(()=>{M0();JZ();J51=h({name:"ORGANIZATION_SETTINGS_UPDATE",description:"Update organization-level settings such as sidebar configuration, store registry settings, simple model mode, and default home agents.",annotations:{title:"Update Organization Settings",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:GZ.object({organizationId:GZ.string(),sidebar_items:GZ.array(ga).max(Jv4).optional(),enabled_plugins:GZ.array(GZ.string().max(TW0)).max(Wv4).optional(),registry_config:ha.extend({registries:GZ.record(GZ.string().max(TW0),GZ.object({enabled:GZ.boolean()})).refine(($)=>Object.keys($).length<=KE$,{message:`registries must have at most ${KE$} entries`}),blockedMcps:GZ.array(GZ.string().max(TW0)).max(Gv4)}).optional(),simple_mode:ua.optional(),default_home_agents:la.extend({ids:GZ.array(GZ.string().max(TW0)).max(Kv4)}).optional(),flags:IP.strict().optional().describe("Org boolean toggles. Shallow-merged into the stored flags: keys you pass win (explicit false persists), omitted keys keep their value.")}),outputSchema:GZ.object({organizationId:GZ.string(),sidebar_items:GZ.array(ga).nullable().optional(),enabled_plugins:GZ.array(GZ.string()).nullable().optional(),registry_config:ha.nullable().optional(),simple_mode:ua.nullable().optional(),default_home_agents:la.nullable().optional(),flags:IP.nullable().optional(),createdAt:GZ.string().datetime().describe("ISO 8601 timestamp"),updatedAt:GZ.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{if(r(Z),await Z.access.check(),t(Z).id!==$.organizationId)throw Error("Cannot update settings for a different organization");let X=await Z.storage.organizationSettings.upsert($.organizationId,{sidebar_items:$.sidebar_items,enabled_plugins:$.enabled_plugins,registry_config:$.registry_config,simple_mode:$.simple_mode,default_home_agents:$.default_home_agents,flags:$.flags});return{...X,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as rK}from"zod";var HE$,G51,K51;var FE$=D(()=>{M0();JZ();HE$=VL.extend({organizationId:rK.string(),archivedAt:rK.string().nullable().optional().describe("ISO 8601 timestamp"),createdAt:rK.string().describe("ISO 8601 timestamp"),updatedAt:rK.string().describe("ISO 8601 timestamp")}),G51=h({name:"BRAND_CONTEXT_LIST",description:"List all brand contexts (company profiles) for the current organization.",annotations:{title:"List Brand Contexts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:rK.object({includeArchived:rK.boolean().optional().describe("Include archived brands in the list")}),outputSchema:rK.object({items:rK.array(HE$)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(Q,{includeArchived:$.includeArchived})).map((Y)=>({...Y,archivedAt:Y.archivedAt instanceof Date?Y.archivedAt.toISOString():Y.archivedAt,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt,updatedAt:Y.updatedAt instanceof Date?Y.updatedAt.toISOString():Y.updatedAt}))}}}),K51=h({name:"BRAND_CONTEXT_GET",description:"Get a specific brand context by ID.",annotations:{title:"Get Brand Context",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:rK.object({id:rK.string().describe("Brand context ID")}),outputSchema:HE$.extend({organizationId:rK.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.get($.id,Q);if(!X)throw Error("Brand context not found");return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}})});import{z as qP}from"zod";var UE$,W51,H51,F51;var NE$=D(()=>{M0();JZ();UE$=VL.extend({organizationId:qP.string(),createdAt:qP.string().describe("ISO 8601 timestamp"),updatedAt:qP.string().describe("ISO 8601 timestamp")}),W51=h({name:"BRAND_CONTEXT_CREATE",description:"Create a new brand context (company profile) for the current organization.",annotations:{title:"Create Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!1},inputSchema:VL.omit({id:!0}),outputSchema:UE$,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=await Z.storage.brandContext.create(Q,{name:$.name,domain:$.domain,overview:$.overview,logo:$.logo??null,favicon:$.favicon??null,ogImage:$.ogImage??null,fonts:$.fonts??null,colors:$.colors??null,images:$.images??null,metadata:$.metadata??null});return{...X,archivedAt:X.archivedAt instanceof Date?X.archivedAt.toISOString():X.archivedAt,createdAt:X.createdAt instanceof Date?X.createdAt.toISOString():X.createdAt,updatedAt:X.updatedAt instanceof Date?X.updatedAt.toISOString():X.updatedAt}}}),H51=h({name:"BRAND_CONTEXT_UPDATE",description:"Update an existing brand context by ID.",annotations:{title:"Update Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:VL.partial().required({id:!0}),outputSchema:UE$,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,Q))throw Error("Brand context not found");let{id:Y,...J}=$;if(J.isDefault===!0)await Z.storage.brandContext.setDefault(Y,Q);let G=await Z.storage.brandContext.update(Y,Q,{name:J.name,domain:J.domain,overview:J.overview,logo:J.logo!==void 0?J.logo??null:void 0,favicon:J.favicon!==void 0?J.favicon??null:void 0,ogImage:J.ogImage!==void 0?J.ogImage??null:void 0,fonts:J.fonts!==void 0?J.fonts??null:void 0,colors:J.colors!==void 0?J.colors??null:void 0,images:J.images!==void 0?J.images??null:void 0,metadata:J.metadata!==void 0?J.metadata??null:void 0,archivedAt:J.archivedAt!==void 0?J.archivedAt??null:void 0,isDefault:J.isDefault===!1?!1:void 0});return{...G,archivedAt:G.archivedAt instanceof Date?G.archivedAt.toISOString():G.archivedAt,createdAt:G.createdAt instanceof Date?G.createdAt.toISOString():G.createdAt,updatedAt:G.updatedAt instanceof Date?G.updatedAt.toISOString():G.updatedAt}}}),F51=h({name:"BRAND_CONTEXT_DELETE",description:"Archive a brand context by ID (soft delete).",annotations:{title:"Archive Brand Context",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:qP.object({id:qP.string().describe("Brand context ID")}),outputSchema:qP.object({success:qP.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(!await Z.storage.brandContext.get($.id,Q))throw Error("Brand context not found");return await Z.storage.brandContext.update($.id,Q,{archivedAt:new Date().toISOString(),isDefault:!1}),{success:!0}}})});async function RW0($,Z,Q){let X=$.trim();if(!X.startsWith("http"))X=`https://${X}`;let Y=await fetch("https://api.firecrawl.dev/v1/scrape",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${Z}`},body:JSON.stringify({url:X,formats:["branding"]})});if(!Y.ok){let N=await Y.text().catch(()=>"");throw Error(`Firecrawl API error: ${Y.status} ${N.slice(0,200)}`)}let J=await Y.json();if(!J.success||!J.data?.branding)return null;let G=J.data.branding,K=J.data.metadata??{},W=Uv4(G,K);return{name:K.title?.split(/[|\u2013\u2014]|\s+-\s+/).map((N)=>N.trim()).filter(Boolean)?.slice().sort((N,B)=>N.length-B.length)[0]??K.ogSiteName??Q??$,domain:$,overview:K.description??"",logo:W.logo,favicon:W.favicon,ogImage:W.ogImage,fonts:W.fonts,colors:W.colors,images:null,metadata:Object.keys(W.metadata).length>0?W.metadata:null}}function Uv4($,Z){let Q=$.images??{},X=$.colors??{},Y={};for(let[F,U]of Object.entries(X))if(typeof U==="string"&&U&&Hv4.has(F))Y[F]=U;let J={},K=($.typography??{}).fontFamilies??{};for(let[F,U]of Object.entries(K))if(typeof U==="string"&&U){let N=Fv4[F.toLowerCase()];if(N&&!J[N])J[N]=U}let W=$.fonts;if(Array.isArray(W))for(let F of W){let U=F.family;if(typeof U==="string"&&U&&!J.body)J.body=U}let H={};for(let F of["typography","components","spacing","layout","animations","icons","tone","personality","colorScheme"])if($[F]!==void 0)H[F]=$[F];return{logo:Q.logo??null,favicon:Q.favicon??null,ogImage:Q.ogImage??Z.ogImage??null,fonts:Object.keys(J).length>0?J:null,colors:Object.keys(Y).length>0?Y:null,metadata:H}}var Hv4,Fv4;var U51=D(()=>{Hv4=new Set(["primary","secondary","accent","background","foreground"]),Fv4={heading:"heading",headings:"heading",head:"heading",title:"heading",body:"body",primary:"body",text:"body",code:"code",monospace:"code",mono:"code"}});import{z as IW0}from"zod";var Nv4,N51;var BE$=D(()=>{M0();U51();JZ();Nv4=VL.pick({id:!0,name:!0,domain:!0,overview:!0,logo:!0,favicon:!0,ogImage:!0,fonts:!0,colors:!0}).extend({success:IW0.boolean()}),N51=h({name:"BRAND_CONTEXT_EXTRACT",description:"Extract brand context (colors, fonts, logos) from a website URL using Firecrawl.",annotations:{title:"Extract Brand Context",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:IW0.object({domain:IW0.string().describe("Website domain to extract brand from"),brandId:IW0.string().optional().describe("Existing brand context ID to update (creates new if omitted)")}),outputSchema:Nv4,modelSummary:($)=>$.success?`Brand saved (id=${$.id}, name=${$.name}, domain=${$.domain}). The UI rendered the logo, colors, fonts, and overview.`:"Brand extraction failed.",handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=Z.firecrawlApiKey;if(!X)throw Error("FIRECRAWL_API_KEY is not configured. Set the environment variable to enable brand extraction.");let Y=await RW0($.domain,X,$.domain);if(!Y)throw Error("Firecrawl did not return branding data for this URL");let J={name:Y.name,domain:Y.domain,overview:Y.overview,logo:Y.logo,favicon:Y.favicon,ogImage:Y.ogImage,fonts:Y.fonts,colors:Y.colors,images:Y.images,metadata:Y.metadata},G=$.brandId?await(async()=>{if(!await Z.storage.brandContext.get($.brandId,Q))throw Error("Brand context not found");return Z.storage.brandContext.update($.brandId,Q,J)})():await Z.storage.brandContext.create(Q,J);return{id:G.id,name:G.name,domain:G.domain,overview:G.overview,logo:G.logo,favicon:G.favicon,ogImage:G.ogImage,fonts:G.fonts,colors:G.colors,success:!0}}})});function OE$($){let Z=$.metadata??{};return{id:$.id,name:$.name,domain:$.domain||void 0,colors:$.colors??void 0,fonts:$.fonts??void 0,assets:$.logo||$.favicon||$.ogImage?{logo:$.logo??void 0,favicon:$.favicon??void 0,ogImage:$.ogImage??void 0}:void 0,overview:$.overview||void 0,tagline:typeof Z.tagline==="string"?Z.tagline:void 0,tone:typeof Z.tone==="string"?Z.tone:void 0,metadata:(()=>{let Q=Object.fromEntries(Object.entries(Z).filter(([X])=>X!=="tagline"&&X!=="tone"));return Object.keys(Q).length>0?Q:void 0})()}}var B51,O51;var DE$=D(()=>{N61();M0();B51=h({name:"BRAND_GET",description:"Get a brand context by ID. Omit the ID to get the default brand for the organization.",annotations:{title:"Get Brand",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:sK0,outputSchema:Ia,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");let X=$.id?await Z.storage.brandContext.get($.id,Q):await Z.storage.brandContext.getDefault(Q);if(!X)throw Error($.id?"Brand not found":"No default brand configured");return OE$(X)}}),O51=h({name:"BRAND_LIST",description:"List all active brands for the current organization.",annotations:{title:"List Brands",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:eK0,outputSchema:$W0,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{items:(await Z.storage.brandContext.list(Q)).map(OE$)}}})});import{resolveTxt as Bv4}from"dns/promises";function D51($){return`${Ov4}.${$.toLowerCase()}`}function LE$(){return`deco-verify-${crypto.randomUUID().replace(/-/g,"")}`}async function wE$($,Z,Q=Bv4){if(!Z)return!1;try{return(await Q(D51($))).some((Y)=>Y.join("").trim()===Z)}catch{return!1}}var Ov4="_deco-verify";var jE$=()=>{};import{z as p5}from"zod";function SL($){let Z=$.verificationStatus==="pending"&&Boolean($.verificationToken);return{id:$.id,domain:$.domain,joinMode:$.joinMode,verificationStatus:$.verificationStatus,verificationMethod:$.verificationMethod,verifiedAt:$.verifiedAt?new Date($.verifiedAt).toISOString():null,recordName:Z?D51($.domain):null,recordValue:Z?$.verificationToken:null}}function Lv4($){let Z=$.toLowerCase().trim();if(!Dv4.test(Z))throw Error(`Invalid domain format: "${Z}". Must be a valid domain like "acme.com"`);if(aK.has(Z))throw Error(`Cannot claim generic email domain "${Z}". Only corporate domains are allowed.`);return Z}var Dv4,L51,qW0,w51,j51,E51,z51,P51;var EE$=D(()=>{uJ();jE$();M0();Dv4=/^[a-z0-9]([a-z0-9-]*[a-z0-9])?(\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)+$/,L51=p5.enum(["off","auto","request"]),qW0=p5.object({id:p5.string(),domain:p5.string(),joinMode:L51,verificationStatus:p5.enum(["pending","verified"]),verificationMethod:p5.enum(["email","dns"]).nullable(),verifiedAt:p5.string().nullable(),recordName:p5.string().nullable(),recordValue:p5.string().nullable()});w51=h({name:"ORGANIZATION_DOMAIN_LIST",description:"List the email domains claimed by an organization.",annotations:{title:"List Organization Domains",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p5.object({}),outputSchema:p5.object({domains:p5.array(qW0)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{domains:(await Z.storage.organizationDomains.listByOrganizationId(Q.id)).map(SL)}}}),j51=h({name:"ORGANIZATION_DOMAIN_ADD",description:"Claim an email domain for an organization. If the caller's verified email matches the domain it is trusted immediately; otherwise it requires DNS verification.",annotations:{title:"Add Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p5.object({domain:p5.string().min(1).max(255).describe("Domain to claim, e.g. acme.com"),joinMode:L51.optional().describe("Initial join mode (only applied when the domain is trusted immediately via email match).")}),outputSchema:qW0,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=Lv4($.domain),J=Z.auth.user?.email?.split("@")[1]?.toLowerCase(),G=Boolean(Z.auth.user?.emailVerified)&&J===X,K=await Z.storage.organizationDomains.getByOrgAndDomain(Q.id,X);if(K){if(K.verificationStatus!=="verified"&&G){let H=await Z.storage.organizationDomains.markVerified(K.id,"email");return SL(H)}return SL(K)}let W=G?await Z.storage.organizationDomains.add(Q.id,X,{joinMode:$.joinMode??"off",verificationStatus:"verified",verificationMethod:"email"}):await Z.storage.organizationDomains.add(Q.id,X,{joinMode:"off",verificationStatus:"pending",verificationToken:LE$()});return SL(W)}}),E51=h({name:"ORGANIZATION_DOMAIN_UPDATE",description:"Set the join mode for a claimed domain. Discoverable modes (auto/request) require the domain to be verified.",annotations:{title:"Update Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:p5.object({id:p5.string(),joinMode:L51}),outputSchema:qW0,handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.organizationDomains.getById($.id);if(!X||X.organizationId!==Q.id)throw Error("Domain not found");if($.joinMode!=="off"&&X.verificationStatus!=="verified")throw Error("Verify the domain before enabling auto-join or requests.");let Y=await Z.storage.organizationDomains.updateJoinMode($.id,$.joinMode);return SL(Y)}}),z51=h({name:"ORGANIZATION_DOMAIN_VERIFY",description:"Check the DNS TXT record for a pending domain and mark it verified if present.",annotations:{title:"Verify Organization Domain",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},inputSchema:p5.object({id:p5.string()}),outputSchema:p5.object({verified:p5.boolean(),domain:qW0}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.organizationDomains.getById($.id);if(!X||X.organizationId!==Q.id)throw Error("Domain not found");if(X.verificationStatus==="verified")return{verified:!0,domain:SL(X)};if(!X.verificationToken)throw Error("Domain has no pending DNS verification.");if(!await wE$(X.domain,X.verificationToken))return{verified:!1,domain:SL(X)};let J=await Z.storage.organizationDomains.markVerified($.id,"dns");return{verified:!0,domain:SL(J)}}}),P51=h({name:"ORGANIZATION_DOMAIN_REMOVE",description:"Remove a claimed domain from an organization.",annotations:{title:"Remove Organization Domain",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:p5.object({id:p5.string()}),outputSchema:p5.object({success:p5.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.organizationDomains.getById($.id);if(!X||X.organizationId!==Q.id)throw Error("Domain not found");return await Z.storage.organizationDomains.removeById($.id),{success:!0}}})});function CL($){return($ instanceof Error?$.message.toLowerCase():"").includes("already a member")}import{z as h9}from"zod";var wv4,A51,T51,R51;var zE$=D(()=>{M0();l4();wv4=h9.object({id:h9.string(),userId:h9.string(),status:h9.enum(["pending","approved","denied"]),createdAt:h9.string(),user:h9.object({id:h9.string(),name:h9.string(),email:h9.string(),image:h9.string().nullable()}).nullable()}),A51=h({name:"ORGANIZATION_JOIN_REQUEST_LIST",description:"List pending requests to join the organization.",annotations:{title:"List Join Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:h9.object({}),outputSchema:h9.object({requests:h9.array(wv4)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{requests:(await Z.storage.organizationJoinRequests.listPendingWithUser(Q.id)).map((Y)=>({id:Y.id,userId:Y.userId,status:Y.status,createdAt:new Date(Y.createdAt).toISOString(),user:Y.user}))}}}),T51=h({name:"ORGANIZATION_JOIN_REQUEST_APPROVE",description:"Approve a pending join request, adding the user as a member.",annotations:{title:"Approve Join Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:h9.object({requestId:h9.string()}),outputSchema:h9.object({success:h9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.organizationJoinRequests.getById($.requestId);if(!X||X.organizationId!==Q.id)throw Error("Join request not found");if(X.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(!await Z.storage.organizationJoinRequests.decide(X.id,"approved",Y??X.userId))return{success:!0};try{await Z.boundAuth.organization.addMember({organizationId:Q.id,userId:X.userId,role:["user"]})}catch(G){if(!CL(G))throw G}if(Y)_1.capture({distinctId:Y,event:"organization_join_request_approved",groups:{organization:Q.id},properties:{organization_id:Q.id,user_id:X.userId}});return{success:!0}}}),R51=h({name:"ORGANIZATION_JOIN_REQUEST_DENY",description:"Deny a pending join request.",annotations:{title:"Deny Join Request",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:h9.object({requestId:h9.string()}),outputSchema:h9.object({success:h9.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.organizationJoinRequests.getById($.requestId);if(!X||X.organizationId!==Q.id)throw Error("Join request not found");if(X.status!=="pending")throw Error("Join request has already been decided");let Y=o0(Z);if(await Z.storage.organizationJoinRequests.decide(X.id,"denied",Y??X.userId)&&Y)_1.capture({distinctId:Y,event:"organization_join_request_denied",groups:{organization:Q.id},properties:{organization_id:Q.id,user_id:X.userId}});return{success:!0}}})});import{z as IY}from"zod";var I51;var PE$=D(()=>{l4();M0();zX();I51=h({name:"ORGANIZATION_MEMBER_ADD",description:"Invite a member to the organization by email with an assigned role.",annotations:{title:"Add Organization Member",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:IY.object({organizationId:IY.string().optional(),userId:IY.string(),role:IY.array(IY.string())}),outputSchema:IY.object({id:IY.string(),organizationId:IY.string(),userId:IY.string(),role:IY.union([IY.string(),IY.array(IY.string())]),createdAt:IY.string().datetime().describe("ISO 8601 timestamp")}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",Q).executeTakeFirst();if(!uY0(X?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.addMember({organizationId:Q,userId:$.userId,role:$.role});if(!Y)throw Error("Failed to add member");let J=o0(Z);if(J)_1.capture({distinctId:J,event:"organization_member_added",groups:{organization:Q},properties:{organization_id:Q,added_user_id:$.userId,role:$.role}});return{...Y,role:Y.role,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});import{z as Ec}from"zod";var q51;var AE$=D(()=>{l4();M0();q51=h({name:"ORGANIZATION_MEMBER_REMOVE",description:"Remove a member from the organization. Revokes all their access immediately.",annotations:{title:"Remove Organization Member",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:Ec.object({organizationId:Ec.string().optional(),memberIdOrEmail:Ec.string()}),outputSchema:Ec.object({success:Ec.boolean(),memberIdOrEmail:Ec.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.boundAuth.organization.removeMember({organizationId:Q,memberIdOrEmail:$.memberIdOrEmail});Z.invalidateMemberRole?.(X.member.userId,Q);let Y=o0(Z);if(Y)_1.capture({distinctId:Y,event:"organization_member_removed",groups:{organization:Q},properties:{organization_id:Q,member_id_or_email:$.memberIdOrEmail}});return{success:!0,memberIdOrEmail:$.memberIdOrEmail}}})});import{z as _Q}from"zod";var M51;var TE$=D(()=>{M0();M51=h({name:"ORGANIZATION_MEMBER_LIST",description:"List all members in the organization with their roles.",annotations:{title:"List Organization Members",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:_Q.object({limit:_Q.number().int().min(1).max(1000).optional(),offset:_Q.number().int().min(0).optional()}),outputSchema:_Q.object({members:_Q.array(_Q.object({id:_Q.string(),organizationId:_Q.string(),userId:_Q.string(),role:_Q.string(),createdAt:_Q.string().datetime().describe("ISO 8601 timestamp"),user:_Q.object({id:_Q.string(),name:_Q.string(),email:_Q.string(),image:_Q.string().optional()}).optional()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");return{members:((await Z.boundAuth.organization.listMembers({organizationId:Q,limit:$.limit,offset:$.offset}))?.members??[]).map((J)=>({...J,createdAt:J.createdAt instanceof Date?J.createdAt.toISOString():J.createdAt}))}}})});import{z as W7}from"zod";var V51;var RE$=D(()=>{l4();M0();zX();V51=h({name:"ORGANIZATION_MEMBER_UPDATE_ROLE",description:"Change a member's role (e.g., admin, member) within the organization.",annotations:{title:"Update Member Role",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},inputSchema:W7.object({organizationId:W7.string().optional(),memberId:W7.string(),role:W7.array(W7.string())}),outputSchema:W7.object({id:W7.string(),organizationId:W7.string(),userId:W7.string(),role:W7.union([W7.string(),W7.array(W7.string())]),createdAt:W7.string().datetime().describe("ISO 8601 timestamp"),user:W7.object({email:W7.string(),name:W7.string(),image:W7.string().optional()})}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=$.organizationId||Z.organization?.id;if(!Q)throw Error("Organization ID required (no active organization in context)");if(Q!==Z.organization?.id)throw Error("Organization ID does not match authenticated organization");let X=await Z.db.selectFrom("member").select(["role"]).where("userId","=",o0(Z)??"").where("organizationId","=",Q).executeTakeFirst();if(!uY0(X?.role,$.role))throw Error(`Insufficient privileges to assign role "${$.role.join(",")}"`);let Y=await Z.boundAuth.organization.updateMemberRole({organizationId:Q,memberId:$.memberId,role:$.role});if(!Y)throw Error("Failed to update member role");Z.invalidateMemberRole?.(Y.userId,Q);let J=o0(Z);if(J)_1.capture({distinctId:J,event:"organization_member_role_updated",groups:{organization:Q},properties:{organization_id:Q,member_id:$.memberId,target_user_id:Y.userId,new_role:Array.isArray($.role)?$.role.join(","):$.role}});return{...Y,createdAt:Y.createdAt instanceof Date?Y.createdAt.toISOString():Y.createdAt}}})});async function IE$(){if(ma&&Date.now()-ma.fetchedAt<600000)return ma.rate;try{let Z=await(await fetch("https://economia.awesomeapi.com.br/json/last/USD-BRL",{signal:AbortSignal.timeout(5000)})).json(),Q=parseFloat(Z.USDBRL?.bid??"");if(Number.isNaN(Q)||Q<=0)throw Error("Invalid rate");return ma={rate:Q,fetchedAt:Date.now()},Q}catch{return ma?.rate??5.5}}function qE$($,Z,Q){if(Z==="brl")return Math.round($/Q);return $}var ma=null;function k51($,Z="",Q=new URLSearchParams){for(let[X,Y]of Object.entries($)){if(Y===void 0||Y===null)continue;let J=Z?`${Z}[${X}]`:X;if(Array.isArray(Y))Y.forEach((G,K)=>{if(typeof G==="object"&&G!==null)k51(G,`${J}[${K}]`,Q);else Q.append(`${J}[${K}]`,String(G))});else if(typeof Y==="object")k51(Y,J,Q);else Q.append(J,String(Y))}return Q}async function da($,Z){let Q=k0().stripeSecretKey;if(!Q)throw new cJ(503,"billing is not configured");let X=Z?.params?k51(Z.params).toString():void 0,Y=await fetch(`${jv4}${$}`,{method:Z?.method??(X?"POST":"GET"),headers:{Authorization:`Bearer ${Q}`,...X&&{"Content-Type":"application/x-www-form-urlencoded"}},body:X,signal:AbortSignal.timeout(Ev4)}),J=await Y.json().catch(()=>({}));if(!Y.ok){let G=J.error?.message??`HTTP ${Y.status}`;throw new cJ(Y.status,G)}return J}function ME$($){return{billing_address_collection:"required",custom_fields:[{key:zv4,label:{type:"custom",custom:"CPF / CNPJ"},type:"text",optional:!1,text:{minimum_length:Pv4,maximum_length:Av4}}],...$&&{customer_update:{address:"auto",name:"auto"}}}}async function VE$($){let Z=k0().stripeOrgPriceId;if(!Z)throw new cJ(503,"billing is not configured");let Q=await da("/checkout/sessions",{params:{mode:"subscription",...ME$(null),line_items:[{price:Z,quantity:1}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:{orgId:$.organizationId},subscription_data:{metadata:{orgId:$.organizationId}}}});if(!Q.url)throw new cJ(500,"checkout session lacks url");return{url:Q.url}}function Tv4($,Z){return Math.round($*(1+Z/100))}async function kE$($){let Z=Tv4($.amountCents,$.feePercent),Q=qE$($.amountCents,$.currency,await IE$()),X=k0().stripeTopupProductId,Y={kind:"topup",orgId:$.organizationId,creditCents:Q},J=$.currency==="brl"?`Studio AI credits (R$ ${($.amountCents/100).toFixed(2)})`:`Studio AI credits ($${($.amountCents/100).toFixed(2)})`,G=await da("/checkout/sessions",{params:{mode:"payment",...$.customerId&&{customer:$.customerId},...ME$($.customerId),line_items:[{quantity:1,price_data:{currency:$.currency,unit_amount:Z,...X?{product:X}:{product_data:{name:J}}}}],success_url:$.successUrl,cancel_url:$.cancelUrl,metadata:Y,payment_intent_data:{metadata:Y}}});if(!G.url)throw new cJ(500,"checkout session lacks url");return{url:G.url}}async function MW0($){let Z=await da("/billing_portal/sessions",{params:{customer:$.customerId,return_url:$.returnUrl}});if(!Z.url)throw new cJ(500,"portal session lacks url");return{url:Z.url}}async function VW0($){return da(`/subscriptions/${encodeURIComponent($)}`)}async function SE$($){await da(`/subscriptions/${encodeURIComponent($)}`,{method:"DELETE"})}var jv4="https://api.stripe.com/v1",cJ,Ev4=15000,zv4="taxid",Pv4=11,Av4=18;var MP=D(()=>{A$();cJ=class cJ extends Error{status;constructor($,Z){super(`Stripe API ${$}: ${Z}`);this.status=$;this.name="StripeApiError"}}});import{z as S51}from"zod";var C51;var CE$=D(()=>{MP();V5();M0();l4();C51=h({name:"ORGANIZATION_BILLING_CHECKOUT_START",description:"Start the organization's subscription: creates a Stripe Checkout session and returns its URL.",annotations:{title:"Start Billing Checkout",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:S51.object({}),outputSchema:S51.object({url:S51.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=Z.organization?.id,X=Z.organization?.slug;if(!Q||!X)throw Error("Organization context required");let Y=await Z.storage.organizationBilling.getBilling(Q);if(Y?.status==="active")throw Error("This organization already has an active subscription.");if(Y?.stripeSubscriptionId)throw Error("This organization still has a subscription on file \u2014 settle or cancel it before starting a new checkout.");let J=`${M5()}${DL(X,"members")}`,{url:G}=await VE$({organizationId:Q,successUrl:`${J}?checkout=success`,cancelUrl:`${J}?checkout=canceled`});return fJ({event:"subscription_checkout_started",organizationId:Q,...Z.auth?.user?.id?{userId:Z.auth.user.id}:{}}),{url:G}}})});import{z as _51}from"zod";var v51;var _E$=D(()=>{MP();V5();M0();v51=h({name:"ORGANIZATION_BILLING_PORTAL",description:"Open the organization's Stripe billing portal (manage card, invoices, cancellation). Returns the portal URL.",annotations:{title:"Open Billing Portal",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},inputSchema:_51.object({}),outputSchema:_51.object({url:_51.string()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);if(!Q.slug)throw Error("Organization context required");let X=await Z.storage.organizationBilling.getBilling(Q.id);if(!X?.stripeCustomerId)throw Error("This organization has no billing account yet \u2014 subscribe first.");try{return await MW0({customerId:X.stripeCustomerId,returnUrl:`${M5()}${DL(Q.slug,"members")}`})}catch(Y){if(Y instanceof cJ)throw Error(Y.message);throw Y}}})});function kW0($){return x51[$%x51.length]??Rv4}function qY($){return $.createdBy==="system"}function qv4($){if($?.reviewer_enabled===void 0&&$?.qa_agent_enabled===!1&&$?.code_reviewer_enabled===!1)return!1;return xX($,"reviewer_enabled")}function kN($){return qv4($)?aH:[]}function Mv4($){return xX($,"delivery_lanes_enabled")}function eH($){return Mv4($)?"merged":"done"}function vL($,Z){if(!$)return!1;return[sH[Z],...Iv4].some((Q)=>$.startsWith(`${Q}:`))}function SN($,Z){if(Z)return new Date(Z).getTime();let Q=0;for(let X of $){if(X.action!=="status_changed")continue;if(X.data?.to!=="in_review")continue;Q=Math.max(Q,new Date(X.occurredAt).getTime())}return Q}function xL($,Z){let Q=SN($,Z.cycleStartedAt),X=new Map;for(let Y of $){if(Y.action!=="review_approved"&&Y.action!=="review_changes_requested")continue;if(new Date(Y.occurredAt).getTime()<Q)continue;let J=Y.data??{};if(J.reviewer!=="reviewer")continue;if(Y.action==="review_approved"){if(Z?.verifiedOnly&&J.verified!==!0)continue;X.set("reviewer","approved")}else X.set("reviewer","changes_requested")}return X}function _L($,Z,Q){if(Z.length===0)return!1;let X=xL($,Q);return Z.every((Y)=>X.get(Y)==="approved")}function fE$($,Z,Q){return _L($,Z,Q)&&!_L($,Z,{...Q,verifiedOnly:!0})}function bE$($){let Z=null;for(let Q of $){if(Q.action!=="review_approved"&&Q.action!=="review_changes_requested")continue;let X=new Date(Q.occurredAt).getTime();if(Z&&X<Z.at)continue;let Y=Q.data?.notes;Z={at:X,notes:Q.action==="review_changes_requested"&&typeof Y==="string"?Y:null}}return Z?.notes??null}function cE$($,Z=Date.now()){if($.state!==null&&$.state!=="open")return!1;if($.state===null)return!0;if($.checksStatus==="pending")return!0;if($.previewUrl!==null)return!1;let Q=$.updatedAt?Date.parse($.updatedAt):Number.NaN;return Number.isFinite(Q)&&Z-Q<Vv4}var s$="super-agent",x51,Rv4,ia='Your checkout is SHALLOW (`git clone --depth 1`), so it has no merge base and `git diff main...HEAD` (three dots) fails with "fatal: main...HEAD: no merge base". To see a branch diff, either use the two-dot form against the fetched remote ref (`git fetch origin <base> && git diff origin/<base> HEAD`), or deepen first with `git fetch --deepen=100`. Same for `git log main..HEAD` and anything else that needs shared history.',vE$,f51="chore",aH,sH,Iv4,pa="NO VISUAL SURFACE",sK,q$,xE$,SW0,yE$="task-board.item.updated",gE$="task-board.item.deleted",hE$="task-board.item.prs.updated",uE$=4000,Vv4=600000;var R4=D(()=>{JZ();x51=["#9ca3af","#ef4444","#f97316","#f59e0b","#22c55e","#3b82f6","#a855f7","#ec4899"],Rv4=x51[0];vE$="Read the diff with `gh pr diff <number>`. It comes from the API, so it needs no fetch, no merge base, and is unaffected by the shallow checkout. "+"Read it ONCE \u2014 `gh pr diff <number> --name-only` first if you need to size "+"it, then pull the hunks you need per FILE. Do NOT re-run the diff sliced by directory: each slice re-reads bytes you already have into every remaining turn's context, and it is the largest avoidable cost in a review.",aH=["reviewer"],sH={reviewer:"Reviewer"},Iv4=["QA Agent","Code Reviewer"];sK=["triage","todo","in_progress","in_review","approved","merged","post_deploy_validation","done","archived"],q$={intake:"triage",queue:"todo",progress:"in_progress",review:"in_review",archive:"archived"},xE$=sK.map(($,Z)=>({key:$,title:$,position:Z})),SW0=["approved","merged","post_deploy_validation"]});function b51($){return $==="trial"?"trial":"subscription"}function na($,Z,Q,X={}){fJ({event:Z,organizationId:Q.organizationId,...$.auth?.user?.id?{userId:$.auth.user.id}:{},properties:{task_id:Q.id,...X}})}function y51($){return $?.status==="active"||$?.status==="past_due"}function CW0($,Z){if(y51($))return{periodKey:$?.currentPeriodEnd?`sub:${$.currentPeriodEnd.toISOString()}`:"sub:pending",limit:$?.monthlyTaskExecutions??Z.monthlyTaskExecutions,exhaustedReason:"monthly_exhausted"};return{periodKey:"trial",limit:$?.freeTaskExecutions??Z.freeTaskExecutions,exhaustedReason:"trial_exhausted"}}function ta(){let $=k0();return{enforced:$.taskQuotaEnforced,freeTaskExecutions:$.freeTaskExecutions,monthlyTaskExecutions:$.monthlyTaskExecutions,maxRunsPerTask:$.maxRunsPerTask}}function fL(){return{...ta(),maxRunsPerTask:Number.POSITIVE_INFINITY}}async function zc($,Z,Q=ta()){if(!Q.enforced||!qY(Z))return;let X=await $.storage.organizationBilling.taskClaim(Z.id);if(X&&X.runCount>=Q.maxRunsPerTask)throw na($,"task_quota_blocked",Z,{phase:"precheck",reason:"runs_exhausted"}),new fX("runs_exhausted");if(X&&X.state!=="released")return;let Y=await $.storage.organizationBilling.getBilling(Z.organizationId),J=CW0(Y,Q);if(await $.storage.organizationBilling.countTaskClaims(Z.organizationId,J.periodKey)>=J.limit)throw na($,"task_quota_blocked",Z,{phase:"precheck",reason:J.exhaustedReason,billing_mode:b51(J.periodKey),limit:J.limit}),new fX(J.exhaustedReason)}async function lE$($,Z,Q=ta()){if(!Q.enforced||!qY(Z))return"skipped";let X=await $.storage.organizationBilling.getBilling(Z.organizationId),Y=CW0(X,Q),J=await $.storage.organizationBilling.claimTaskUnderLimit(Z.organizationId,Z.id,Y.periodKey,Y.limit,Q.maxRunsPerTask);if(J==="exhausted")throw na($,"task_quota_blocked",Z,{phase:"claim",reason:Y.exhaustedReason,billing_mode:b51(Y.periodKey),limit:Y.limit}),new fX(Y.exhaustedReason);if(J==="runs_exhausted")throw na($,"task_quota_blocked",Z,{phase:"claim",reason:"runs_exhausted"}),new fX("runs_exhausted");if(J==="claimed")na($,"task_quota_claimed",Z,{billing_mode:b51(Y.periodKey),period_key:Y.periodKey,limit:Y.limit});return J}async function mE$($,Z,Q,X){if(X==="skipped")return;await $.rollbackTaskClaim(Z,Q,{releaseSlot:X==="claimed"}).catch((Y)=>console.error("[task-quota] rollback failed (stays charged)",Y))}async function dE$($,Z){let Q=await $.storage.organizationBilling.taskClaim(Z);return!!Q&&Q.state!=="released"}async function iE$($,Z,Q){if(await $.releaseTaskClaim(Z,Q).catch((Y)=>{return console.error("[task-quota] refund failed (stays charged)",Y),!1}))fJ({event:"task_quota_refunded",organizationId:Z,properties:{task_id:Q}})}var kv4="[SUBSCRIPTION_REQUIRED]",Sv4,fX;var H3=D(()=>{R4();l4();A$();Sv4={trial_exhausted:"this organization used its free task executions \u2014 subscribe to keep running tasks",monthly_exhausted:"this organization used its monthly task executions \u2014 more become available next billing cycle",runs_exhausted:"this task reached its execution limit \u2014 create a new task to keep going"};fX=class fX extends Error{reason;constructor($){super(`${kv4} ${Sv4[$]}`);this.reason=$;this.name="TaskQuotaError"}}});import{z as CN}from"zod";var g51;var pE$=D(()=>{M0();H3();g51=h({name:"ORGANIZATION_TASK_QUOTA_GET",description:"Get the organization's auto-task quota: how many runs are used in the current period, the limit, and the subscription's billing status.",annotations:{title:"Get Task Quota",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:CN.object({}),outputSchema:CN.object({enforced:CN.boolean(),billingStatus:CN.string(),subscribed:CN.boolean(),hasBillingAccount:CN.boolean(),used:CN.number(),limit:CN.number(),currentPeriodEnd:CN.string().datetime().nullable()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=ta(),Y=await Z.storage.organizationBilling.getBilling(Q.id),J=CW0(Y,X),G=await Z.storage.organizationBilling.countTaskClaims(Q.id,J.periodKey);return{enforced:X.enforced,billingStatus:Y?.status??"none",subscribed:y51(Y),hasBillingAccount:!!Y?.stripeCustomerId,used:G,limit:J.limit,currentPeriodEnd:Y?.currentPeriodEnd?.toISOString()??null}}})});var nE$=D(()=>{ej$();$E$();ZE$();QE$();XE$();GE$();WE$();FE$();NE$();BE$();DE$();EE$();zE$();PE$();AE$();TE$();RE$();CE$();_E$();pE$()});function F3($){let Z=$?.status;return typeof Z==="number"?Z:null}function tE$($){let Z=$;if(Z?.isRateLimited!==!0)return;return typeof Z.retryAfterMs==="number"?Z.retryAfterMs:null}async function MY($,Z){let Q=await $.getBranch(Z);if(Q)return Q.sha;throw new I1({provider:$.repo.provider,status:404,message:`Branch ${Z} does not exist in ${$.repo.path}`})}var n5;var _W0=D(()=>{Q7();n5=class n5 extends Error{constructor($,Z){super($,Z);this.name="RepoWriteConflict"}}});function vW0($){if($.length===0)return null;let Z=!1;for(let Q of $){if(Q.state!=="completed"){Z=!0;continue}if(Q.conclusion&&_v4.has(Q.conclusion))return"failing"}return Z?"pending":"passing"}var _v4,oa;var xW0=D(()=>{_v4=new Set(["failure","cancelled","timed_out","action_required"]);oa=class oa extends Error{existing;constructor($,Z){super($);this.name="ChangeRequestExists",this.existing=Z}}});import{z as n6}from"zod";var vv4,ra,xv4,fv4,bv4,yv4,oE$,rE$,h51;var aE$=D(()=>{vv4=["github","gitlab"],ra=n6.enum(vv4),xv4=["github_app","oauth","token"],fv4=n6.enum(xv4),bv4=["active","revoked"],yv4=n6.enum(bv4),oE$=n6.object({provider:ra,host:n6.string().min(1).describe("Provider host, e.g. github.com"),path:n6.string().min(1).describe("Full namespace path, e.g. owner/name or group/sub/project")}),rE$=n6.object({id:n6.string(),organizationId:n6.string(),type:ra,host:n6.string(),authKind:fv4,externalAccountId:n6.string().describe("Provider-side account identity: installation id (GitHub App) or user/group id."),login:n6.string().describe("Display login of the account/namespace"),avatarUrl:n6.string().nullable(),installationId:n6.number().nullable().describe("GitHub App installation id; null for other auth kinds."),status:yv4,createdAt:n6.string(),updatedAt:n6.string()}),h51=n6.object({id:n6.string(),organizationId:n6.string(),accountId:n6.string().nullable().describe("Credential-holding account; null for anonymous public clones."),provider:ra,host:n6.string(),path:n6.string(),externalId:n6.string().nullable().describe("Provider repository/project id, when known."),defaultBranch:n6.string().nullable(),webUrl:n6.string(),visibility:n6.enum(["public","private","internal"]).nullable(),createdAt:n6.string(),updatedAt:n6.string()})});function hv4($){let Z=$.toLowerCase();if(Z==="github.com"||Z==="www.github.com")return"github";if(Z==="gitlab.com"||Z==="www.gitlab.com")return"gitlab";if(/(^|[.-])gitlab([.-]|$)/.test(Z))return"gitlab";return null}function eE$($){let Z=$.toLowerCase();return Z.startsWith("www.")?Z.slice(4):Z}function eK($,Z){let Q=$.trim();if(!Q)return null;let X,Y,J=/^(?:[\w.-]+@)?([\w.-]+(?::\d+)?):(?!\/\/)(.+)$/.exec(Q);if(J&&!/^[a-z][a-z0-9+.-]*:\/\//i.test(Q))X=J[1],Y=J[2];else if(/^[a-z][a-z0-9+.-]*:\/\//i.test(Q)){let F;try{F=new URL(Q)}catch{return null}if(!/^(https?|ssh|git)(\+ssh)?:$/.test(F.protocol))return null;X=F.host,Y=F.pathname}else if(Z?.provider)X=Z.host??sE$[Z.provider],Y=Q;else return null;X=eE$(X);let G=Z?.provider??hv4(X);if(!G)return null;let K=Y.split("/").map((F)=>F.trim()).filter(Boolean),W=K.indexOf("-");if(W>=0)K=K.slice(0,W);if(G==="github"){let F=K.findIndex((U,N)=>N>=2&&uv4.has(U));if(F>=0)K=K.slice(0,F);K=K.slice(0,2)}if(K.length<2)return null;let H=K[K.length-1];if(K[K.length-1]=H.replace(/\.git$/i,""),K.some((F)=>F.length===0||F==="."||F===".."))return null;return{provider:G,host:X,path:K.join("/")}}function $W($){return`${$.host.toLowerCase()}/${$.path.toLowerCase()}`}function u51($){let Z=$.path.split("/");return Z[Z.length-1]??$.path}function cv4($){let Z=$.path.lastIndexOf("/");return Z<0?"":$.path.slice(0,Z)}function l7($){return{owner:cv4($),name:u51($)}}function ZW($){return`https://${$.host}/${$.path}`}function c51($,Z){let Q=`${$.host}/${$.path}.git`;if(!Z)return`https://${Q}`;return`https://${gv4[$.provider]}:${encodeURIComponent(Z)}@${Q}`}function _N($,Z){let Q=eE$(Z);if($==="github")return Q==="github.com"?"https://api.github.com":`https://${Q}/api/v3`;return`https://${Q}/api/v4`}function vN($,Z){return{provider:"github",host:sE$.github,path:`${$}/${Z}`}}var sE$,gv4,uv4;var l51=D(()=>{sE$={github:"github.com",gitlab:"gitlab.com"},gv4={github:"x-access-token",gitlab:"oauth2"};uv4=new Set(["tree","blob","pull","pulls","issues","commit","commits","compare","actions","releases","settings","wiki"])});function Pc($,Z){return`${ZW($)}/${lv4[$.provider]}/${Z}`}function dv4($){let Z=$.toLowerCase();return Z==="api.github.com"?"github.com":Z}function iv4($,Z){let Q=Number($[3]);if(!Number.isSafeInteger(Q)||Q<=0)return null;let X=dv4($[1]),Y=$[2],J=Z?decodeURIComponent(Y):Y;if(/^\d+$/.test(J))return null;let G=eK(`https://${X}/${J}`);if(!G)return null;return{repo:G,number:Q,url:Pc(G,Q)}}function m51($){let Z=$.length>$z$?$.slice(0,$z$):$;for(let{re:Q,api:X}of mv4){let Y=Q.exec(Z),J=Y?iv4(Y,X===!0):null;if(J)return J}return null}var lv4,mv4,$z$=200000;var Zz$=D(()=>{l51();lv4={github:"pull",gitlab:"-/merge_requests"};mv4=[{re:/https?:\/\/([^/\s"']+)\/([^\s"']+?)\/-\/merge_requests\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/([^/\s"']+\/[^/\s"']+)\/pull\/(\d+)/},{re:/https?:\/\/([^/\s"']+)\/repos\/([^/\s"']+\/[^/\s"']+)\/pulls\/(\d+)/,api:!0},{re:/https?:\/\/([^/\s"']+)\/api\/v4\/projects\/([^/\s"']+)\/merge_requests\/(\d+)/,api:!0}]});function Xz$($){return Qz$[$]}function Yz$($,Z){let{cli:Q,numberSigil:X}=Qz$[$];return`${Q==="gh"?"PR":"MR"} ${X}${Z}`}var Qz$;var Jz$=D(()=>{Qz$={github:{cli:"gh",changeRequest:"pull request",createCommand:"gh pr create",checkoutCommand:"gh pr checkout",numberSigil:"#"},gitlab:{cli:"glab",changeRequest:"merge request",createCommand:"glab mr create",checkoutCommand:"glab mr checkout",numberSigil:"!"}}});var t5=D(()=>{aE$();l51();Zz$();Jz$()});var $F;var d51=D(()=>{$F={name:"Deco Bot",email:"114028756+decobot@users.noreply.github.com"}});function Gz$($){return $ instanceof Date?$.toISOString():String($)}function aa($){let Z=$.installation_id===null||$.installation_id===void 0?null:Number($.installation_id);return{id:$.id,organizationId:$.organization_id,type:$.type,host:$.host,authKind:$.auth_kind,externalAccountId:$.external_account_id,login:$.login,avatarUrl:$.avatar_url,installationId:Number.isFinite(Z)?Z:null,status:$.status,credentialConnectionId:$.credential_connection_id,createdAt:Gz$($.created_at),updatedAt:Gz$($.updated_at)}}class Ac{db;constructor($){this.db=$}async upsert($){let Z=new Date,Q=await this.db.insertInto("git_provider_accounts").values({organization_id:$.organizationId,type:$.type,host:$.host.toLowerCase(),auth_kind:$.authKind,external_account_id:$.externalAccountId,login:$.login,avatar_url:$.avatarUrl??null,installation_id:$.installationId??null,credential_connection_id:null,status:"active",created_by:$.createdBy??null}).onConflict((X)=>X.columns(["organization_id","host","external_account_id"]).doUpdateSet({type:$.type,auth_kind:$.authKind,login:$.login,avatar_url:$.avatarUrl??null,installation_id:$.installationId??null,credential_connection_id:null,status:"active",updated_at:Z})).returningAll().executeTakeFirstOrThrow();return aa(Q)}async get($,Z){let Q=await this.db.selectFrom("git_provider_accounts").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?aa(Q):null}async getUnscoped($){let Z=await this.db.selectFrom("git_provider_accounts").selectAll().where("id","=",$).executeTakeFirst();return Z?aa(Z):null}async listByOrg($){return(await this.db.selectFrom("git_provider_accounts").selectAll().where("organization_id","=",$).orderBy("created_at","asc").execute()).map(aa)}async findByExternalId($){let Z=await this.db.selectFrom("git_provider_accounts").selectAll().where("organization_id","=",$.organizationId).where("host","=",$.host.toLowerCase()).where("external_account_id","=",$.externalAccountId).executeTakeFirst();return Z?aa(Z):null}async setStatus($,Z,Q){await this.db.updateTable("git_provider_accounts").set({status:Q,updated_at:new Date}).where("id","=",$).where("organization_id","=",Z).execute()}async delete($,Z){return(await this.db.deleteFrom("git_provider_accounts").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows>0n}}class sa{db;vault;constructor($,Z){this.db=$;this.vault=Z}async get($){let Z=await this.db.selectFrom("git_provider_account_credentials").selectAll().where("account_id","=",$).executeTakeFirst();if(!Z)return null;return pv4(this.vault,Z)}async upsert($){let Z=new Date,Q=await this.vault.encrypt($.accessToken),X=$.refreshToken?await this.vault.encrypt($.refreshToken):null,Y=$.clientSecret?await this.vault.encrypt($.clientSecret):null;await this.db.insertInto("git_provider_account_credentials").values({account_id:$.connectionId,access_token:Q,refresh_token:X,scope:$.scope,expires_at:$.expiresAt,client_id:$.clientId,client_secret:Y,token_endpoint:$.tokenEndpoint}).onConflict((J)=>J.column("account_id").doUpdateSet({access_token:Q,refresh_token:X,scope:$.scope,expires_at:$.expiresAt,client_id:$.clientId,client_secret:Y,token_endpoint:$.tokenEndpoint,updated_at:Z})).execute()}async delete($){await this.db.deleteFrom("git_provider_account_credentials").where("account_id","=",$).execute()}isExpired($,Z=0){if(!$.expiresAt)return!1;let X=($.expiresAt instanceof Date?$.expiresAt:new Date($.expiresAt)).getTime();if(Number.isNaN(X))return!0;return X-Z<Date.now()}}async function pv4($,Z){try{let Q=await $.decrypt(Z.access_token),X=Z.refresh_token?await $.decrypt(Z.refresh_token):null,Y=Z.client_secret?await $.decrypt(Z.client_secret):null;return{id:Z.account_id,connectionId:Z.account_id,accessToken:Q,refreshToken:X,scope:Z.scope,expiresAt:Z.expires_at,createdAt:Z.created_at,updatedAt:Z.updated_at,clientId:Z.client_id,clientSecret:Y,tokenEndpoint:Z.token_endpoint}}catch(Q){return console.warn("[GitProviderAccountCredential] failed to decrypt credential row",{accountId:Z.account_id,message:Q instanceof Error?Q.message:String(Q)}),null}}import{sql as nv4}from"kysely";function Kz$($){return $ instanceof Date?$.toISOString():String($)}function Tc($){return{id:$.id,organizationId:$.organization_id,accountId:$.account_id,provider:$.provider,host:$.host,path:$.path,externalId:$.external_id,defaultBranch:$.default_branch,webUrl:$.web_url,visibility:$.visibility,legacyConnectionId:$.legacy_connection_id,createdAt:Kz$($.created_at),updatedAt:Kz$($.updated_at)}}function Rc($){return{provider:$.provider,host:$.host,path:$.path}}class ea{db;constructor($){this.db=$}async upsert($){let Z=$.ref.host.toLowerCase(),Q=await this.findByRef($.organizationId,$.ref);if(Q){let Y=await this.db.updateTable("repositories").set({path:$.ref.path,provider:$.ref.provider,web_url:ZW({...$.ref,host:Z}),...$.accountId!==void 0?{account_id:$.accountId}:{},...$.externalId!==void 0?{external_id:$.externalId}:{},...$.defaultBranch!==void 0?{default_branch:$.defaultBranch}:{},...$.visibility!==void 0?{visibility:$.visibility}:{},...$.legacyConnectionId!==void 0?{legacy_connection_id:$.legacyConnectionId}:{},updated_at:new Date}).where("id","=",Q.id).where("organization_id","=",$.organizationId).returningAll().executeTakeFirstOrThrow();return Tc(Y)}let X=await this.db.insertInto("repositories").values({organization_id:$.organizationId,account_id:$.accountId??null,provider:$.ref.provider,host:Z,path:$.ref.path,external_id:$.externalId??null,default_branch:$.defaultBranch??null,web_url:ZW({...$.ref,host:Z}),visibility:$.visibility??null,legacy_connection_id:$.legacyConnectionId??null,created_by:$.createdBy??null}).returningAll().executeTakeFirstOrThrow();return Tc(X)}async get($,Z){let Q=await this.db.selectFrom("repositories").selectAll().where("id","=",$).where("organization_id","=",Z).executeTakeFirst();return Q?Tc(Q):null}async getUnscoped($){let Z=await this.db.selectFrom("repositories").selectAll().where("id","=",$).executeTakeFirst();return Z?Tc(Z):null}async findByRef($,Z){let Q=await this.db.selectFrom("repositories").selectAll().where("organization_id","=",$).where("host","=",Z.host.toLowerCase()).where(nv4`lower(path)`,"=",Z.path.toLowerCase()).executeTakeFirst();return Q?Tc(Q):null}async listByOrg($,Z){let Q=this.db.selectFrom("repositories").selectAll().where("organization_id","=",$);if(Z?.accountId)Q=Q.where("account_id","=",Z.accountId);return(await Q.orderBy("path","asc").execute()).map(Tc)}async delete($,Z){try{return(await this.db.deleteFrom("repositories").where("id","=",$).where("organization_id","=",Z).executeTakeFirst()).numDeletedRows>0n}catch(Q){if(Q instanceof Error&&"constraint"in Q&&Q.constraint==="org_repo_sync_source_present")throw Error("Remove this repository's sync configurations before unlinking it");throw Q}}}var $s=D(()=>{t5()});function Hz$($){return Bun.hash($).toString(36)}function tv4($){for(let[Z,Q]of bL)if(Q.expiresAt<=$)bL.delete(Z);while(bL.size>=512){let Z=bL.keys().next();if(Z.done)break;bL.delete(Z.value)}}function p51($,Z,Q,X=Date.now()){tv4(X),bL.set(Hz$($),{owner:Z,expiresAt:Q})}function Ic($,Z=Date.now()){let Q=Hz$($),X=bL.get(Q);if(!X)return"unknown";if(X.expiresAt<=Z)return bL.delete(Q),"unknown";return X.owner}var Wz$="app",i51="user",bL;var qc=D(()=>{bL=new Map});function yL($=process.env){let Z=$.GITHUB_APP_ID?.trim(),Q=$.GITHUB_APP_PRIVATE_KEY?.trim(),X=$.GITHUB_APP_CLIENT_ID?.trim(),Y=$.GITHUB_APP_CLIENT_SECRET?.trim(),J=$.GITHUB_APP_SLUG?.trim();if(!Z||!Q||!X||!Y||!J)return null;return{appId:Z,privateKeyPem:Q.replace(/\\n/g,`
|
|
2692
|
-
`),clientId:X,clientSecret:Y,slug:J}}function VP($,Z){let Q=$.get(Z);if(Q===null)return null;let X=Number(Q);return Number.isFinite(X)?X:null}function ov4($){return{limit:VP($,"x-ratelimit-limit"),remaining:VP($,"x-ratelimit-remaining"),reset:VP($,"x-ratelimit-reset"),used:VP($,"x-ratelimit-used"),resource:$.get("x-ratelimit-resource")}}function gL($){if($.status===429)return!0;if($.status!==403)return!1;if($.headers.get("retry-after")!==null)return!0;return VP($.headers,"x-ratelimit-remaining")===0}function hL($,Z=Date.now()){let Q=VP($,"retry-after");if(Q!==null)return Math.max(0,Q*1000);let X=VP($,"x-ratelimit-reset");if(X!==null)return Math.max(0,X*1000-Z);return null}function uL($,Z){let Q=ov4($),X=Q.resource??"unknown",Y={installation:Z.installation,resource:X},J={...Y,lane:Z.lane,operation:Z.operation};if(Nz$??=Y$.createCounter("github_api_calls",{description:"Calls to the GitHub API, by transport and operation",unit:"{calls}"}),Nz$.add(1,J),Q.remaining!==null)Fz$??=Y$.createGauge("github_rate_limit_remaining",{description:"Requests (REST) or points (GraphQL) left in the window",unit:"{requests}"}),Fz$.record(Q.remaining,Y);if(Q.used!==null)Uz$??=Y$.createGauge("github_rate_limit_used",{description:"Requests (REST) or points (GraphQL) spent in the window",unit:"{requests}"}),Uz$.record(Q.used,Y);return Q}function cL($){Bz$??=Y$.createCounter("github_rate_limited",{description:"GitHub responses refused for rate-limit reasons",unit:"{responses}"}),Bz$.add(1,$)}var Fz$=null,Uz$=null,Nz$=null,Bz$=null;var Zs=D(()=>{U6()});function fW0($){return process.env.GITHUB_API_BASE_URL??_N("github",$)}async function lJ($,Z){let Q={Authorization:`Bearer ${Z.token}`,Accept:Z.accept??av4,"X-GitHub-Api-Version":rv4};if(Z.body!==void 0)Q["Content-Type"]="application/json";let X;try{X=await fetch($,{method:Z.method??"GET",headers:Q,body:Z.body===void 0?void 0:JSON.stringify(Z.body),signal:AbortSignal.timeout(Z.timeoutMs??n51)})}catch(J){throw new I1({provider:"github",status:0,message:`GitHub ${Z.operation} failed: ${J instanceof Error?J.message:String(J)}`,cause:J})}let Y=Ic(Z.token);if(uL(X.headers,{lane:"rest",operation:Z.operation,installation:Y}),gL(X)){await X.body?.cancel().catch(()=>{});let J=X.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"rest",operation:Z.operation,installation:Y,kind:J});let G=hL(X.headers);throw new I1({provider:"github",status:X.status,retryAfterMs:G,message:`GitHub ${J} rate limit reached${G===null?"":`; retry in ${Math.ceil(G/1000)}s`}`})}return X}function t51($){try{let Z=JSON.parse($);if(Z!==null&&typeof Z==="object"&&"message"in Z&&typeof Z.message==="string"&&Z.message.length>0)return Z.message}catch{}return $.slice(0,300)}function o51($,Z,Q){let X=t51(Z);return new I1({provider:"github",status:$,message:`GitHub ${Q} failed: ${$}${X?` ${X}`:""}`})}async function bX($,Z){let Q=await $.text().catch(()=>"");return o51($.status,Q,Z)}async function U3($,Z){let Q=await $.text();try{return JSON.parse(Q)}catch(X){throw new I1({provider:"github",status:$.status,message:`GitHub ${Z} returned invalid JSON: ${Q.slice(0,300)}`,cause:X})}}var rv4="2022-11-28",av4="application/vnd.github+json",n51=15000;var Mc=D(()=>{t5();Zs();qc();Q7()});import{createPrivateKey as Dz$,sign as sv4}from"crypto";function r51($){return Buffer.from($).toString("base64url")}function Xx4($){let Z=r51(JSON.stringify({alg:"RS256",typ:"JWT"})),Q=r51(JSON.stringify({iat:$.nowSeconds-$x4,exp:$.nowSeconds+s51,iss:$.appId})),X=`${Z}.${Q}`,Y=sv4("RSA-SHA256",Buffer.from(X),Dz$($.privateKeyPem));return`${X}.${r51(Y)}`}function Yx4($){let Z=ba.find((Y)=>(Y in $));if(!Z)return null;let{[Z]:Q,...X}=$;return X}function Jx4($,Z){let Q=(Z.repositories??[]).map((Y)=>Y.toLowerCase()).sort(),X=Object.entries(Z.permissions??{}).map(([Y,J])=>`${Y}=${J}`).sort();return`${$}|${Q.join(",")}|${X.join(",")}`}function Gx4($,Z){for(let[Q,X]of $)if(X.expiresAt.getTime()<=Z)$.delete(Q)}function Oz$($){let Z=$.account;if(typeof $.id!=="number"||!Z||typeof Z.id!=="number"||typeof Z.login!=="string")return null;return{installationId:$.id,externalAccountId:String(Z.id),login:Z.login,avatarUrl:typeof Z.avatar_url==="string"?Z.avatar_url:null,accountType:typeof Z.type==="string"?Z.type:"User"}}function Kx4($){if(!$||typeof $!=="object"||Array.isArray($))return null;let Z={};for(let[Q,X]of Object.entries($))if(typeof X==="string")Z[Q]=X;return Z}class Lz${appId;privateKeyPem;apiBaseUrl;jwt=null;cache=new Map;inFlight=new Map;constructor($,Z){this.appId=$.appId,this.privateKeyPem=$.privateKeyPem,this.apiBaseUrl=(Z?.apiBaseUrl??ev4).replace(/\/+$/,"")}appJwt(){let $=Math.floor(Date.now()/1000);if(this.jwt&&this.jwt.exp-$>Zx4)return this.jwt.value;let Z=Xx4({appId:this.appId,privateKeyPem:this.privateKeyPem,nowSeconds:$});return this.jwt={value:Z,exp:$+s51},p51(Z,Wz$,($+s51)*1000),Z}installationToken($,Z={}){let Q=Jx4($,Z),X=Z.bufferMs??Qx4;if(!Z.forceRefresh){let G=this.cache.get(Q);if(G&&G.expiresAt.getTime()-Date.now()>X)return Promise.resolve(G)}let Y=this.inFlight.get(Q);if(Y)return Y;let J=this.mint($,Z).then((G)=>{return this.cache.set(Q,G),p51(G.token,String($),G.expiresAt.getTime()),Gx4(this.cache,Date.now()),G}).finally(()=>{this.inFlight.delete(Q)});return this.inFlight.set(Q,J),J}async mint($,Z){let X=`${this.apiBaseUrl}/app/installations/${$}/access_tokens`,Y=Z.repositories&&Z.repositories.length>0?Z.repositories:void 0,J=Z.permissions?{...Z.permissions}:void 0;for(;;){let G=await lJ(X,{method:"POST",token:this.appJwt(),body:{...Y&&{repositories:Y},...J&&{permissions:J}},operation:"installation_access_token"});if(G.ok){let K=await U3(G,"installation_access_token");if(typeof K.token!=="string"||typeof K.expires_at!=="string")throw new I1({provider:"github",status:G.status,message:"GitHub installation_access_token returned no token"});return{token:K.token,expiresAt:new Date(K.expires_at),permissions:Kx4(K.permissions)??J??{}}}if(G.status===422&&J){let K=await G.text().catch(()=>""),W=Yx4(J);if(W&&u61(t51(K))){J=W;continue}throw o51(G.status,K,"installation_access_token")}throw await bX(G,"installation_access_token")}}async getInstallation($){let Q=await lJ(`${this.apiBaseUrl}/app/installations/${$}`,{token:this.appJwt(),operation:"get_installation"});if(Q.status===404)return null;if(!Q.ok)throw await bX(Q,"get_installation");let X=Oz$(await U3(Q,"get_installation"));if(!X)throw new I1({provider:"github",status:Q.status,message:"GitHub get_installation returned an installation without a user or organization account"});return X}async listUserInstallations($){let X=[];for(let Y=1;;Y++){let J=await lJ(`${this.apiBaseUrl}/user/installations?per_page=100&page=${Y}`,{token:$,operation:"list_user_installations"});if(!J.ok)throw await bX(J,"list_user_installations");let G=await U3(J,"list_user_installations"),K=Array.isArray(G.installations)?G.installations:[];for(let W of K){let H=Oz$(W);if(H)X.push(H)}if(K.length<100)return X}}}function Vc(){if(a51===void 0){let $=yL();a51=$&&Wx4($)?new Lz$($):null}return a51}function Wx4($){try{return Dz$($.privateKeyPem),!0}catch(Z){return console.error("[git-providers] GITHUB_APP_PRIVATE_KEY is not a usable private key \u2014 "+"the GitHub App stays disabled and orgs keep their existing connections. Check that newlines survived the secret store.",Z),!1}}function wz$(){let $=yL()!==null&&Vc()!==null;return{configured:$,hosts:$?[Hx4]:[]}}var ev4="https://api.github.com",$x4=60,s51=540,Zx4=60,Qx4=300000,a51,Hx4="github.com";var bW0=D(()=>{TY();qc();Q7();Mc()});function Ox4($){return $==="public"||$==="private"||$==="internal"}function Ez$($,Z){let Q="public";if($.private)Q="private";else if($.visibility&&Ox4($.visibility))Q=$.visibility;return{ref:{provider:"github",host:Z,path:$.full_name},externalId:String($.id),defaultBranch:$.default_branch??null,webUrl:$.html_url,visibility:Q,description:$.description??null,updatedAt:$.pushed_at??$.updated_at??null}}function Dx4($,Z){let Q=Z?.trim().toLowerCase();if(!Q)return!0;return $.toLowerCase().includes(Q)}function Lx4($){return{name:$.name||$.login,email:$.email||`${$.login}@users.noreply.github.com`}}function wx4($){return $.split("/").filter(Boolean).map(encodeURIComponent).join("/")}function jx4($,Z){let{owner:Q,name:X}=l7($),Y=`/repos/${encodeURIComponent(Q)}/${encodeURIComponent(X)}/tarball`;return Z?`${Y}/${encodeURIComponent(Z)}`:Y}class kc{kind="github";host;apiBaseUrl;options;constructor($){this.options=$,this.host=$.host.toLowerCase(),this.apiBaseUrl=_N("github",$.host)}async tokenForRepo($,Z={}){let Q=this.options;if("appAuth"in Q){let X=await Q.appAuth.installationToken(Q.installationId,{repositories:[u51($)],permissions:EW0,bufferMs:Z.bufferMs,forceRefresh:Z.forceRefresh});return{token:X.token,kind:"installation",expiresAt:X.expiresAt}}return this.sourceToken(Q.tokenSource,Z)}async accountToken($={}){let Z=this.options;if("appAuth"in Z){let Q=await Z.appAuth.installationToken(Z.installationId,{permissions:Fx4,bufferMs:$.bufferMs,forceRefresh:$.forceRefresh});return{token:Q.token,kind:"installation",expiresAt:Q.expiresAt}}return this.sourceToken(Z.tokenSource,$)}async sourceToken($,Z){let Q=await $.get(Z);if(!Q)throw new I1({provider:"github",status:401,message:`No usable GitHub token for ${this.host}; reconnect the account`});return Q}async getRepo($){let{owner:Q,name:X}=l7($),Y=await this.request(`/repos/${encodeURIComponent(Q)}/${encodeURIComponent(X)}`,{operation:"get_repo"});if(Y.status===404)return null;if(!Y.ok)throw await bX(Y,"get_repo");return Ez$(await U3(Y,"get_repo"),this.host)}async listRepos($={}){let Z=Math.max(1,Math.floor($.page??1)),Q=Math.min(Nx4,Math.max(1,Math.floor($.perPage??Ux4))),X=`per_page=${Q}&page=${Z}`,Y;if("appAuth"in this.options){let G=await this.request(`/installation/repositories?${X}`,{operation:"list_installation_repositories"});if(!G.ok)throw await bX(G,"list_installation_repositories");let K=await U3(G,"list_installation_repositories");Y=Array.isArray(K.repositories)?K.repositories:[]}else{let G=await this.request(`/user/repos?affiliation=owner,collaborator,organization_member&sort=pushed&${X}`,{operation:"list_user_repositories"});if(!G.ok)throw await bX(G,"list_user_repositories");let K=await U3(G,"list_user_repositories");Y=Array.isArray(K)?K:[]}return{repositories:Y.filter((J)=>Dx4(J.full_name,$.query)).map((J)=>Ez$(J,this.host)),hasMore:Y.length===Q}}async readFile($,Z,Q){let{owner:Y,name:J}=l7($),G=Q?`?ref=${encodeURIComponent(Q)}`:"",K=await this.request(`/repos/${encodeURIComponent(Y)}/${encodeURIComponent(J)}/contents/${wx4(Z)}${G}`,{operation:"read_file",accept:Bx4});if(K.status===404)return null;if(!K.ok)throw await bX(K,"read_file");return K.text()}async archiveTarball($,Z){let X=`${this.apiBaseUrl}${jx4($,Z)}`,Y=await this.tokenForRepo($),J=await lJ(X,{operation:"archive_tarball",token:Y.token,timeoutMs:jz$});if(J.status===401){await J.body?.cancel().catch(()=>{});let G=await this.tokenForRepo($,{forceRefresh:!0});J=await lJ(X,{operation:"archive_tarball",token:G.token,timeoutMs:jz$})}if(J.status===404)return null;if(!J.ok)throw await bX(J,"archive_tarball");return J.body}async identity(){if("appAuth"in this.options)return null;let $="get_user",Z=await this.request("/user",{operation:$});if(!Z.ok)throw await bX(Z,$);return Lx4(await U3(Z,$))}async request($,Z){let Q=`${this.apiBaseUrl}${$}`,X=await this.accountToken(),Y=await lJ(Q,{...Z,token:X.token});if(Y.status!==401)return Y;let J=await this.accountToken({forceRefresh:!0});return lJ(Q,{...Z,token:J.token})}}var Fx4,Ux4=30,Nx4=100,Bx4="application/vnd.github.raw+json",jz$=60000;var e51=D(()=>{t5();TY();Q7();Mc();Fx4={metadata:"read",contents:"read"}});function yW0($){return _N("gitlab",$)}function zx4($){let Z=(Q)=>{if(typeof Q==="string")return Q.length>0?[Q]:[];if(Array.isArray(Q))return Q.flatMap(Z);if(Q!==null&&typeof Q==="object")return Object.values(Q).flatMap(Z);return[]};try{let Q=JSON.parse($);if(Q!==null&&typeof Q==="object"){let X=Q,Y=[...Z(X.message),...Z(X.error),...Z(X.error_description)];if(Y.length>0)return Y.join("; ")}}catch{}return $.slice(0,300)}async function QW($){let Z=await $.text().catch(()=>""),Q=Z?zx4(Z):$.statusText;return new I1({provider:"gitlab",status:$.status,message:`GitLab API ${$.status}: ${Q}`,retryAfterMs:$.status===429?zz$($.headers):null})}async function Qs($,Z){let Q=await $.text();try{return JSON.parse(Q)}catch(X){throw new I1({provider:"gitlab",status:$.status,message:`GitLab ${Z} returned invalid JSON: ${Q.slice(0,300)}`,cause:X})}}async function lL($,Z,Q={}){let X={Authorization:`Bearer ${Z}`,Accept:Q.accept??"application/json"};if(Q.body!==void 0)X["Content-Type"]="application/json";try{return await fetch($,{method:Q.method??"GET",headers:X,body:Q.body===void 0?void 0:JSON.stringify(Q.body),signal:AbortSignal.timeout(Q.timeoutMs??Ex4)})}catch(Y){throw new I1({provider:"gitlab",status:0,message:`GitLab request failed: ${Y instanceof Error?Y.message:String(Y)}`,cause:Y})}}var Ex4=15000;var gW0=D(()=>{t5();Q7();kP()});import{z as vQ}from"zod";function SP($){return encodeURIComponent($)}function Xs($){return encodeURIComponent($.replace(/^\/+/,""))}function Rx4($,Z){let Q=`/projects/${SP($.path)}/repository/archive.tar.gz`;return Z?`${Q}?sha=${encodeURIComponent(Z)}`:Q}function zz$($,Z=Date.now()){let Q=$.get("retry-after");if(Q!==null){let Y=Number(Q);if(Number.isFinite(Y))return Math.max(0,Y*1000);let J=Date.parse(Q);if(Number.isFinite(J))return Math.max(0,J-Z)}let X=$.get("ratelimit-reset");if(X!==null){let Y=Number(X);if(Number.isFinite(Y))return Math.max(0,Y*1000-Z)}return null}function Pz$($,Z){let Q=Ix4.parse($),X={provider:"gitlab",host:Z,path:Q.path_with_namespace};return{ref:X,externalId:String(Q.id),defaultBranch:Q.default_branch??null,webUrl:Q.web_url??ZW(X),visibility:Q.visibility,description:Q.description??null,updatedAt:Q.last_activity_at??null}}async function qx4($,Z,Q={}){let X=await lL($,Z,Q);if(X.status===404)return await X.body?.cancel().catch(()=>{}),null;if(!X.ok)throw await QW(X);return X}async function Mx4($,Z){let Q=await qx4(`${_N("gitlab",$)}/user`,Z);if(!Q)throw new I1({provider:"gitlab",status:404,message:"GitLab did not recognise the authenticated user"});return Az$.parse(await Qs(Q,"get_user"))}async function hW0($,Z){let Q=await Mx4($,Z);return{externalAccountId:String(Q.id),login:Q.username,avatarUrl:Q.avatar_url??null}}class Ys{kind="gitlab";host;apiBase;tokenSource;constructor($){this.host=$.host,this.apiBase=_N("gitlab",$.host),this.tokenSource=$.tokenSource}async tokenForRepo($,Z){return this.accountToken(Z)}async accountToken($){let Z=await this.tokenSource.get($);if(!Z)throw new I1({provider:"gitlab",status:401,message:"GitLab account is not authenticated"});return Z}async getRepo($){let Z=await this.get(`/projects/${SP($.path)}`);if(!Z)return null;return Pz$(await Qs(Z,"get_repo"),this.host)}async listRepos($={}){let Z=new URLSearchParams({membership:"true",simple:"true",order_by:"id",sort:"desc",per_page:String(Math.min(Tx4,Math.max(1,$.perPage??Ax4))),page:String(Math.max(1,$.page??1))}),Q=$.query?.trim();if(Q)Z.set("search",Q);let X=await this.get(`/projects?${Z}`);if(!X)return{repositories:[],hasMore:!1};let Y=await Qs(X,"list_repos");if(!Array.isArray(Y))throw new I1({provider:"gitlab",status:502,message:"GitLab /projects returned a non-array payload"});return{repositories:Y.map((J)=>Pz$(J,this.host)),hasMore:Y.length===Number(Z.get("per_page"))}}async readFile($,Z,Q){let X=Q;if(!X){let J=await this.getRepo($);if(!J?.defaultBranch)return null;X=J.defaultBranch}let Y=await this.get(`/projects/${SP($.path)}/repository/files/${Xs(Z)}/raw?ref=${encodeURIComponent(X)}`,{accept:"text/plain, */*"});if(!Y)return null;return Y.text()}async archiveTarball($,Z){let Q=await this.authedFetch(`${this.apiBase}${Rx4($,Z)}`,{accept:"application/octet-stream, */*",timeoutMs:Px4});if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await QW(Q);return Q.body}async identity(){let $=await this.authedFetch(`${this.apiBase}/user`);if(!$.ok)throw await QW($);let Z=Az$.parse(await Qs($,"identity"));return{name:Z.name||Z.username,email:Z.commit_email||Z.public_email||Z.email||`${Z.username}@users.noreply.${this.host}`}}async get($,Z){let Q=await this.authedFetch(`${this.apiBase}${$}`,Z);if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await QW(Q);return Q}async authedFetch($,Z={}){let Q=await this.accountToken(),X=await lL($,Q.token,Z);if(X.status!==401)return X;await X.body?.cancel().catch(()=>{});let Y=await this.accountToken({forceRefresh:!0});return lL($,Y.token,Z)}}var Px4=60000,Ax4=30,Tx4=100,Ix4,Az$;var kP=D(()=>{t5();Q7();gW0();Ix4=vQ.object({id:vQ.number(),path_with_namespace:vQ.string().min(1),default_branch:vQ.string().nullish(),web_url:vQ.string().nullish(),visibility:vQ.enum(["public","private","internal"]),description:vQ.string().nullish(),last_activity_at:vQ.string().nullish()});Az$=vQ.object({id:vQ.number(),username:vQ.string().min(1),name:vQ.string().nullish(),avatar_url:vQ.string().nullish(),email:vQ.string().nullish(),public_email:vQ.string().nullish(),commit_email:vQ.string().nullish()})});function Tz$($,Z,Q){return{kind:Q,async get(X){let Y=X?.forceRefresh?await $.get(Z):null,J=await mJ({connectionId:Z,tokenStorage:$,bufferMs:X?.bufferMs,force:X?.forceRefresh===!0&&Y!==null&&mL(Y)});if(!J.accessToken)return null;return{token:J.accessToken,kind:Q,expiresAt:null}}}}function $91($){return $==="token"?"token":"oauth"}function Js($){if($.status!=="active")return!1;if($.type==="github"&&$.authKind==="github_app")return Vc()!==null&&$.installationId!==null;return!0}function CP($,Z){let Q=new sa($.db,$.vault);switch(Z.type){case"github":{if(Z.authKind==="github_app"){let X=Vc();if(!X||Z.installationId===null)throw new I1({provider:"github",status:503,message:"GitHub App credentials are not configured on this deployment"});return new kc({host:Z.host,installationId:Z.installationId,appAuth:X})}return new kc({host:Z.host,tokenSource:Tz$(Q,Z.id,$91(Z.authKind))})}case"gitlab":return new Ys({host:Z.host,tokenSource:Tz$(Q,Z.id,$91(Z.authKind))})}}function Vx4($){if($.authKind==="github_app")return"installation";return $91($.authKind)}function uW0($,Z,Q="installation"){return{ref:$,tokenSource:{kind:Q,get:()=>Promise.resolve({token:Z,kind:Q,expiresAt:null})}}}async function Z91($,Z){let Q=Rc(Z);if(!Z.accountId)throw new I1({provider:Z.provider,status:401,message:`${Z.path} is linked without an account; link it again to read and write it`});let X=await new Ac($.db).getUnscoped(Z.accountId);if(!X||X.organizationId!==Z.organizationId)throw new I1({provider:Z.provider,status:404,message:`The account backing ${Z.path} no longer exists. Link the repository again.`});let Y=CP($,X),J=Vx4(X);return{ref:Q,tokenSource:{kind:J,get:(G)=>Y.tokenForRepo(Q,G)}}}async function ZF($,Z,Q){let X=Rc(Z);if(!Z.accountId)return kx4(X);let Y=await new Ac($.db).getUnscoped(Z.accountId);if(!Y||Y.organizationId!==Z.organizationId)throw new I1({provider:Z.provider,status:404,message:`The account backing ${Z.path} no longer exists. Link the repository again.`});let J=CP($,Y),G=await J.tokenForRepo(X,Q),K=G.kind==="installation"?null:await J.identity().catch(()=>null);return{cloneUrl:c51(X,G.token),gitUserName:K?.name??$F.name,gitUserEmail:K?.email??$F.email}}function kx4($){return{cloneUrl:c51($),gitUserName:$F.name,gitUserEmail:$F.email}}async function Q91($,Z,Q){let X=Q.repositoryId?await $.repositories.get(Q.repositoryId,Z):Q.ref?await $.repositories.findByRef(Z,Q.ref):null,Y=X?Rc(X):Q.ref??null;if(!Y)return null;return{ref:Y,repository:X,servable:X?await xN($,X):!1}}async function xN($,Z){if(!Z.accountId)return!1;let Q=await $.gitProviderAccounts.getUnscoped(Z.accountId);return Q!==null&&Js(Q)}var cW0=D(()=>{t5();K3();d51();$s();bW0();e51();kP();Q7()});async function Sx4($,Z){let Q=$.organization?.id;if(!Q)throw Error(VZ);if(!Z.sourceConnectionId)throw Error(VZ);let X=await $.storage.connections.findById(Z.sourceConnectionId,Q);if(!X)throw Error(VZ);let{clientFromConnection:Y}=await Promise.resolve().then(() => (ja(),Mz$)),J=await Y(X,$,!0);try{let{result:G}=await uj$((H)=>J.callTool({name:"MINT_REPO_TOKEN",arguments:{installationId:Z.installationId,owner:Z.owner,repo:Z.repo,permissions:H}}),hj$(Z.permissions)),K=G.structuredContent?.token;if(G.isError||!K)throw Error(VZ);let W=G.structuredContent?.expiresAt;return{accessToken:K,expiresAt:W?new Date(W):null}}finally{await J.close().catch(()=>{})}}function Cx4($,Z){return($?.getTime()??0)>Z?$:new Date(Z+qz$)}async function _x4($,Z,Q,X){let Y=Date.now(),J=await Sx4($,Q),G=Cx4(J.expiresAt,Y);try{await X.upsert({connectionId:Z,accessToken:J.accessToken,refreshToken:null,scope:null,expiresAt:G,clientId:null,clientSecret:null,tokenEndpoint:null})}catch(K){console.warn("[GithubMint] failed to persist minted token",{connectionId:Z,message:K instanceof Error?K.message:String(K)})}return J.accessToken}async function Gs($,Z,Q){let X=J9(Z);if(!X)throw Error("Connection is not repo-scoped");if(!X.sourceConnectionId)throw Error(VZ);let Y=new C5($.db,$.vault),J=await Y.get(Z.id);if(!Q?.forceRefresh&&J&&!Y.isExpired(J,Ws))return J.accessToken;let G=X91.get(Z.id);if(G)return G;let K=_x4($,Z.id,X,Y).finally(()=>{X91.delete(Z.id)});return X91.set(Z.id,K),K}function Rz$($){return $.slug==="mcp-github"}async function Iz$($,Z,Q){if(J9(Z)?.sourceConnectionId)return Gs($,Z,Q);return(await mJ({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new C5($.db,$.vault),force:Q?.forceRefresh})).accessToken}var X91;var Ks=D(()=>{K3();TY();tK();X91=new Map});function vx4(){return process.env.GITHUB_GRAPHQL_URL??"https://api.github.com/graphql"}function fx4($){return $>=500&&$<600}function bx4($){return $ instanceof r9?$.cause:$}function yx4($,Z){try{return JSON.parse($)}catch(Q){throw Error(`GitHub GraphQL ${Z} returned invalid JSON: ${$.slice(0,300)}`,{cause:Q})}}function gx4($,Z){let Q=$.errors?.[0]?.message;if(Q)throw Error(`GitHub GraphQL ${Z} failed: ${Q}`);if($.data==null)throw Error(`GitHub GraphQL ${Z} returned no data`);return $.data}async function lW0($){let Z=await $.getToken();if(!Z)throw Error($.missingTokenMessage);let Q=(K)=>fetch(vx4(),{method:"POST",headers:{Authorization:`Bearer ${K}`,Accept:"application/vnd.github+json","Content-Type":"application/json"},body:JSON.stringify({query:$.query,variables:$.variables}),signal:AbortSignal.timeout(xx4)}),X=async(K)=>{try{return await J4(async()=>{let W=await Q(K);if(fx4(W.status)){let H=W.status;throw await W.body?.cancel().catch(()=>{}),Error(`GitHub GraphQL transient error: ${H}`)}return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1})}catch(W){throw bx4(W)}},Y=await X(Z),J=Z;if(Y.status===401){try{await Y.body?.cancel()}catch{}let K=await $.getToken(!0);if(!K)throw Error($.missingTokenMessage);if(Y=await X(K),J=K,Y.status===401)throw Error($.missingTokenMessage)}let G=Ic(J);if(uL(Y.headers,{lane:"graphql",operation:$.operation,installation:G}),gL(Y)){let K=Y.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"graphql",operation:$.operation,installation:G,kind:K});let W=hL(Y.headers);throw Error(`GitHub ${K} rate limit reached${W===null?"":`; retry in ${Math.ceil(W/1000)}s`}`)}if(!Y.ok)throw Error(`GitHub GraphQL ${$.label} failed: ${Y.status}`);return gx4(yx4(await Y.text(),$.label),$.label)}var xx4=15000;var Y91=D(()=>{C8();Zs();qc()});function cx4($){if(!$)return null;if($.state!=="open")return!1;if(typeof $.mergeable==="boolean")return!$.mergeable;let Z=$.mergeable_state;if(typeof Z!=="string"||Z===""||Z==="unknown")return null;return Z==="dirty"}function lx4($){if($==="clean")return"passing";if($==="unstable")return"failing";return null}function J91($){let Z=$.merged===!0||typeof $.merged_at==="string";return{number:$.number??0,url:$.html_url??"",title:$.title??"",body:$.body??"",state:Z?"merged":$.state==="closed"?"closed":"open",draft:$.draft===!0,mergedAt:$.merged_at??null,updatedAt:$.updated_at??null,base:$.base?.ref??"main",head:$.head?.ref??"",headSha:$.head?.sha??"",headRepoPath:$.head?.repo?.full_name??null,author:$.user?.login??"",conflicting:cx4($),checks:lx4($.mergeable_state),changedFiles:typeof $.changed_files==="number"?$.changed_files:null}}function mx4($){if($==="IN_PROGRESS")return"running";if($==="COMPLETED")return"completed";return"queued"}function dx4($){switch($){case"SUCCESS":return"success";case"FAILURE":case"STARTUP_FAILURE":return"failure";case"NEUTRAL":case"STALE":return"neutral";case"CANCELLED":return"cancelled";case"SKIPPED":return"skipped";case"TIMED_OUT":return"timed_out";case"ACTION_REQUIRED":return"action_required";default:return null}}function tx4($){let Z=$.state;return{id:null,name:$.context??"",state:Z==="PENDING"||Z==="EXPECTED"?"running":"completed",conclusion:Z==="SUCCESS"?"success":Z==="FAILURE"||Z==="ERROR"?"failure":Z==="PENDING"||Z==="EXPECTED"?null:"neutral",url:$.targetUrl??null,durationMs:null,summary:$.description??null}}function ox4($){let Z=$.commits?.nodes?.[0]?.commit?.statusCheckRollup?.contexts?.nodes??[],Q=[];for(let X of Z){if(!X)continue;if(X.__typename==="StatusContext"){Q.push(tx4(X));continue}if(X.__typename!=="CheckRun")continue;let{startedAt:Y,completedAt:J}=X;Q.push({id:X.databaseId==null?null:String(X.databaseId),name:X.name??"",state:mx4(X.status),conclusion:dx4(X.conclusion),url:X.detailsUrl??null,durationMs:Y&&J?new Date(J).getTime()-new Date(Y).getTime():null,summary:X.summary??null})}return Q}function rx4($,Z){let Q=($.reviewThreads?.nodes??[]).filter((W)=>W?.isResolved===!1).length,X=$.reviewDecision,Y=X==="REVIEW_REQUIRED"||X==="CHANGES_REQUESTED",J=ox4($),G=$.number??0,K=$.merged===!0;return{number:G,url:$.url??Pc(Z,G),title:$.title??"",body:$.body??"",state:K?"merged":$.state==="OPEN"?"open":"closed",draft:$.isDraft===!0,mergedAt:$.mergedAt??null,updatedAt:$.updatedAt??null,base:$.baseRefName??"main",head:$.headRefName??"",headSha:$.headRefOid??"",headRepoPath:$.headRepository?.nameWithOwner??null,author:$.author?.login??"",conflicting:$.state!=="OPEN"?!1:$.mergeable==="CONFLICTING"?!0:$.mergeable==="MERGEABLE"?!1:null,checks:vW0(J),changedFiles:$.changedFiles??null,checkRuns:J,comments:($.comments?.nodes??[]).flatMap((W)=>W?[{id:String(W.databaseId??0),author:W.author?.login??"",body:W.body??"",createdAt:W.createdAt??"",updatedAt:W.updatedAt??W.createdAt??"",url:W.url??""}]:[]),unresolvedConversations:Q,reviewBlocked:Y}}function ax4($){let Z=null,Q=-1/0;for(let X of $??[]){if(!X?.mergedAt)continue;let Y=Date.parse(X.mergedAt);if(Number.isNaN(Y)||Y<=Q)continue;Z=X,Q=Y}return Z}function Vz$($){return/not allowed on this repository/i.test($)}class G91{repo;tokenSource;apiBaseUrl;owner;name;constructor($){this.repo=$.repo,this.tokenSource=$.tokenSource,this.apiBaseUrl=fW0($.repo.host);let{owner:Z,name:Q}=l7($.repo);this.owner=Z,this.name=Q}async token($){return(await this.tokenSource.get($?{forceRefresh:!0}:void 0))?.token??null}async requireToken(){let $=await this.token();if($)return $;throw new I1({provider:"github",status:401,message:`No usable GitHub token for ${this.repo.path}; reconnect the account`})}get base(){return`${this.apiBaseUrl}/repos/${this.owner}/${this.name}`}async rest($,Z){let Q=await lJ(`${this.base}${$}`,{method:Z.method,body:Z.body,token:await this.requireToken(),operation:Z.operation});if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await bX(Q,Z.operation);if(Q.status===204)return null;return U3(Q,Z.operation)}graphql($){return lW0({getToken:(Z)=>this.token(Z),missingTokenMessage:`No usable GitHub token for ${this.repo.path}; reconnect the account`,...$})}async read($){let Z=await this.rest(`/pulls/${$}`,{operation:"change_request_read"});return Z?J91(Z):null}async readForBranch($){return await this.readDetailed({branch:$})}async readDetailed($){let Z="number"in $,X=(await this.graphql({query:Z?px4:ix4,variables:Z?{owner:this.owner,repo:this.name,number:$.number}:{owner:this.owner,repo:this.name,branch:$.branch},label:`change request for ${this.repo.path}`,operation:"change_request_detail"})).repository;if(!X)throw new I1({provider:"github",status:404,message:`${this.repo.path} is not accessible with this credential`});let Y=Z?X.pullRequest:X.pullRequests?.nodes?.[0];return Y?rx4(Y,this.repo):null}async listOpen($){return(await this.rest(`/pulls?state=open&sort=updated&direction=desc&per_page=${Math.min($,100)}`,{operation:"change_request_list"})??[]).map(J91)}async lastMergedInto($){let Z=await this.graphql({query:nx4,variables:{owner:this.owner,repo:this.name,base:$},label:`last merged into ${$} on ${this.repo.path}`,operation:"change_request_last_merged"});if(!Z.repository)throw new I1({provider:"github",status:404,message:`${this.repo.path} is not accessible with this credential`});let Q=ax4(Z.repository.pullRequests?.nodes);if(!Q)return null;let X=Q.number??0;return{number:X,url:Q.url??Pc(this.repo,X),title:Q.title??"",body:Q.body??"",state:"merged",draft:!1,mergedAt:Q.mergedAt??null,updatedAt:Q.mergedAt??null,base:Q.baseRefName??$,head:Q.headRefName??"",headSha:Q.headRefOid??"",headRepoPath:null,author:Q.author?.login??"",conflicting:!1,checks:null,changedFiles:null}}async open($){let Z=await lJ(`${this.base}/pulls`,{method:"POST",token:await this.requireToken(),operation:"change_request_open",body:{title:$.title,body:$.body||void 0,head:$.head,base:$.base}});if(Z.ok)return J91(await U3(Z,"change_request_open"));let Q=await bX(Z,"change_request_open");if(/already exists|pull request already/i.test(Q.message))throw new oa(Q.message,await this.readForBranch($.head).catch(()=>null));throw Q}async describe($,Z){await this.rest(`/pulls/${$}`,{method:"PATCH",body:{body:Z},operation:"change_request_describe"})}async merge($,Z={}){let Q=hx4[Z.strategy??"any"],X="";for(let Y of Q){let J=await this.attemptMerge($,Y,Z);if(J.merged)return J;if(J.reason==="blocked"&&Vz$(J.detail)){X=J.detail;continue}return J}return{merged:!1,reason:"blocked",detail:X}}async attemptMerge($,Z,Q){let X;try{X=await lJ(`${this.base}/pulls/${$}/merge`,{method:"PUT",token:await this.requireToken(),operation:"change_request_merge",body:{merge_method:Z,...Q.commitTitle?{commit_title:Q.commitTitle}:{},...Q.commitMessage?{commit_message:Q.commitMessage}:{}}})}catch(G){return{merged:!1,...sx4(G)}}if(X.ok)return await X.body?.cancel().catch(()=>{}),{merged:!0};let Y=await bX(X,"change_request_merge");if(X.status===404)return{merged:!1,reason:"not_found",detail:Y.message};if(Vz$(Y.message))return{merged:!1,reason:"blocked",detail:Y.message};return{merged:!1,reason:await this.read($).then((G)=>G?.conflicting??null).catch(()=>null)===!0?"conflict":"blocked",detail:Y.message}}async readCheckLog($){let Z=await this.rest(`/check-runs/${encodeURIComponent($)}`,{operation:"change_request_check_log"});return Z?.output?.summary??Z?.output?.text??null}async readDeployedUrl($){let Z=await this.rest(`/deployments?sha=${encodeURIComponent($)}&per_page=${ux4}`,{operation:"change_request_deployments"});for(let Q of Z??[]){if(typeof Q.id!=="number")continue;let Y=(await this.rest(`/deployments/${Q.id}/statuses?per_page=10`,{operation:"change_request_deployment_statuses"})??[]).find((J)=>J.state==="success"&&typeof J.environment_url==="string"&&J.environment_url.length>0);if(Y?.environment_url)return Y.environment_url}return null}}function sx4($){let Z=$ instanceof Error?$.message:String($);if($ instanceof I1&&$.isRateLimited)return{reason:"rate_limited",detail:Z};return{reason:"error",detail:Z}}var hx4,ux4=3,kz$=`
|
|
2692
|
+
`),clientId:X,clientSecret:Y,slug:J}}function VP($,Z){let Q=$.get(Z);if(Q===null)return null;let X=Number(Q);return Number.isFinite(X)?X:null}function ov4($){return{limit:VP($,"x-ratelimit-limit"),remaining:VP($,"x-ratelimit-remaining"),reset:VP($,"x-ratelimit-reset"),used:VP($,"x-ratelimit-used"),resource:$.get("x-ratelimit-resource")}}function gL($){if($.status===429)return!0;if($.status!==403)return!1;if($.headers.get("retry-after")!==null)return!0;return VP($.headers,"x-ratelimit-remaining")===0}function hL($,Z=Date.now()){let Q=VP($,"retry-after");if(Q!==null)return Math.max(0,Q*1000);let X=VP($,"x-ratelimit-reset");if(X!==null)return Math.max(0,X*1000-Z);return null}function uL($,Z){let Q=ov4($),X=Q.resource??"unknown",Y={installation:Z.installation,resource:X},J={...Y,lane:Z.lane,operation:Z.operation};if(Nz$??=Y$.createCounter("github_api_calls",{description:"Calls to the GitHub API, by transport and operation",unit:"{calls}"}),Nz$.add(1,J),Q.remaining!==null)Fz$??=Y$.createGauge("github_rate_limit_remaining",{description:"Requests (REST) or points (GraphQL) left in the window",unit:"{requests}"}),Fz$.record(Q.remaining,Y);if(Q.used!==null)Uz$??=Y$.createGauge("github_rate_limit_used",{description:"Requests (REST) or points (GraphQL) spent in the window",unit:"{requests}"}),Uz$.record(Q.used,Y);return Q}function cL($){Bz$??=Y$.createCounter("github_rate_limited",{description:"GitHub responses refused for rate-limit reasons",unit:"{responses}"}),Bz$.add(1,$)}var Fz$=null,Uz$=null,Nz$=null,Bz$=null;var Zs=D(()=>{U6()});function fW0($){return process.env.GITHUB_API_BASE_URL??_N("github",$)}async function lJ($,Z){let Q={Authorization:`Bearer ${Z.token}`,Accept:Z.accept??av4,"X-GitHub-Api-Version":rv4};if(Z.body!==void 0)Q["Content-Type"]="application/json";let X;try{X=await fetch($,{method:Z.method??"GET",headers:Q,body:Z.body===void 0?void 0:JSON.stringify(Z.body),signal:AbortSignal.timeout(Z.timeoutMs??n51)})}catch(J){throw new I1({provider:"github",status:0,message:`GitHub ${Z.operation} failed: ${J instanceof Error?J.message:String(J)}`,cause:J})}let Y=Ic(Z.token);if(uL(X.headers,{lane:"rest",operation:Z.operation,installation:Y}),gL(X)){await X.body?.cancel().catch(()=>{});let J=X.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"rest",operation:Z.operation,installation:Y,kind:J});let G=hL(X.headers);throw new I1({provider:"github",status:X.status,retryAfterMs:G,message:`GitHub ${J} rate limit reached${G===null?"":`; retry in ${Math.ceil(G/1000)}s`}`})}return X}function t51($){try{let Z=JSON.parse($);if(Z!==null&&typeof Z==="object"&&"message"in Z&&typeof Z.message==="string"&&Z.message.length>0)return Z.message}catch{}return $.slice(0,300)}function o51($,Z,Q){let X=t51(Z);return new I1({provider:"github",status:$,message:`GitHub ${Q} failed: ${$}${X?` ${X}`:""}`})}async function bX($,Z){let Q=await $.text().catch(()=>"");return o51($.status,Q,Z)}async function U3($,Z){let Q=await $.text();try{return JSON.parse(Q)}catch(X){throw new I1({provider:"github",status:$.status,message:`GitHub ${Z} returned invalid JSON: ${Q.slice(0,300)}`,cause:X})}}var rv4="2022-11-28",av4="application/vnd.github+json",n51=15000;var Mc=D(()=>{t5();Zs();qc();Q7()});import{createPrivateKey as Dz$,sign as sv4}from"crypto";function r51($){return Buffer.from($).toString("base64url")}function Xx4($){let Z=r51(JSON.stringify({alg:"RS256",typ:"JWT"})),Q=r51(JSON.stringify({iat:$.nowSeconds-$x4,exp:$.nowSeconds+s51,iss:$.appId})),X=`${Z}.${Q}`,Y=sv4("RSA-SHA256",Buffer.from(X),Dz$($.privateKeyPem));return`${X}.${r51(Y)}`}function Yx4($){let Z=ba.find((Y)=>(Y in $));if(!Z)return null;let{[Z]:Q,...X}=$;return X}function Jx4($,Z){let Q=(Z.repositories??[]).map((Y)=>Y.toLowerCase()).sort(),X=Object.entries(Z.permissions??{}).map(([Y,J])=>`${Y}=${J}`).sort();return`${$}|${Q.join(",")}|${X.join(",")}`}function Gx4($,Z){for(let[Q,X]of $)if(X.expiresAt.getTime()<=Z)$.delete(Q)}function Oz$($){let Z=$.account;if(typeof $.id!=="number"||!Z||typeof Z.id!=="number"||typeof Z.login!=="string")return null;return{installationId:$.id,externalAccountId:String(Z.id),login:Z.login,avatarUrl:typeof Z.avatar_url==="string"?Z.avatar_url:null,accountType:typeof Z.type==="string"?Z.type:"User"}}function Kx4($){if(!$||typeof $!=="object"||Array.isArray($))return null;let Z={};for(let[Q,X]of Object.entries($))if(typeof X==="string")Z[Q]=X;return Z}class Lz${appId;privateKeyPem;apiBaseUrl;jwt=null;cache=new Map;inFlight=new Map;constructor($,Z){this.appId=$.appId,this.privateKeyPem=$.privateKeyPem,this.apiBaseUrl=(Z?.apiBaseUrl??ev4).replace(/\/+$/,"")}appJwt(){let $=Math.floor(Date.now()/1000);if(this.jwt&&this.jwt.exp-$>Zx4)return this.jwt.value;let Z=Xx4({appId:this.appId,privateKeyPem:this.privateKeyPem,nowSeconds:$});return this.jwt={value:Z,exp:$+s51},p51(Z,Wz$,($+s51)*1000),Z}installationToken($,Z={}){let Q=Jx4($,Z),X=Z.bufferMs??Qx4;if(!Z.forceRefresh){let G=this.cache.get(Q);if(G&&G.expiresAt.getTime()-Date.now()>X)return Promise.resolve(G)}let Y=this.inFlight.get(Q);if(Y)return Y;let J=this.mint($,Z).then((G)=>{return this.cache.set(Q,G),p51(G.token,String($),G.expiresAt.getTime()),Gx4(this.cache,Date.now()),G}).finally(()=>{this.inFlight.delete(Q)});return this.inFlight.set(Q,J),J}async mint($,Z){let X=`${this.apiBaseUrl}/app/installations/${$}/access_tokens`,Y=Z.repositories&&Z.repositories.length>0?Z.repositories:void 0,J=Z.permissions?{...Z.permissions}:void 0;for(;;){let G=await lJ(X,{method:"POST",token:this.appJwt(),body:{...Y&&{repositories:Y},...J&&{permissions:J}},operation:"installation_access_token"});if(G.ok){let K=await U3(G,"installation_access_token");if(typeof K.token!=="string"||typeof K.expires_at!=="string")throw new I1({provider:"github",status:G.status,message:"GitHub installation_access_token returned no token"});return{token:K.token,expiresAt:new Date(K.expires_at),permissions:Kx4(K.permissions)??J??{}}}if(G.status===422&&J){let K=await G.text().catch(()=>""),W=Yx4(J);if(W&&u61(t51(K))){J=W;continue}throw o51(G.status,K,"installation_access_token")}throw await bX(G,"installation_access_token")}}async getInstallation($){let Q=await lJ(`${this.apiBaseUrl}/app/installations/${$}`,{token:this.appJwt(),operation:"get_installation"});if(Q.status===404)return null;if(!Q.ok)throw await bX(Q,"get_installation");let X=Oz$(await U3(Q,"get_installation"));if(!X)throw new I1({provider:"github",status:Q.status,message:"GitHub get_installation returned an installation without a user or organization account"});return X}async listUserInstallations($){let X=[];for(let Y=1;;Y++){let J=await lJ(`${this.apiBaseUrl}/user/installations?per_page=100&page=${Y}`,{token:$,operation:"list_user_installations"});if(!J.ok)throw await bX(J,"list_user_installations");let G=await U3(J,"list_user_installations"),K=Array.isArray(G.installations)?G.installations:[];for(let W of K){let H=Oz$(W);if(H)X.push(H)}if(K.length<100)return X}}}function Vc(){if(a51===void 0){let $=yL();a51=$&&Wx4($)?new Lz$($):null}return a51}function Wx4($){try{return Dz$($.privateKeyPem),!0}catch(Z){return console.error("[git-providers] GITHUB_APP_PRIVATE_KEY is not a usable private key \u2014 "+"the GitHub App stays disabled and orgs keep their existing connections. Check that newlines survived the secret store.",Z),!1}}function wz$(){let $=yL()!==null&&Vc()!==null;return{configured:$,hosts:$?[Hx4]:[]}}var ev4="https://api.github.com",$x4=60,s51=540,Zx4=60,Qx4=300000,a51,Hx4="github.com";var bW0=D(()=>{TY();qc();Q7();Mc()});function Ox4($){return $==="public"||$==="private"||$==="internal"}function Ez$($,Z){let Q="public";if($.private)Q="private";else if($.visibility&&Ox4($.visibility))Q=$.visibility;return{ref:{provider:"github",host:Z,path:$.full_name},externalId:String($.id),defaultBranch:$.default_branch??null,webUrl:$.html_url,visibility:Q,description:$.description??null,updatedAt:$.pushed_at??$.updated_at??null}}function Dx4($,Z){let Q=Z?.trim().toLowerCase();if(!Q)return!0;return $.toLowerCase().includes(Q)}function Lx4($){return{name:$.name||$.login,email:$.email||`${$.login}@users.noreply.github.com`}}function wx4($){return $.split("/").filter(Boolean).map(encodeURIComponent).join("/")}function jx4($,Z){let{owner:Q,name:X}=l7($),Y=`/repos/${encodeURIComponent(Q)}/${encodeURIComponent(X)}/tarball`;return Z?`${Y}/${encodeURIComponent(Z)}`:Y}class kc{kind="github";host;apiBaseUrl;options;constructor($){this.options=$,this.host=$.host.toLowerCase(),this.apiBaseUrl=_N("github",$.host)}async tokenForRepo($,Z={}){let Q=this.options;if("appAuth"in Q){let X=await Q.appAuth.installationToken(Q.installationId,{repositories:[u51($)],permissions:EW0,bufferMs:Z.bufferMs,forceRefresh:Z.forceRefresh});return{token:X.token,kind:"installation",expiresAt:X.expiresAt}}return this.sourceToken(Q.tokenSource,Z)}async accountToken($={}){let Z=this.options;if("appAuth"in Z){let Q=await Z.appAuth.installationToken(Z.installationId,{permissions:Fx4,bufferMs:$.bufferMs,forceRefresh:$.forceRefresh});return{token:Q.token,kind:"installation",expiresAt:Q.expiresAt}}return this.sourceToken(Z.tokenSource,$)}async sourceToken($,Z){let Q=await $.get(Z);if(!Q)throw new I1({provider:"github",status:401,message:`No usable GitHub token for ${this.host}; reconnect the account`});return Q}async getRepo($){let{owner:Q,name:X}=l7($),Y=await this.request(`/repos/${encodeURIComponent(Q)}/${encodeURIComponent(X)}`,{operation:"get_repo"});if(Y.status===404)return await Y.body?.cancel().catch(()=>{}),null;if(!Y.ok)throw await bX(Y,"get_repo");return Ez$(await U3(Y,"get_repo"),this.host)}async listRepos($={}){let Z=Math.max(1,Math.floor($.page??1)),Q=Math.min(Nx4,Math.max(1,Math.floor($.perPage??Ux4))),X=`per_page=${Q}&page=${Z}`,Y;if("appAuth"in this.options){let G=await this.request(`/installation/repositories?${X}`,{operation:"list_installation_repositories"});if(!G.ok)throw await bX(G,"list_installation_repositories");let K=await U3(G,"list_installation_repositories");Y=Array.isArray(K.repositories)?K.repositories:[]}else{let G=await this.request(`/user/repos?affiliation=owner,collaborator,organization_member&sort=pushed&${X}`,{operation:"list_user_repositories"});if(!G.ok)throw await bX(G,"list_user_repositories");let K=await U3(G,"list_user_repositories");Y=Array.isArray(K)?K:[]}return{repositories:Y.filter((J)=>Dx4(J.full_name,$.query)).map((J)=>Ez$(J,this.host)),hasMore:Y.length===Q}}async readFile($,Z,Q){let{owner:Y,name:J}=l7($),G=Q?`?ref=${encodeURIComponent(Q)}`:"",K=await this.request(`/repos/${encodeURIComponent(Y)}/${encodeURIComponent(J)}/contents/${wx4(Z)}${G}`,{operation:"read_file",accept:Bx4});if(K.status===404)return await K.body?.cancel().catch(()=>{}),null;if(!K.ok)throw await bX(K,"read_file");return K.text()}async archiveTarball($,Z){let X=`${this.apiBaseUrl}${jx4($,Z)}`,Y=await this.tokenForRepo($),J=await lJ(X,{operation:"archive_tarball",token:Y.token,timeoutMs:jz$});if(J.status===401){await J.body?.cancel().catch(()=>{});let G=await this.tokenForRepo($,{forceRefresh:!0});J=await lJ(X,{operation:"archive_tarball",token:G.token,timeoutMs:jz$})}if(J.status===404)return await J.body?.cancel().catch(()=>{}),null;if(!J.ok)throw await bX(J,"archive_tarball");return J.body}async identity(){if("appAuth"in this.options)return null;let $="get_user",Z=await this.request("/user",{operation:$});if(!Z.ok)throw await bX(Z,$);return Lx4(await U3(Z,$))}async request($,Z){let Q=`${this.apiBaseUrl}${$}`,X=await this.accountToken(),Y=await lJ(Q,{...Z,token:X.token});if(Y.status!==401)return Y;await Y.body?.cancel().catch(()=>{});let J=await this.accountToken({forceRefresh:!0});return lJ(Q,{...Z,token:J.token})}}var Fx4,Ux4=30,Nx4=100,Bx4="application/vnd.github.raw+json",jz$=60000;var e51=D(()=>{t5();TY();Q7();Mc();Fx4={metadata:"read",contents:"read"}});function yW0($){return _N("gitlab",$)}function zx4($){let Z=(Q)=>{if(typeof Q==="string")return Q.length>0?[Q]:[];if(Array.isArray(Q))return Q.flatMap(Z);if(Q!==null&&typeof Q==="object")return Object.values(Q).flatMap(Z);return[]};try{let Q=JSON.parse($);if(Q!==null&&typeof Q==="object"){let X=Q,Y=[...Z(X.message),...Z(X.error),...Z(X.error_description)];if(Y.length>0)return Y.join("; ")}}catch{}return $.slice(0,300)}async function QW($){let Z=await $.text().catch(()=>""),Q=Z?zx4(Z):$.statusText;return new I1({provider:"gitlab",status:$.status,message:`GitLab API ${$.status}: ${Q}`,retryAfterMs:$.status===429?zz$($.headers):null})}async function Qs($,Z){let Q=await $.text();try{return JSON.parse(Q)}catch(X){throw new I1({provider:"gitlab",status:$.status,message:`GitLab ${Z} returned invalid JSON: ${Q.slice(0,300)}`,cause:X})}}async function lL($,Z,Q={}){let X={Authorization:`Bearer ${Z}`,Accept:Q.accept??"application/json"};if(Q.body!==void 0)X["Content-Type"]="application/json";try{return await fetch($,{method:Q.method??"GET",headers:X,body:Q.body===void 0?void 0:JSON.stringify(Q.body),signal:AbortSignal.timeout(Q.timeoutMs??Ex4)})}catch(Y){throw new I1({provider:"gitlab",status:0,message:`GitLab request failed: ${Y instanceof Error?Y.message:String(Y)}`,cause:Y})}}var Ex4=15000;var gW0=D(()=>{t5();Q7();kP()});import{z as vQ}from"zod";function SP($){return encodeURIComponent($)}function Xs($){return encodeURIComponent($.replace(/^\/+/,""))}function Rx4($,Z){let Q=`/projects/${SP($.path)}/repository/archive.tar.gz`;return Z?`${Q}?sha=${encodeURIComponent(Z)}`:Q}function zz$($,Z=Date.now()){let Q=$.get("retry-after");if(Q!==null){let Y=Number(Q);if(Number.isFinite(Y))return Math.max(0,Y*1000);let J=Date.parse(Q);if(Number.isFinite(J))return Math.max(0,J-Z)}let X=$.get("ratelimit-reset");if(X!==null){let Y=Number(X);if(Number.isFinite(Y))return Math.max(0,Y*1000-Z)}return null}function Pz$($,Z){let Q=Ix4.parse($),X={provider:"gitlab",host:Z,path:Q.path_with_namespace};return{ref:X,externalId:String(Q.id),defaultBranch:Q.default_branch??null,webUrl:Q.web_url??ZW(X),visibility:Q.visibility,description:Q.description??null,updatedAt:Q.last_activity_at??null}}async function qx4($,Z,Q={}){let X=await lL($,Z,Q);if(X.status===404)return await X.body?.cancel().catch(()=>{}),null;if(!X.ok)throw await QW(X);return X}async function Mx4($,Z){let Q=await qx4(`${_N("gitlab",$)}/user`,Z);if(!Q)throw new I1({provider:"gitlab",status:404,message:"GitLab did not recognise the authenticated user"});return Az$.parse(await Qs(Q,"get_user"))}async function hW0($,Z){let Q=await Mx4($,Z);return{externalAccountId:String(Q.id),login:Q.username,avatarUrl:Q.avatar_url??null}}class Ys{kind="gitlab";host;apiBase;tokenSource;constructor($){this.host=$.host,this.apiBase=_N("gitlab",$.host),this.tokenSource=$.tokenSource}async tokenForRepo($,Z){return this.accountToken(Z)}async accountToken($){let Z=await this.tokenSource.get($);if(!Z)throw new I1({provider:"gitlab",status:401,message:"GitLab account is not authenticated"});return Z}async getRepo($){let Z=await this.get(`/projects/${SP($.path)}`);if(!Z)return null;return Pz$(await Qs(Z,"get_repo"),this.host)}async listRepos($={}){let Z=new URLSearchParams({membership:"true",simple:"true",order_by:"id",sort:"desc",per_page:String(Math.min(Tx4,Math.max(1,$.perPage??Ax4))),page:String(Math.max(1,$.page??1))}),Q=$.query?.trim();if(Q)Z.set("search",Q);let X=await this.get(`/projects?${Z}`);if(!X)return{repositories:[],hasMore:!1};let Y=await Qs(X,"list_repos");if(!Array.isArray(Y))throw new I1({provider:"gitlab",status:502,message:"GitLab /projects returned a non-array payload"});return{repositories:Y.map((J)=>Pz$(J,this.host)),hasMore:Y.length===Number(Z.get("per_page"))}}async readFile($,Z,Q){let X=Q;if(!X){let J=await this.getRepo($);if(!J?.defaultBranch)return null;X=J.defaultBranch}let Y=await this.get(`/projects/${SP($.path)}/repository/files/${Xs(Z)}/raw?ref=${encodeURIComponent(X)}`,{accept:"text/plain, */*"});if(!Y)return null;return Y.text()}async archiveTarball($,Z){let Q=await this.authedFetch(`${this.apiBase}${Rx4($,Z)}`,{accept:"application/octet-stream, */*",timeoutMs:Px4});if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await QW(Q);return Q.body}async identity(){let $=await this.authedFetch(`${this.apiBase}/user`);if(!$.ok)throw await QW($);let Z=Az$.parse(await Qs($,"identity"));return{name:Z.name||Z.username,email:Z.commit_email||Z.public_email||Z.email||`${Z.username}@users.noreply.${this.host}`}}async get($,Z){let Q=await this.authedFetch(`${this.apiBase}${$}`,Z);if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await QW(Q);return Q}async authedFetch($,Z={}){let Q=await this.accountToken(),X=await lL($,Q.token,Z);if(X.status!==401)return X;await X.body?.cancel().catch(()=>{});let Y=await this.accountToken({forceRefresh:!0});return lL($,Y.token,Z)}}var Px4=60000,Ax4=30,Tx4=100,Ix4,Az$;var kP=D(()=>{t5();Q7();gW0();Ix4=vQ.object({id:vQ.number(),path_with_namespace:vQ.string().min(1),default_branch:vQ.string().nullish(),web_url:vQ.string().nullish(),visibility:vQ.enum(["public","private","internal"]),description:vQ.string().nullish(),last_activity_at:vQ.string().nullish()});Az$=vQ.object({id:vQ.number(),username:vQ.string().min(1),name:vQ.string().nullish(),avatar_url:vQ.string().nullish(),email:vQ.string().nullish(),public_email:vQ.string().nullish(),commit_email:vQ.string().nullish()})});function Tz$($,Z,Q){return{kind:Q,async get(X){let Y=X?.forceRefresh?await $.get(Z):null,J=await mJ({connectionId:Z,tokenStorage:$,bufferMs:X?.bufferMs,force:X?.forceRefresh===!0&&Y!==null&&mL(Y)});if(!J.accessToken)return null;return{token:J.accessToken,kind:Q,expiresAt:null}}}}function $91($){return $==="token"?"token":"oauth"}function Js($){if($.status!=="active")return!1;if($.type==="github"&&$.authKind==="github_app")return Vc()!==null&&$.installationId!==null;return!0}function CP($,Z){let Q=new sa($.db,$.vault);switch(Z.type){case"github":{if(Z.authKind==="github_app"){let X=Vc();if(!X||Z.installationId===null)throw new I1({provider:"github",status:503,message:"GitHub App credentials are not configured on this deployment"});return new kc({host:Z.host,installationId:Z.installationId,appAuth:X})}return new kc({host:Z.host,tokenSource:Tz$(Q,Z.id,$91(Z.authKind))})}case"gitlab":return new Ys({host:Z.host,tokenSource:Tz$(Q,Z.id,$91(Z.authKind))})}}function Vx4($){if($.authKind==="github_app")return"installation";return $91($.authKind)}function uW0($,Z,Q="installation"){return{ref:$,tokenSource:{kind:Q,get:()=>Promise.resolve({token:Z,kind:Q,expiresAt:null})}}}async function Z91($,Z){let Q=Rc(Z);if(!Z.accountId)throw new I1({provider:Z.provider,status:401,message:`${Z.path} is linked without an account; link it again to read and write it`});let X=await new Ac($.db).getUnscoped(Z.accountId);if(!X||X.organizationId!==Z.organizationId)throw new I1({provider:Z.provider,status:404,message:`The account backing ${Z.path} no longer exists. Link the repository again.`});let Y=CP($,X),J=Vx4(X);return{ref:Q,tokenSource:{kind:J,get:(G)=>Y.tokenForRepo(Q,G)}}}async function ZF($,Z,Q){let X=Rc(Z);if(!Z.accountId)return kx4(X);let Y=await new Ac($.db).getUnscoped(Z.accountId);if(!Y||Y.organizationId!==Z.organizationId)throw new I1({provider:Z.provider,status:404,message:`The account backing ${Z.path} no longer exists. Link the repository again.`});let J=CP($,Y),G=await J.tokenForRepo(X,Q),K=G.kind==="installation"?null:await J.identity().catch(()=>null);return{cloneUrl:c51(X,G.token),gitUserName:K?.name??$F.name,gitUserEmail:K?.email??$F.email}}function kx4($){return{cloneUrl:c51($),gitUserName:$F.name,gitUserEmail:$F.email}}async function Q91($,Z,Q){let X=Q.repositoryId?await $.repositories.get(Q.repositoryId,Z):Q.ref?await $.repositories.findByRef(Z,Q.ref):null,Y=X?Rc(X):Q.ref??null;if(!Y)return null;return{ref:Y,repository:X,servable:X?await xN($,X):!1}}async function xN($,Z){if(!Z.accountId)return!1;let Q=await $.gitProviderAccounts.getUnscoped(Z.accountId);return Q!==null&&Js(Q)}var cW0=D(()=>{t5();K3();d51();$s();bW0();e51();kP();Q7()});async function Sx4($,Z){let Q=$.organization?.id;if(!Q)throw Error(VZ);if(!Z.sourceConnectionId)throw Error(VZ);let X=await $.storage.connections.findById(Z.sourceConnectionId,Q);if(!X)throw Error(VZ);let{clientFromConnection:Y}=await Promise.resolve().then(() => (ja(),Mz$)),J=await Y(X,$,!0);try{let{result:G}=await uj$((H)=>J.callTool({name:"MINT_REPO_TOKEN",arguments:{installationId:Z.installationId,owner:Z.owner,repo:Z.repo,permissions:H}}),hj$(Z.permissions)),K=G.structuredContent?.token;if(G.isError||!K)throw Error(VZ);let W=G.structuredContent?.expiresAt;return{accessToken:K,expiresAt:W?new Date(W):null}}finally{await J.close().catch(()=>{})}}function Cx4($,Z){return($?.getTime()??0)>Z?$:new Date(Z+qz$)}async function _x4($,Z,Q,X){let Y=Date.now(),J=await Sx4($,Q),G=Cx4(J.expiresAt,Y);try{await X.upsert({connectionId:Z,accessToken:J.accessToken,refreshToken:null,scope:null,expiresAt:G,clientId:null,clientSecret:null,tokenEndpoint:null})}catch(K){console.warn("[GithubMint] failed to persist minted token",{connectionId:Z,message:K instanceof Error?K.message:String(K)})}return J.accessToken}async function Gs($,Z,Q){let X=J9(Z);if(!X)throw Error("Connection is not repo-scoped");if(!X.sourceConnectionId)throw Error(VZ);let Y=new C5($.db,$.vault),J=await Y.get(Z.id);if(!Q?.forceRefresh&&J&&!Y.isExpired(J,Ws))return J.accessToken;let G=X91.get(Z.id);if(G)return G;let K=_x4($,Z.id,X,Y).finally(()=>{X91.delete(Z.id)});return X91.set(Z.id,K),K}function Rz$($){return $.slug==="mcp-github"}async function Iz$($,Z,Q){if(J9(Z)?.sourceConnectionId)return Gs($,Z,Q);return(await mJ({connectionId:Z.id,connectionUrl:Z.connection_url,tokenStorage:new C5($.db,$.vault),force:Q?.forceRefresh})).accessToken}var X91;var Ks=D(()=>{K3();TY();tK();X91=new Map});function vx4(){return process.env.GITHUB_GRAPHQL_URL??"https://api.github.com/graphql"}function fx4($){return $>=500&&$<600}function bx4($){return $ instanceof r9?$.cause:$}function yx4($,Z){try{return JSON.parse($)}catch(Q){throw Error(`GitHub GraphQL ${Z} returned invalid JSON: ${$.slice(0,300)}`,{cause:Q})}}function gx4($,Z){let Q=$.errors?.[0]?.message;if(Q)throw Error(`GitHub GraphQL ${Z} failed: ${Q}`);if($.data==null)throw Error(`GitHub GraphQL ${Z} returned no data`);return $.data}async function lW0($){let Z=await $.getToken();if(!Z)throw Error($.missingTokenMessage);let Q=(K)=>fetch(vx4(),{method:"POST",headers:{Authorization:`Bearer ${K}`,Accept:"application/vnd.github+json","Content-Type":"application/json"},body:JSON.stringify({query:$.query,variables:$.variables}),signal:AbortSignal.timeout(xx4)}),X=async(K)=>{try{return await J4(async()=>{let W=await Q(K);if(fx4(W.status)){let H=W.status;throw await W.body?.cancel().catch(()=>{}),Error(`GitHub GraphQL transient error: ${H}`)}return W},{maxAttempts:3,minTimeout:300,maxTimeout:3000,jitter:1})}catch(W){throw bx4(W)}},Y=await X(Z),J=Z;if(Y.status===401){try{await Y.body?.cancel()}catch{}let K=await $.getToken(!0);if(!K)throw Error($.missingTokenMessage);if(Y=await X(K),J=K,Y.status===401)throw Error($.missingTokenMessage)}let G=Ic(J);if(uL(Y.headers,{lane:"graphql",operation:$.operation,installation:G}),gL(Y)){let K=Y.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"graphql",operation:$.operation,installation:G,kind:K});let W=hL(Y.headers);throw Error(`GitHub ${K} rate limit reached${W===null?"":`; retry in ${Math.ceil(W/1000)}s`}`)}if(!Y.ok)throw Error(`GitHub GraphQL ${$.label} failed: ${Y.status}`);return gx4(yx4(await Y.text(),$.label),$.label)}var xx4=15000;var Y91=D(()=>{C8();Zs();qc()});function cx4($){if(!$)return null;if($.state!=="open")return!1;if(typeof $.mergeable==="boolean")return!$.mergeable;let Z=$.mergeable_state;if(typeof Z!=="string"||Z===""||Z==="unknown")return null;return Z==="dirty"}function lx4($){if($==="clean")return"passing";if($==="unstable")return"failing";return null}function J91($){let Z=$.merged===!0||typeof $.merged_at==="string";return{number:$.number??0,url:$.html_url??"",title:$.title??"",body:$.body??"",state:Z?"merged":$.state==="closed"?"closed":"open",draft:$.draft===!0,mergedAt:$.merged_at??null,updatedAt:$.updated_at??null,base:$.base?.ref??"main",head:$.head?.ref??"",headSha:$.head?.sha??"",headRepoPath:$.head?.repo?.full_name??null,author:$.user?.login??"",conflicting:cx4($),checks:lx4($.mergeable_state),changedFiles:typeof $.changed_files==="number"?$.changed_files:null}}function mx4($){if($==="IN_PROGRESS")return"running";if($==="COMPLETED")return"completed";return"queued"}function dx4($){switch($){case"SUCCESS":return"success";case"FAILURE":case"STARTUP_FAILURE":return"failure";case"NEUTRAL":case"STALE":return"neutral";case"CANCELLED":return"cancelled";case"SKIPPED":return"skipped";case"TIMED_OUT":return"timed_out";case"ACTION_REQUIRED":return"action_required";default:return null}}function tx4($){let Z=$.state;return{id:null,name:$.context??"",state:Z==="PENDING"||Z==="EXPECTED"?"running":"completed",conclusion:Z==="SUCCESS"?"success":Z==="FAILURE"||Z==="ERROR"?"failure":Z==="PENDING"||Z==="EXPECTED"?null:"neutral",url:$.targetUrl??null,durationMs:null,summary:$.description??null}}function ox4($){let Z=$.commits?.nodes?.[0]?.commit?.statusCheckRollup?.contexts?.nodes??[],Q=[];for(let X of Z){if(!X)continue;if(X.__typename==="StatusContext"){Q.push(tx4(X));continue}if(X.__typename!=="CheckRun")continue;let{startedAt:Y,completedAt:J}=X;Q.push({id:X.databaseId==null?null:String(X.databaseId),name:X.name??"",state:mx4(X.status),conclusion:dx4(X.conclusion),url:X.detailsUrl??null,durationMs:Y&&J?new Date(J).getTime()-new Date(Y).getTime():null,summary:X.summary??null})}return Q}function rx4($,Z){let Q=($.reviewThreads?.nodes??[]).filter((W)=>W?.isResolved===!1).length,X=$.reviewDecision,Y=X==="REVIEW_REQUIRED"||X==="CHANGES_REQUESTED",J=ox4($),G=$.number??0,K=$.merged===!0;return{number:G,url:$.url??Pc(Z,G),title:$.title??"",body:$.body??"",state:K?"merged":$.state==="OPEN"?"open":"closed",draft:$.isDraft===!0,mergedAt:$.mergedAt??null,updatedAt:$.updatedAt??null,base:$.baseRefName??"main",head:$.headRefName??"",headSha:$.headRefOid??"",headRepoPath:$.headRepository?.nameWithOwner??null,author:$.author?.login??"",conflicting:$.state!=="OPEN"?!1:$.mergeable==="CONFLICTING"?!0:$.mergeable==="MERGEABLE"?!1:null,checks:vW0(J),changedFiles:$.changedFiles??null,checkRuns:J,comments:($.comments?.nodes??[]).flatMap((W)=>W?[{id:String(W.databaseId??0),author:W.author?.login??"",body:W.body??"",createdAt:W.createdAt??"",updatedAt:W.updatedAt??W.createdAt??"",url:W.url??""}]:[]),unresolvedConversations:Q,reviewBlocked:Y}}function ax4($){let Z=null,Q=-1/0;for(let X of $??[]){if(!X?.mergedAt)continue;let Y=Date.parse(X.mergedAt);if(Number.isNaN(Y)||Y<=Q)continue;Z=X,Q=Y}return Z}function Vz$($){return/not allowed on this repository/i.test($)}class G91{repo;tokenSource;apiBaseUrl;owner;name;constructor($){this.repo=$.repo,this.tokenSource=$.tokenSource,this.apiBaseUrl=fW0($.repo.host);let{owner:Z,name:Q}=l7($.repo);this.owner=Z,this.name=Q}async token($){return(await this.tokenSource.get($?{forceRefresh:!0}:void 0))?.token??null}async requireToken(){let $=await this.token();if($)return $;throw new I1({provider:"github",status:401,message:`No usable GitHub token for ${this.repo.path}; reconnect the account`})}get base(){return`${this.apiBaseUrl}/repos/${this.owner}/${this.name}`}async rest($,Z){let Q=await lJ(`${this.base}${$}`,{method:Z.method,body:Z.body,token:await this.requireToken(),operation:Z.operation});if(Q.status===404)return await Q.body?.cancel().catch(()=>{}),null;if(!Q.ok)throw await bX(Q,Z.operation);if(Q.status===204)return null;return U3(Q,Z.operation)}graphql($){return lW0({getToken:(Z)=>this.token(Z),missingTokenMessage:`No usable GitHub token for ${this.repo.path}; reconnect the account`,...$})}async read($){let Z=await this.rest(`/pulls/${$}`,{operation:"change_request_read"});return Z?J91(Z):null}async readForBranch($){return await this.readDetailed({branch:$})}async readDetailed($){let Z="number"in $,X=(await this.graphql({query:Z?px4:ix4,variables:Z?{owner:this.owner,repo:this.name,number:$.number}:{owner:this.owner,repo:this.name,branch:$.branch},label:`change request for ${this.repo.path}`,operation:"change_request_detail"})).repository;if(!X)throw new I1({provider:"github",status:404,message:`${this.repo.path} is not accessible with this credential`});let Y=Z?X.pullRequest:X.pullRequests?.nodes?.[0];return Y?rx4(Y,this.repo):null}async listOpen($){return(await this.rest(`/pulls?state=open&sort=updated&direction=desc&per_page=${Math.min($,100)}`,{operation:"change_request_list"})??[]).map(J91)}async lastMergedInto($){let Z=await this.graphql({query:nx4,variables:{owner:this.owner,repo:this.name,base:$},label:`last merged into ${$} on ${this.repo.path}`,operation:"change_request_last_merged"});if(!Z.repository)throw new I1({provider:"github",status:404,message:`${this.repo.path} is not accessible with this credential`});let Q=ax4(Z.repository.pullRequests?.nodes);if(!Q)return null;let X=Q.number??0;return{number:X,url:Q.url??Pc(this.repo,X),title:Q.title??"",body:Q.body??"",state:"merged",draft:!1,mergedAt:Q.mergedAt??null,updatedAt:Q.mergedAt??null,base:Q.baseRefName??$,head:Q.headRefName??"",headSha:Q.headRefOid??"",headRepoPath:null,author:Q.author?.login??"",conflicting:!1,checks:null,changedFiles:null}}async open($){let Z=await lJ(`${this.base}/pulls`,{method:"POST",token:await this.requireToken(),operation:"change_request_open",body:{title:$.title,body:$.body||void 0,head:$.head,base:$.base}});if(Z.ok)return J91(await U3(Z,"change_request_open"));let Q=await bX(Z,"change_request_open");if(/already exists|pull request already/i.test(Q.message))throw new oa(Q.message,await this.readForBranch($.head).catch(()=>null));throw Q}async describe($,Z){await this.rest(`/pulls/${$}`,{method:"PATCH",body:{body:Z},operation:"change_request_describe"})}async merge($,Z={}){let Q=hx4[Z.strategy??"any"],X="";for(let Y of Q){let J=await this.attemptMerge($,Y,Z);if(J.merged)return J;if(J.reason==="blocked"&&Vz$(J.detail)){X=J.detail;continue}return J}return{merged:!1,reason:"blocked",detail:X}}async attemptMerge($,Z,Q){let X;try{X=await lJ(`${this.base}/pulls/${$}/merge`,{method:"PUT",token:await this.requireToken(),operation:"change_request_merge",body:{merge_method:Z,...Q.commitTitle?{commit_title:Q.commitTitle}:{},...Q.commitMessage?{commit_message:Q.commitMessage}:{}}})}catch(G){return{merged:!1,...sx4(G)}}if(X.ok)return await X.body?.cancel().catch(()=>{}),{merged:!0};let Y=await bX(X,"change_request_merge");if(X.status===404)return{merged:!1,reason:"not_found",detail:Y.message};if(Vz$(Y.message))return{merged:!1,reason:"blocked",detail:Y.message};return{merged:!1,reason:await this.read($).then((G)=>G?.conflicting??null).catch(()=>null)===!0?"conflict":"blocked",detail:Y.message}}async readCheckLog($){let Z=await this.rest(`/check-runs/${encodeURIComponent($)}`,{operation:"change_request_check_log"});return Z?.output?.summary??Z?.output?.text??null}async readDeployedUrl($){let Z=await this.rest(`/deployments?sha=${encodeURIComponent($)}&per_page=${ux4}`,{operation:"change_request_deployments"});for(let Q of Z??[]){if(typeof Q.id!=="number")continue;let Y=(await this.rest(`/deployments/${Q.id}/statuses?per_page=10`,{operation:"change_request_deployment_statuses"})??[]).find((J)=>J.state==="success"&&typeof J.environment_url==="string"&&J.environment_url.length>0);if(Y?.environment_url)return Y.environment_url}return null}}function sx4($){let Z=$ instanceof Error?$.message:String($);if($ instanceof I1&&$.isRateLimited)return{reason:"rate_limited",detail:Z};return{reason:"error",detail:Z}}var hx4,ux4=3,kz$=`
|
|
2693
2693
|
fragment CrDetail on PullRequest {
|
|
2694
2694
|
number
|
|
2695
2695
|
title
|
|
@@ -4565,7 +4565,7 @@ Hint: Configure a valid Google account email in Monitor Configuration > Contexto
|
|
|
4565
4565
|
|
|
4566
4566
|
`).trim(),N=F.length>0?`Not executed tools (${F.length}/${$.tools.length}): ${F.join(", ")}`:"",B=[U,N].filter((O)=>O.length>0).join(`
|
|
4567
4567
|
|
|
4568
|
-
`);return{toolResults:W,agentSummary:B.length>0?B:null,unexecutedTools:F}}finally{await Z.close?.().catch(()=>{})}}async function EO1($,Z){let Q=$.storage.registry,X=$.organization.id,Y=await Q.monitorConnections.findByItemId(X,Z.id);if(Y){if(await $.storage.connections.findById(Y.connection_id,X))return Y.connection_id}let J=Tg6(Z);if(!J)throw Error(`Registry item ${Z.id} has no remote URL`);if(VD(J))throw Error(`Registry item ${Z.id} targets a private network URL, refusing to create a monitor connection`);let G=Pg6($),K=Ag6(Z),W=await $.storage.connections.create({organization_id:X,created_by:G,title:`[MCP Tester] ${Z.title}`,description:`Auto-created monitor connection for ${Z.id}`,app_name:"private-registry-monitor",app_id:`${Lb}:monitor`,connection_type:K,connection_url:J,metadata:{monitorConnection:!0,registryItemId:Z.id,pluginId:Lb}});return await Q.monitorConnections.upsert({organization_id:X,item_id:Z.id,connection_id:W.id,auth_status:"none"}),W.id}async function vg6($){let Z=$.ctx.storage.registry;switch($.action){case"unlisted":return await Z.items.update($.organizationId,$.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Z.items.update($.organizationId,$.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Z.items.delete($.organizationId,$.item.id),$.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function xg6($){let Z=Date.now();if($.signal.aborted)throw Error("Run cancelled");let Q="passed",X=!1,Y=!1,J=null,G="none",K=null,W=[],H=null,F=async()=>{await $.onProgress?.({status:Q,connectionOk:X,toolsListed:Y,toolResults:[...W],agentSummary:K,errorMessage:J,actionTaken:G,durationMs:Date.now()-Z})};try{let U=await EO1($.ctx,$.item);H=await $.ctx.createMCPProxy(U),X=!0;let B=(await a$0(H.listTools?H.listTools():Promise.resolve({tools:[]}),$.monitorConfig.perMcpTimeoutMs,`listTools ${$.item.id}`)).tools??[];if(Y=!0,$.monitorConfig.monitorMode!=="health_check")W.push(...B.map((O)=>jO1(O.name))),await F();if($.monitorConfig.monitorMode==="full_agent"){let O=await _g6({ctx:$.ctx,monitorConfig:$.monitorConfig,item:$.item,proxy:H,tools:B,signal:$.signal,onProgress:async(L)=>{W.length=0,W.push(...W78({discoveredTools:B,executedResults:L})),Q=L.some((w)=>!w.success)?"failed":"passed",await F()}});if(W.length=0,W.push(...W78({discoveredTools:B,executedResults:O.toolResults})),K=O.agentSummary,O.toolResults.some((L)=>!L.success))Q="failed";if(O.unexecutedTools.length>0){if(Q="failed",!J)J=`Agent skipped ${O.unexecutedTools.length} tool(s): ${O.unexecutedTools.join(", ")}`}}else if($.monitorConfig.monitorMode!=="health_check"){for(let O=0;O<B.length;O++){let L=B[O];if(!L||$.signal.aborted)throw Error("Run cancelled");let w=Date.now();try{let j={},E=await a$0(H.callTool({name:L.name,arguments:j}),$.monitorConfig.perToolTimeoutMs,`tool ${L.name}`),z=!E.isError,P=Date.now()-w;H78(W,{toolName:L.name,success:z,input:j,durationMs:P,outputPreview:B78(E.structuredContent??E.content),error:z?null:sk0(E.content?.find((A)=>A.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await F()}catch(j){let E=Date.now()-w,z=j instanceof Error?j.message:String(j);H78(W,{toolName:L.name,success:!1,durationMs:E,error:sk0(z)}),await F()}}if(W.some((O)=>!O.success))Q="failed"}else for(let O of B)W.push(jO1(O.name));if($.canApplyFailureAction&&Q==="failed"&&$.monitorConfig.onFailure!=="none")G=await vg6({ctx:$.ctx,organizationId:$.organizationId,item:$.item,action:$.monitorConfig.onFailure})}catch(U){if(J=U instanceof Error?U.message:String(U),Rg6(U))Q="needs_auth",await $.ctx.storage.registry.monitorConnections.updateAuthStatus($.organizationId,$.item.id,"needs_auth");else Q="error"}finally{await H?.close?.().catch(()=>{})}return{status:Q,connectionOk:X,toolsListed:Y,toolResults:W,agentSummary:K,errorMessage:J,actionTaken:G,durationMs:Date.now()-Z}}async function fg6($){let Z=$.ctx.storage.registry,X=(await Z.items.list($.organizationId,{includeUnlisted:!0})).items.filter((F)=>{if($.monitorConfig.testPublicOnly&&!F.is_public)return!1;if($.monitorConfig.testPrivateOnly&&F.is_public)return!1;return!0}),Y=$.monitorConfig.includePendingRequests?(await Z.publishRequests.list($.organizationId,{status:"pending",limit:500})).items.map((F)=>bg6(F)):[],J=[...X.map((F)=>({item:F,source:"registry_item"})),...Y.map((F)=>({item:F,source:"publish_request"}))];if(J.length===0){await Z.monitorRuns.update($.organizationId,$.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{total_items:J.length,status:"running",started_at:new Date().toISOString()});let G=0,K=0,W=0,H=0;for(let F=0;F<J.length;F++){let U=J[F],N=U?.item;if(!N||$.signal.aborted){await Z.monitorRuns.update($.organizationId,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{current_item_id:N.id});let B=null,O=async(w)=>{if(!B){B=(await Z.monitorResults.create({run_id:$.runId,organization_id:$.organizationId,item_id:N.id,item_title:N.title,status:w.status,error_message:w.errorMessage,connection_ok:w.connectionOk,tools_listed:w.toolsListed,tool_results:w.toolResults,agent_summary:w.agentSummary,duration_ms:w.durationMs,action_taken:w.actionTaken})).id;return}await Z.monitorResults.update($.organizationId,B,{status:w.status,error_message:w.errorMessage,connection_ok:w.connectionOk,tools_listed:w.toolsListed,tool_results:w.toolResults,agent_summary:w.agentSummary,duration_ms:w.durationMs,action_taken:w.actionTaken})},L=await xg6({ctx:$.ctx,organizationId:$.organizationId,item:N,monitorConfig:$.monitorConfig,signal:$.signal,canApplyFailureAction:U.source==="registry_item",onProgress:O});if(await O({status:L.status,connectionOk:L.connectionOk,toolsListed:L.toolsListed,toolResults:L.toolResults,agentSummary:L.agentSummary,errorMessage:L.errorMessage,actionTaken:L.actionTaken,durationMs:L.durationMs}),G+=1,L.status==="passed")K+=1;else if(L.status==="failed"||L.status==="error")W+=1;else H+=1;await Z.monitorRuns.update($.organizationId,$.runId,{tested_items:G,passed_items:K,failed_items:W,skipped_items:H})}await Z.monitorRuns.update($.organizationId,$.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function bg6($){return{id:`${jj}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}async function yg6($,Z){let Q=zg6($);await Q.access.check();let X=Q.storage.registry,Y=await X.monitorRuns.create({organization_id:Q.organization.id,status:"pending",config_snapshot:Z,started_at:null}),J=new AbortController;return ak0.set(Y.id,J),fg6({ctx:Q,runId:Y.id,organizationId:Q.organization.id,monitorConfig:Z,signal:J.signal}).catch(async(G)=>{await X.monitorRuns.update(Q.organization.id,Y.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),Eg6(`Run ${Y.id} failed with uncaught error:`,G)}).finally(()=>{ak0.delete(Y.id)}),{run:{id:Y.id}}}var ak0,Lg6="[MONITOR-AGENT]",wg6,jg6="health_check: not called",L78;var ek0=D(()=>{M0();x4();wz();Pd();CB();ak0=new Map,wg6=uZ8;L78=h({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:pZ8,outputSchema:nZ8,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=iZ8($.config??{}),{run:Y}=await yg6(Z,X),G=await Z.storage.registry.monitorRuns.findById(Q.id,Y.id);if(!G)throw Error(`Failed to load monitor run ${Y.id}`);return{run:G}}})});var w78;var j78=D(()=>{M0();CB();w78=h({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:rZ8,outputSchema:aZ8,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),Z.storage.registry.monitorRuns.list(Q.id,$)}})});var E78;var z78=D(()=>{M0();CB();E78=h({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:sZ8,outputSchema:eZ8,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),{run:await Z.storage.registry.monitorRuns.findById(Q.id,$.runId)}}})});var P78;var A78=D(()=>{M0();CB();ek0();P78=h({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:tZ8,outputSchema:oZ8,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry;if(!await X.monitorRuns.findById(Q.id,$.runId))throw Error(`Monitor run not found: ${$.runId}`);return N78($.runId),{run:await X.monitorRuns.update(Q.id,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var T78;var R78=D(()=>{M0();CB();T78=h({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:$78,outputSchema:Z78,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),Z.storage.registry.monitorResults.listByRun(Q.id,$.runId,{status:$.status,limit:$.limit,offset:$.offset})}})});var I78;var q78=D(()=>{M0();CB();Pd();I78=h({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:Q78,outputSchema:X78,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await X.monitorConnections.list(Q.id);return{items:await Promise.all(Y.map(async(G)=>{let K=await X.items.findById(Q.id,G.item_id);if(!K&&G.item_id.startsWith(jj)){let F=G.item_id.slice(jj.length),U=await X.publishRequests.findById(Q.id,F);if(U)K={id:G.item_id,title:U.title,description:U.description,_meta:U._meta,server:U.server,is_public:!1,is_unlisted:!0,created_at:U.created_at,updated_at:U.updated_at}}let W=K?.server.remotes?.find((F)=>F.url)?.url??null,H=G.item_id.startsWith(jj)?"request":"store";return{mapping:G,item:K,remoteUrl:W,source:H}}))}}})});function gg6($){return{id:`${jj}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}var M78;var V78=D(()=>{M0();CB();ek0();Pd();M78=h({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:Y78,outputSchema:J78,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=(await X.items.list(Q.id,{includeUnlisted:!0})).items,G=(await X.publishRequests.list(Q.id,{status:"pending",limit:500})).items.map(gg6),K=[...Y,...G],W=await X.monitorConnections.list(Q.id),H=new Set(W.map((U)=>U.item_id)),F=0;for(let U of K){if(!U.server.remotes?.some((N)=>N.url))continue;try{await EO1(Z,U)}catch(N){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${U.id}:`,N instanceof Error?N.message:N);continue}if(!H.has(U.id))F+=1}return{created:F,updated:Math.max(K.length-F,0)}}})});var k78;var S78=D(()=>{M0();CB();k78=h({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:G78,outputSchema:K78,handler:async({connectionId:$,authStatus:Z},Q)=>{let X=t(Q);await Q.access.check();let Y=Q.storage.registry,J=X.id,G=await Y.monitorConnections.findByConnectionId(J,$);if(!G)throw Error(`No monitor connection mapping found for connection ${$}`);return await Y.monitorConnections.updateAuthStatus(J,G.item_id,Z),{success:!0}}})});function hg6($){if(!$)return{};if(typeof $==="string")try{return JSON.parse($)}catch{return{}}if(typeof $==="object")return $;return{}}async function s$0($,Z){let X=(await $.db.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","=",Lb).execute()).map((J)=>hg6(J.settings)),Y={acceptPublishRequests:X.some((J)=>J.acceptPublishRequests===!0),requireApiToken:X.some((J)=>J.requireApiToken===!0),storePrivateOnly:X.some((J)=>J.storePrivateOnly===!0)};if(Y.acceptPublishRequests||Y.requireApiToken||Y.storePrivateOnly)return Y;for(let J of X)if(Object.keys(J).length>0)return J;return{}}var C78=D(()=>{Pd()});import{z as zO1}from"zod";function ug6($,Z){if(!Z)return $;let Q={field:["is_public"],operator:"eq",value:!1};if(!$)return Q;return{operator:"and",conditions:[$,Q]}}function cg6($){let Z=new Map,Q=new Map;for(let Y of $){let J=RH(Y._meta);for(let G of J?.tags??[])Z.set(G,(Z.get(G)??0)+1);for(let G of J?.categories??[])Q.set(G,(Q.get(G)??0)+1)}let X=(Y)=>Array.from(Y.entries()).map(([J,G])=>({value:J,count:G})).sort((J,G)=>J.value.localeCompare(G.value));return{tags:X(Z),categories:X(Q)}}var _78,v78,x78,f78;var b78=D(()=>{M0();v9();C78();_78=h({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:Ld,outputSchema:wd,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id);return X.items.list(Q.id,{...$,where:ug6($.where,Y.storePrivateOnly===!0)})}}),v78=h({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:QU,outputSchema:Db,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id),J=$.id??$.name;if(!J)return{item:null};let G=await X.items.findByIdOrName(Q.id,J);if(!G)return{item:null};if(Y.storePrivateOnly&&G.is_public)return{item:null};return{item:G}}}),x78=h({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:QU,outputSchema:zO1.object({versions:zO1.array(uW)}),handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id),J=$.id??$.name;if(!J)return{versions:[]};let G=await X.items.findByIdOrName(Q.id,J);if(!G)return{versions:[]};if(Y.storePrivateOnly&&G.is_public)return{versions:[]};return{versions:[G]}}}),f78=h({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:zO1.object({}),outputSchema:jd,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry;if(!(await s$0(Z,Q.id)).storePrivateOnly)return X.items.getFilters(Q.id);let J=await X.items.list(Q.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return cg6(J.items)}})});var y78;var g78=D(()=>{GZ8();WZ8();FZ8();NZ8();wz();OZ8();LZ8();jZ8();zZ8();AZ8();IZ8();MZ8();kZ8();CZ8();vZ8();fZ8();yZ8();hZ8();ek0();j78();z78();A78();R78();q78();V78();S78();b78();y78=[_78,v78,x78,f78,wZ8,EZ8,DZ8,RZ8,HZ8,JZ8,PZ8,UZ8,BZ8,_J$,KZ8,qZ8,VZ8,SZ8,_Z8,xZ8,bZ8,gZ8,L78,w78,E78,P78,T78,I78,M78,k78]});import{z as Ad}from"zod";var PO1;var h78=D(()=>{M0();KW();we();xY();PO1=h({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Ad.object({virtualMcpId:Ad.string().describe("Virtual MCP ID that owns this VM"),branch:Ad.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),removeWorktree:Ad.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by hosted teardown, whose filesystem is already destroyed.")}),outputSchema:Ad.object({success:Ad.boolean()}),handler:async($,Z)=>{let Q;try{Q=await lx$($,Z)}catch(K){if(K instanceof Error&&K.message==="Virtual MCP not found")return{success:!0};throw K}let{entry:X,userId:Y,sandboxUserId:J}=Q;if(!X)return{success:!0};let G=await m71(Z);return await Yw(Z.storage.virtualMcps,$.virtualMcpId,Y,J,$.branch),await G.delete(X.sandboxHandle).catch((K)=>console.error(`[SANDBOX_DELETE] ${d7} ${X.sandboxHandle}: ${K instanceof Error?K.message:String(K)}`)),{success:!0}}})});var u78=D(()=>{Pe();h78()});import{z as _B}from"zod";function pg6($){try{return JSON.parse($)}catch(Z){throw Error(`GitHub /user/installations returned invalid JSON: ${$.slice(0,300)}`,{cause:Z})}}var dg6="https://api.github.com",ig6=15000,AO1;var c78=D(()=>{M0();K3();TY();tK();Zs();qc();AO1=h({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:_B.object({connectionId:_B.string().describe("ID of the mcp-github connection to use")}),outputSchema:_B.object({installations:_B.array(_B.object({installationId:_B.number(),login:_B.string(),avatarUrl:_B.string(),type:_B.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");let X=await Z.storage.connections.findById($.connectionId,Q);if(!X)throw Error("Connection not found");if(J9(X))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Y=new C5(Z.db,Z.vault),J=await Y.get($.connectionId);if(!J)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let G=J.accessToken;if(mL(J)&&Y.isExpired(J,Ws)){let U=await $S0(J,Y);if(!U)throw Error(VZ);G=U,J=await Y.get($.connectionId)??J}let K=[],W=1,H=100,F=async(U)=>fetch(`${dg6}/user/installations?per_page=${H}&page=${W}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(ig6)});while(!0){let U=await F(G);if(U.status===401){let B=await Y.get($.connectionId);if(!B||!mL(B))throw Error(VZ);let O=await $S0(B,Y);if(!O)throw Error(VZ);if(G=O,U=await F(G),U.status===401)throw Error(VZ)}if(uL(U.headers,{lane:"rest",operation:"list_user_installations",installation:i51}),gL(U)){let B=U.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"rest",operation:"list_user_installations",installation:i51,kind:B});let O=hL(U.headers);throw Error(`GitHub ${B} rate limit reached${O===null?"":`; retry in ${Math.ceil(O/1000)}s`}`)}if(!U.ok)throw Error(`GitHub /user/installations failed: ${U.status}`);let N=pg6(await U.text());for(let B of N.installations)K.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type});if(N.installations.length<H)break;W++}return{installations:K}}})});var l78=D(()=>{c78()});import{z as TO1}from"zod";function ZS0($){return{repositoryId:$.repositoryId,ref:$.repoUrl?eK($.repoUrl):null,connectionId:$.connectionId}}var vB,m78="No credential for this repository \u2014 link it in Settings \u2192 Repositories";var RO1=D(()=>{t5();vB={repositoryId:TO1.string().optional().describe("Connected repository (REPOSITORY_LINK) to act on"),repoUrl:TO1.string().optional().describe("Any URL of the repository \u2014 its provider and host are read from it"),connectionId:TO1.string().optional().describe("Legacy: a repo-scoped mcp-github connection in this org")}});import{z as cW}from"zod";var IO1;var d78=D(()=>{M0();H7();RO1();IO1=h({name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by the provider.",annotations:{title:"Search Repository Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:cW.object({...vB,query:cW.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:cW.number().int().min(1).max(100).default(30),cursor:cW.string().nullish().describe("Opaque cursor from a previous call's `nextCursor`, to read the next window")}),outputSchema:cW.object({branches:cW.array(cW.object({name:cW.string(),author:cW.string().nullable()})),totalCount:cW.number(),nextCursor:cW.string().nullable()}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");return(await w91(Z,Q,ZS0($))).searchBranches({query:$.query,limit:$.limit,cursor:$.cursor})}})});import{z as m$}from"zod";function p78($){let{credentialConnectionId:Z,...Q}=$;return{...Q,servable:Js($)}}function qO1($){let{legacyConnectionId:Z,...Q}=$;return Q}async function n78($,Z,Q){let X=await $.storage.gitProviderAccounts.get(Q,Z);if(!X)throw Error("Git account not found");return X}var tg6,i78,t78,o78,r78,a78,s78,e78,$Q8,ZQ8;var QQ8=D(()=>{Fs();t5();M0();H7();d78();tg6=m$.object({ref:oE$,externalId:m$.string(),defaultBranch:m$.string().nullable(),webUrl:m$.string(),visibility:m$.enum(["public","private","internal"]),description:m$.string().nullable(),updatedAt:m$.string().nullable()}),i78=rE$.extend({servable:m$.boolean()});t78=h({name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect through Studio-owned credentials, and the URLs that start each connect flow.",annotations:{title:"Git provider capabilities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({}),outputSchema:m$.object({github:m$.object({configured:m$.boolean(),connectPath:m$.string().nullable(),installPath:m$.string().nullable()}),gitlab:m$.object({oauthHosts:m$.array(m$.string()),connectPath:m$.string().nullable()})}),handler:async($,Z)=>{r(Z);let Q=t(Z),X=`/api/${Q.slug??Q.id}/git-providers`,Y=az$(),J=Y.github.configured;return{github:{configured:J,connectPath:J?`${X}/github/connect`:null,installPath:J?`${X}/github/install`:null},gitlab:{oauthHosts:Y.gitlab.hosts,connectPath:Y.gitlab.configured?`${X}/gitlab/connect`:null}}}}),o78=h({name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to this organization.",annotations:{title:"List git accounts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({}),outputSchema:m$.object({accounts:m$.array(i78)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{accounts:(await Z.storage.gitProviderAccounts.listByOrg(Q.id)).map(p78)}}}),r78=h({name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with a personal, project or group access token. Validates the token against the provider before storing it encrypted. Use this for self-managed GitLab instances (no OAuth application) or when OAuth is not wanted.",annotations:{title:"Connect git account with a token",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({type:ra.describe("Provider; only gitlab accepts tokens today"),host:m$.string().min(1).describe("Provider host, e.g. gitlab.com or gitlab.acme.com"),token:m$.string().min(1).describe("Access token with api scope")}),outputSchema:m$.object({account:i78}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=$.host.trim().toLowerCase();if(!/^[a-z0-9.-]+(:[0-9]+)?$/.test(X))throw Error("host must be a bare hostname, optionally with a port");let Y=await nz$($.type,X,$.token),J=await Z.storage.gitProviderAccounts.upsert({organizationId:Q.id,type:$.type,host:X,authKind:"token",externalAccountId:Y.externalAccountId,login:Y.login,avatarUrl:Y.avatarUrl,createdBy:o0(Z)??null});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:J.id,accessToken:$.token,refreshToken:null,scope:null,expiresAt:null,clientId:null,clientSecret:null,tokenEndpoint:null}),{account:p78(J)}}}),a78=h({name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account. Its repositories stay linked but lose credentials (they become anonymous clones) until linked to another account.",annotations:{title:"Disconnect git account",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({id:m$.string()}),outputSchema:m$.object({deleted:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{deleted:await Z.storage.gitProviderAccounts.delete($.id,Q.id)}}}),s78=h({name:"REPOSITORY_LIST",description:"List the repositories linked to this organization.",annotations:{title:"List repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({accountId:m$.string().optional().describe("Only repositories of this account")}),outputSchema:m$.object({repositories:m$.array(h51.extend({usable:m$.boolean()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.repositories.listByOrg(Q.id,{accountId:$.accountId}),Y=await pL(Z,Q.id),J=new Set(Y.map((G)=>G.webUrl.toLowerCase()));return{repositories:X.map((G)=>({...qO1(G),usable:J.has(G.webUrl.toLowerCase())}))}}}),e78=h({name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider (not yet linked). Feeds the repository picker.",annotations:{title:"Search provider repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({accountId:m$.string(),query:m$.string().optional(),page:m$.number().int().min(1).optional(),perPage:m$.number().int().min(1).max(100).optional()}),outputSchema:m$.object({repositories:m$.array(tg6),hasMore:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await n78(Z,Q.id,$.accountId);return CP({db:Z.db,vault:Z.vault},X).listRepos({query:$.query,page:$.page,perPage:$.perPage})}}),$Q8=h({name:"REPOSITORY_LINK",description:"Link a repository to the organization. With an account, the repository is verified against the provider and its facts (id, default branch, visibility) recorded; without one it is linked as an anonymous public clone.",annotations:{title:"Link repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({url:m$.string().min(1).describe("Repository URL (https or ssh), or a bare path like owner/name when accountId is given"),accountId:m$.string().optional().describe("Account whose credentials access the repository")}),outputSchema:m$.object({repository:h51}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=o0(Z)??null;if(!$.accountId){let H=eK($.url);if(!H)throw Error("Could not recognise the repository URL. Use a full https URL from GitHub or GitLab.");let F=await Z.storage.repositories.upsert({organizationId:Q.id,ref:H,createdBy:X});return{repository:qO1(F)}}let Y=await n78(Z,Q.id,$.accountId),J=eK($.url,{provider:Y.type,host:Y.host});if(!J)throw Error("Could not recognise the repository URL or path");if(J.host!==Y.host)throw Error(`Repository is on ${J.host} but the account is on ${Y.host}`);let K=await CP({db:Z.db,vault:Z.vault},Y).getRepo(J);if(!K)throw Error(`${J.path} was not found on ${J.host} or the account cannot access it`);let W=await Z.storage.repositories.upsert({organizationId:Q.id,ref:K.ref,accountId:Y.id,externalId:K.externalId,defaultBranch:K.defaultBranch,visibility:K.visibility,createdBy:X});return{repository:qO1(W)}}}),ZQ8=h({name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization. Agents, tasks and syncs that referenced it keep working off their legacy metadata until relinked.",annotations:{title:"Unlink repository",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({id:m$.string()}),outputSchema:m$.object({deleted:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{deleted:await Z.storage.repositories.delete($.id,Q.id)}}})});import{z as J$}from"zod";async function Td($,Z){let Q=$.organization?.id;if(!Q)throw Error("Organization context required");let X=await Hs($,Q,ZS0(Z));if(!X)throw Error(m78);return X}var rg6,ag6,QS0,sg6,XQ8,YQ8,JQ8,GQ8,KQ8,WQ8;var HQ8=D(()=>{M0();H7();RO1();rg6=J$.object({id:J$.string().nullable(),name:J$.string(),state:J$.enum(["queued","running","completed"]),conclusion:J$.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),url:J$.string().nullable(),durationMs:J$.number().nullable(),summary:J$.string().nullable()}),ag6=J$.object({id:J$.string(),author:J$.string(),body:J$.string(),createdAt:J$.string(),updatedAt:J$.string(),url:J$.string()}),QS0=J$.object({number:J$.number(),url:J$.string(),title:J$.string(),body:J$.string(),state:J$.enum(["open","closed","merged"]),draft:J$.boolean(),mergedAt:J$.string().nullable(),base:J$.string(),head:J$.string(),headSha:J$.string(),headRepoPath:J$.string().nullable(),author:J$.string(),conflicting:J$.boolean().nullable(),checks:J$.enum(["pending","passing","failing"]).nullable(),changedFiles:J$.number().nullable()}),sg6=QS0.extend({checkRuns:J$.array(rg6),comments:J$.array(ag6),unresolvedConversations:J$.number(),reviewBlocked:J$.boolean()}),XQ8=h({name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments.",annotations:{title:"Read Change Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,branch:J$.string().describe("Head branch of the change request to read")}),outputSchema:J$.object({changeRequest:sg6.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Td(Z,$)).readDetailed({branch:$.branch})}}}),YQ8=h({name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Merged Change Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,base:J$.string().describe("Branch it was merged into")}),outputSchema:J$.object({changeRequest:QS0.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Td(Z,$)).lastMergedInto($.base)}}}),JQ8=h({name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests, most recently updated first.",annotations:{title:"List Open Change Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,limit:J$.number().int().min(1).max(100).default(50)}),outputSchema:J$.object({changeRequests:J$.array(QS0)}),handler:async($,Z)=>{return await Z.access.check(),{changeRequests:await(await Td(Z,$)).listOpen($.limit)}}}),GQ8=h({name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report \u2014 a GitHub check run's output markdown, or the tail of a GitLab job's trace.",annotations:{title:"Read CI Run Report",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,checkId:J$.string().describe("Provider id of the run, from its listing")}),outputSchema:J$.object({report:J$.string().nullable()}),handler:async($,Z)=>{return await Z.access.check(),{report:await(await Td(Z,$)).readCheckLog($.checkId)}}}),KQ8=h({name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another. Returns the branch's existing change request instead of failing when it already has one.",annotations:{title:"Open Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,head:J$.string().describe("Branch being proposed"),base:J$.string().describe("Branch it should land on"),title:J$.string(),body:J$.string().optional()}),outputSchema:J$.object({changeRequest:QS0,existed:J$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=await Td(Z,$),X=await Q.readForBranch($.head);if(X&&X.state==="open"){if($.body&&$.body!==X.body)await Q.describe(X.number,$.body);return{changeRequest:$.body?{...X,body:$.body}:X,existed:!0}}return{changeRequest:await Q.open({head:$.head,base:$.base,title:$.title,body:$.body}),existed:!1}}}),WQ8=h({name:"CHANGE_REQUEST_MERGE",description:"Land a change request. Reports why it could not merge rather than throwing.",annotations:{title:"Merge Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,number:J$.number().int().positive(),strategy:J$.enum(["any","squash"]).default("any").describe("`squash` when the result must be one commit; `any` uses whatever the repository allows"),commitTitle:J$.string().optional(),commitMessage:J$.string().optional()}),outputSchema:J$.object({merged:J$.boolean(),reason:J$.enum(["conflict","blocked","rate_limited","not_found","error"]).optional(),detail:J$.string().optional()}),handler:async($,Z)=>{await Z.access.check();let X=await(await Td(Z,$)).merge($.number,{strategy:$.strategy,commitTitle:$.commitTitle,commitMessage:$.commitMessage});return X.merged?{merged:!0}:{merged:!1,reason:X.reason,detail:X.detail}}})});import{z as h6}from"zod";function XS0($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function FQ8($){let Z=$.trim();return Z.length>0?Z:void 0}function UQ8($,Z){return $===void 0||$.includes(Z)}var $h6,Zh6,Qh6,Xh6,Yh6,Jh6,MO1;var NQ8=D(()=>{M0();kY1();$h6=["thread","task"],Zh6=h6.object({type:h6.literal("thread"),id:h6.string(),title:h6.string(),created_at:h6.string(),updated_at:h6.string(),virtual_mcp_id:h6.string().nullable(),run_config:h6.record(h6.string(),h6.unknown()).nullable(),status:h6.string().nullable()}),Qh6=h6.object({type:h6.literal("task"),id:h6.string(),title:h6.string(),created_at:h6.string(),updated_at:h6.string(),key:h6.string().nullable(),status:h6.string().nullable(),repo:h6.string().nullable()}),Xh6=h6.discriminatedUnion("type",[Zh6,Qh6]),Yh6=h6.object({query:h6.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:h6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:h6.array(h6.enum($h6)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),Jh6=h6.object({items:h6.array(Xh6),totalCount:h6.number()});MO1=h({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads and task-board cards). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Yh6,outputSchema:Jh6,handler:async($,Z)=>{await Z.access.check();let Q=t(Z),X=$.limit??20,Y=UQ8($.types,"thread"),J=UQ8($.types,"task"),G=[],K=0;if(Y){let{threads:W,total:H}=await Z.storage.threads.list(void 0,{limit:X,offset:0,search:FQ8($.query),includeArchived:!1});K+=H;for(let F of W)G.push({type:"thread",id:F.id,title:F.title??"",created_at:XS0(F.created_at),updated_at:XS0(F.updated_at),virtual_mcp_id:F.virtual_mcp_id??null,run_config:F.run_config??null,status:P3(F).status})}if(J){let W=await Z.storage.taskBoard.searchByTitle(Q.id,FQ8($.query)??"",X);K+=W.length;for(let H of W)G.push({type:"task",id:H.id,title:H.title??"",created_at:XS0(H.createdAt),updated_at:XS0(H.updatedAt),key:Q.slug?NR0(Q.slug,H.keySeq):null,status:H.status??null,repo:H.repo??null})}return{items:G,totalCount:K}}})});var BQ8=D(()=>{NQ8()});var JW0={};e(JW0,{toolSubsetMCP:()=>VO1,managementMCP:()=>rl,managementContextStore:()=>OB,listManagementTools:()=>Kh6,TOOL_BY_NAME:()=>Rd,CORE_TOOLS:()=>DQ8});import{z as OQ8}from"zod";async function Kh6($){let Z=await rl($),[Q,X]=Ha.createLinkedPair();await Z.connect(X);let Y=new $Z({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:S5});try{return await Y.connect(Q),(await Y.listTools()).tools}finally{await Y.close().catch(()=>{}),await Z.close().catch(()=>{})}}var DQ8,Rd,VO1=($,Z)=>{let Q=new SH({name:$,version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:S5});for(let X of Z){let Y=Rd.get(X);if(!Y){console.warn(`[${$}] unknown tool "${X}" \u2014 not registered`);continue}let{config:J,handler:G}=d$0(Y);Q.registerTool(Y.name,J,G)}return Q},rl=async($)=>{let Z=new SH({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:S5});for(let Y of Rd.values()){let{config:J,handler:G}=d$0(Y);Z.registerTool(Y.name,J,G)}let Q=bk0();for(let Y of Q){let J=Y.arguments?.length?Object.fromEntries(Y.arguments.map((G)=>{let K=G.required?OQ8.string():OQ8.string().optional();return[G.name,G.description?K.describe(G.description):K]})):void 0;Z.registerPrompt(Y.name,{title:Y.title,description:Y.description,...J?{argsSchema:J}:{}},(G)=>{return{messages:[{role:"user",content:{type:"text",text:typeof Y.text==="function"?Y.text(G??{}):Y.text}}]}})}if($.organization?.id){let Y=await $.storage.brandContext.list($.organization.id),J=new Set;for(let G of Y){let K=G.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),W=K?`brand-${K}`:`brand-${G.id}`;if(J.has(W))W=`${W}-${G.id.slice(0,8)}`;J.add(W);let H=[`# Brand: ${G.name}`,"",`**Domain:** ${G.domain}`,"","## Overview",G.overview];if(G.colors){let U=Object.entries(G.colors).filter(([,N])=>N);if(U.length>0){H.push("","## Colors");for(let[N,B]of U)H.push(`- **${N}:** ${B}`)}}if(G.fonts){let U=Object.entries(G.fonts).filter(([,N])=>N);if(U.length>0){H.push("","## Fonts");for(let[N,B]of U)H.push(`- ${B} (${N})`)}}if(G.logo)H.push("",`**Logo:** ${G.logo}`);if(G.favicon)H.push(`**Favicon:** ${G.favicon}`);if(G.ogImage)H.push(`**OG Image:** ${G.ogImage}`);if(G.images&&G.images.length>0){H.push("","## Images");for(let U of G.images){let N=Object.entries(U).map(([B,O])=>`${B}: ${O}`).join(", ");H.push(`- ${N}`)}}let F=H.join(`
|
|
4568
|
+
`);return{toolResults:W,agentSummary:B.length>0?B:null,unexecutedTools:F}}finally{await Z.close?.().catch(()=>{})}}async function EO1($,Z){let Q=$.storage.registry,X=$.organization.id,Y=await Q.monitorConnections.findByItemId(X,Z.id);if(Y){if(await $.storage.connections.findById(Y.connection_id,X))return Y.connection_id}let J=Tg6(Z);if(!J)throw Error(`Registry item ${Z.id} has no remote URL`);if(VD(J))throw Error(`Registry item ${Z.id} targets a private network URL, refusing to create a monitor connection`);let G=Pg6($),K=Ag6(Z),W=await $.storage.connections.create({organization_id:X,created_by:G,title:`[MCP Tester] ${Z.title}`,description:`Auto-created monitor connection for ${Z.id}`,app_name:"private-registry-monitor",app_id:`${Lb}:monitor`,connection_type:K,connection_url:J,metadata:{monitorConnection:!0,registryItemId:Z.id,pluginId:Lb}});return await Q.monitorConnections.upsert({organization_id:X,item_id:Z.id,connection_id:W.id,auth_status:"none"}),W.id}async function vg6($){let Z=$.ctx.storage.registry;switch($.action){case"unlisted":return await Z.items.update($.organizationId,$.item.id,{is_unlisted:!0}),"unlisted";case"remove_public":return await Z.items.update($.organizationId,$.item.id,{is_public:!1}),"removed_public";case"remove_private":case"remove_all":return await Z.items.delete($.organizationId,$.item.id),$.action==="remove_all"?"removed_all":"removed_private";default:return"none"}}async function xg6($){let Z=Date.now();if($.signal.aborted)throw Error("Run cancelled");let Q="passed",X=!1,Y=!1,J=null,G="none",K=null,W=[],H=null,F=async()=>{await $.onProgress?.({status:Q,connectionOk:X,toolsListed:Y,toolResults:[...W],agentSummary:K,errorMessage:J,actionTaken:G,durationMs:Date.now()-Z})};try{let U=await EO1($.ctx,$.item);H=await $.ctx.createMCPProxy(U),X=!0;let B=(await a$0(H.listTools?H.listTools():Promise.resolve({tools:[]}),$.monitorConfig.perMcpTimeoutMs,`listTools ${$.item.id}`)).tools??[];if(Y=!0,$.monitorConfig.monitorMode!=="health_check")W.push(...B.map((O)=>jO1(O.name))),await F();if($.monitorConfig.monitorMode==="full_agent"){let O=await _g6({ctx:$.ctx,monitorConfig:$.monitorConfig,item:$.item,proxy:H,tools:B,signal:$.signal,onProgress:async(L)=>{W.length=0,W.push(...W78({discoveredTools:B,executedResults:L})),Q=L.some((w)=>!w.success)?"failed":"passed",await F()}});if(W.length=0,W.push(...W78({discoveredTools:B,executedResults:O.toolResults})),K=O.agentSummary,O.toolResults.some((L)=>!L.success))Q="failed";if(O.unexecutedTools.length>0){if(Q="failed",!J)J=`Agent skipped ${O.unexecutedTools.length} tool(s): ${O.unexecutedTools.join(", ")}`}}else if($.monitorConfig.monitorMode!=="health_check"){for(let O=0;O<B.length;O++){let L=B[O];if(!L||$.signal.aborted)throw Error("Run cancelled");let w=Date.now();try{let j={},E=await a$0(H.callTool({name:L.name,arguments:j}),$.monitorConfig.perToolTimeoutMs,`tool ${L.name}`),z=!E.isError,P=Date.now()-w;H78(W,{toolName:L.name,success:z,input:j,durationMs:P,outputPreview:B78(E.structuredContent??E.content),error:z?null:sk0(E.content?.find((A)=>A.type==="text")?.text?.slice(0,300)??"Tool returned error")}),await F()}catch(j){let E=Date.now()-w,z=j instanceof Error?j.message:String(j);H78(W,{toolName:L.name,success:!1,durationMs:E,error:sk0(z)}),await F()}}if(W.some((O)=>!O.success))Q="failed"}else for(let O of B)W.push(jO1(O.name));if($.canApplyFailureAction&&Q==="failed"&&$.monitorConfig.onFailure!=="none")G=await vg6({ctx:$.ctx,organizationId:$.organizationId,item:$.item,action:$.monitorConfig.onFailure})}catch(U){if(J=U instanceof Error?U.message:String(U),Rg6(U))Q="needs_auth",await $.ctx.storage.registry.monitorConnections.updateAuthStatus($.organizationId,$.item.id,"needs_auth");else Q="error"}finally{await H?.close?.().catch(()=>{})}return{status:Q,connectionOk:X,toolsListed:Y,toolResults:W,agentSummary:K,errorMessage:J,actionTaken:G,durationMs:Date.now()-Z}}async function fg6($){let Z=$.ctx.storage.registry,X=(await Z.items.list($.organizationId,{includeUnlisted:!0})).items.filter((F)=>{if($.monitorConfig.testPublicOnly&&!F.is_public)return!1;if($.monitorConfig.testPrivateOnly&&F.is_public)return!1;return!0}),Y=$.monitorConfig.includePendingRequests?(await Z.publishRequests.list($.organizationId,{status:"pending",limit:500})).items.map((F)=>bg6(F)):[],J=[...X.map((F)=>({item:F,source:"registry_item"})),...Y.map((F)=>({item:F,source:"publish_request"}))];if(J.length===0){await Z.monitorRuns.update($.organizationId,$.runId,{total_items:0,status:"completed",started_at:new Date().toISOString(),finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{total_items:J.length,status:"running",started_at:new Date().toISOString()});let G=0,K=0,W=0,H=0;for(let F=0;F<J.length;F++){let U=J[F],N=U?.item;if(!N||$.signal.aborted){await Z.monitorRuns.update($.organizationId,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()});return}await Z.monitorRuns.update($.organizationId,$.runId,{current_item_id:N.id});let B=null,O=async(w)=>{if(!B){B=(await Z.monitorResults.create({run_id:$.runId,organization_id:$.organizationId,item_id:N.id,item_title:N.title,status:w.status,error_message:w.errorMessage,connection_ok:w.connectionOk,tools_listed:w.toolsListed,tool_results:w.toolResults,agent_summary:w.agentSummary,duration_ms:w.durationMs,action_taken:w.actionTaken})).id;return}await Z.monitorResults.update($.organizationId,B,{status:w.status,error_message:w.errorMessage,connection_ok:w.connectionOk,tools_listed:w.toolsListed,tool_results:w.toolResults,agent_summary:w.agentSummary,duration_ms:w.durationMs,action_taken:w.actionTaken})},L=await xg6({ctx:$.ctx,organizationId:$.organizationId,item:N,monitorConfig:$.monitorConfig,signal:$.signal,canApplyFailureAction:U.source==="registry_item",onProgress:O});if(await O({status:L.status,connectionOk:L.connectionOk,toolsListed:L.toolsListed,toolResults:L.toolResults,agentSummary:L.agentSummary,errorMessage:L.errorMessage,actionTaken:L.actionTaken,durationMs:L.durationMs}),G+=1,L.status==="passed")K+=1;else if(L.status==="failed"||L.status==="error")W+=1;else H+=1;await Z.monitorRuns.update($.organizationId,$.runId,{tested_items:G,passed_items:K,failed_items:W,skipped_items:H})}await Z.monitorRuns.update($.organizationId,$.runId,{status:"completed",current_item_id:null,finished_at:new Date().toISOString()})}function bg6($){return{id:`${jj}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}async function yg6($,Z){let Q=zg6($);await Q.access.check();let X=Q.storage.registry,Y=await X.monitorRuns.create({organization_id:Q.organization.id,status:"pending",config_snapshot:Z,started_at:null}),J=new AbortController;return ak0.set(Y.id,J),fg6({ctx:Q,runId:Y.id,organizationId:Q.organization.id,monitorConfig:Z,signal:J.signal}).catch(async(G)=>{await X.monitorRuns.update(Q.organization.id,Y.id,{status:"failed",current_item_id:null,finished_at:new Date().toISOString()}).catch(()=>{}),Eg6(`Run ${Y.id} failed with uncaught error:`,G)}).finally(()=>{ak0.delete(Y.id)}),{run:{id:Y.id}}}var ak0,Lg6="[MONITOR-AGENT]",wg6,jg6="health_check: not called",L78;var ek0=D(()=>{M0();x4();wz();Pd();CB();ak0=new Map,wg6=uZ8;L78=h({name:"REGISTRY_MONITOR_RUN_START",description:"Start an MCP registry monitor run with an isolated set of monitor connections.",inputSchema:pZ8,outputSchema:nZ8,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=iZ8($.config??{}),{run:Y}=await yg6(Z,X),G=await Z.storage.registry.monitorRuns.findById(Q.id,Y.id);if(!G)throw Error(`Failed to load monitor run ${Y.id}`);return{run:G}}})});var w78;var j78=D(()=>{M0();CB();w78=h({name:"REGISTRY_MONITOR_RUN_LIST",description:"List MCP registry monitor runs",inputSchema:rZ8,outputSchema:aZ8,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),Z.storage.registry.monitorRuns.list(Q.id,$)}})});var E78;var z78=D(()=>{M0();CB();E78=h({name:"REGISTRY_MONITOR_RUN_GET",description:"Get details for one MCP registry monitor run",inputSchema:sZ8,outputSchema:eZ8,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),{run:await Z.storage.registry.monitorRuns.findById(Q.id,$.runId)}}})});var P78;var A78=D(()=>{M0();CB();ek0();P78=h({name:"REGISTRY_MONITOR_RUN_CANCEL",description:"Cancel a running MCP registry monitor run",inputSchema:tZ8,outputSchema:oZ8,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry;if(!await X.monitorRuns.findById(Q.id,$.runId))throw Error(`Monitor run not found: ${$.runId}`);return N78($.runId),{run:await X.monitorRuns.update(Q.id,$.runId,{status:"cancelled",current_item_id:null,finished_at:new Date().toISOString()})}}})});var T78;var R78=D(()=>{M0();CB();T78=h({name:"REGISTRY_MONITOR_RESULT_LIST",description:"List results for a given MCP registry monitor run",inputSchema:$78,outputSchema:Z78,handler:async($,Z)=>{let Q=t(Z);return await Z.access.check(),Z.storage.registry.monitorResults.listByRun(Q.id,$.runId,{status:$.status,limit:$.limit,offset:$.offset})}})});var I78;var q78=D(()=>{M0();CB();Pd();I78=h({name:"REGISTRY_MONITOR_CONNECTION_LIST",description:"List monitor connection mappings for private registry MCP monitor runs, including auth status",inputSchema:Q78,outputSchema:X78,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await X.monitorConnections.list(Q.id);return{items:await Promise.all(Y.map(async(G)=>{let K=await X.items.findById(Q.id,G.item_id);if(!K&&G.item_id.startsWith(jj)){let F=G.item_id.slice(jj.length),U=await X.publishRequests.findById(Q.id,F);if(U)K={id:G.item_id,title:U.title,description:U.description,_meta:U._meta,server:U.server,is_public:!1,is_unlisted:!0,created_at:U.created_at,updated_at:U.updated_at}}let W=K?.server.remotes?.find((F)=>F.url)?.url??null,H=G.item_id.startsWith(jj)?"request":"store";return{mapping:G,item:K,remoteUrl:W,source:H}}))}}})});function gg6($){return{id:`${jj}${$.id}`,title:$.title,description:$.description,_meta:$._meta,server:$.server,is_public:!1,is_unlisted:!0,created_at:$.created_at,updated_at:$.updated_at}}var M78;var V78=D(()=>{M0();CB();ek0();Pd();M78=h({name:"REGISTRY_MONITOR_CONNECTION_SYNC",description:"Ensure every registry item has a dedicated monitor connection mapping for MCP monitors",inputSchema:Y78,outputSchema:J78,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=(await X.items.list(Q.id,{includeUnlisted:!0})).items,G=(await X.publishRequests.list(Q.id,{status:"pending",limit:500})).items.map(gg6),K=[...Y,...G],W=await X.monitorConnections.list(Q.id),H=new Set(W.map((U)=>U.item_id)),F=0;for(let U of K){if(!U.server.remotes?.some((N)=>N.url))continue;try{await EO1(Z,U)}catch(N){console.warn(`[REGISTRY_MONITOR_CONNECTION_SYNC] Skipping ${U.id}:`,N instanceof Error?N.message:N);continue}if(!H.has(U.id))F+=1}return{created:F,updated:Math.max(K.length-F,0)}}})});var k78;var S78=D(()=>{M0();CB();k78=h({name:"REGISTRY_MONITOR_CONNECTION_UPDATE_AUTH",description:"Update the auth_status of a monitor connection mapping (by core connection ID)",inputSchema:G78,outputSchema:K78,handler:async({connectionId:$,authStatus:Z},Q)=>{let X=t(Q);await Q.access.check();let Y=Q.storage.registry,J=X.id,G=await Y.monitorConnections.findByConnectionId(J,$);if(!G)throw Error(`No monitor connection mapping found for connection ${$}`);return await Y.monitorConnections.updateAuthStatus(J,G.item_id,Z),{success:!0}}})});function hg6($){if(!$)return{};if(typeof $==="string")try{return JSON.parse($)}catch{return{}}if(typeof $==="object")return $;return{}}async function s$0($,Z){let X=(await $.db.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","=",Lb).execute()).map((J)=>hg6(J.settings)),Y={acceptPublishRequests:X.some((J)=>J.acceptPublishRequests===!0),requireApiToken:X.some((J)=>J.requireApiToken===!0),storePrivateOnly:X.some((J)=>J.storePrivateOnly===!0)};if(Y.acceptPublishRequests||Y.requireApiToken||Y.storePrivateOnly)return Y;for(let J of X)if(Object.keys(J).length>0)return J;return{}}var C78=D(()=>{Pd()});import{z as zO1}from"zod";function ug6($,Z){if(!Z)return $;let Q={field:["is_public"],operator:"eq",value:!1};if(!$)return Q;return{operator:"and",conditions:[$,Q]}}function cg6($){let Z=new Map,Q=new Map;for(let Y of $){let J=RH(Y._meta);for(let G of J?.tags??[])Z.set(G,(Z.get(G)??0)+1);for(let G of J?.categories??[])Q.set(G,(Q.get(G)??0)+1)}let X=(Y)=>Array.from(Y.entries()).map(([J,G])=>({value:J,count:G})).sort((J,G)=>J.value.localeCompare(G.value));return{tags:X(Z),categories:X(Q)}}var _78,v78,x78,f78;var b78=D(()=>{M0();v9();C78();_78=h({name:"COLLECTION_REGISTRY_APP_LIST",description:"List registry items for Store discovery. Supports private-only mode from plugin settings.",inputSchema:Ld,outputSchema:wd,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id);return X.items.list(Q.id,{...$,where:ug6($.where,Y.storePrivateOnly===!0)})}}),v78=h({name:"COLLECTION_REGISTRY_APP_GET",description:"Get a registry item for Store details. Respects private-only mode from plugin settings.",inputSchema:QU,outputSchema:Db,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id),J=$.id??$.name;if(!J)return{item:null};let G=await X.items.findByIdOrName(Q.id,J);if(!G)return{item:null};if(Y.storePrivateOnly&&G.is_public)return{item:null};return{item:G}}}),x78=h({name:"COLLECTION_REGISTRY_APP_VERSIONS",description:"Get registry item versions for Store details. Respects private-only mode from plugin settings.",inputSchema:QU,outputSchema:zO1.object({versions:zO1.array(uW)}),handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry,Y=await s$0(Z,Q.id),J=$.id??$.name;if(!J)return{versions:[]};let G=await X.items.findByIdOrName(Q.id,J);if(!G)return{versions:[]};if(Y.storePrivateOnly&&G.is_public)return{versions:[]};return{versions:[G]}}}),f78=h({name:"COLLECTION_REGISTRY_APP_FILTERS",description:"List Store filter facets for registry items. Respects private-only mode from plugin settings.",inputSchema:zO1.object({}),outputSchema:jd,handler:async($,Z)=>{let Q=t(Z);await Z.access.check();let X=Z.storage.registry;if(!(await s$0(Z,Q.id)).storePrivateOnly)return X.items.getFilters(Q.id);let J=await X.items.list(Q.id,{limit:1e4,where:{field:["is_public"],operator:"eq",value:!1}});return cg6(J.items)}})});var y78;var g78=D(()=>{GZ8();WZ8();FZ8();NZ8();wz();OZ8();LZ8();jZ8();zZ8();AZ8();IZ8();MZ8();kZ8();CZ8();vZ8();fZ8();yZ8();hZ8();ek0();j78();z78();A78();R78();q78();V78();S78();b78();y78=[_78,v78,x78,f78,wZ8,EZ8,DZ8,RZ8,HZ8,JZ8,PZ8,UZ8,BZ8,_J$,KZ8,qZ8,VZ8,SZ8,_Z8,xZ8,bZ8,gZ8,L78,w78,E78,P78,T78,I78,M78,k78]});import{z as Ad}from"zod";var PO1;var h78=D(()=>{M0();KW();we();xY();PO1=h({name:"SANDBOX_DELETE",description:"Delete a sandbox.",annotations:{title:"Delete VM Preview",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:Ad.object({virtualMcpId:Ad.string().describe("Virtual MCP ID that owns this VM"),branch:Ad.string().min(1).describe("Branch whose vm should be deleted (sandboxMap[userId][branch])"),removeWorktree:Ad.boolean().optional().default(!1).describe("Also reclaim the sandbox's workspace (local worktree + disk). Ignored by hosted teardown, whose filesystem is already destroyed.")}),outputSchema:Ad.object({success:Ad.boolean()}),handler:async($,Z)=>{let Q;try{Q=await lx$($,Z)}catch(K){if(K instanceof Error&&K.message==="Virtual MCP not found")return{success:!0};throw K}let{entry:X,userId:Y,sandboxUserId:J}=Q;if(!X)return{success:!0};let G=await m71(Z);return await Yw(Z.storage.virtualMcps,$.virtualMcpId,Y,J,$.branch),await G.delete(X.sandboxHandle).catch((K)=>console.error(`[SANDBOX_DELETE] ${d7} ${X.sandboxHandle}: ${K instanceof Error?K.message:String(K)}`)),{success:!0}}})});var u78=D(()=>{Pe();h78()});import{z as _B}from"zod";function pg6($){try{return JSON.parse($)}catch(Z){throw Error(`GitHub /user/installations returned invalid JSON: ${$.slice(0,300)}`,{cause:Z})}}var dg6="https://api.github.com",ig6=15000,AO1;var c78=D(()=>{M0();K3();TY();tK();Zs();qc();AO1=h({name:"GITHUB_LIST_USER_ORGS",description:"List GitHub App installations (orgs/accounts) accessible to the authenticated user.",annotations:{title:"List GitHub User Orgs",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:_B.object({connectionId:_B.string().describe("ID of the mcp-github connection to use")}),outputSchema:_B.object({installations:_B.array(_B.object({installationId:_B.number(),login:_B.string(),avatarUrl:_B.string(),type:_B.string()}))}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");let X=await Z.storage.connections.findById($.connectionId,Q);if(!X)throw Error("Connection not found");if(J9(X))throw Error("Repo-scoped connections cannot list installations \u2014 use an org-level mcp-github connection");let Y=new C5(Z.db,Z.vault),J=await Y.get($.connectionId);if(!J)throw Error("No GitHub token found. Ensure the mcp-github connection is authenticated.");let G=J.accessToken;if(mL(J)&&Y.isExpired(J,Ws)){let U=await $S0(J,Y);if(!U)throw Error(VZ);G=U,J=await Y.get($.connectionId)??J}let K=[],W=1,H=100,F=async(U)=>fetch(`${dg6}/user/installations?per_page=${H}&page=${W}`,{headers:{Authorization:`Bearer ${U}`,Accept:"application/vnd.github+json","X-GitHub-Api-Version":"2022-11-28"},signal:AbortSignal.timeout(ig6)});while(!0){let U=await F(G);if(U.status===401){let B=await Y.get($.connectionId);if(!B||!mL(B))throw Error(VZ);let O=await $S0(B,Y);if(!O)throw Error(VZ);if(G=O,U=await F(G),U.status===401)throw Error(VZ)}if(uL(U.headers,{lane:"rest",operation:"list_user_installations",installation:i51}),gL(U)){await U.body?.cancel().catch(()=>{});let B=U.headers.get("retry-after")!==null?"secondary":"primary";cL({lane:"rest",operation:"list_user_installations",installation:i51,kind:B});let O=hL(U.headers);throw Error(`GitHub ${B} rate limit reached${O===null?"":`; retry in ${Math.ceil(O/1000)}s`}`)}if(!U.ok)throw await U.body?.cancel().catch(()=>{}),Error(`GitHub /user/installations failed: ${U.status}`);let N=pg6(await U.text());for(let B of N.installations)K.push({installationId:B.id,login:B.account.login,avatarUrl:B.account.avatar_url,type:B.account.type});if(N.installations.length<H)break;W++}return{installations:K}}})});var l78=D(()=>{c78()});import{z as TO1}from"zod";function ZS0($){return{repositoryId:$.repositoryId,ref:$.repoUrl?eK($.repoUrl):null,connectionId:$.connectionId}}var vB,m78="No credential for this repository \u2014 link it in Settings \u2192 Repositories";var RO1=D(()=>{t5();vB={repositoryId:TO1.string().optional().describe("Connected repository (REPOSITORY_LINK) to act on"),repoUrl:TO1.string().optional().describe("Any URL of the repository \u2014 its provider and host are read from it"),connectionId:TO1.string().optional().describe("Legacy: a repo-scoped mcp-github connection in this org")}});import{z as cW}from"zod";var IO1;var d78=D(()=>{M0();H7();RO1();IO1=h({name:"REPOSITORY_SEARCH_BRANCHES",description:"Search a repository's branches by a case-insensitive substring of the branch name, filtered server-side by the provider.",annotations:{title:"Search Repository Branches",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:cW.object({...vB,query:cW.string().describe("Substring to match against branch names. Empty returns the first branches alphabetically."),limit:cW.number().int().min(1).max(100).default(30),cursor:cW.string().nullish().describe("Opaque cursor from a previous call's `nextCursor`, to read the next window")}),outputSchema:cW.object({branches:cW.array(cW.object({name:cW.string(),author:cW.string().nullable()})),totalCount:cW.number(),nextCursor:cW.string().nullable()}),handler:async($,Z)=>{await Z.access.check();let Q=Z.organization?.id;if(!Q)throw Error("Organization context required");return(await w91(Z,Q,ZS0($))).searchBranches({query:$.query,limit:$.limit,cursor:$.cursor})}})});import{z as m$}from"zod";function p78($){let{credentialConnectionId:Z,...Q}=$;return{...Q,servable:Js($)}}function qO1($){let{legacyConnectionId:Z,...Q}=$;return Q}async function n78($,Z,Q){let X=await $.storage.gitProviderAccounts.get(Q,Z);if(!X)throw Error("Git account not found");return X}var tg6,i78,t78,o78,r78,a78,s78,e78,$Q8,ZQ8;var QQ8=D(()=>{Fs();t5();M0();H7();d78();tg6=m$.object({ref:oE$,externalId:m$.string(),defaultBranch:m$.string().nullable(),webUrl:m$.string(),visibility:m$.enum(["public","private","internal"]),description:m$.string().nullable(),updatedAt:m$.string().nullable()}),i78=rE$.extend({servable:m$.boolean()});t78=h({name:"GIT_PROVIDER_CAPABILITIES",description:"Which git providers this deployment can connect through Studio-owned credentials, and the URLs that start each connect flow.",annotations:{title:"Git provider capabilities",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({}),outputSchema:m$.object({github:m$.object({configured:m$.boolean(),connectPath:m$.string().nullable(),installPath:m$.string().nullable()}),gitlab:m$.object({oauthHosts:m$.array(m$.string()),connectPath:m$.string().nullable()})}),handler:async($,Z)=>{r(Z);let Q=t(Z),X=`/api/${Q.slug??Q.id}/git-providers`,Y=az$(),J=Y.github.configured;return{github:{configured:J,connectPath:J?`${X}/github/connect`:null,installPath:J?`${X}/github/install`:null},gitlab:{oauthHosts:Y.gitlab.hosts,connectPath:Y.gitlab.configured?`${X}/gitlab/connect`:null}}}}),o78=h({name:"GIT_ACCOUNT_LIST",description:"List the git provider accounts connected to this organization.",annotations:{title:"List git accounts",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({}),outputSchema:m$.object({accounts:m$.array(i78)}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{accounts:(await Z.storage.gitProviderAccounts.listByOrg(Q.id)).map(p78)}}}),r78=h({name:"GIT_ACCOUNT_CONNECT_TOKEN",description:"Connect a git provider account with a personal, project or group access token. Validates the token against the provider before storing it encrypted. Use this for self-managed GitLab instances (no OAuth application) or when OAuth is not wanted.",annotations:{title:"Connect git account with a token",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({type:ra.describe("Provider; only gitlab accepts tokens today"),host:m$.string().min(1).describe("Provider host, e.g. gitlab.com or gitlab.acme.com"),token:m$.string().min(1).describe("Access token with api scope")}),outputSchema:m$.object({account:i78}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=$.host.trim().toLowerCase();if(!/^[a-z0-9.-]+(:[0-9]+)?$/.test(X))throw Error("host must be a bare hostname, optionally with a port");let Y=await nz$($.type,X,$.token),J=await Z.storage.gitProviderAccounts.upsert({organizationId:Q.id,type:$.type,host:X,authKind:"token",externalAccountId:Y.externalAccountId,login:Y.login,avatarUrl:Y.avatarUrl,createdBy:o0(Z)??null});return await Z.storage.gitProviderAccountCredentials.upsert({connectionId:J.id,accessToken:$.token,refreshToken:null,scope:null,expiresAt:null,clientId:null,clientSecret:null,tokenEndpoint:null}),{account:p78(J)}}}),a78=h({name:"GIT_ACCOUNT_DELETE",description:"Disconnect a git provider account. Its repositories stay linked but lose credentials (they become anonymous clones) until linked to another account.",annotations:{title:"Disconnect git account",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({id:m$.string()}),outputSchema:m$.object({deleted:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{deleted:await Z.storage.gitProviderAccounts.delete($.id,Q.id)}}}),s78=h({name:"REPOSITORY_LIST",description:"List the repositories linked to this organization.",annotations:{title:"List repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({accountId:m$.string().optional().describe("Only repositories of this account")}),outputSchema:m$.object({repositories:m$.array(h51.extend({usable:m$.boolean()}))}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await Z.storage.repositories.listByOrg(Q.id,{accountId:$.accountId}),Y=await pL(Z,Q.id),J=new Set(Y.map((G)=>G.webUrl.toLowerCase()));return{repositories:X.map((G)=>({...qO1(G),usable:J.has(G.webUrl.toLowerCase())}))}}}),e78=h({name:"REPOSITORY_SEARCH",description:"Search the repositories an account can reach on its provider (not yet linked). Feeds the repository picker.",annotations:{title:"Search provider repositories",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({accountId:m$.string(),query:m$.string().optional(),page:m$.number().int().min(1).optional(),perPage:m$.number().int().min(1).max(100).optional()}),outputSchema:m$.object({repositories:m$.array(tg6),hasMore:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=await n78(Z,Q.id,$.accountId);return CP({db:Z.db,vault:Z.vault},X).listRepos({query:$.query,page:$.page,perPage:$.perPage})}}),$Q8=h({name:"REPOSITORY_LINK",description:"Link a repository to the organization. With an account, the repository is verified against the provider and its facts (id, default branch, visibility) recorded; without one it is linked as an anonymous public clone.",annotations:{title:"Link repository",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({url:m$.string().min(1).describe("Repository URL (https or ssh), or a bare path like owner/name when accountId is given"),accountId:m$.string().optional().describe("Account whose credentials access the repository")}),outputSchema:m$.object({repository:h51}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z),X=o0(Z)??null;if(!$.accountId){let H=eK($.url);if(!H)throw Error("Could not recognise the repository URL. Use a full https URL from GitHub or GitLab.");let F=await Z.storage.repositories.upsert({organizationId:Q.id,ref:H,createdBy:X});return{repository:qO1(F)}}let Y=await n78(Z,Q.id,$.accountId),J=eK($.url,{provider:Y.type,host:Y.host});if(!J)throw Error("Could not recognise the repository URL or path");if(J.host!==Y.host)throw Error(`Repository is on ${J.host} but the account is on ${Y.host}`);let K=await CP({db:Z.db,vault:Z.vault},Y).getRepo(J);if(!K)throw Error(`${J.path} was not found on ${J.host} or the account cannot access it`);let W=await Z.storage.repositories.upsert({organizationId:Q.id,ref:K.ref,accountId:Y.id,externalId:K.externalId,defaultBranch:K.defaultBranch,visibility:K.visibility,createdBy:X});return{repository:qO1(W)}}}),ZQ8=h({name:"REPOSITORY_DELETE",description:"Unlink a repository from the organization. Agents, tasks and syncs that referenced it keep working off their legacy metadata until relinked.",annotations:{title:"Unlink repository",readOnlyHint:!1,destructiveHint:!0,idempotentHint:!0,openWorldHint:!1},_meta:{ui:{visibility:"app"}},inputSchema:m$.object({id:m$.string()}),outputSchema:m$.object({deleted:m$.boolean()}),handler:async($,Z)=>{r(Z),await Z.access.check();let Q=t(Z);return{deleted:await Z.storage.repositories.delete($.id,Q.id)}}})});import{z as J$}from"zod";async function Td($,Z){let Q=$.organization?.id;if(!Q)throw Error("Organization context required");let X=await Hs($,Q,ZS0(Z));if(!X)throw Error(m78);return X}var rg6,ag6,QS0,sg6,XQ8,YQ8,JQ8,GQ8,KQ8,WQ8;var HQ8=D(()=>{M0();H7();RO1();rg6=J$.object({id:J$.string().nullable(),name:J$.string(),state:J$.enum(["queued","running","completed"]),conclusion:J$.enum(["success","failure","neutral","cancelled","skipped","timed_out","action_required"]).nullable(),url:J$.string().nullable(),durationMs:J$.number().nullable(),summary:J$.string().nullable()}),ag6=J$.object({id:J$.string(),author:J$.string(),body:J$.string(),createdAt:J$.string(),updatedAt:J$.string(),url:J$.string()}),QS0=J$.object({number:J$.number(),url:J$.string(),title:J$.string(),body:J$.string(),state:J$.enum(["open","closed","merged"]),draft:J$.boolean(),mergedAt:J$.string().nullable(),base:J$.string(),head:J$.string(),headSha:J$.string(),headRepoPath:J$.string().nullable(),author:J$.string(),conflicting:J$.boolean().nullable(),checks:J$.enum(["pending","passing","failing"]).nullable(),changedFiles:J$.number().nullable()}),sg6=QS0.extend({checkRuns:J$.array(rg6),comments:J$.array(ag6),unresolvedConversations:J$.number(),reviewBlocked:J$.boolean()}),XQ8=h({name:"CHANGE_REQUEST_STATE",description:"Read a branch's change request with its CI runs, review state and comments.",annotations:{title:"Read Change Request State",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,branch:J$.string().describe("Head branch of the change request to read")}),outputSchema:J$.object({changeRequest:sg6.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Td(Z,$)).readDetailed({branch:$.branch})}}}),YQ8=h({name:"CHANGE_REQUEST_LAST_MERGED",description:"Read the most recently merged change request into a base branch \u2014 in Fast Preview, the last publish.",annotations:{title:"Read Last Merged Change Request",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,base:J$.string().describe("Branch it was merged into")}),outputSchema:J$.object({changeRequest:QS0.nullable()}),handler:async($,Z)=>{return await Z.access.check(),{changeRequest:await(await Td(Z,$)).lastMergedInto($.base)}}}),JQ8=h({name:"CHANGE_REQUEST_LIST_OPEN",description:"List a repository's open change requests, most recently updated first.",annotations:{title:"List Open Change Requests",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,limit:J$.number().int().min(1).max(100).default(50)}),outputSchema:J$.object({changeRequests:J$.array(QS0)}),handler:async($,Z)=>{return await Z.access.check(),{changeRequests:await(await Td(Z,$)).listOpen($.limit)}}}),GQ8=h({name:"CHANGE_REQUEST_CHECK_LOG",description:"Read one CI run's report \u2014 a GitHub check run's output markdown, or the tail of a GitLab job's trace.",annotations:{title:"Read CI Run Report",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,checkId:J$.string().describe("Provider id of the run, from its listing")}),outputSchema:J$.object({report:J$.string().nullable()}),handler:async($,Z)=>{return await Z.access.check(),{report:await(await Td(Z,$)).readCheckLog($.checkId)}}}),KQ8=h({name:"CHANGE_REQUEST_OPEN",description:"Propose a branch onto another. Returns the branch's existing change request instead of failing when it already has one.",annotations:{title:"Open Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!0,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,head:J$.string().describe("Branch being proposed"),base:J$.string().describe("Branch it should land on"),title:J$.string(),body:J$.string().optional()}),outputSchema:J$.object({changeRequest:QS0,existed:J$.boolean()}),handler:async($,Z)=>{await Z.access.check();let Q=await Td(Z,$),X=await Q.readForBranch($.head);if(X&&X.state==="open"){if($.body&&$.body!==X.body)await Q.describe(X.number,$.body);return{changeRequest:$.body?{...X,body:$.body}:X,existed:!0}}return{changeRequest:await Q.open({head:$.head,base:$.base,title:$.title,body:$.body}),existed:!1}}}),WQ8=h({name:"CHANGE_REQUEST_MERGE",description:"Land a change request. Reports why it could not merge rather than throwing.",annotations:{title:"Merge Change Request",readOnlyHint:!1,destructiveHint:!1,idempotentHint:!1,openWorldHint:!0},_meta:{ui:{visibility:"app"}},inputSchema:J$.object({...vB,number:J$.number().int().positive(),strategy:J$.enum(["any","squash"]).default("any").describe("`squash` when the result must be one commit; `any` uses whatever the repository allows"),commitTitle:J$.string().optional(),commitMessage:J$.string().optional()}),outputSchema:J$.object({merged:J$.boolean(),reason:J$.enum(["conflict","blocked","rate_limited","not_found","error"]).optional(),detail:J$.string().optional()}),handler:async($,Z)=>{await Z.access.check();let X=await(await Td(Z,$)).merge($.number,{strategy:$.strategy,commitTitle:$.commitTitle,commitMessage:$.commitMessage});return X.merged?{merged:!0}:{merged:!1,reason:X.reason,detail:X.detail}}})});import{z as h6}from"zod";function XS0($){if(!$)return"";return typeof $==="string"?$:$.toISOString()}function FQ8($){let Z=$.trim();return Z.length>0?Z:void 0}function UQ8($,Z){return $===void 0||$.includes(Z)}var $h6,Zh6,Qh6,Xh6,Yh6,Jh6,MO1;var NQ8=D(()=>{M0();kY1();$h6=["thread","task"],Zh6=h6.object({type:h6.literal("thread"),id:h6.string(),title:h6.string(),created_at:h6.string(),updated_at:h6.string(),virtual_mcp_id:h6.string().nullable(),run_config:h6.record(h6.string(),h6.unknown()).nullable(),status:h6.string().nullable()}),Qh6=h6.object({type:h6.literal("task"),id:h6.string(),title:h6.string(),created_at:h6.string(),updated_at:h6.string(),key:h6.string().nullable(),status:h6.string().nullable(),repo:h6.string().nullable()}),Xh6=h6.discriminatedUnion("type",[Zh6,Qh6]),Yh6=h6.object({query:h6.string().max(256).describe("Free-text search query. Empty string returns the most recently updated resources."),limit:h6.number().int().min(1).max(50).optional().describe("Maximum results per resource type (default: 20)."),types:h6.array(h6.enum($h6)).optional().describe("Restrict the search to specific resource types. Omit to search across all available types.")}),Jh6=h6.object({items:h6.array(Xh6),totalCount:h6.number()});MO1=h({name:"GLOBAL_SEARCH",description:"Search across organization resources by free-text query. Returns a typed union of matches (currently: threads and task-board cards). New resource types may be added over time without changes to the call shape.",annotations:{title:"Global Search",readOnlyHint:!0,destructiveHint:!1,idempotentHint:!0,openWorldHint:!1},inputSchema:Yh6,outputSchema:Jh6,handler:async($,Z)=>{await Z.access.check();let Q=t(Z),X=$.limit??20,Y=UQ8($.types,"thread"),J=UQ8($.types,"task"),G=[],K=0;if(Y){let{threads:W,total:H}=await Z.storage.threads.list(void 0,{limit:X,offset:0,search:FQ8($.query),includeArchived:!1});K+=H;for(let F of W)G.push({type:"thread",id:F.id,title:F.title??"",created_at:XS0(F.created_at),updated_at:XS0(F.updated_at),virtual_mcp_id:F.virtual_mcp_id??null,run_config:F.run_config??null,status:P3(F).status})}if(J){let W=await Z.storage.taskBoard.searchByTitle(Q.id,FQ8($.query)??"",X);K+=W.length;for(let H of W)G.push({type:"task",id:H.id,title:H.title??"",created_at:XS0(H.createdAt),updated_at:XS0(H.updatedAt),key:Q.slug?NR0(Q.slug,H.keySeq):null,status:H.status??null,repo:H.repo??null})}return{items:G,totalCount:K}}})});var BQ8=D(()=>{NQ8()});var JW0={};e(JW0,{toolSubsetMCP:()=>VO1,managementMCP:()=>rl,managementContextStore:()=>OB,listManagementTools:()=>Kh6,TOOL_BY_NAME:()=>Rd,CORE_TOOLS:()=>DQ8});import{z as OQ8}from"zod";async function Kh6($){let Z=await rl($),[Q,X]=Ha.createLinkedPair();await Z.connect(X);let Y=new $Z({name:"tools-hydration",version:"1.0.0"},{jsonSchemaValidator:S5});try{return await Y.connect(Q),(await Y.listTools()).tools}finally{await Y.close().catch(()=>{}),await Z.close().catch(()=>{})}}var DQ8,Rd,VO1=($,Z)=>{let Q=new SH({name:$,version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:S5});for(let X of Z){let Y=Rd.get(X);if(!Y){console.warn(`[${$}] unknown tool "${X}" \u2014 not registered`);continue}let{config:J,handler:G}=d$0(Y);Q.registerTool(Y.name,J,G)}return Q},rl=async($)=>{let Z=new SH({name:"mcp-cms-management",version:"1.0.0"},{capabilities:{tools:{},prompts:{},resources:{}},jsonSchemaValidator:S5});for(let Y of Rd.values()){let{config:J,handler:G}=d$0(Y);Z.registerTool(Y.name,J,G)}let Q=bk0();for(let Y of Q){let J=Y.arguments?.length?Object.fromEntries(Y.arguments.map((G)=>{let K=G.required?OQ8.string():OQ8.string().optional();return[G.name,G.description?K.describe(G.description):K]})):void 0;Z.registerPrompt(Y.name,{title:Y.title,description:Y.description,...J?{argsSchema:J}:{}},(G)=>{return{messages:[{role:"user",content:{type:"text",text:typeof Y.text==="function"?Y.text(G??{}):Y.text}}]}})}if($.organization?.id){let Y=await $.storage.brandContext.list($.organization.id),J=new Set;for(let G of Y){let K=G.name.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,""),W=K?`brand-${K}`:`brand-${G.id}`;if(J.has(W))W=`${W}-${G.id.slice(0,8)}`;J.add(W);let H=[`# Brand: ${G.name}`,"",`**Domain:** ${G.domain}`,"","## Overview",G.overview];if(G.colors){let U=Object.entries(G.colors).filter(([,N])=>N);if(U.length>0){H.push("","## Colors");for(let[N,B]of U)H.push(`- **${N}:** ${B}`)}}if(G.fonts){let U=Object.entries(G.fonts).filter(([,N])=>N);if(U.length>0){H.push("","## Fonts");for(let[N,B]of U)H.push(`- ${B} (${N})`)}}if(G.logo)H.push("",`**Logo:** ${G.logo}`);if(G.favicon)H.push(`**Favicon:** ${G.favicon}`);if(G.ogImage)H.push(`**OG Image:** ${G.ogImage}`);if(G.images&&G.images.length>0){H.push("","## Images");for(let U of G.images){let N=Object.entries(U).map(([B,O])=>`${B}: ${O}`).join(", ");H.push(`- ${N}`)}}let F=H.join(`
|
|
4569
4569
|
`);Z.prompt(W,`Brand context for ${G.name}`,()=>({messages:[{role:"user",content:{type:"text",text:F}}]}))}}let X=S58();for(let Y of X)Z.resource(Y.name,Y.uri,{description:Y.description,mimeType:Y.mimeType??"text/markdown"},async(J)=>{return{contents:[{uri:typeof J==="string"?J:J.href,mimeType:Y.mimeType??"text/markdown",text:Y.text}]}});return Z};var RL=D(()=>{kH();Ho();TQ();yL$();oL$();qj$();Sj$();pj$();sj$();nE$();Hm$();wm$();Tm$();Vm$();Dd$();Ed$();Tn$();Mn$();Sn$();_68();u68();l68();t68();J58();eB1();yk0();yk0();Q98();g78();u78();l78();QQ8();HQ8();BQ8();DQ8=[e61,$51,Z51,Q51,X51,Y51,J51,Fm$,Nm$,Om$,Dm$,Zf,sx,ex,$f,oG1,rG1,aG1,eG1,$31,Z31,ax,Q31,J31,G31,K31,W31,uY1,N31,B31,O31,D31,H31,F31,e71,G51,K51,W51,H51,F51,N51,B51,O51,w51,j51,E51,z51,P51,A51,T51,R51,I51,q51,M51,V51,C51,v51,g51,gB1,iB1,pB1,G61,OP,DP,R61,I61,q61,s41,r41,t41,o41,wP,jP,EP,zP,PP,kj$,n61,t61,o61,r61,a61,m41,i41,p41,d41,JK1,GK1,KK1,A31,xx,fx,R31,I31,bx,w31,j31,E31,z31,P31,q31,M31,V31,s31,e31,$K1,ZK1,QK1,XK1,YK1,AP,TP,RP,p61,GH1,KH1,WH1,HH1,FH1,UH1,NH1,BH1,OH1,DH1,LH1,EH1,zH1,Rn$,In$,qn$,TH1,RH1,CB1,vB1,xB1,fB1,bB1,yB1,c68,m68,d68,i68,p68,n68,$58,Z58,Q58,X58,Y58,rB1,aB1,sB1,ux,cx,lx,mx,$O1,ZO1,QO1,XO1,YO1,JO1,...y78,fX1,PO1,AO1,t78,o78,r78,a78,s78,e78,$Q8,ZQ8,IO1,XQ8,YQ8,JQ8,GQ8,KQ8,WQ8,MO1],Rd=new Map(DQ8.map(($)=>[$.name,$]))});import{z as LQ8}from"zod";function Wh6($){return[{permissions:{self:["*"]},getTools:async()=>{let{CORE_TOOLS:Z}=await Promise.resolve().then(() => (RL(),JW0));return Z.map((Q)=>{return{name:Q.name,inputSchema:LQ8.toJSONSchema(Q.inputSchema,{unrepresentable:"any"}),outputSchema:Q.outputSchema?LQ8.toJSONSchema(Q.outputSchema,{unrepresentable:"any"}):void 0,description:Q.description}})},data:bJ$(l5(),$)},{data:fJ$()},{data:xJ$($)}]}async function wQ8($,Z){try{let Q=u$(),X=k0();await Q.db.insertInto("organization_billing").values({organization_id:$}).onConflict((K)=>K.column("organization_id").doNothing()).execute();let Y=new EX(X.encryptionKey),J=new wo(Q.db,Y),G=Wh6($);await Promise.all(G.map(async(K)=>{let W=null;if(K.permissions)W=(await G8.api.createApiKey({body:{name:`${K.data.app_name??crypto.randomUUID()}-mcp`,userId:Z,permissions:K.permissions,rateLimitEnabled:!1,metadata:{organization:{id:$},purpose:"default-org-connections"}}}))?.key;let H=await Jc({id:"pending",title:K.data.title,connection_type:K.data.connection_type,connection_url:K.data.connection_url,connection_token:K.data.connection_token??W,connection_headers:K.data.connection_headers}).catch(()=>null),F=await K.getTools?.()??H?.tools??null,U=H?.scopes?.length?H.scopes:null,N=K.data.id?K.data.id.startsWith(`${$}_`)?K.data.id:`${$}_${K.data.id}`:void 0;await J.create({...K.data,id:N,tools:F,configuration_scopes:U,organization_id:$,created_by:Z,connection_token:K.data.connection_token??W})}));try{await l41({orgId:$,createdBy:Z})}catch(K){console.error("Failed to enqueue studio pack install:",K)}if(X.aiGatewayEnabled&&X.studioProvisionSecretKey&&BL.provisionKey)try{let K=await jH(Z),W=await BL.provisionKey(K,$);await new Ka(Q.db,Y).upsert({providerId:"deco",label:"Auto-provisioned",apiKey:W,organizationId:$,createdBy:Z})}catch(K){console.error("Failed to auto-provision Deco AI Gateway key:",K)}}catch(Q){console.error("Error creating default MCP connections:",Q)}}var jQ8=D(()=>{x8();qK0();V5();wQ();GD();q41();e01();VK0();A$();uJ();_K0();JD()});async function EQ8($,Z){let Q=OX();if(!Q)return Z;let X=await u$().db.selectFrom("organization").select("slug").where("id","=",$).executeTakeFirst();if(!X?.slug)return Z;return await An({objectStorage:AJ(Q,$),baseUrl:l5(),orgSlug:X.slug,prefix:"org-logos"})(Z)??Z}var zQ8=D(()=>{wQ();lO();_Q0();V5()});function Hh6($,Z){let Q=$.email.split("@")[1]?.toLowerCase()??null;return{distinctId:$.id,properties:{$set:{email:$.email,name:$.name,email_verified:$.emailVerified},$set_once:{first_seen_at:Z.toISOString(),signup_email_domain:Q}}}}function kO1($){_1.identify(Hh6($,new Date))}var PQ8=D(()=>{l4()});import{adminAc as AQ8,memberAc as Fh6}from"@decocms/better-auth/plugins/organization/access";function CO1($){let Z=["*",...$];return{user:{self:[...hY0],...Fh6.statements},admin:{self:Z,...AQ8.statements},owner:{self:Z,...AQ8.statements}}}function Uh6($,Z){for(let[Q,X]of Object.entries(Z)){let Y=$[Q];if(!Y)return!1;for(let J of X)if(!Y.includes(J)&&!Y.includes("*"))return!1}return!0}function TQ8($,Z,Q){if(!$)return"fallback";if($.includes(","))return"fallback";if(!Wh.includes($))return"fallback";let X=Q[$];if(!X)return"fallback";return Uh6(X,Z)?"grant":"deny"}function RQ8(){if(!SO1){let $=Object.values(Qz()).flatMap((Z)=>Z.map((Q)=>Q.name));SO1=CO1($)}return SO1}var SO1;var _O1=D(()=>{Kh();zX()});import{decodeJwt as Nh6}from"jose";import{sql as e$0}from"kysely";async function Dh6($){let{user:Z,token:Q}=$;if(!Q?.idToken)return;let X;try{X=Nh6(Q.idToken)}catch{return}let{preferred_username:Y,upn:J}=X,G=[Y,J].filter((H)=>typeof H==="string"&&H.length>0&&H.toLowerCase()!==Z.email.toLowerCase()).map((H)=>H.toLowerCase());if(G.length===0)return;let{db:K}=u$(),W=await K.selectFrom("user").selectAll().where("email","in",G).where("id","!=",Z.id).executeTakeFirst();if(!W)return;try{await K.transaction().execute(async(H)=>{await e$0`UPDATE "account" SET "userId" = ${W.id} WHERE "userId" = ${Z.id}`.execute(H),await e$0`UPDATE "session" SET "userId" = ${W.id} WHERE "userId" = ${Z.id}`.execute(H),await e$0`
|
|
4570
4570
|
UPDATE "member" SET "userId" = ${W.id}
|
|
4571
4571
|
WHERE "userId" = ${Z.id}
|