decocms 4.245.1 → 4.245.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-CWS3caol.js → AlertCircle-BRsIg7Bs.js} +1 -1
- package/dist/client/assets/{AreaChart-Ch5t0DSa.js → AreaChart-Dex1FPkF.js} +1 -1
- package/dist/client/assets/{ArrowLeft-Cb1v-9cD.js → ArrowLeft-DGIQNI2A.js} +1 -1
- package/dist/client/assets/{ArrowUp-BglFckSp.js → ArrowUp-3Uwqo6vm.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-BwwZ1p8B.js → ArrowUpRight-CB4zJsQK.js} +1 -1
- package/dist/client/assets/{Check-BEoj7Khh.js → Check-w8GtcJoC.js} +1 -1
- package/dist/client/assets/{CheckCircle-CKyLnVRh.js → CheckCircle-BZFJlJCf.js} +1 -1
- package/dist/client/assets/{ChevronDown-CAoRsesl.js → ChevronDown-BCLYi-bB.js} +1 -1
- package/dist/client/assets/{ChevronRight-xqBmhKWZ.js → ChevronRight-BttxL7xa.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-BWe71iNa.js → ChevronSelectorVertical-Di2ogDM4.js} +1 -1
- package/dist/client/assets/{ChevronUp-anZFNOW_.js → ChevronUp-DwbhlBkZ.js} +1 -1
- package/dist/client/assets/{Copy01-BaY8WLw_.js → Copy01-rOW9BBm-.js} +1 -1
- package/dist/client/assets/{CreditCard01-DiE0wewt.js → CreditCard01-DducPjpM.js} +1 -1
- package/dist/client/assets/{DotsVertical-1yn23j63.js → DotsVertical-Dl68jJvG.js} +1 -1
- package/dist/client/assets/{Download01-DM6mnzIL.js → Download01-BsuT4Rm5.js} +1 -1
- package/dist/client/assets/{Eye-BUn1f4eI.js → Eye-wInYC-8M.js} +1 -1
- package/dist/client/assets/{FilterLines-CMX0oGRk.js → FilterLines-CpH8OHrQ.js} +1 -1
- package/dist/client/assets/{Globe01-BF1875OP.js → Globe01-DofT0HDY.js} +1 -1
- package/dist/client/assets/{Globe04-oAzGLYAS.js → Globe04-BApc8o4E.js} +1 -1
- package/dist/client/assets/{HardDrive-ClDilEQP.js → HardDrive-DDakoNbS.js} +1 -1
- package/dist/client/assets/{Key01-ZBfxQetL.js → Key01-C6KHHlEB.js} +1 -1
- package/dist/client/assets/{LayoutLeft-CDVT9Dgd.js → LayoutLeft-BEZxvUka.js} +1 -1
- package/dist/client/assets/{LinkExternal01-tV8t1hza.js → LinkExternal01-C6cRCXyR.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-BdOhNnbV.js → LockUnlocked01-uWoV-NXk.js} +1 -1
- package/dist/client/assets/{LogOut01-CtYkidhR.js → LogOut01-C1w-t8M-.js} +1 -1
- package/dist/client/assets/{Monitor01-dGYL4z_0.js → Monitor01-BQ_JaKYc.js} +1 -1
- package/dist/client/assets/{Palette-Bf8E3y6a.js → Palette-DkuqX6QY.js} +1 -1
- package/dist/client/assets/{Play-DfCgAfnz.js → Play-QQA73n-T.js} +1 -1
- package/dist/client/assets/{Plus-hzMlfF5t.js → Plus-Cf-uAHDc.js} +1 -1
- package/dist/client/assets/{SearchLg-DUR70efk.js → SearchLg-ClssEr-t.js} +1 -1
- package/dist/client/assets/{SearchMd-BVLUrgHw.js → SearchMd-CHVBEYVq.js} +1 -1
- package/dist/client/assets/{Settings02-B3UeJQql.js → Settings02-CXJmu6uQ.js} +1 -1
- package/dist/client/assets/{Share07-Dd5D7nRP.js → Share07-DPigbb1Y.js} +1 -1
- package/dist/client/assets/{Shield01-gQLm6n7_.js → Shield01-BkKJ7MDO.js} +1 -1
- package/dist/client/assets/{Stars01-CWLSMDFe.js → Stars01-Dj2e0IeH.js} +1 -1
- package/dist/client/assets/{Stars02-BOvoNxv-.js → Stars02-DrNcYto2.js} +1 -1
- package/dist/client/assets/{Sun-DWGCQTGg.js → Sun-DAInbv7a.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-De6AUb2Z.js → SwitchHorizontal01-BotYNJw9.js} +1 -1
- package/dist/client/assets/{Tool01-5rzCvndC.js → Tool01-Dt1uo11I.js} +1 -1
- package/dist/client/assets/{Tool02-LrSA6GhG.js → Tool02-8sq0vm_R.js} +1 -1
- package/dist/client/assets/{Trash01-CQi5djNt.js → Trash01-D5RoLjea.js} +1 -1
- package/dist/client/assets/{TrendUp01-DGOWmLf7.js → TrendUp01-nUyA5cR2.js} +1 -1
- package/dist/client/assets/{Upload01-DimHA1g3.js → Upload01-gPCEbEkI.js} +1 -1
- package/dist/client/assets/{User01-zbSjEILB.js → User01-DUDr6ATD.js} +1 -1
- package/dist/client/assets/{Users01-CWF2Gmgt.js → Users01-kbgPREvg.js} +1 -1
- package/dist/client/assets/{Users03-2pkLDwKS.js → Users03-WJ_LEPzj.js} +1 -1
- package/dist/client/assets/{X-B9nYIfsj.js → X-8XTep3uo.js} +1 -1
- package/dist/client/assets/{XCircle-BRwJJeJP.js → XCircle-BcKqF0Yu.js} +1 -1
- package/dist/client/assets/{XClose-C4YAUgwt.js → XClose-4nZGg9Gm.js} +1 -1
- package/dist/client/assets/{YAxis-Bmxi-oNF.js → YAxis-BCm0wGU_.js} +1 -1
- package/dist/client/assets/{Zap-BPj9OtPo.js → Zap-BGqYm_DA.js} +1 -1
- package/dist/client/assets/{ZapSquare-BdqbCdt9.js → ZapSquare-B3pzsprB.js} +1 -1
- package/dist/client/assets/{access-gate-D59Qmmgd.js → access-gate-x3KTsh0r.js} +1 -1
- package/dist/client/assets/{agent-icon-BrcF009V.js → agent-icon-DxGZ9Wr-.js} +1 -1
- package/dist/client/assets/{agents-list-CfsJWT1c.js → agents-list-WIm5uKmN.js} +1 -1
- package/dist/client/assets/{ai-providers-BIIY4E36.js → ai-providers-BeWRhJ8P.js} +1 -1
- package/dist/client/assets/{alert-CZ7cTnb_.js → alert-B3A3DY_6.js} +1 -1
- package/dist/client/assets/{alert-dialog-D2jUXfgl.js → alert-dialog-CGfLkCNM.js} +1 -1
- package/dist/client/assets/{api-keys-B1KgGsg1.js → api-keys-DGdHknMW.js} +1 -1
- package/dist/client/assets/{app-editor-BSYAWnlc.js → app-editor-DxXRCDZL.js} +1 -1
- package/dist/client/assets/{auth-gDrpaZ1U.js → auth-DGKvd1l9.js} +1 -1
- package/dist/client/assets/{auth-catchall-Btp9QZb2.js → auth-catchall-8Gr8XIST.js} +1 -1
- package/dist/client/assets/{auth-entry-BRw0o00W.js → auth-entry-CTr7-M3Q.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CNoF-0xe.js → auth-split-layout-DE3AjiOY.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-DhRO0RPr.js → authenticate-and-persist-oauth-Dp6z0nQK.js} +1 -1
- package/dist/client/assets/{automation-list-row-CaAPa6W_.js → automation-list-row-CVMCnJL5.js} +1 -1
- package/dist/client/assets/{automation-runs-YEFmvlRF.js → automation-runs-DR_qmywD.js} +1 -1
- package/dist/client/assets/{automations-i0nsXJp7.js → automations-7XQ5t-w2.js} +1 -1
- package/dist/client/assets/{avatar-BoqrBljt.js → avatar-DgQ-9orW.js} +1 -1
- package/dist/client/assets/{badge-CwQvUPen.js → badge-8mbPg3VH.js} +1 -1
- package/dist/client/assets/{billing-X7kRuspu.js → billing-C6bIvFPc.js} +1 -1
- package/dist/client/assets/{block-document-Dydehdlr.js → block-document-oQy24qzs.js} +1 -1
- package/dist/client/assets/{buckets-1s6qA1N6.js → buckets-BXXtp8xi.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-7X_4N7es.js → bulk-category-panel-Bn6_DQWR.js} +1 -1
- package/dist/client/assets/{capability-load-error-CjnAtN-b.js → capability-load-error-CadNJtMx.js} +1 -1
- package/dist/client/assets/{card-gt12k-_K.js → card-DCa_xdsm.js} +1 -1
- package/dist/client/assets/{cards-bUqIl5ke.js → cards-DsYF257V.js} +1 -1
- package/dist/client/assets/{category-editor-B4VMe-e3.js → category-editor-CoKsHl2r.js} +1 -1
- package/dist/client/assets/{chart-D_M_Leqk.js → chart-CY4wajUg.js} +1 -1
- package/dist/client/assets/{chat-context-BvYUtIwW.js → chat-context-DlKoUAgK.js} +1 -1
- package/dist/client/assets/{checkbox-BataWfdN.js → checkbox-e4fc-LcU.js} +1 -1
- package/dist/client/assets/{choose-editor-Cj59wZqi.js → choose-editor-NLOxhfB4.js} +1 -1
- package/dist/client/assets/{cli-auth-success-C11hxBvQ.js → cli-auth-success-C3Aihq1y.js} +1 -1
- package/dist/client/assets/{collection-detail-CEUVvtIq.js → collection-detail-DaeCLu-Q.js} +1 -1
- package/dist/client/assets/{collection-display-button-B-k5iV5T.js → collection-display-button-In3V9sS9.js} +1 -1
- package/dist/client/assets/{collection-search-UIsxX62P.js → collection-search-Dgv6bdgn.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-SXlTERG9.js → collection-table-wrapper-CdHxzdGx.js} +1 -1
- package/dist/client/assets/{collection-tabs-BvZAlwQz.js → collection-tabs-BxOpEgNA.js} +1 -1
- package/dist/client/assets/{command-D2rHchqp.js → command-BWET8hLx.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CrzRHq2a.js → commerce-onboarding-ij2sq_7C.js} +1 -1
- package/dist/client/assets/{connect-W077nRcC.js → connect-Cc08ydxA.js} +1 -1
- package/dist/client/assets/{connection-card-DdrYTE3y.js → connection-card-eH8dMo7S.js} +1 -1
- package/dist/client/assets/{connection-detail-BuzpN64W.js → connection-detail-CI06ezji.js} +1 -1
- package/dist/client/assets/{connection-BRoG2EIm.js → connection-edR0hs42.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-CEOpY3lC.js → connection-form-helpers-DhX6ou1S.js} +1 -1
- package/dist/client/assets/{connections-CRZIVSH_.js → connections-sYirrkFN.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-B416a3zb.js → decopilot-sse-pool-DkxqcuCH.js} +1 -1
- package/dist/client/assets/{dialog-BBG8h_sW.js → dialog-CGLwsoge.js} +1 -1
- package/dist/client/assets/{domain-settings-b3sYEAQy.js → domain-settings-Cks2p8F9.js} +1 -1
- package/dist/client/assets/{drawer-emyJR_uX.js → drawer-D-WJMXnL.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BsfgDihP.js → dropdown-menu-D3gd8WJ_.js} +1 -1
- package/dist/client/assets/{empty-state-B3lY33gZ.js → empty-state-BHkfIilU.js} +1 -1
- package/dist/client/assets/{extract-connection-data-DfxXPhUc.js → extract-connection-data-C7dmbZpF.js} +1 -1
- package/dist/client/assets/{file-explorer-BJm94f8T.js → file-explorer-BeJTjUNe.js} +1 -1
- package/dist/client/assets/{file-type-icon-L8XdvFDS.js → file-type-icon-BYPVvI5E.js} +1 -1
- package/dist/client/assets/{form-wigBWKDs.js → form-CYvHKoXx.js} +1 -1
- package/dist/client/assets/{general-BcyOBnHh.js → general-CKPmcgCa.js} +1 -1
- package/dist/client/assets/{github-repo-picker-oaK5Gypm.js → github-repo-picker-g5Ak6-_1.js} +1 -1
- package/dist/client/assets/{hooks-DhsWu87c.js → hooks--EsNn0B5.js} +1 -1
- package/dist/client/assets/{index-DUeFyYSL.js → index-BPxV-ZXL.js} +1 -1
- package/dist/client/assets/{index-BO4iEiWg.js → index-BdUI69UC.js} +1 -1
- package/dist/client/assets/{index-BYSqg2LT.js → index-C0JWKVRq.js} +1 -1
- package/dist/client/assets/{index-C_yzfjgX.js → index-CEBKzl20.js} +3 -3
- package/dist/client/assets/{index-BIyKq3hZ.js → index-CLsw15Lv.js} +1 -1
- package/dist/client/assets/{index-ByL8_FEx.js → index-CNmtGDQd.js} +1 -1
- package/dist/client/assets/{index-BVf2mA9F.js → index-DQXbAQe0.js} +51 -51
- package/dist/client/assets/{index-BZbdFRhd.js → index-DmLU26oq.js} +1 -1
- package/dist/client/assets/{index-CZD0HkUi.js → index-DrSQywNi.js} +1 -1
- package/dist/client/assets/{index-CPMnp8v9.js → index-_2G84Y9S.js} +1 -1
- package/dist/client/assets/{index-redirect-zXwVVKvr.js → index-redirect-Ds0Gcpm8.js} +1 -1
- package/dist/client/assets/{infra-billing-Cqw6p-SX.js → infra-billing-kre1ztON.js} +1 -1
- package/dist/client/assets/{input-D9RVOy-R.js → input-Dy_SS_8_.js} +1 -1
- package/dist/client/assets/{integration-icon-DzPyDw7L.js → integration-icon-C6TN_3rY.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DMj6_Avv.js → invite-member-dialog-BZqlTH8p.js} +1 -1
- package/dist/client/assets/{label-CaJRPYtm.js → label-p0vhuL3r.js} +1 -1
- package/dist/client/assets/{layout-lOHQM4_m.js → layout-vZjaivzc.js} +1 -1
- package/dist/client/assets/{login-CZMTbQM4.js → login-DKWrd86Y.js} +1 -1
- package/dist/client/assets/{mcp-oauth-Cy_Bf-ym.js → mcp-oauth-BfaBAZov.js} +1 -1
- package/dist/client/assets/{members-CtJfTLQu.js → members-CahzdkKV.js} +1 -1
- package/dist/client/assets/{monaco-editor-DScEOi-N.js → monaco-editor-EaEtLUiK.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-ChvEpy6d.js → monitoring-stats-row-B46jAA8x.js} +1 -1
- package/dist/client/assets/{multi-select-DBUPGDcX.js → multi-select-ql4HwHXa.js} +1 -1
- package/dist/client/assets/{oauth-callback-CQu3j583.js → oauth-callback-Cm-HkBun.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Calx3TXW.js → oauth-callback-ai-provider-OcfuhCf_.js} +1 -1
- package/dist/client/assets/{onboarding-BGz5zROJ.js → onboarding-Bpy8XkW1.js} +1 -1
- package/dist/client/assets/{org-layout-BblZzy2v.js → org-layout-CcHguaC2.js} +1 -1
- package/dist/client/assets/{organization-choice-OEgx4j24.js → organization-choice-BB_-9BaI.js} +1 -1
- package/dist/client/assets/{orgs-DdlGYQFG.js → orgs-BmlSL3an.js} +1 -1
- package/dist/client/assets/{page-seo-form-BI_OmQvP.js → page-seo-form-ylAgXXeP.js} +1 -1
- package/dist/client/assets/{popover-C6icmT7k.js → popover-DT5thWyn.js} +1 -1
- package/dist/client/assets/{post-editor-vAh2fU5E.js → post-editor-BsGq794Z.js} +1 -1
- package/dist/client/assets/{primitives-ShG-y3jR.js → primitives-Bn7PILK_.js} +1 -1
- package/dist/client/assets/{profile-BFdvDZ4t.js → profile-DJqEjWcU.js} +1 -1
- package/dist/client/assets/{project-app-view-BPJeLDhI.js → project-app-view-BMyaUInw.js} +1 -1
- package/dist/client/assets/record-editor-ZLVDzsr_.js +1 -0
- package/dist/client/assets/{redirect-editor-_CYUW0Nq.js → redirect-editor-Ca_XY6ea.js} +1 -1
- package/dist/client/assets/registry-CwHpJwxg.js +2 -0
- package/dist/client/assets/{registry-layout-BPLLxJlp.js → registry-layout-84dnAYC0.js} +1 -1
- package/dist/client/assets/{reports-DA8UOxSY.js → reports-DPbFsJZR.js} +1 -1
- package/dist/client/assets/{require-capability-fk3eeaDw.js → require-capability-Cucdyo6s.js} +1 -1
- package/dist/client/assets/{required-auth-layout-Bn37q6Si.js → required-auth-layout-8YP_RL5t.js} +1 -1
- package/dist/client/assets/{reset-password-B2SPdm0y.js → reset-password-D1sEb8J1.js} +1 -1
- package/dist/client/assets/{roles-J4ArT4tF.js → roles-Cfpq3PWt.js} +1 -1
- package/dist/client/assets/{search-input-CrhcZ0Vp.js → search-input-D87bCj09.js} +1 -1
- package/dist/client/assets/{secrets-KIFPDlfy.js → secrets-DWHXA58S.js} +1 -1
- package/dist/client/assets/{sections-editor-mb_qSvn2.js → sections-editor-DzMap0WW.js} +1 -1
- package/dist/client/assets/{select-Dd4yiSks.js → select-BuHjzWuk.js} +1 -1
- package/dist/client/assets/{select-model-BusjfCiB.js → select-model-Ckr2nFzd.js} +1 -1
- package/dist/client/assets/{self-tool-result-Dd_VzOBG.js → self-tool-result-Bcl6BRIy.js} +1 -1
- package/dist/client/assets/{seo-editor-C6HjScnu.js → seo-editor-DSKKjWDd.js} +1 -1
- package/dist/client/assets/{settings-layout-DHHQ4AVp.js → settings-layout-BfkLKH4x.js} +1 -1
- package/dist/client/assets/{settings-section-ZiXzsLKj.js → settings-section-CMm_TivA.js} +1 -1
- package/dist/client/assets/{settings-subnav-CEx98H-O.js → settings-subnav-D56Qn-My.js} +1 -1
- package/dist/client/assets/{shell-controls-Cz8QUYDP.js → shell-controls-B_cjxqOp.js} +1 -1
- package/dist/client/assets/{shell-layout-IM9Tetf5.js → shell-layout-Bpx6NKyj.js} +1 -1
- package/dist/client/assets/{sidebar-CjVkeUmI.js → sidebar-fq__NsRK.js} +1 -1
- package/dist/client/assets/{skeleton-aqW8n0Gm.js → skeleton-Z_eh6AWy.js} +1 -1
- package/dist/client/assets/{spinner-Cm6qGu-J.js → spinner-I66znm7F.js} +1 -1
- package/dist/client/assets/{sso-DUVksMjH.js → sso-B-2onPf6.js} +1 -1
- package/dist/client/assets/{store-CnjlSvcH.js → store-5ynUNEet.js} +1 -1
- package/dist/client/assets/store-registry-CoGKyyze.js +2 -0
- package/dist/client/assets/{studio-tools-aJ6aJNMq.js → studio-tools-CYpBVV9u.js} +1 -1
- package/dist/client/assets/{switch-CVVIBgFP.js → switch-BUsDZ2Kp.js} +1 -1
- package/dist/client/assets/{synced-repos-TxkuCl72.js → synced-repos-Cmu3jyhJ.js} +1 -1
- package/dist/client/assets/{tab-id-S4_2Gd2I.js → tab-id-BaZA76CZ.js} +1 -1
- package/dist/client/assets/{table-C6NnU1Cd.js → table-BO4YVRrj.js} +1 -1
- package/dist/client/assets/{tabs-B6Zl4VLu.js → tabs-BiibIl46.js} +1 -1
- package/dist/client/assets/{tasks-Qs011xp2.js → tasks-C7ZieKvX.js} +1 -1
- package/dist/client/assets/{textarea-CdfQMqwD.js → textarea-CkftVwL0.js} +1 -1
- package/dist/client/assets/{toggle-group-BBIfyqXM.js → toggle-group-gV4I23LG.js} +1 -1
- package/dist/client/assets/{toolbar-KqPGkyaz.js → toolbar-Ev6MmwI1.js} +1 -1
- package/dist/client/assets/{tooltip-Ddu6lHLa.js → tooltip-CEVa0KyQ.js} +1 -1
- package/dist/client/assets/{track-CD7khAYd.js → track-CkZPPVzr.js} +1 -1
- package/dist/client/assets/{types-CTtLz4Tu.js → types-85JrYIbi.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DTk6o9vO.js → use-ai-providers-h3XJl4w-.js} +1 -1
- package/dist/client/assets/{use-api-keys-CocuJrrR.js → use-api-keys-CWFQrdgC.js} +1 -1
- package/dist/client/assets/{use-automations-COjV8wW2.js → use-automations-BaUZ4DX3.js} +1 -1
- package/dist/client/assets/{use-autosave-BuNFab3y.js → use-autosave-IgjNRy3T.js} +1 -1
- package/dist/client/assets/{use-capability-DUjrX8Od.js → use-capability-5HIbGonD.js} +1 -1
- package/dist/client/assets/{use-clock-tick-C6fvhnn_.js → use-clock-tick-CSni_ecm.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-BGqoJqkd.js → use-commerce-diagnostic-D5HcX5DT.js} +1 -1
- package/dist/client/assets/{use-connection-C3jc6om-.js → use-connection-RnnJlbWZ.js} +1 -1
- package/dist/client/assets/{use-copy-DPAJUETn.js → use-copy-Czcxc7Tl.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-DBJfiQ-g.js → use-create-virtual-mcp-Blnh40-n.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DvImz8zS.js → use-debounced-autosave-DS_uoBvE.js} +1 -1
- package/dist/client/assets/{use-debounced-value-fjei0cgv.js → use-debounced-value-BMuDwPWj.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-C8ye04QK.js → use-decopilot-events-Cx1hTlHI.js} +1 -1
- package/dist/client/assets/{use-delete-connection-IHVgXkrw.js → use-delete-connection-uyJAxdEA.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-oejQW8-4.js → use-deployment-admin-CY3RrCN0.js} +1 -1
- package/dist/client/assets/{use-file-configs-CjfP8pdH.js → use-file-configs-CZ4Sr76u.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-D4rShkvt.js → use-infinite-scroll-CK9W6s8D.js} +1 -1
- package/dist/client/assets/{use-join-requests-DW5T7s2w.js → use-join-requests-as2-pZom.js} +1 -1
- package/dist/client/assets/{use-mcp-client-BYmPCKc-.js → use-mcp-client-wLEpwWAB.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Bkup7Sjz.js → use-mcp-tools-164loFPg.js} +1 -1
- package/dist/client/assets/{use-members--TuWqpLK.js → use-members-DnKoBJzD.js} +1 -1
- package/dist/client/assets/{use-mobile-gpw02O-O.js → use-mobile-BQoHW8-j.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-CiNDqgbJ.js → use-navigate-to-agent-Cr_o853o.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-lWtnBYM7.js → use-open-billing-url-vqp396Vo.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DBvFnnww.js → use-org-auth-client-CIqua7Te.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BAxrGIc9.js → use-org-repo-syncs-BCn2Uk-V.js} +1 -1
- package/dist/client/assets/{use-org-sso-CcuRAxZ4.js → use-org-sso-YUC3zkf7.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DcrnpjpL.js → use-organization-roles-BSZUwJWc.js} +1 -1
- package/dist/client/assets/{use-organization-settings-DzkGeKBC.js → use-organization-settings-C7pJuX8Q.js} +1 -1
- package/dist/client/assets/{use-registry-connections-uj4OkxVY.js → use-registry-connections-DR8AGNbO.js} +1 -1
- package/dist/client/assets/{use-secrets-vgjzez9S.js → use-secrets-DYN53Uly.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-C_F3KTs5.js → use-section-preview-base-BDnw1X3r.js} +1 -1
- package/dist/client/assets/{use-settings-tabs-Fco7YZyJ.js → use-settings-tabs-v_launsk.js} +1 -1
- package/dist/client/assets/{use-status-sounds-imr3g8sF.js → use-status-sounds-DtAnlIbC.js} +1 -1
- package/dist/client/assets/{use-tags-zs11X1pj.js → use-tags-Cup3b1R3.js} +1 -1
- package/dist/client/assets/{use-view-mode-gTh3FRe9.js → use-view-mode-CAIlL-cF.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DrQC9BZG.js → use-virtual-mcp-7ID2rWK5.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-Bt961zvy.js +1 -0
- package/dist/client/assets/{useRouterState-nCV4_Jnq.js → useRouterState-DsBNDOFX.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-lHWv5dIm.js +1 -0
- package/dist/client/assets/{users-BUzoyya4.js → users-2ockehC9.js} +1 -1
- package/dist/client/assets/{variant-calendar-DBoXL54l.js → variant-calendar-DHPCxGcw.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-UW-BQm-u.js → view-mode-toggle-FfylOtSn.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-CSTnpdHB.js +0 -1
- package/dist/client/assets/registry-DP-tktFS.js +0 -2
- package/dist/client/assets/store-registry-B17VaaxH.js +0 -2
- package/dist/client/assets/useInfiniteQuery-9_6SxDg2.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BiLpJIe0.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2830,7 +2830,7 @@ Respond with the structured verdict and a short reason.`,Iy$;var My$=w(()=>{_4()
|
|
|
2830
2830
|
${G.join(`
|
|
2831
2831
|
`)}`:Y}function RG6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2832
2832
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Ng$=200,wG6=12,jG6=300,B91=3;var w91=w(()=>{q_();gP0()});function qG6($){if(!$||$.includes(".."))return!1;return IG6.test($)}function Og$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!qG6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Bg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var IG6;var wg$=w(()=>{IG6=/^[\w./@-]+$/});function D91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Ja($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Dg$($,Z,X,Q){if(!Q.connectionId)throw new k_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new k_(Z9);await nO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:Z9;throw new k_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await tO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=e8$(F instanceof Error?F.message:String(F));throw N?new k_(U):F}),K=dh($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await UB(H,MG6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var MG6=10485760,k_;var L91=w(()=>{uG();MP0();gp();ud0();ux();k_=class k_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function VG6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!kG6.test(Z))throw Error(`Invalid branch name: ${$}`)}function V_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(CG6)])}function _G6($,Z,X){let Q=B5($)[Z]?.[X];return!!Q&&Object.keys(AY(Q)).length>0}function S_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function th($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ja(Z,X);if(!Y)throw new Q6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return kP0(Q,G.id,Y)}function E91($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,i5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,i5)}async function jg$($){try{let Z=await th($),X=await hP0(Z,$.get("vmClaim").branch);return $.json(X,200,i5)}catch(Z){return E91($,Z)}}function Wa($,Z){let Q=(lP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return lP0.set($,Y),Y.finally(()=>{if(lP0.get($)===Y)lP0.delete($)}),Q}async function dZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,i5);let Q=S_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...i5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?fG6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...i5}})};try{if(F){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(F.aborted)return L(F.reason);F.addEventListener("abort",()=>L(F.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function fG6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function dP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function bG6($){return zg$.includes($)}var kG6,Lg$=524288,SG6=65536,CG6=1e4,Eg$=2000,vG6,lP0,i5,zg$,Pg$=()=>{let $=new F1;$.use("/:virtualMcpId/:branch/*",vG6),$.post("/:virtualMcpId/:branch/write",(X)=>dZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>dZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>dZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>dZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>dZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>dZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>dZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!bG6(Q))return X.json({error:`step must be one of: ${zg$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Yy(Y.virtualMcpMetadata);try{await fO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return dZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return TN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return jy$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return jg$(X);return Z(X)});let Z=(X)=>dZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Eg$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return jg$(X);return dZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Eg$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await th(X),J=await uP0(G,Q.branch,Y.base);return X.json(J,200,i5)}catch(Y){return E91(X,Y)}return dZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,i5);let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Wa(Y,async()=>{try{await a51(W,Q,Y);let K=Ja(G,J);if(K)await Dg$(W,Q,Y,K)}catch(K){if(K instanceof k_)return X.json({error:K.message},403,i5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,i5)}return dZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Wa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,i5);try{let J=await th(X);return await Ug$(J,Q.branch,G),X.json({ok:!0},200,i5)}catch(J){let W=J instanceof Q6&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,i5)}});return Wa(Q.claimName,()=>dZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Wa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await th(X),H=W.base??await K.getDefaultBranch();return await cP0(K,Q.branch,H),X.json({ok:!0},200,i5)}catch(W){return E91(X,W)}});let Y=S_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Wa(G,async()=>{try{await a51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,i5)}return dZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",M9({maxSize:Lg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=S_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=$91(F)&&U?[F,N]:Y?await Promise.all([dP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await th(X);return Promise.all([hP0(L,Q.branch),uP0(L,Q.branch)])})(),D=await Ry$(K,O,B);return X.json(D,200,i5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,i5);return X.json({error:F},502,i5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",M9({maxSize:Lg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let H=S_(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[O,B]=$91(F)&&U?[F,N]:Y?await Promise.all([dP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await th(X);return Promise.all([hP0(L,Q.branch),uP0(L,Q.branch)])})(),D=await qy$(K,O,B,typeof H.language==="string"?H.language:void 0);return X.json(D,200,i5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,i5);return X.json({error:F},502,i5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=D91(`${W}${G}`),H;try{H=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let F;try{F=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(F,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",M9({maxSize:SG6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=Og$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Bg$(G,W.resolveType),H=D91(K),F;try{F=await fetch(H?.url??K,{method:"POST",headers:{"content-type":"application/json",...H?{host:H.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$};var Ag$=w(()=>{D8();BN();lh();r51();TF();Ly$();S3();dX();O8();fB0();KB();Ey$();zy$();Kp0();xp();Q91();My$();J91();q_();w91();wg$();L91();kG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;vG6=qP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{VG6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ei({orgId:Y.id,virtualMcpId:G,branch:J}),H=await vF(X,J,Q),F=Dy$({userId:H,projectRef:K}),N=W.metadata??null;if(wW$(N).fastPreviewCapability&&!_G6(N,H,J))return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await oX(X,{userId:H,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:F,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});lP0=new Map;i5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};zg$=["clone","install","start"]});function Tg$($,Z,X){let Q=j91.get($);if(!Q)Q={pending:null,running:!1},j91.set($,Q);if(!Q.pending)Q.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let Y=Q.pending;Y.deps=Z;for(let[J,W]of Object.entries(X.set??{}))Y.set.set(J,W),Y.del.delete(J);for(let J of X.delete??[])Y.del.add(J),Y.set.delete(J);let G=new Promise((J,W)=>{Y.resolvers.push(J),Y.rejecters.push(W)});if(!Q.running)yG6($,Q);return G}async function yG6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await gG6(X);for(let Y of X.resolvers)Y(Q)}catch(Q){for(let Y of X.rejecters)Y(Q)}}}finally{if(Z.running=!1,!Z.pending)j91.delete($)}}async function gG6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Ga(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=U91(W,Q),H=[],F=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=O91(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2833
|
-
`,j=await Z.createBlob(E);await Hg$(Z.owner,Z.repo,j,E);let z=L[0]??`${yP0(Q)}/${W91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of O91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Za(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:hG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=xG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function hG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Cd0(Q,$.deps.coAuthor)}var xG6=3,j91;var Rg$=w(()=>{qO0();SP0();u4();q_();gP0();j91=new Map});import{createHmac as Ig$,randomBytes as uG6,timingSafeEqual as cG6}from"crypto";function qg$(){if(mP0)return mP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mP0=$?Buffer.from($):uG6(32),mP0}function z91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+lG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Ig$("sha256",qg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Mg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Ig$("sha256",qg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!cG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var lG6=21600000,mP0=null;var kg$=w(()=>{T$()});import{z as oh}from"zod";function mG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dG6.test($)}function Sg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function iP0($){let Z=$.get("decofileScope");return kP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function pP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Cg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Vg$),$.use("/:virtualMcpId/:branch/*",Vg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Fg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=z91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Sg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return pP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=iG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await iP0(Z),W=await Tg$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:dh(Q)},G),K=z91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Sg$(Z)})}catch(J){return pP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await cP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return pP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return pP0(Z,Q)}}),$}var dG6,iG6,Vg$;var _g$=w(()=>{SP0();D8();r51();MP0();L91();J91();Rg$();kg$();w91();q_();gP0();dG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;iG6=oh.object({set:oh.record(oh.string(),oh.unknown()).optional(),delete:oh.array(oh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Vg$=qP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!mG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Mg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Ja(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var vg$=($)=>{let Z=new F1;if(Z.use("*",D_),Z.route("/",dz0()),Z.route("/",$f$()),Z.route("/",Qy$()),Z.route("/",$y$()),Z.route("/",TP0()),Z.route("/tools",Fy$()),Z.route("/",Wy$()),Z.route("/",xx$({kvStorage:$.kvStorage})),Z.route("/",fx$()),Z.route("/fs",nx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Pg$()),Z.route("/decofile",Cg$()),Z.route("/",ax$()),Z.route("/deco-sites",iz0()),Z.route("/sso",yz0()),Z.route("/",RP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",pv$()),$.mountDevAssets)Z.route("/dev-assets",pz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",kC$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",ox$()),Z.route("/mcp",aw0()),Z.route("/mcp/self",AP0()),Z.route("/mcp",$D0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var fg$=w(()=>{D8();E61();nv$();A61();nz0();Mr();D61();bx$();yx$();tx$();fn();K61();ZD0();d51();rx$();sx$();Zy$();Yy$();Ky$();i51();Ny$();p51();sw0();Ag$();_g$()});function pG6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var nG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},bg$=()=>{let $=new F1;return $.use("*",nG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:pG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var xg$=w(()=>{D8();T$();ij0()});import{z as M1}from"zod";function QH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function QJ6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function YJ6($,Z,X){try{return JSON.parse($)}catch{throw new hg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function GJ6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:YJ6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function JJ6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function WJ6($){if(!$)return;return{openai:{response_format:$}}}function KJ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function gg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var tG6=256,oG6,rG6,aG6,sG6,eG6,$J6,ZJ6,XJ6,hg$,ug$,cg$;var lg$=w(()=>{_4();D8();lh();XN();oG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),rG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),aG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(rG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),sG6=M1.object({type:M1.literal("text")}),eG6=M1.object({type:M1.literal("json_object")}),$J6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),ZJ6=M1.union([sG6,eG6,$J6]),XJ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(aG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(oG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:ZJ6.optional(),user:M1.string().optional()});hg$=class hg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ug$=new F1;ug$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(QH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=XJ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=QJ6(G.model);if(!J)return $.json(QH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=GJ6(G.messages),U=G.tools?JJ6(G.tools):void 0,O=WJ6(G.response_format),B=KJ6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=yg$(F,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=tG6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:gg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=yg$(F,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:gg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(QH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QH(Y.message,"server_error"),500)}});cg$=ug$});function HJ6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function dg$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.title.toLowerCase()!==G)continue;if(!HJ6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var mg$=w(()=>{D8();W_()});var pg$;var ig$=w(()=>{pg$={name:"decocms",version:"4.245.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","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function UJ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??NJ6}}var ng$,NJ6="https://ph.studio.decocms.com",tg$;var og$=w(()=>{D8();Fh0();QC();v9();T$();Q61();ig$();ng$=new F1;ng$.get("/",($)=>{let Z={version:pg$.version,theme:Dd1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:pV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Nv$(),posthog:UJ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});tg$=ng$});function rh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function P91($){return(rh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ag$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(rh($))}&sz=${Z}`}function rg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function sg$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?rg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):rg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,OJ6,BJ6,wJ6,DJ6,eg$;var $h$=w(()=>{C_=l0.enum(["good","bad","neutral"]),OJ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),BJ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(OJ6)),wJ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},DJ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(BJ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),eg$=l0.object({...wJ6,template:DJ6})});function nP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=eg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var A91=w(()=>{$h$()});import{join as Zh$}from"path";async function EJ6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(LJ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=nP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||P91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function jJ6($,Z){let X=rh($),Q=Z?.brand?.trim()||P91(X),Y=ag$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=sg$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(H)}" />`,`<meta name="twitter:image:alt" content="${YG(F)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
|
|
2833
|
+
`,j=await Z.createBlob(E);await Hg$(Z.owner,Z.repo,j,E);let z=L[0]??`${yP0(Q)}/${W91(B)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of L.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let B of $.del)for(let D of O91(K,B))H.push({path:D,mode:"100644",type:"blob",sha:null}),F.delete(D);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Za(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),O=await Z.createCommit({message:hG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=xG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function hG6($){let Z=(Y)=>{let G=Y.slice(0,3).join(", ");return Y.length>3?`${G} (+${Y.length-3} more)`:G},X=[];if($.set.size>0)X.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)X.push(`delete ${Z([...$.del])}`);let Q=`chore(decofile): ${X.join("; ")}`;return Cd0(Q,$.deps.coAuthor)}var xG6=3,j91;var Rg$=w(()=>{qO0();SP0();u4();q_();gP0();j91=new Map});import{createHmac as Ig$,randomBytes as uG6,timingSafeEqual as cG6}from"crypto";function qg$(){if(mP0)return mP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mP0=$?Buffer.from($):uG6(32),mP0}function z91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+lG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Ig$("sha256",qg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Mg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Ig$("sha256",qg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!cG6(Y,G))return!1;let J;try{J=JSON.parse(Buffer.from(Q,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return J.o===Z.organizationId&&J.m===Z.virtualMcpId&&J.b===Z.branch&&typeof J.e==="number"&&J.e>=W}var lG6=21600000,mP0=null;var kg$=w(()=>{T$()});import{z as oh}from"zod";function mG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dG6.test($)}function Sg$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function iP0($){let Z=$.get("decofileScope");return kP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function pP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function Cg$(){let $=new F1;return $.use("/:virtualMcpId/:branch",Vg$),$.use("/:virtualMcpId/:branch/*",Vg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Fg$(Q,X.branch,X.packagePath,{createBranchIfMissing:!!X.userId}),G={ETag:`"${Y.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${Y.sha}"`)return Z.body(null,304,G);if(!X.userId)return Z.body(Y.decofile,200,{...G,"content-type":"application/json"});let J=z91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Sg$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return pP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=iG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await iP0(Z),W=await Tg$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:dh(Q)},G),K=z91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Sg$(Z)})}catch(J){return pP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await cP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return pP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return pP0(Z,Q)}}),$}var dG6,iG6,Vg$;var _g$=w(()=>{SP0();D8();r51();MP0();L91();J91();Rg$();kg$();w91();q_();gP0();dG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;iG6=oh.object({set:oh.record(oh.string(),oh.unknown()).optional(),delete:oh.array(oh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Vg$=qP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!mG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Mg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let F=W.connections?.map((O)=>O.connection_id)??[],N=Ja(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var vg$=($)=>{let Z=new F1;if(Z.use("*",D_),Z.route("/",dz0()),Z.route("/",$f$()),Z.route("/",Qy$()),Z.route("/",$y$()),Z.route("/",TP0()),Z.route("/tools",Fy$()),Z.route("/",Wy$()),Z.route("/",xx$({kvStorage:$.kvStorage})),Z.route("/",fx$()),Z.route("/fs",nx$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Pg$()),Z.route("/decofile",Cg$()),Z.route("/",ax$()),Z.route("/deco-sites",iz0()),Z.route("/sso",yz0()),Z.route("/",RP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",pv$()),$.mountDevAssets)Z.route("/dev-assets",pz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",kC$()),Z.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",$.betterAuthProtectedResourceHandler),Z.get("/mcp/.well-known/oauth-protected-resource",$.betterAuthProtectedResourceHandler),Z.route("/mcp/task-run",ox$()),Z.route("/mcp",aw0()),Z.route("/mcp/self",AP0()),Z.route("/mcp",$D0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var fg$=w(()=>{D8();E61();nv$();A61();nz0();Mr();D61();bx$();yx$();tx$();fn();K61();ZD0();d51();rx$();sx$();Zy$();Yy$();Ky$();i51();Ny$();p51();sw0();Ag$();_g$()});function pG6($){return $.filter((Z)=>Z.vendors?.alias).map((Z)=>({name:Z.name,title:Z.title,description:Z.description,logo:Z.logo,category:Z.category,vendor:{alias:Z.vendors.alias,url:Z.vendors.url}}))}var nG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},bg$=()=>{let $=new F1;return $.use("*",nG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:pG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var xg$=w(()=>{D8();T$();ij0()});import{z as M1}from"zod";function QH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function QJ6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let X=$.substring(0,Z),Q=$.substring(Z+1);if(!X||!Q)return null;return{credentialId:X,modelId:Q}}function YJ6($,Z,X){try{return JSON.parse($)}catch{throw new hg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function GJ6($){let Z={};for(let X of $)if(X.role==="assistant"&&X.tool_calls)for(let Q of X.tool_calls)Z[Q.id]=Q.function.name;return $.map((X)=>{switch(X.role){case"system":return{role:"system",content:X.content};case"user":if(typeof X.content==="string")return{role:"user",content:X.content};return{role:"user",content:X.content.map((Y)=>{if(Y.type==="text")return{type:"text",text:Y.text};return{type:"image",image:Y.image_url.url}})};case"assistant":if(X.tool_calls&&X.tool_calls.length>0)return{role:"assistant",content:X.tool_calls.map((Y)=>({type:"tool-call",toolCallId:Y.id,toolName:Y.function.name,input:YJ6(Y.function.arguments,Y.id,Y.function.name)}))};return{role:"assistant",content:X.content??""};case"tool":let Q=Z[X.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:X.tool_call_id,toolName:Q,output:{type:"text",value:X.content}}]}}})}function JJ6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function WJ6($){if(!$)return;return{openai:{response_format:$}}}function KJ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function yg$($,Z,X,Q,Y,G){let J={model:$,messages:Z,tools:X,temperature:Q.temperature,maxTokens:Q.max_tokens,topP:Q.top_p,frequencyPenalty:Q.frequency_penalty,presencePenalty:Q.presence_penalty,stopSequences:Q.stop?Array.isArray(Q.stop)?Q.stop:[Q.stop]:void 0,abortSignal:G};return Y?{...J,providerOptions:Y}:J}function gg$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var tG6=256,oG6,rG6,aG6,sG6,eG6,$J6,ZJ6,XJ6,hg$,ug$,cg$;var lg$=w(()=>{_4();D8();lh();XN();oG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),rG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),aG6=M1.discriminatedUnion("role",[M1.object({role:M1.literal("system"),content:M1.string(),name:M1.string().optional()}),M1.object({role:M1.literal("user"),content:M1.union([M1.string(),M1.array(M1.union([M1.object({type:M1.literal("text"),text:M1.string()}),M1.object({type:M1.literal("image_url"),image_url:M1.object({url:M1.string(),detail:M1.string().optional()})})]))]),name:M1.string().optional()}),M1.object({role:M1.literal("assistant"),content:M1.string().nullable().optional(),name:M1.string().optional(),tool_calls:M1.array(rG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),sG6=M1.object({type:M1.literal("text")}),eG6=M1.object({type:M1.literal("json_object")}),$J6=M1.object({type:M1.literal("json_schema"),json_schema:M1.object({name:M1.string(),description:M1.string().optional(),schema:M1.record(M1.string(),M1.unknown()),strict:M1.boolean().optional()})}),ZJ6=M1.union([sG6,eG6,$J6]),XJ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(aG6),stream:M1.boolean().optional().default(!1),temperature:M1.number().min(0).max(2).optional(),max_tokens:M1.number().positive().optional(),top_p:M1.number().min(0).max(1).optional(),frequency_penalty:M1.number().min(-2).max(2).optional(),presence_penalty:M1.number().min(-2).max(2).optional(),stop:M1.union([M1.string(),M1.array(M1.string())]).optional(),tools:M1.array(oG6).optional(),tool_choice:M1.union([M1.literal("auto"),M1.literal("none"),M1.literal("required"),M1.object({type:M1.literal("function"),function:M1.object({name:M1.string()})})]).optional(),response_format:ZJ6.optional(),user:M1.string().optional()});hg$=class hg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};ug$=new F1;ug$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QH("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==X)return $.json(QH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=XJ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QH(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=QJ6(G.model);if(!J)return $.json(QH("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(QH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=GJ6(G.messages),U=G.tools?JJ6(G.tools):void 0,O=WJ6(G.response_format),B=KJ6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=yg$(F,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=tG6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:gg$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=yg$(F,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:gg$(E.finishReason)}],usage:{prompt_tokens:E.usage?.inputTokens??0,completion_tokens:E.usage?.outputTokens??0,total_tokens:E.usage?.totalTokens??0}})}}catch(Q){let Y=Q;if(Y.name==="AbortError")return $.json(QH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QH(Y.message,"server_error"),500)}});cg$=ug$});function HJ6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function dg$(){let $=new F1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||J7(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(N.title.toLowerCase()!==G)continue;if(!HJ6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var mg$=w(()=>{D8();W_()});var pg$;var ig$=w(()=>{pg$={name:"decocms",version:"4.245.2",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function UJ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??NJ6}}var ng$,NJ6="https://ph.studio.decocms.com",tg$;var og$=w(()=>{D8();Fh0();QC();v9();T$();Q61();ig$();ng$=new F1;ng$.get("/",($)=>{let Z={version:pg$.version,theme:Dd1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:pV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Nv$(),posthog:UJ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});tg$=ng$});function rh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function P91($){return(rh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function ag$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(rh($))}&sz=${Z}`}function rg$($,Z){let X=$.trim();if(X.length<=Z)return X;let Q=X.slice(0,Z-1),Y=Q.lastIndexOf(" ");return`${(Y>Z*0.6?Q.slice(0,Y):Q).trimEnd()}\u2026`}function sg$($){let{brand:Z,domain:X,score:Q,verdict:Y}=$,G=typeof Q==="number"?`${Z} commerce report \u2014 ${Math.round(Q)}/100 \xB7 decocms`:`${Z} commerce report \xB7 decocms`,J=`See the full ${Z} scorecard \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,W=Y?.trim()?rg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):rg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,OJ6,BJ6,wJ6,DJ6,eg$;var $h$=w(()=>{C_=l0.enum(["good","bad","neutral"]),OJ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),BJ6=l0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},l0.array(OJ6)),wJ6={key:l0.coerce.string(),title:l0.coerce.string(),eyebrow:l0.coerce.string().optional(),headline:l0.coerce.string(),annotation:l0.coerce.string().optional(),methodology:l0.coerce.string().optional(),sources:l0.array(l0.object({name:l0.coerce.string(),logoUrl:l0.coerce.string()})).optional()},DJ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(BJ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),eg$=l0.object({...wJ6,template:DJ6})});function nP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=eg$.safeParse(Y.props);if(G.success)return G.data;let J=G.error.issues[0];return Z.push({section_type:Y.section_type,position:Y.position,reason:J?`${J.path.join(".")||"(root)"}: ${J.message}`:"contract violation"}),null}).filter((Y)=>Y!==null),Q=X.filter((Y)=>Y.template.template!=="cover"&&Y.template.template!=="cta").map((Y)=>({key:Y.key,title:Y.title}));return{deck:{meta:{...$.meta,scores:$.summary?.scores,scannedAt:$.scanned_at,toc:Q},slides:X},drops:Z}}var A91=w(()=>{$h$()});import{join as Zh$}from"path";async function EJ6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(LJ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=nP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||P91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function jJ6($,Z){let X=rh($),Q=Z?.brand?.trim()||P91(X),Y=ag$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=sg$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(H)}" />`,`<meta name="twitter:image:alt" content="${YG(F)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
|
|
2834
2834
|
`)}function zJ6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2835
2835
|
</head>`)}function Xh$($){let Z=new F1;return Z.get("/:domain/og.png",async(X)=>{let Q=rh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Zh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(PJ6)}),J=G.headers.get("content-type")??"";if(!G.ok||!J.startsWith("image/")||!G.body)return Y();return X.body(G.body,200,{"Content-Type":J,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return Y()}}),Z.get("/:domain",async(X)=>{let Q=X.req.param("domain"),Y=$?Zh$($,"index.html"):null,G=Y?Bun.file(Y):null;if(!G||!await G.exists())return X.notFound();let J=await G.text();try{let W=await EJ6(rh(Q)),K=jJ6(Q,W);return X.html(zJ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var LJ6=2500,PJ6=1e4;var Qh$=w(()=>{D8();A91();vL();T$()});function Ka($,Z){return fetch(`${oW({})}${$}`,Z)}async function AJ6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Ka(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=nP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var TJ6,IN,Yh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Gh$;var Jh$=w(()=>{D8();_Y();vL();A91();TJ6=new Set(["complete","errored","terminated","unknown"]),IN=new F1;IN.use("*",async($,Z)=>{let X=await H8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});IN.use("/link-token/*",Yh$);IN.use("/suggest",Yh$);IN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await AJ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});IN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Ka("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_L({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});IN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ka(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${_L({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:TJ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});IN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ka(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});IN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ka(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Gh$=IN});import{createHmac as RJ6,timingSafeEqual as IJ6}from"crypto";function Kh$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>qJ6)return!1;let W=RJ6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&IJ6(K,F)})}function Hh$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=PJ(Z),Q=PJ(PJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:YH(X.id),type:X.type,created:typeof X.created==="number"?X.created:void 0,livemode:typeof X.livemode==="boolean"?X.livemode:void 0,data:{object:Q}}}function Fh$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function YH($){return typeof $==="string"?$:void 0}function PJ($){return typeof $==="object"&&$!==null?$:void 0}function tP0($){return typeof $==="number"?new Date($*1000):null}function I91($){return YH($)??YH(PJ($)?.id)}function MJ6($){return I91($.subscription)??YH(PJ(PJ($.parent)?.subscription_details)?.subscription)}function kJ6($){let Z=tP0($.current_period_end);if(Z)return Z;let X=PJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=PJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function T91($,Z){let X=tP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function R91($,Z){let X=tP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function VJ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=YH(PJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(YH(PJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(YH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=YH(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(PJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:PJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(YH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let Y=await $.getBilling(Q);if(!Y)return{handled:!1,reason:"unknown org"};let G=I91(X.subscription);if(Y.stripeSubscriptionId&&G&&Y.stripeSubscriptionId!==G)return console.error("stripe webhook: refused checkout rebind",{organizationId:Q,eventId:Z.id}),{handled:!1,reason:"org already bound to another subscription",orphanSubscriptionId:G};if(T91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:I91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:R91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=YH(X.id);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};let G=Z.type==="customer.subscription.deleted";if(!G&&T91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Fh$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:kJ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:R91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=MJ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(T91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:tP0(X.period_end),lastStripeEventAt:R91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function SJ6($,Z){if(!Z.handled||$.livemode===!1)return null;let X=$.data.object;if(Z.topUp)return{name:"credits_topup_succeeded",organizationId:Z.organizationId,properties:{credit_cents:Z.topUp.creditCents}};switch($.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":return{name:"subscription_started",organizationId:Z.organizationId,properties:{}};case"customer.subscription.deleted":return{name:"subscription_canceled",organizationId:Z.organizationId,properties:{}};case"customer.subscription.updated":return{name:"subscription_updated",organizationId:Z.organizationId,properties:{status:Fh$(X.status),...typeof X.cancel_at_period_end==="boolean"?{cancel_at_period_end:X.cancel_at_period_end}:{}}};case"invoice.paid":if(X.billing_reason==="subscription_create")return null;return{name:"subscription_renewed",organizationId:Z.organizationId,properties:{}};default:return null}}function Wh$($,Z){let X=SJ6($,Z);if(!X)return;MY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ri1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Nh$($){let Z=new iW(p8().db),X=await VJ6(Z,$);if(!(X.handled&&X.topUp))Wh$($,X);if(X.handled&&X.topUp)await Qw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Wh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await ya1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof vY&&(Q.status===400||Q.status===404)))throw Q}return X}var qJ6=300;var Uh$=w(()=>{_G();M4();F60();lL();us0()});var CJ6=1048576,q91;var Oh$=w(()=>{D8();BN();T$();Uh$();q91=new F1;q91.post("/webhook",M9({maxSize:CJ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=b0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!Kh$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Hh$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Nh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as _J6}from"crypto";function fJ6($,Z,X){if(!Z?.startsWith("sha256="))return!1;let Q=new Bun.CryptoHasher("sha256",X).update($).digest("hex"),Y=Z.slice(7);if(Y.length!==Q.length)return!1;return _J6(Buffer.from(Y),Buffer.from(Q))}var vJ6=5242880,M91;var Bh$=w(()=>{D8();BN();vp();M91=new F1;M91.post("/webhook",M9({maxSize:vJ6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=process.env.GITHUB_WEBHOOK_SECRET;if(!Z)return $.json({error:"github webhook not configured"},503);let X=await $.req.text();if(!fJ6(X,$.req.header("x-hub-signature-256"),Z))return $.json({error:"invalid signature"},400);if($.req.header("x-github-event")!=="push")return $.json({ok:!0,ignored:"event"});let Q;try{Q=JSON.parse(X)}catch{return $.json({error:"invalid payload"},400)}let Y=Q.ref,G=Q.repository?.full_name;if(!Y||!G)return $.json({ok:!0,ignored:"shape"});let W=(await Xp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function wh$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Dh$,bJ6,xJ6,Lh$;var Eh$=w(()=>{D8();K3();zy();Lx();Dh$=new F1,bJ6=["range","if-none-match","if-modified-since"],xJ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Dh$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Rh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Hn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&O3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return wh$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of bJ6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of xJ6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),wh$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Lh$=Dh$});var Ha=_((__)=>{var yJ6=__&&__.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),gJ6=__&&__.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))yJ6(Z,$,X)};Object.defineProperty(__,"__esModule",{value:!0});gJ6(FY(),__)});var Ph$=_((jh$)=>{Object.defineProperty(jh$,"__esModule",{value:!0});jh$.version=void 0;jh$.version="3.4.0"});var Rh$=_((GH)=>{var hJ6=GH&&GH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(GH,"__esModule",{value:!0});GH.NodeTransport=GH.VERSION=void 0;GH.nodeResolveHost=iJ6;var o6=Ha(),uJ6=z0("net"),k91=z0("tls"),cJ6=z0("path"),Ah$=z0("fs"),lJ6=hJ6(z0("dns")),dJ6=Ph$();GH.VERSION=dJ6.version;var mJ6="nats.js";class Th${socket;version;lang;yields=[];signal=(0,o6.deferred)();closedNotification=(0,o6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=mJ6,this.version=GH.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,o6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw o6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new o6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new o6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,o6.deferred)(),X,Q=(0,uJ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,o6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=o6.DataBuffer.concat(...this.yields),Y=(0,o6.extractProtocolMessage)(Q);if(Y!=="")try{let G=o6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,o6.deferred)();try{if($=(0,cJ6.resolve)($),!(0,Ah$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Ah$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,o6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,o6.deferred)();try{let Y=(0,k91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,o6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,o6.deferred)();try{let Q=(0,k91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,o6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,o6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof k91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,o6.render)($)}`);let Z=(0,o6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}GH.NodeTransport=Th$;function iJ6($){let Z=(0,o6.deferred)();return lJ6.default.lookup($,{all:!0},(X,Q)=>{if(X){Z.reject(X);return}let Y=[];for(let G of Q)Y.push(G.address);if(Y.length===0)Y.push($);Z.resolve(Y)}),Z}});var Vh$=_((kh$)=>{Object.defineProperty(kh$,"__esModule",{value:!0});kh$.connect=pJ6;var Ih$=Rh$(),qh$=Ha(),Mh$=Ha();function pJ6($={}){if((0,Mh$.hasWsProtocol)($))return Promise.reject(Mh$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,qh$.setTransportFactory)({factory:()=>{return new Ih$.NodeTransport},dnsResolveFn:Ih$.nodeResolveHost}),qh$.NatsConnectionImpl.connect($)}});var Sh$=_((qN)=>{var tJ6=qN&&qN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),oJ6=qN&&qN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))tJ6(Z,$,X)};Object.defineProperty(qN,"__esModule",{value:!0});qN.connect=void 0;var rJ6=Vh$();Object.defineProperty(qN,"connect",{enumerable:!0,get:function(){return rJ6.connect}});oJ6(Ha(),qN)});function fh$($){let Z=$?.connectFn??$36,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:eJ6,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{B++;let D=pZ(sJ6,aJ6,B-1,2,0.5);await q$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?Ch$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=vh$.jetstream(X);return Q},onReady(U){if(W.push(U),K())try{U()}catch{}},async drain(){if(G=!0,Y=!1,Q=null,J=!1,X){let U=X;X=null,await U.drain().catch(()=>{})}}}}function $36($){return _h$.connect($)}var Ch$,_h$,vh$,aJ6=100,sJ6=3000,eJ6=3000;var bh$=w(()=>{u4();Ch$=V(Pu(),1),_h$=V(Sh$(),1),vh$=V(bw(),1)});function V91($,Z){return`${$}.${Z}`}class S91{cache;constructor($){this.cache=Nh({ttlMs:$?.ttlMs??Z36,maxSize:$?.maxSize??X36})}async get($,Z){return this.cache.get(V91($,Z))??null}async set($,Z,X){this.cache.set(V91($,Z),X)}async invalidate($,Z){this.cache.delete(V91($,Z))}teardown(){this.cache.clear()}}var Z36=600000,X36=5000;var xh$=()=>{};function oP0($,Z){return`${$}:${Z}`}function C91($){let Z=Nh({ttlMs:$?.ttlMs??Q36,maxSize:$?.maxSize??Y36}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(yh$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(oP0(K,H))},set(K,H,F){Z.set(oP0(K,H),F)},invalidate(K,H){Z.delete(oP0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(yh$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(oP0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var yh$="studio.ai-provider-keys.invalidate",Q36=30000,Y36=5000;var gh$=()=>{};class _91{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=hh$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of hh$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var hh$;var uh$=w(()=>{hh$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var ch$=($)=>{let Z;return()=>Z??=$()},v91,f91;var lh$=w(()=>{b6();v91=ch$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),f91=ch$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function N36(){return{name:mF,subjects:[`${Dw0}.>`],storage:GW.StorageType.File,max_age:W36,max_bytes:H36,max_msgs_per_subject:F36,discard:GW.DiscardPolicy.Old,retention:GW.RetentionPolicy.Limits,duplicate_window:K36,num_replicas:1}}class ih${chunks=0;encodeMs=0;maxMs=0;bytes=0;windowStart=performance.now();constructor(){setInterval(()=>this.flush(),1e4).unref?.()}record($,Z){if(this.chunks++,this.encodeMs+=$,$>this.maxMs)this.maxMs=$;this.bytes+=Z}flush(){let $=performance.now(),Z=$-this.windowStart;if(this.chunks>0&&Z>0)console.warn(JSON.stringify({msg:"stream-encode-trace",windowMs:Math.round(Z),chunks:this.chunks,encodeMs:Math.round(this.encodeMs),pctOfLoop:+(this.encodeMs/Z*100).toFixed(1),maxChunkMs:+this.maxMs.toFixed(2),mbEncoded:+(this.bytes/1048576).toFixed(2)}));this.chunks=0,this.encodeMs=0,this.maxMs=0,this.bytes=0,this.windowStart=$}}function dh$($){let Z=mh$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function w36($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,J36().add(1,{"org.id":Z??"unknown"}),X===1||X%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${X} total):`,W)})},get errorCount(){return X}}}function D36($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class b91{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=N36(),X=await N9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await GW.jetstreamManager($);try{await Q.streams.info(mF),await Q.streams.update(mF,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(mF),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:D36});this.js=this.options.getJetStream(),this.jsm=X,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,X,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let G=w36(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=bH$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=gt0(H,{runId:Z}),U=performance.now()-F;if(v91().record(U),f91().add(1,{"org.id":Q??"unknown"}),B36?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?dh$(O.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:O,value:B}=await H.read();if(O)break;if(K(B),N++,++F>=64)F=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(H.releaseLock(),W(),O36)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=gt0(Z,{runId:$,dedup:X});if(v91().record(performance.now()-Y),f91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:dh$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=fH$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?GW.DeliverPolicy.New:GW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=MB($),W;try{W=await(await Q.consumers.get(mF,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let F=Pw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Lw0()).pipeThrough(Ew0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await F.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(mF,{filter:MB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var GW,mh$,G36=($)=>{let Z;return()=>Z??=$()},J36,W36=86400000000000,K36=120000000000,H36=4294967296,F36=500000,U36,O36,B36;var ph$=w(()=>{u4();ht0();Aw0();jw0();b6();lh$();GW=V(bw(),1),mh$=V(Pu(),1),J36=G36(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));U36=process.env.STREAM_ENCODE_TRACE==="1",O36=process.env.DECOPILOT_STREAM_TRACE==="1";B36=U36?new ih$:null});function rP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,kW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var nh$=w(()=>{O8()});class x91{storage;options;timer=null;constructor($,Z={}){this.storage=$;this.options=Z}start(){if(this.timer)return;let $=this.options.intervalMs??300000;this.timer=setInterval(()=>{this.runOnce()},$)}async runOnce(){let $=this.options.staleAfterMs??3600000;try{let Z=await this.storage.sweepAbandoned($);if(Z>0)console.log(`[async-research-sweeper] marked ${Z} stale jobs as abandoned`);return Z}catch(Z){return console.error("[async-research-sweeper] sweep failed",Z),0}}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}async function th$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!zr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await C6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),F8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var oh$=w(()=>{sX();Pr();h5()});function T36($){return $ instanceof n7}function R36($,Z){return Z-$>=P36}class y91{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.options=Q}start(){if(this.timer)return;let $=this.options.intervalMs??L36;this.timer=setInterval(()=>{this.runOnce()},$),this.timer.unref()}async runOnce(){if(this.running)return 0;this.running=!0;let $=0;try{let Z=this.options.batchSize??j36,X=this.options.itemIntervalMs??E36,Q=new Date(Date.now()-X),Y=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Q),G=Y.at(-1);this.cursor=Y.length===Z&&G?{updatedAt:G.updatedAt,id:G.id}:null;for(let{id:J,organizationId:W}of Y)try{if(await this.reconcileItem(J,W,Q))$++}catch(K){console.error(`[task-board-review-sweeper] ${J} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z)}catch(Z){console.error("[task-board-review-sweeper] sweep failed",Z)}finally{this.running=!1}return $}async reapNeverStartedThreads($){try{let Z=await this.taskBoard.failNeverStartedLinkedThreads($,new Date(Date.now()-Sn0),Po0);for(let X of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${X.threadId} on ${X.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-A36));for(let{id:X,organizationId:Q,threadId:Y}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${X}`),await Wt0(this.taskBoard,Y,Q),await Kt0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==n8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await iF(W,J,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Q} after a failure (attempt ${G})`)}catch(J){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Q} failed`,J),T36(J)){await this.returnToTodo(Q,Y,J instanceof Error?J.message:String(J));continue}await this.taskBoard.scheduleRunRetry(Q,Y,G,new Date(Date.now()+z36)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await this.taskBoard.getById($,Z);if(!Q||Q.status!=="in_progress")return;let Y=await this.taskBoard.returnToTodoAfterFailure($,Z,Q.updatedBy);if(!Y)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),F8(Z,Y)}catch(Q){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Q)}}async handOffReviewWithoutPr($,Z){let X=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!R36(LF(X),Date.now()))return;await qK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===n8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await by(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await th$(J,Q,W.map((K)=>K.merged)))return!0;if(await nF$(J,Q))return!0;if(!Y)return!1;if(!Lo0(W))return!1;return await kw0(J,Q,{previewMatchesHead:Eo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var L36=60000,E36=300000,j36=50,z36=60000,P36=900000,A36=120000;var rh$=w(()=>{E9();Ho0();cF();Vn();oh$();h5();E3();Ao0();kK();An()});import{readdir as I36,rm as aP0}from"fs/promises";import{join as sP0}from"path";async function eP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-q36),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await v_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await ah$($,Y,Z);else if(!Y.startsWith(".")){let G=sP0($,Y),J=await v_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await ah$(G,K,Z)}if((await v_(G)).length===0)await aP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function ah$($,Z,X){let Q=0,Y=sP0($,Z),G=await v_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=sP0(Y,W),H=await v_(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let O=sP0(K,N);await aP0(O,{recursive:!0,force:!0}),Q++}}if((await v_(K)).length===0)await aP0(K,{recursive:!0,force:!0})}if((await v_(Y)).length===0)await aP0(Y,{recursive:!0,force:!0});return Q}async function v_($){try{return(await I36($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var q36=30;var g91=()=>{};import{DBOS as h91,SchedulerMode as M36}from"@dbos-inc/dbos-sdk";async function V36(){let $=[qJ(),f_(),HH()],Z=0;for(let X of $)try{Z+=await eP0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function S36($,Z){await h91.runStep(()=>V36(),{name:"monitoringRetention"})}function eh$(){if(sh$)return;sh$=!0;let $=h91.registerWorkflow(S36,{name:"monitoringRetentionWorkflow"});h91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:k36,mode:M36.ExactlyOncePerIntervalWhenActive})}var k36="23 4 * * *",sh$=!1;var $u$=w(()=>{JY();g91()});function Zu$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await sG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await u41($.db,Z,Q.role);return Y.boundAuth=h41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new wL(X,void 0,Y.boundAuth,Q.role,"self"),AB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Xu$=w(()=>{DL();YC()});function C36(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function v36(){for(let $ of _36)$()}function Qu$($){let Z=[...u91.logs,$];u91={...u91,logs:Z.length>500?Z.slice(-500):Z},v36()}function c91(){return f36}var u91,_36,f36=!1;var l91=w(()=>{u91=C36(),_36=new Set});import{EventEmitter as b36}from"events";var d91;var Yu$=w(()=>{l91();d91=new b36;d91.on("request",($)=>{Qu$($)})});function Gu$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=ah(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>ah(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${L})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${ah(U.method)}${Y5.reset}`}}catch{}}let W=ah(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${Y5.mcp}${ah(F.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")W=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")W=`${Y5.mcp}/mcp/registry${Y5.reset}`;let K=y36(Q),H=J?"\u25C0":"\u2190";if(!c91())console.log(`${Y5.dim}${H}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=x36(N),O=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!c91())console.log(`${Y5.dim}${B}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);d91.emit("request",{method:Q,path:ah(Y),status:N,duration:F,timestamp:new Date})}}}var Y5,x36=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},y36=($)=>{return Y5[$]||Y5.reset},ah=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Ju$=w(()=>{l91();Yu$();Y5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as Fu$}from"crypto";import{mkdir as g36,readdir as h36,rm as Wu$,stat as Nu$}from"fs/promises";import{join as i91,relative as u36}from"path";import{z as z$}from"zod";function Ou$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return i91(c36,Z)}function Bu$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function m91($,Z){let X=Ou$($),Q=Bu$(Z);return i91(X,Q)}function l36($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Fu$("sha256",Y).update(G).digest("hex")}function Hu$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=l36(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Bu$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function wu$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Fu$("md5","etag").update(Q).digest("hex")}"`}async function Du$($,Z,X,Q,Y){try{let G=await h36($,{withFileTypes:!0});for(let J of G){let W=i91($,J.name),H=u36(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Du$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await Nu$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:wu$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Lu$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:z$.object({prefix:z$.string().optional(),maxKeys:z$.number().optional().default(1000),continuationToken:z$.string().optional(),delimiter:z$.string().optional()}),outputSchema:z$.object({objects:z$.array(z$.object({key:z$.string(),size:z$.number(),lastModified:z$.string(),etag:z$.string()})),nextContinuationToken:z$.string().optional(),isTruncated:z$.boolean(),commonPrefixes:z$.array(z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Ou$(Q);await g36(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Du$(F,F,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((L)=>L.key>H),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({contentType:z$.string().optional(),contentLength:z$.number(),lastModified:z$.string(),etag:z$.string(),metadata:z$.record(z$.string(),z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=m91(Q,G.key),W=await Nu$(J);return{contentType:R61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:wu$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ku$;return{url:Hu$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional(),contentType:z$.string().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Ku$;return{url:Hu$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({success:z$.boolean(),key:z$.string()}),handler:async(Y)=>{let G=Y,J=m91(Q,G.key);try{return await Wu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:z$.object({keys:z$.array(z$.string()).max(1000)}),outputSchema:z$.object({deleted:z$.array(z$.string()),errors:z$.array(z$.object({key:z$.string(),message:z$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=m91(Q,K);try{await Wu$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function p91($,Z,X){let Q=Lu$(Z,X),Y=new bW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:H5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:z$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:z$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new eX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),GJ(Y,G,$,"mcp:dev-assets")}async function Eu$($,Z,X,Q){let G=Lu$(X,Q).find((J)=>J.name===$);if(!G)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let J=await G.handler(Z);return{content:[{type:"text",text:JSON.stringify(J)}]}}catch(J){return{content:[{type:"text",text:J instanceof Error?J.message:String(J)}],isError:!0}}}var c36="./data/assets",Ku$=3600,Uu$,ju$;var zu$=w(()=>{T$();cy();D8();ml();wC();_X();nz0();Uu$=new F1;Uu$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return p91($.req.raw,Z,Q)});ju$=Uu$});var Pu$={};Y4(Pu$,{mountDevRoutes:()=>d36});function d36($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`;return p91(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Eu$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",ju$);let X=new F1;X.use("*",QW({mountPath:"/api/dev-assets"})),X.route("/",pz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Au$=w(()=>{D8();L61();nz0();zu$()});import{sql as m36}from"kysely";import{randomUUID as Tu$}from"crypto";import{z as i36}from"zod";async function n36($){let Z=new Date().toISOString(),X=Tu$(),Q=l4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Tu$(),event_id:X,subscription_id:W.id,status:"pending",attempts:0,last_error:null,delivered_at:null,next_retry_at:null,created_at:Z}))).execute();try{await m36`SELECT
|
|
2836
2836
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,b as L,j as r}from"./index-C_yzfjgX.js";import{I as A}from"./input-D9RVOy-R.js";import{L as P}from"./label-CaJRPYtm.js";import{S as R,a as V,b as z,c as J,d as O}from"./select-Dd4yiSks.js";import{T as D}from"./textarea-CdfQMqwD.js";import{F as M,T as _,J as $,V as q,_ as G}from"./index-BVf2mA9F.js";import{s as F}from"./primitives-ShG-y3jR.js";import{u as H}from"./use-autosave-BuNFab3y.js";import"./tooltip-Ddu6lHLa.js";import"./Check-BEoj7Khh.js";import"./ChevronDown-CAoRsesl.js";import"./ChevronUp-anZFNOW_.js";import"./ArrowUp-BglFckSp.js";import"./chat-context-BvYUtIwW.js";import"./tab-id-S4_2Gd2I.js";import"./dialog-BBG8h_sW.js";import"./X-B9nYIfsj.js";import"./Copy01-BaY8WLw_.js";import"./Download01-DM6mnzIL.js";import"./hooks-DhsWu87c.js";import"./use-mcp-client-BYmPCKc-.js";import"./auth-gDrpaZ1U.js";import"./decopilot-sse-pool-B416a3zb.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DrQC9BZG.js";import"./use-ai-providers-DTk6o9vO.js";import"./studio-tools-aJ6aJNMq.js";import"./use-decopilot-events-C8ye04QK.js";import"./use-organization-settings-DzkGeKBC.js";import"./automation-runs-YEFmvlRF.js";import"./agent-icon-BrcF009V.js";import"./AlertCircle-CWS3caol.js";import"./Tool01-5rzCvndC.js";import"./ArrowLeft-Cb1v-9cD.js";import"./Tool02-LrSA6GhG.js";import"./XCircle-BRwJJeJP.js";import"./ArrowUpRight-BwwZ1p8B.js";import"./TrendUp01-DGOWmLf7.js";import"./ZapSquare-BdqbCdt9.js";import"./Users03-2pkLDwKS.js";import"./CheckCircle-CKyLnVRh.js";import"./ChevronRight-xqBmhKWZ.js";import"./ChevronSelectorVertical-BWe71iNa.js";import"./DotsVertical-1yn23j63.js";import"./Stars02-BOvoNxv-.js";import"./CreditCard01-DiE0wewt.js";import"./Settings02-B3UeJQql.js";import"./Eye-BUn1f4eI.js";import"./FilterLines-CMX0oGRk.js";import"./Share07-Dd5D7nRP.js";import"./Globe01-BF1875OP.js";import"./Globe04-oAzGLYAS.js";import"./SwitchHorizontal01-De6AUb2Z.js";import"./HardDrive-ClDilEQP.js";import"./Key01-ZBfxQetL.js";import"./LayoutLeft-CDVT9Dgd.js";import"./LinkExternal01-tV8t1hza.js";import"./LockUnlocked01-BdOhNnbV.js";import"./LogOut01-CtYkidhR.js";import"./Monitor01-dGYL4z_0.js";import"./Sun-DWGCQTGg.js";import"./Palette-Bf8E3y6a.js";import"./Play-DfCgAfnz.js";import"./Plus-hzMlfF5t.js";import"./SearchLg-DUR70efk.js";import"./SearchMd-BVLUrgHw.js";import"./Shield01-gQLm6n7_.js";import"./Stars01-CWLSMDFe.js";import"./Trash01-CQi5djNt.js";import"./Upload01-DimHA1g3.js";import"./User01-zbSjEILB.js";import"./Users01-CWF2Gmgt.js";import"./XClose-C4YAUgwt.js";import"./Zap-BPj9OtPo.js";import"./useInfiniteQuery-9_6SxDg2.js";import"./use-infinite-scroll-D4rShkvt.js";import"./use-connection-C3jc6om-.js";import"./card-gt12k-_K.js";import"./sidebar-CjVkeUmI.js";import"./use-mobile-gpw02O-O.js";import"./table-C6NnU1Cd.js";import"./empty-state-B3lY33gZ.js";import"./use-members--TuWqpLK.js";import"./use-org-auth-client-DBvFnnww.js";import"./use-clock-tick-C6fvhnn_.js";import"./use-automations-COjV8wW2.js";import"./useSuspenseInfiniteQuery-BiLpJIe0.js";import"./avatar-BoqrBljt.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DPAJUETn.js";import"./monaco-editor-DScEOi-N.js";import"./spinner-Cm6qGu-J.js";import"./types-CTtLz4Tu.js";import"./shell-layout-IM9Tetf5.js";import"./required-auth-layout-Bn37q6Si.js";import"./use-org-sso-CcuRAxZ4.js";import"./integration-icon-DzPyDw7L.js";import"./use-navigate-to-agent-CiNDqgbJ.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-D_M_Leqk.js";import"./index-BO4iEiWg.js";import"./form-wigBWKDs.js";import"./file-type-icon-L8XdvFDS.js";import"./drawer-emyJR_uX.js";import"./collection-search-UIsxX62P.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-B6Zl4VLu.js";import"./toggle-group-BBIfyqXM.js";import"./use-commerce-diagnostic-BGqoJqkd.js";import"./popover-C6icmT7k.js";import"./self-tool-result-Dd_VzOBG.js";import"./alert-dialog-D2jUXfgl.js";import"./extract-connection-data-DfxXPhUc.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-C2HwF4Ce.js";import"./use-debounced-value-fjei0cgv.js";import"./authenticate-and-persist-oauth-DhRO0RPr.js";import"./mcp-oauth-Cy_Bf-ym.js";import"./track-CD7khAYd.js";import"./toolbar-KqPGkyaz.js";import"./skeleton-aqW8n0Gm.js";import"./github-repo-picker-oaK5Gypm.js";import"./use-mcp-tools-Bkup7Sjz.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-DdrYTE3y.js";import"./use-registry-connections-uj4OkxVY.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-CEOpY3lC.js";import"./collection-tabs-BvZAlwQz.js";import"./badge-CwQvUPen.js";import"./command-D2rHchqp.js";import"./index-CPMnp8v9.js";import"./use-open-billing-url-lWtnBYM7.js";import"./select-model-BusjfCiB.js";import"./checkbox-BataWfdN.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-ZiXzsLKj.js";import"./cards-bUqIl5ke.js";import"./dropdown-menu-BsfgDihP.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-imr3g8sF.js";import"./use-capability-DUjrX8Od.js";import"./use-file-configs-CjfP8pdH.js";import"./pt-BR-CLy76QW2.js";import"./switch-CVVIBgFP.js";import"./use-debounced-autosave-DvImz8zS.js";import"./index-DUeFyYSL.js";import"./search-input-CrhcZ0Vp.js";import"./index-BIyKq3hZ.js";import"./use-secrets-vgjzez9S.js";import"./AreaChart-Ch5t0DSa.js";import"./use-tags-zs11X1pj.js";import"./get-initials-D-f_fDFw.js";import"./automation-list-row-CaAPa6W_.js";import"./use-org-repo-syncs-BAxrGIc9.js";const Q={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},U={authors:"sandbox.recordEditor.titleAuthor"};function Qr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=_(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:q(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=H(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,T=U[a];let n;t[14]!==i||t[15]!==T?(n=i(T),t[14]=i,t[15]=T,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx($,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const N=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==N){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(G,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(P,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(V,{id:o.key,className:"h-10 w-full",children:r.jsx(z,{placeholder:i(o.labelKey)})}),r.jsx(J,{children:(o.options??[]).map(m=>r.jsx(O,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(P,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=N.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=N,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Qr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BPLLxJlp.js","assets/index-C_yzfjgX.js","assets/index-B3kZ43lJ.css","assets/Tool02-LrSA6GhG.js","assets/CheckCircle-CKyLnVRh.js","assets/Settings02-B3UeJQql.js","assets/use-mcp-client-BYmPCKc-.js","assets/auth-gDrpaZ1U.js","assets/useInfiniteQuery-9_6SxDg2.js","assets/use-infinite-scroll-D4rShkvt.js","assets/studio-tools-aJ6aJNMq.js","assets/badge-CwQvUPen.js","assets/input-D9RVOy-R.js","assets/dropdown-menu-BsfgDihP.js","assets/Check-BEoj7Khh.js","assets/ChevronRight-xqBmhKWZ.js","assets/DotsVertical-1yn23j63.js","assets/table-C6NnU1Cd.js","assets/toggle-group-BBIfyqXM.js","assets/use-view-mode-gTh3FRe9.js","assets/use-mobile-gpw02O-O.js","assets/FilterLines-CMX0oGRk.js","assets/Globe01-BF1875OP.js","assets/SearchMd-BVLUrgHw.js","assets/dialog-BBG8h_sW.js","assets/X-B9nYIfsj.js","assets/AlertCircle-CWS3caol.js","assets/Download01-DM6mnzIL.js","assets/Upload01-DimHA1g3.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-D2jUXfgl.js","assets/card-gt12k-_K.js","assets/Trash01-CQi5djNt.js","assets/label-CaJRPYtm.js","assets/select-Dd4yiSks.js","assets/tooltip-Ddu6lHLa.js","assets/ChevronDown-CAoRsesl.js","assets/ChevronUp-anZFNOW_.js","assets/switch-CVVIBgFP.js","assets/textarea-CdfQMqwD.js","assets/ArrowLeft-Cb1v-9cD.js","assets/XCircle-BRwJJeJP.js","assets/checkbox-BataWfdN.js","assets/Eye-BUn1f4eI.js","assets/LinkExternal01-tV8t1hza.js","assets/use-copy-DPAJUETn.js","assets/Copy01-BaY8WLw_.js","assets/Key01-ZBfxQetL.js","assets/Plus-hzMlfF5t.js","assets/mcp-oauth-Cy_Bf-ym.js","assets/Play-DfCgAfnz.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aF as o}from"./index-C_yzfjgX.js";import{R as m}from"./require-capability-fk3eeaDw.js";import"./use-capability-DUjrX8Od.js";import"./access-gate-D59Qmmgd.js";import"./capability-load-error-CjnAtN-b.js";const n=s.lazy(()=>o(()=>import("./registry-layout-BPLLxJlp.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BPLLxJlp.js","assets/index-C_yzfjgX.js","assets/index-B3kZ43lJ.css","assets/Tool02-LrSA6GhG.js","assets/CheckCircle-CKyLnVRh.js","assets/Settings02-B3UeJQql.js","assets/use-mcp-client-BYmPCKc-.js","assets/auth-gDrpaZ1U.js","assets/useInfiniteQuery-9_6SxDg2.js","assets/use-infinite-scroll-D4rShkvt.js","assets/studio-tools-aJ6aJNMq.js","assets/badge-CwQvUPen.js","assets/input-D9RVOy-R.js","assets/dropdown-menu-BsfgDihP.js","assets/Check-BEoj7Khh.js","assets/ChevronRight-xqBmhKWZ.js","assets/DotsVertical-1yn23j63.js","assets/table-C6NnU1Cd.js","assets/toggle-group-BBIfyqXM.js","assets/use-view-mode-gTh3FRe9.js","assets/use-mobile-gpw02O-O.js","assets/FilterLines-CMX0oGRk.js","assets/Globe01-BF1875OP.js","assets/SearchMd-BVLUrgHw.js","assets/dialog-BBG8h_sW.js","assets/X-B9nYIfsj.js","assets/AlertCircle-CWS3caol.js","assets/Download01-DM6mnzIL.js","assets/Upload01-DimHA1g3.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-D2jUXfgl.js","assets/card-gt12k-_K.js","assets/Trash01-CQi5djNt.js","assets/label-CaJRPYtm.js","assets/select-Dd4yiSks.js","assets/tooltip-Ddu6lHLa.js","assets/ChevronDown-CAoRsesl.js","assets/ChevronUp-anZFNOW_.js","assets/switch-CVVIBgFP.js","assets/textarea-CdfQMqwD.js","assets/ArrowLeft-Cb1v-9cD.js","assets/XCircle-BRwJJeJP.js","assets/checkbox-BataWfdN.js","assets/Eye-BUn1f4eI.js","assets/LinkExternal01-tV8t1hza.js","assets/use-copy-DPAJUETn.js","assets/Copy01-BaY8WLw_.js","assets/Key01-ZBfxQetL.js","assets/Plus-hzMlfF5t.js","assets/mcp-oauth-Cy_Bf-ym.js","assets/Play-DfCgAfnz.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aF as p}from"./index-C_yzfjgX.js";import{R as u}from"./require-capability-fk3eeaDw.js";import"./use-capability-DUjrX8Od.js";import"./access-gate-D59Qmmgd.js";import"./capability-load-error-CjnAtN-b.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BPLLxJlp.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-D4rShkvt.js";import{e7 as i}from"./index-C_yzfjgX.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-D4rShkvt.js";import{e7 as u,b4 as n}from"./index-C_yzfjgX.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|