decocms 4.297.1 → 4.297.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-CpYW_tbO.js → AlertCircle-DqlysY9D.js} +1 -1
- package/dist/client/assets/{AreaChart-GiVFThsK.js → AreaChart-DaoA8wf2.js} +1 -1
- package/dist/client/assets/{ArrowLeft-BIeI5Ths.js → ArrowLeft-D-xFHxrU.js} +1 -1
- package/dist/client/assets/{ArrowUp-DI9yV_Te.js → ArrowUp-DOcOg-R4.js} +1 -1
- package/dist/client/assets/{Check-DhCV1lym.js → Check-BdpWih-z.js} +1 -1
- package/dist/client/assets/{CheckCircle-DE79hZ6x.js → CheckCircle-D-ElPm6-.js} +1 -1
- package/dist/client/assets/{ChevronDown-DJ77w-QF.js → ChevronDown-CF_b86TC.js} +1 -1
- package/dist/client/assets/{ChevronRight-BEt77lZa.js → ChevronRight-CM1WrwDB.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-Cn5vBsE-.js → ChevronSelectorVertical-CzDVbt9Z.js} +1 -1
- package/dist/client/assets/{ChevronUp-D25-5WvN.js → ChevronUp-tZmbye_h.js} +1 -1
- package/dist/client/assets/{Copy01-DO3RN7Ju.js → Copy01-C9QKIs5I.js} +1 -1
- package/dist/client/assets/{CreditCard01-BOb1tetV.js → CreditCard01-DJMwxS6S.js} +1 -1
- package/dist/client/assets/{DotsVertical-DEkiCWy8.js → DotsVertical-BLm3YPV_.js} +1 -1
- package/dist/client/assets/{Download01-D-a_A4ZU.js → Download01-BCknclFl.js} +1 -1
- package/dist/client/assets/{Eye-C5afRO8A.js → Eye-Dkk-ur4H.js} +1 -1
- package/dist/client/assets/{FilterLines-DynDjwO8.js → FilterLines-LhJn6kAg.js} +1 -1
- package/dist/client/assets/{Globe01-BeDvq8im.js → Globe01-Dn3pYSfO.js} +1 -1
- package/dist/client/assets/{Globe04-C4hEtLor.js → Globe04-CtW9z8J0.js} +1 -1
- package/dist/client/assets/{HardDrive-CheW7xRn.js → HardDrive-B6lRuqqu.js} +1 -1
- package/dist/client/assets/{Key01-BC9447J1.js → Key01-CJTlI9qi.js} +1 -1
- package/dist/client/assets/{LinkExternal01-DG5XDoMk.js → LinkExternal01-DeoDfLh6.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-BlhfTtek.js → LockUnlocked01-D_FPask7.js} +1 -1
- package/dist/client/assets/{LogOut01-BSCd9S_n.js → LogOut01-BOkzCOF7.js} +1 -1
- package/dist/client/assets/{Monitor01-ygXwT_3r.js → Monitor01-m4kRqTeC.js} +1 -1
- package/dist/client/assets/{Palette-CA1thTeY.js → Palette-7E9_jzW3.js} +1 -1
- package/dist/client/assets/{Play-CbKU1VYE.js → Play-CFhv9_Ur.js} +1 -1
- package/dist/client/assets/{Plus-Diyj_tcm.js → Plus-MWfmElf9.js} +1 -1
- package/dist/client/assets/{SearchLg-CvqUdsC5.js → SearchLg-JQyD36UX.js} +1 -1
- package/dist/client/assets/{SearchMd-CRXxkGHM.js → SearchMd-Cg_1Eg0R.js} +1 -1
- package/dist/client/assets/{Settings02-Ddvw_YSG.js → Settings02-Cm-8J7dI.js} +1 -1
- package/dist/client/assets/{Share07-q5VLK848.js → Share07-BxbP3A7W.js} +1 -1
- package/dist/client/assets/{Shield01-rWAB3gsN.js → Shield01-DEcHh4bM.js} +1 -1
- package/dist/client/assets/{Stars01-D7H-7apF.js → Stars01-FlunB0nF.js} +1 -1
- package/dist/client/assets/{Stars02-BzdGZ6yZ.js → Stars02-DKGi3U9n.js} +1 -1
- package/dist/client/assets/{Sun-Bt8gvvFB.js → Sun-DVI2vn70.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-BKd5IhHd.js → SwitchHorizontal01-Cv1miqTc.js} +1 -1
- package/dist/client/assets/{Tool01-C8fh-Io6.js → Tool01-Cy_C96cx.js} +1 -1
- package/dist/client/assets/{Tool02-roW7uSIj.js → Tool02-B4sop45l.js} +1 -1
- package/dist/client/assets/{Trash01-DRFTo4JI.js → Trash01-BGjtF5S6.js} +1 -1
- package/dist/client/assets/{TrendUp01-CM46c3vu.js → TrendUp01-CTPzw9hw.js} +1 -1
- package/dist/client/assets/{Upload01-ccqEJbRu.js → Upload01-BNo0YNDs.js} +1 -1
- package/dist/client/assets/{User01-DbfnPV7X.js → User01-TrRBCjo4.js} +1 -1
- package/dist/client/assets/{UserSquare-CahIyJPC.js → UserSquare-M1amAYGP.js} +1 -1
- package/dist/client/assets/{Users01-DTezZnQ5.js → Users01-BZJyaYYg.js} +1 -1
- package/dist/client/assets/{Users03-BLEw3RU0.js → Users03-0qTkF97c.js} +1 -1
- package/dist/client/assets/{XCircle-CnIoifnv.js → XCircle-DrsjYPKa.js} +1 -1
- package/dist/client/assets/{XClose-Cclg1STt.js → XClose-n_eDy1Rp.js} +1 -1
- package/dist/client/assets/{YAxis-DVeNPBtM.js → YAxis-CS6ueMeB.js} +1 -1
- package/dist/client/assets/{Zap-62BYm7QF.js → Zap-B0RHL5Cs.js} +1 -1
- package/dist/client/assets/{ZapSquare-4OOR1PwO.js → ZapSquare-Cp7jHWfO.js} +1 -1
- package/dist/client/assets/{access-gate-ef2GvJFt.js → access-gate--lko-cSb.js} +1 -1
- package/dist/client/assets/{agent-icon-CKjVMN9p.js → agent-icon-Bfip_hC1.js} +1 -1
- package/dist/client/assets/{agents-list-CX0XhC2e.js → agents-list-3l5EVJ_m.js} +1 -1
- package/dist/client/assets/{ai-providers-Dau02lpz.js → ai-providers-BIwPJFrz.js} +1 -1
- package/dist/client/assets/{alert-Bfu-dgd1.js → alert-Da70jUMx.js} +1 -1
- package/dist/client/assets/{alert-dialog-Bc6M16_R.js → alert-dialog-BfCyvNgc.js} +1 -1
- package/dist/client/assets/{api-keys-CAfMnXPc.js → api-keys-LLaRQhnh.js} +1 -1
- package/dist/client/assets/{app-editor-k4VxkGSB.js → app-editor-CG9eYz--.js} +1 -1
- package/dist/client/assets/{auth-B_Cgy3yY.js → auth-CazBn0l9.js} +1 -1
- package/dist/client/assets/{auth-catchall-C2JG0hHC.js → auth-catchall-mNdyebNv.js} +1 -1
- package/dist/client/assets/{auth-entry-BMPe8Dl5.js → auth-entry-CniT23kW.js} +1 -1
- package/dist/client/assets/{auth-split-layout-Dn6mYbLm.js → auth-split-layout-CpS7SPnj.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-D1W_9Pdo.js → authenticate-and-persist-oauth-DakE1rOG.js} +1 -1
- package/dist/client/assets/{automation-list-row-CndwcN4f.js → automation-list-row-B1rrfgUs.js} +1 -1
- package/dist/client/assets/{automation-runs-CENlZHMg.js → automation-runs-BQoCu04G.js} +1 -1
- package/dist/client/assets/{automations-BJi0Xods.js → automations-BFJ1Riv-.js} +1 -1
- package/dist/client/assets/{avatar-TZFKN0WP.js → avatar-Buny80cx.js} +1 -1
- package/dist/client/assets/{badge-jcflJQxC.js → badge-DkauhRmD.js} +1 -1
- package/dist/client/assets/{block-document-DE2MHnRJ.js → block-document-B_iUfTpf.js} +1 -1
- package/dist/client/assets/{breadcrumb-CzfLZ0ju.js → breadcrumb-D49ofJcI.js} +1 -1
- package/dist/client/assets/{buckets-BVxpsuPK.js → buckets-CNW0-OG4.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-D_IG8bM3.js → bulk-category-panel-CuKm9z_g.js} +1 -1
- package/dist/client/assets/{capability-load-error-4MkPwOcj.js → capability-load-error-Bhn_Ou-6.js} +1 -1
- package/dist/client/assets/{cards-CErW68cb.js → cards-CveaVGdE.js} +1 -1
- package/dist/client/assets/{category-editor-DejtpydJ.js → category-editor-sK3ff-rg.js} +1 -1
- package/dist/client/assets/{chart-DfWmHRKh.js → chart-C3Y1aBgw.js} +1 -1
- package/dist/client/assets/{chat-context-CfIA0tj5.js → chat-context-D6S8hdgn.js} +1 -1
- package/dist/client/assets/{checkbox-E4gWYNoJ.js → checkbox-E5FcY4s7.js} +1 -1
- package/dist/client/assets/{choose-editor-B3yD2WxI.js → choose-editor-CyKZiofZ.js} +1 -1
- package/dist/client/assets/{cli-auth-success-CACpjOCY.js → cli-auth-success-BGmnEzuo.js} +1 -1
- package/dist/client/assets/{collection-detail-tuxufFUG.js → collection-detail-fP2gEOer.js} +1 -1
- package/dist/client/assets/{collection-display-button-BlPj3Y0H.js → collection-display-button-BiZryzVI.js} +1 -1
- package/dist/client/assets/{collection-search-DpIcqW3y.js → collection-search-DsShrLNS.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-B7CmnoH3.js → collection-table-wrapper-Qrbv6sLp.js} +1 -1
- package/dist/client/assets/{collection-tabs-zttZb8LR.js → collection-tabs-VFYnIerQ.js} +1 -1
- package/dist/client/assets/{command-L5Oti6rc.js → command-Cwf8GVLU.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-DFwWr0Mu.js → commerce-onboarding-DARyfP5e.js} +1 -1
- package/dist/client/assets/{config-Btw0Fv6s.js → config-Dl95-2yP.js} +1 -1
- package/dist/client/assets/{connect-N6klPR1B.js → connect-BsoT3WEp.js} +1 -1
- package/dist/client/assets/{connection-FUxp0jCf.js → connection-B5ESg6xV.js} +1 -1
- package/dist/client/assets/{connection-card-CQcFeKpl.js → connection-card-BUJsYcjd.js} +1 -1
- package/dist/client/assets/{connection-detail-U0TwRKwW.js → connection-detail-Cy4Z16n8.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Cg_mD2UP.js → connection-form-helpers-BH43vAxz.js} +1 -1
- package/dist/client/assets/{connections-BsOysGgX.js → connections-C1Af2HGu.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-Da7ZbkzY.js → decopilot-sse-pool-CJ3xP4R6.js} +1 -1
- package/dist/client/assets/{dialog-DOAS9jm2.js → dialog-CZuBi0KE.js} +1 -1
- package/dist/client/assets/{domain-settings-DNzXqk8P.js → domain-settings-DPgT1IjD.js} +1 -1
- package/dist/client/assets/{drawer-DVJTlxk3.js → drawer-1cO71VdA.js} +1 -1
- package/dist/client/assets/{dropdown-menu-CoeYZJgs.js → dropdown-menu-BvBkFFm_.js} +1 -1
- package/dist/client/assets/{empty-state-wB7cdsM4.js → empty-state-CJ__nrq0.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CHEhDLj2.js → extract-connection-data-CkH2DEsS.js} +1 -1
- package/dist/client/assets/{file-explorer-MPM-AElU.js → file-explorer-BmOBwz8W.js} +1 -1
- package/dist/client/assets/{file-type-icon-BRkWsjdq.js → file-type-icon-8Q6rBquj.js} +1 -1
- package/dist/client/assets/{form-CYZ0mIR7.js → form-VtTrGq6p.js} +1 -1
- package/dist/client/assets/{general-eEpXJCaH.js → general-BPryfQX2.js} +1 -1
- package/dist/client/assets/{github-repo-picker-B1d5F1h8.js → github-repo-picker-Cr8PsfGt.js} +1 -1
- package/dist/client/assets/{hooks-fDzSjiHD.js → hooks-CJQVk-4N.js} +1 -1
- package/dist/client/assets/{index-CUsv6spx.js → index-4BoJxxI0.js} +3 -3
- package/dist/client/assets/{index-B0lEfFpA.js → index-4aS5DveI.js} +1 -1
- package/dist/client/assets/{index-B3XVRpLk.js → index-BmcHX9Rr.js} +1 -1
- package/dist/client/assets/{index-MmlkfQk7.js → index-BxGuwQE7.js} +1 -1
- package/dist/client/assets/{index-D4776a5K.js → index-Bz0LFzIe.js} +1 -1
- package/dist/client/assets/{index-Dv2bxB4K.js → index-CHMMfxB0.js} +6 -6
- package/dist/client/assets/{index-CcwQGrra.js → index-DIoHDadP.js} +1 -1
- package/dist/client/assets/{index-DhH_Lh3O.js → index-DNjLwikn.js} +1 -1
- package/dist/client/assets/{index-Cn07BKI0.js → index-Oswigup3.js} +1 -1
- package/dist/client/assets/{index-redirect-CDT_zNrE.js → index-redirect-DkMN_dYr.js} +1 -1
- package/dist/client/assets/{infra-billing-CEIToPiU.js → infra-billing-BWqlOyfV.js} +1 -1
- package/dist/client/assets/{input-CoaAkMbs.js → input-1xTpCq1t.js} +1 -1
- package/dist/client/assets/{integration-icon-B1kjPg-O.js → integration-icon-DXTMt2jz.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-CM_xm5_J.js → invite-member-dialog-BLJ6ZYAR.js} +1 -1
- package/dist/client/assets/{label-CFCi5sWw.js → label-Cp-fX4N0.js} +1 -1
- package/dist/client/assets/{layout-Bs-9rkp9.js → layout-DbJ4aqdj.js} +1 -1
- package/dist/client/assets/{login-ypW650Z0.js → login-feyUAeLW.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CsG48Ozx.js → mcp-oauth-CTRjib0I.js} +1 -1
- package/dist/client/assets/{members-8KuXcvIF.js → members-Cxpx4zD5.js} +1 -1
- package/dist/client/assets/{monaco-editor-B6MnVwme.js → monaco-editor-C3PeD1JG.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-oXBrt0XW.js → monitoring-stats-row-d8E7TupZ.js} +1 -1
- package/dist/client/assets/{multi-select-usWWhBIh.js → multi-select-BM7hpwKX.js} +1 -1
- package/dist/client/assets/{oauth-callback-oq64lsy3.js → oauth-callback-BIL2LHWS.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-CFJUHTHM.js → oauth-callback-ai-provider-CNeRWM9v.js} +1 -1
- package/dist/client/assets/{onboarding-CqPepCll.js → onboarding-CxOSB7Ji.js} +1 -1
- package/dist/client/assets/{org-layout-1__7AkSH.js → org-layout-Zl8TComI.js} +1 -1
- package/dist/client/assets/{organization-choice-yJVzQjyB.js → organization-choice-Dz2mxeOf.js} +1 -1
- package/dist/client/assets/{orgs-Bz3sp1J-.js → orgs-DtBdDrDG.js} +1 -1
- package/dist/client/assets/{page-seo-form-CxQnokUU.js → page-seo-form-DqsQGIwH.js} +1 -1
- package/dist/client/assets/{popover-Dej1mwou.js → popover-BYGwp0b3.js} +1 -1
- package/dist/client/assets/{post-calendar-ao1J59r9.js → post-calendar-DiNEfOJe.js} +1 -1
- package/dist/client/assets/{post-editor-OI5RUO9a.js → post-editor-DfWtgHGg.js} +1 -1
- package/dist/client/assets/{primitives-CCugXZt6.js → primitives-B8GTVb4H.js} +1 -1
- package/dist/client/assets/{profile-B9JUzQlG.js → profile-hOcm5Sdp.js} +1 -1
- package/dist/client/assets/{project-app-view-CQUTGo4G.js → project-app-view-D2TDKIdk.js} +1 -1
- package/dist/client/assets/{prompts-BAB7xEPs.js → prompts-Gu3HSbxu.js} +1 -1
- package/dist/client/assets/record-editor-BTO4DfYr.js +1 -0
- package/dist/client/assets/{redirect-editor-ovNmgi_r.js → redirect-editor-CiU27L65.js} +1 -1
- package/dist/client/assets/registry-CdoemGB1.js +2 -0
- package/dist/client/assets/{registry-layout-GPSGrvkz.js → registry-layout-2c4QONcr.js} +1 -1
- package/dist/client/assets/{reports-D0_OaZ-n.js → reports-sum9eID-.js} +1 -1
- package/dist/client/assets/{require-capability-CVDpdPyO.js → require-capability-BZV31Qjs.js} +1 -1
- package/dist/client/assets/{required-auth-layout-DHkYsbKE.js → required-auth-layout-Ck072ww2.js} +1 -1
- package/dist/client/assets/{reset-password-fIMkZHK2.js → reset-password-rsJfjNPh.js} +1 -1
- package/dist/client/assets/{review-settings-CcDckOWb.js → review-settings-B9vp5f1y.js} +1 -1
- package/dist/client/assets/{roles-Ng3idtBi.js → roles-CcVv_L-I.js} +1 -1
- package/dist/client/assets/{scroll-area-B0rTUaVM.js → scroll-area-zBFcne_K.js} +1 -1
- package/dist/client/assets/{search-input-W1_UsQDD.js → search-input-_Cc33a0i.js} +1 -1
- package/dist/client/assets/{secrets-CFYKi99b.js → secrets-FDFI38Y9.js} +1 -1
- package/dist/client/assets/{sections-editor-D0cqKgGm.js → sections-editor-BlYMxwhB.js} +1 -1
- package/dist/client/assets/{select-Dxa4ghYp.js → select-BMI2M7Tc.js} +1 -1
- package/dist/client/assets/{select-model-CbRBms5M.js → select-model-MN7eeqU4.js} +1 -1
- package/dist/client/assets/{self-tool-result-B4owPa77.js → self-tool-result-Bbcqvm8w.js} +1 -1
- package/dist/client/assets/{seo-editor-5OY5wq1f.js → seo-editor-KIgUA5nt.js} +1 -1
- package/dist/client/assets/{settings-layout-BgGdDjSn.js → settings-layout-B-9VWE4Z.js} +1 -1
- package/dist/client/assets/{shell-controls-C6IB0dy5.js → shell-controls-CJrSQONK.js} +1 -1
- package/dist/client/assets/{shell-layout-Dl45IpsK.js → shell-layout-BhqN0GHC.js} +1 -1
- package/dist/client/assets/{spinner-DM70CbRu.js → spinner-Bm9j2Mh-.js} +1 -1
- package/dist/client/assets/{sso-D_FqdvxG.js → sso-CiXU3Kdv.js} +1 -1
- package/dist/client/assets/{store-DS5lrQUU.js → store-C2tIoDZ5.js} +1 -1
- package/dist/client/assets/store-registry-JEASR7AW.js +2 -0
- package/dist/client/assets/{super-agent-icon-B_rY1V5U.js → super-agent-icon-DUz634uk.js} +1 -1
- package/dist/client/assets/{switch-uCYwLFGz.js → switch-BlqgpixO.js} +1 -1
- package/dist/client/assets/{synced-repos-BvFh1scF.js → synced-repos-Cyq_5vLS.js} +1 -1
- package/dist/client/assets/{table-C0CY3eMs.js → table-Ce4dZ2Zu.js} +1 -1
- package/dist/client/assets/{tabs-IF5NV5EO.js → tabs-Bv6C4Ulu.js} +1 -1
- package/dist/client/assets/{task-board-Cn9IqPOj.js → task-board-DnLjvFD5.js} +1 -1
- package/dist/client/assets/{tasks-DNjX8xjL.js → tasks-Cg9axVWf.js} +1 -1
- package/dist/client/assets/{textarea-BucHe_0W.js → textarea-BmPMSU-8.js} +1 -1
- package/dist/client/assets/{toggle-group-BsEhxtQF.js → toggle-group-Dp-s_iZF.js} +1 -1
- package/dist/client/assets/{toolbar-DOT0aNXQ.js → toolbar-BRprrkU9.js} +1 -1
- package/dist/client/assets/{track-Doo4GO9s.js → track-BAUx9bwy.js} +1 -1
- package/dist/client/assets/{types-D9KLZPxz.js → types-DFpV7TMk.js} +1 -1
- package/dist/client/assets/{use-ai-providers-R1h89W_o.js → use-ai-providers-2Lt7m3Mt.js} +1 -1
- package/dist/client/assets/{use-api-keys-C3xqDEQ0.js → use-api-keys-BWiaFF9R.js} +1 -1
- package/dist/client/assets/{use-automations-DjZJzmmB.js → use-automations-Co75VUbL.js} +1 -1
- package/dist/client/assets/{use-autosave-B_qlhr_e.js → use-autosave-BWSeqBbD.js} +1 -1
- package/dist/client/assets/{use-connection-row2jEEx.js → use-connection-mmm3c3KI.js} +1 -1
- package/dist/client/assets/{use-copy-lSHXd-wn.js → use-copy-CSlOCp2-.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-xdN3hIUV.js → use-create-virtual-mcp-Be0gQ44x.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Dc_7XSpk.js → use-debounced-autosave-CQDZL87B.js} +1 -1
- package/dist/client/assets/{use-debounced-value-BzQAWrPr.js → use-debounced-value-XCA_5RcC.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-Cy92xCJJ.js → use-decopilot-events-BP556BIR.js} +1 -1
- package/dist/client/assets/{use-delete-connection-HiOCEXif.js → use-delete-connection-Q0L0ab7v.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-DsYRsJKy.js → use-deployment-admin-aDH9oxDK.js} +1 -1
- package/dist/client/assets/{use-destination-route-0Ja9oRq4.js → use-destination-route-yNJQkFkA.js} +1 -1
- package/dist/client/assets/{use-file-configs-MKRmx-NC.js → use-file-configs-C7A-NIt6.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-BoK3Y8Yl.js → use-infinite-scroll-lSt7scNo.js} +1 -1
- package/dist/client/assets/{use-join-requests-VKrK6sqB.js → use-join-requests-DeUDq-5y.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-DBNpg-CQ.js → use-mcp-auth-status-DVbuIIZD.js} +1 -1
- package/dist/client/assets/{use-mcp-client-CqksmDRH.js → use-mcp-client-CxzLs-xO.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-_g366M0J.js → use-mcp-tools-CC6TpAaw.js} +1 -1
- package/dist/client/assets/{use-members-vHqlFJqL.js → use-members-O-E4vM8s.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BL6l-5ru.js → use-navigate-to-agent-D_-xV2Qv.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-DR1XE-qy.js → use-org-auth-client-StTjMKI3.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-BbFUPRgL.js → use-org-repo-syncs-D_QufB9-.js} +1 -1
- package/dist/client/assets/{use-org-sso-CZjKqWal.js → use-org-sso-TLwbQom7.js} +1 -1
- package/dist/client/assets/{use-organization-roles-_Ie9TTUx.js → use-organization-roles-D1lE9UXq.js} +1 -1
- package/dist/client/assets/{use-organization-settings-BCD1w8Wj.js → use-organization-settings-IId99-Gg.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BTBs_DfK.js → use-panel-navigate-e2ecrVkz.js} +1 -1
- package/dist/client/assets/{use-registry-connections-DhAivdGc.js → use-registry-connections-C6na3zjs.js} +1 -1
- package/dist/client/assets/{use-secrets-CaqXJ6Eu.js → use-secrets-thBka8dQ.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-BqKcYhu4.js → use-section-preview-base-BD8Ez3ch.js} +1 -1
- package/dist/client/assets/{use-status-sounds-BBK2hoYJ.js → use-status-sounds-CcIlz3sQ.js} +1 -1
- package/dist/client/assets/{use-tags-DQZbD2QT.js → use-tags-DNLQQNMn.js} +1 -1
- package/dist/client/assets/{use-view-mode-CE5TBCSx.js → use-view-mode-CQFyd9yU.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-DgA24NSF.js → use-virtual-mcp-BTkr2EWT.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DC0uzRLo.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-DS9OrQKe.js +1 -0
- package/dist/client/assets/{users-CvxeDD3F.js → users-Cwx-mrDm.js} +1 -1
- package/dist/client/assets/{variant-calendar-3AokIP5r.js → variant-calendar-DzLbh5ky.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-Jv2j1jhI.js → view-mode-toggle-D-vPT9bH.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-JIZZMNr-.js +0 -1
- package/dist/client/assets/registry-CGJxvnIF.js +0 -2
- package/dist/client/assets/store-registry-B5YFli-8.js +0 -2
- package/dist/client/assets/useInfiniteQuery-ClQbS0Zt.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-Cn8lm8m4.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2920,7 +2920,7 @@ Respond with the structured verdict and a short reason.`,sc$;var $l$=D(()=>{D4()
|
|
|
2920
2920
|
${G.join(`
|
|
2921
2921
|
`)}`:Y}function TN6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2922
2922
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var bl$=200,ON6=12,LN6,EN6=300,P71=3;var A71=D(()=>{cD();NT0();LN6={aheadBy:0,behindBy:0,files:[]}});function IN6($){if(!$||$.includes(".."))return!1;return RN6.test($)}function yl$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!IN6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function gl$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var RN6;var hl$=D(()=>{RN6=/^[\w./@-]+$/});function Us($,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 ul$($,Z,X,Q){if(!Q.connectionId)throw new Nv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new Nv(G9);await IO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:G9;throw new Nv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await qK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=T5$(H instanceof Error?H.message:String(H));throw N?new Nv(U):H}),K=lu($),F=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(!F.ok){let H=await RO(F,qN6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var qN6=10485760,Nv;var T71=D(()=>{QJ();$T0();Jn();Di0();qy();Nv=class Nv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function kN6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!MN6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Uv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(SN6)])}async function _N6($,Z){let X=$.var.studioContext,Q=ZJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=OC(J?.metadata?.runtime);if(W)return W;let K=mO0(Z.virtualMcpMetadata),F=K==="cms"?await Y71(X,{claimName:Z.claimName}):"alive",H=K==="cms"&&F!=="alive"?"cms":"sandbox",N=!!J&&(F==="gone"||F==="alive"&&K==="cms");if(N&&J)bn(X,J.id,H);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:F,resolved:H,stamped:N});return H}async function vN6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await ZQ($.var.studioContext)}catch{return null}}function Bv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function nu($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Us(Z,X);if(!Y)throw new u4(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return ZT0(Q,G.id,Y)}function R71($,Z){if(Z instanceof JA0)return $.json({error:Z.message},429,{...P5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof u4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,P5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,P5)}async function dl$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function ml$($){try{let Z=await nu($),X=await UT0(Z,$.get("vmClaim").branch);return $.json(X,200,P5)}catch(Z){return R71($,Z)}}function Bs($,Z){let Q=(DT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return DT0.set($,Y),Y.finally(()=>{if(DT0.get($)===Y)DT0.delete($)}),Q}async function tZ($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,P5);let Q=X?.runner??Bv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,F=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,F.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),F.set("content-type","application/json");let H=X?.signal,N={method:W,headers:F,body:K,...H?{signal:H}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.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",...P5}})}}let O=await B.text(),L=X?.redactRepoDir?fN6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...P5}})};try{if(H){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(H.aborted)return w(H.reason);H.addEventListener("abort",()=>w(H.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function fN6($){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 LT0($,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 bN6($){return il$.includes($)}var MN6,cl$=524288,VN6=65536,SN6=1e4,ll$=2000,CN6,DT0,P5,il$,pl$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",CN6),$.post("/:virtualMcpId/:branch/write",(X)=>tZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>tZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>tZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>tZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>tZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>tZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Uv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>tZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Uv(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 tZ(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 tZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>tZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!bN6(Q))return X.json({error:`step must be one of: ${il$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await Y71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await vN6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,P5);if(Q==="start"){let J=t(X.var.studioContext),W=Ry(Y.virtualMcpMetadata);try{await J70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let F=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${F}`},502)}}return tZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return mN(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 pc$(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").runtime==="cms")return ml$(X);return Z(X)});let Z=(X)=>tZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(ll$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return ml$(X);return tZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(ll$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await nu(X),J=await BT0(G,Q.branch,Y.base);return X.json(J,200,P5)}catch(Y){return R71(X,Y)}return tZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,P5);let Q=Bv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Bs(Y,async()=>{try{await G71(W,Q,Y);let K=Us(G,J);if(K)await ul$(W,Q,Y,K)}catch(K){if(K instanceof Nv)return X.json({error:K.message},403,P5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,P5)}return tZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(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,P5);try{let J=await nu(X);return await xl$(J,Q.branch,G),X.json({ok:!0},200,P5)}catch(J){let W=J instanceof u4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,P5)}});return Bs(Q.claimName,()=>tZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return Bs(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await nu(X),F=W.base??await K.getDefaultBranch();return await OT0(K,Q.branch,F),X.json({ok:!0},200,P5)}catch(W){return R71(X,W)}});let Y=Bv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Bs(G,async()=>{try{await G71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,P5)}return tZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",p5({maxSize:cl$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Bv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=K71(H)&&U?[H,N]:Y?await Promise.all([LT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),LT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([UT0(w,Q.branch),BT0(w,Q.branch)])})(),L=await ac$(K,B,O);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",p5({maxSize:cl$,onError:(X)=>X.json({error:"Payload too large"},413,P5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let F=Bv(X);if(F instanceof Response)return F;Y=F}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let F=await X.req.json().catch(()=>({})),H=F.status,N=F.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=K71(H)&&U?[H,N]:Y?await Promise.all([LT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),LT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await nu(X);return Promise.all([UT0(w,Q.branch),BT0(w,Q.branch)])})(),L=await ec$(K,B,O,typeof F.language==="string"?F.language:void 0);return X.json(L,200,P5)}catch(F){let H=F instanceof Error?F.message:String(F);if(H==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,P5);return X.json({error:H},502,P5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Bv(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(/\/+$/,"");return dl$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",p5({maxSize:VN6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Bv(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=yl$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=gl$(G,W.resolveType);return dl$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var nl$=D(()=>{U8();EF();cu();Q71();Zn();dc$();h3();my();mc$();m3();ic$();nc$();Ui0();Yn();N71();$l$();B71();cD();A71();hl$();T71();MN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;CN6=eA0(async($,Z)=>{let X=$.var.studioContext;try{o(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(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{kN6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},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=ep({orgId:Y.id,virtualMcpId:G,branch:J}),F=await Ji0(X,J),H=Wi0(F,Q),N=lc$({userId:H,projectRef:K}),U=W.metadata??null,B=await _N6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:H,virtualMcpMetadata:U,branchThread:F});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await ZQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:H,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});DT0=new Map;P5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};il$=["clone","install","start"]});function tl$($,Z,X){let Q=I71.get($);if(!Q)Q={pending:null,running:!1},I71.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)yN6($,Q);return G}async function yN6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await gN6(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)I71.delete($)}}async function gN6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await pu(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=j71(W,Q),F=[],H=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=z71(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2923
|
-
`,j=await Z.createBlob(E);await _l$(Z.owner,Z.repo,j,E);let z=w[0]??`${HT0(Q)}/${O71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of z71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:hN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof u4&&O.status===422)||Y>=xN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function hN6($){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 $i0(Q,$.deps.coAuthor)}var xN6=3,I71;var ol$=D(()=>{gO0();QT0();W4();cD();NT0();I71=new Map});import{createHmac as rl$,randomBytes as uN6,timingSafeEqual as cN6}from"crypto";function al$(){if(wT0)return wT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wT0=$?Buffer.from($):uN6(32),wT0}function q71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+lN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=rl$("sha256",al$()).update(Q).digest("base64url");return`${Q}.${Y}`}function sl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(rl$("sha256",al$()).update(Q).digest("base64url"));if(Y.length!==G.length||!cN6(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 lN6=21600000,wT0=null;var el$=D(()=>{R$()});import{z as tu}from"zod";function mN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dN6.test($)}function Yd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return ZT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof u4){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 Gd$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Qd$),$.use("/:virtualMcpId/:branch/*",Qd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await vl$(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=q71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Yd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",pN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=nN6.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{XT0(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 Os(Z),W=await tl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=q71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Yd$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(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 u4&&W.status===409))throw W;await OT0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&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 Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var dN6,$d$=500,Zd$=1048576,Xd$=1024,iN6=8388608,pN6,nN6,Qd$;var Jd$=D(()=>{xn0();QT0();U8();EF();Q71();$T0();T71();B71();ol$();el$();A71();cD();NT0();dN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;pN6=p5({maxSize:iN6,onError:($)=>$.json({error:"Payload too large"},413)}),nN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=$d$,{message:`Patch cannot touch more than ${$d$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Zd$),{message:`Each block must be at most ${Zd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Xd$),{message:`Each block key must be at most ${Xd$} characters`}),Qd$=eA0(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(!mN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!sl$(B,{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(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);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 Wd$=($)=>{let Z=new H1;if(Z.use("*",Zv),Z.route("/",LA0()),Z.route("/",Tg$()),Z.route("/",Vc$()),Z.route("/",qc$()),Z.route("/",rA0()),Z.route("/tools",xc$()),Z.route("/",vc$()),Z.route("/",Gc$({kvStorage:$.kvStorage})),Z.route("/",Qc$()),Z.route("/fs",jc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",pl$()),Z.route("/decofile",Gd$()),Z.route("/",Tc$()),Z.route("/deco-sites",EA0()),Z.route("/sso",HA0()),Z.route("/",aA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Dg$()),$.mountDevAssets)Z.route("/dev-assets",jA0({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("/",bb$()),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",Pc$()),Z.route("/mcp",zw0()),Z.route("/mcp/self",oA0()),Z.route("/mcp",Tw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Kd$=D(()=>{U8();I91();Lg$();V91();zA0();fa();T91();Yc$();Jc$();zc$();ct();w91();Rw0();rZ1();Ac$();Rc$();Mc$();Sc$();fc$();sZ1();yc$();eZ1();Pw0();nl$();Jd$()});function tN6($){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 oN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Fd$=()=>{let $=new H1;return $.use("*",oN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:tN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Hd$=D(()=>{U8();R$();OP0()});import{z as M1}from"zod";function TF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function GU6($){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 JU6($,Z,X){try{return JSON.parse($)}catch{throw new Bd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function WU6($){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:JU6(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 KU6($){let Z=$.map((X)=>{let Q=X.function.parameters?iY(X.function.parameters):iY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function FU6($){if(!$)return;return{openai:{response_format:$}}}function HU6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Nd$($,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 Ud$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var rN6=256,aN6,sN6,eN6,$U6,ZU6,XU6,QU6,YU6,Bd$,Od$,Dd$;var Ld$=D(()=>{D4();U8();cu();TN();aN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),sN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),eN6=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(sN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$U6=M1.object({type:M1.literal("text")}),ZU6=M1.object({type:M1.literal("json_object")}),XU6=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()})}),QU6=M1.union([$U6,ZU6,XU6]),YU6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(eN6),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(aN6).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:QU6.optional(),user:M1.string().optional()});Bd$=class Bd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Od$=new H1;Od$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(TF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(TF("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(TF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=YU6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(TF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=GU6(G.model);if(!J)return $.json(TF("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)=>Gw(j.providerId));if(!E)return $.json(TF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(TF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=WU6(G.messages),U=G.tools?KU6(G.tools):void 0,B=FU6(G.response_format),O=HU6(),L=Math.floor(Date.now()/1000);if(G.stream)return mN($,async(w)=>{let E=Nd$(H,N,U,G,B,$.req.raw.signal);try{let j=jO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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>=rN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ud$(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 w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Nd$(H,N,U,G,B,$.req.raw.signal),E=await wO(w),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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ud$(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(TF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(TF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(TF(Y.message,"server_error"),500)}});Dd$=Od$});function NU6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function wd$(){let $=new H1;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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!rG(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 F of J){if(!F.slug||vZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Xe1(N)!==G)continue;if(!NU6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Ed$=D(()=>{U8();ZO()});var zd$;var jd$=D(()=>{zd$={name:"decocms",version:"4.297.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function OU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??BU6}}var Pd$,BU6="https://ph.studio.decocms.com",Ad$;var Td$=D(()=>{U8();h50();xC();$9();R$();K91();jd$();Pd$=new H1;Pd$.get("/",($)=>{let Z={version:zd$.version,theme:qi1(),...RH().logo&&{logo:RH().logo},...HN()&&{internalUrl:Z_1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Iy$(),posthog:OU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ad$=Pd$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function M71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Id$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Rd$($,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 qd$($){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()?Rd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Rd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Ov,DU6,LU6,wU6,EU6,Md$;var kd$=D(()=>{Ov=l0.enum(["good","bad","neutral"]),DU6=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:Ov.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 $})),LU6=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(DU6)),wU6={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()},EU6=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:Ov.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:Ov.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Ov.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:Ov.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(LU6).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:Ov.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:Ov.optional()})).min(1)})]),Md$=l0.object({...wU6,template:EU6})});function ET0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Md$.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 k71=D(()=>{kd$()});import{join as Vd$}from"path";async function zU6($){try{let Z=await fetch(`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(jU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=ET0(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()||M71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function LG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function PU6($,Z){let X=ou($),Q=Z?.brand?.trim()||M71(X),Y=Id$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=qd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${LG(W)}</title>`,`<meta name="description" content="${LG(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="${LG(W)}" />`,`<meta property="og:description" content="${LG(K)}" />`,`<meta property="og:url" content="${LG(J)}" />`,`<meta property="og:image" content="${LG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${LG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${LG(W)}" />`,`<meta name="twitter:description" content="${LG(K)}" />`,`<meta name="twitter:image" content="${LG(F)}" />`,`<meta name="twitter:image:alt" content="${LG(H)}" />`,`<link rel="canonical" href="${LG(J)}" />`,`<link rel="icon" href="${LG(Y)}" sizes="any" />`].join(`
|
|
2923
|
+
`,j=await Z.createBlob(E);await _l$(Z.owner,Z.repo,j,E);let z=w[0]??`${HT0(Q)}/${O71(O)}.json`;F.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);H.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let O of $.del)for(let L of z71(K,O))F.push({path:L,mode:"100644",type:"blob",sha:null}),H.delete(L);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Ks(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),B=await Z.createCommit({message:hN6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof u4&&O.status===422)||Y>=xN6-1)throw O;await L$(aZ(2000,200,Y,2,0.5))}}}function hN6($){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 $i0(Q,$.deps.coAuthor)}var xN6=3,I71;var ol$=D(()=>{gO0();QT0();W4();cD();NT0();I71=new Map});import{createHmac as rl$,randomBytes as uN6,timingSafeEqual as cN6}from"crypto";function al$(){if(wT0)return wT0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return wT0=$?Buffer.from($):uN6(32),wT0}function q71($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+lN6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=rl$("sha256",al$()).update(Q).digest("base64url");return`${Q}.${Y}`}function sl$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(rl$("sha256",al$()).update(Q).digest("base64url"));if(Y.length!==G.length||!cN6(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 lN6=21600000,wT0=null;var el$=D(()=>{R$()});import{z as tu}from"zod";function mN6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&dN6.test($)}function Yd$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function Os($){let Z=$.get("decofileScope");return ZT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function Ds($,Z){if(Z instanceof u4){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 Gd$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Qd$),$.use("/:virtualMcpId/:branch/*",Qd$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await vl$(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=q71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(Yd$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await Os(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return Ds(Z,Y)}}),$.patch("/:virtualMcpId/:branch",pN6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=nN6.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{XT0(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 Os(Z),W=await tl$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:lu(Q)},G),K=q71({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:Yd$(Z)})}catch(J){return Ds(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(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 u4&&W.status===409))throw W;await OT0(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 u4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof u4&&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 Ds(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await Os(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof u4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return Ds(Z,Q)}}),$}var dN6,$d$=500,Zd$=1048576,Xd$=1024,iN6=8388608,pN6,nN6,Qd$;var Jd$=D(()=>{xn0();QT0();U8();EF();Q71();$T0();T71();B71();ol$();el$();A71();cD();NT0();dN6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;pN6=p5({maxSize:iN6,onError:($)=>$.json({error:"Payload too large"},413)}),nN6=tu.object({set:tu.record(tu.string(),tu.unknown()).optional(),delete:tu.array(tu.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=$d$,{message:`Patch cannot touch more than ${$d$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=Zd$),{message:`Each block must be at most ${Zd$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Xd$),{message:`Each block key must be at most ${Xd$} characters`}),Qd$=eA0(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(!mN6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!sl$(B,{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(!dO0(K))return $.json({error:"Project has no preview server configured"},404);let H=W.connections?.map((B)=>B.connection_id)??[],N=Us(K,H);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 Wd$=($)=>{let Z=new H1;if(Z.use("*",Zv),Z.route("/",LA0()),Z.route("/",Tg$()),Z.route("/",Vc$()),Z.route("/",qc$()),Z.route("/",rA0()),Z.route("/tools",xc$()),Z.route("/",vc$()),Z.route("/",Gc$({kvStorage:$.kvStorage})),Z.route("/",Qc$()),Z.route("/fs",jc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",pl$()),Z.route("/decofile",Gd$()),Z.route("/",Tc$()),Z.route("/deco-sites",EA0()),Z.route("/sso",HA0()),Z.route("/",aA0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Dg$()),$.mountDevAssets)Z.route("/dev-assets",jA0({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("/",bb$()),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",Pc$()),Z.route("/mcp",zw0()),Z.route("/mcp/self",oA0()),Z.route("/mcp",Tw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Kd$=D(()=>{U8();I91();Lg$();V91();zA0();fa();T91();Yc$();Jc$();zc$();ct();w91();Rw0();rZ1();Ac$();Rc$();Mc$();Sc$();fc$();sZ1();yc$();eZ1();Pw0();nl$();Jd$()});function tN6($){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 oN6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Fd$=()=>{let $=new H1;return $.use("*",oN6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await nZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:tN6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var Hd$=D(()=>{U8();R$();OP0()});import{z as M1}from"zod";function TF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function GU6($){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 JU6($,Z,X){try{return JSON.parse($)}catch{throw new Bd$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function WU6($){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:JU6(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 KU6($){let Z=$.map((X)=>{let Q=X.function.parameters?iY(X.function.parameters):iY({type:"object",properties:{}});return[X.function.name,I$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function FU6($){if(!$)return;return{openai:{response_format:$}}}function HU6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Nd$($,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 Ud$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var rN6=256,aN6,sN6,eN6,$U6,ZU6,XU6,QU6,YU6,Bd$,Od$,Dd$;var Ld$=D(()=>{D4();U8();cu();TN();aN6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),sN6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),eN6=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(sN6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$U6=M1.object({type:M1.literal("text")}),ZU6=M1.object({type:M1.literal("json_object")}),XU6=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()})}),QU6=M1.union([$U6,ZU6,XU6]),YU6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(eN6),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(aN6).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:QU6.optional(),user:M1.string().optional()});Bd$=class Bd$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Od$=new H1;Od$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(TF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(TF("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(TF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=YU6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(TF(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=GU6(G.model);if(!J)return $.json(TF("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)=>Gw(j.providerId));if(!E)return $.json(TF("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 F;try{F=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(TF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=WU6(G.messages),U=G.tools?KU6(G.tools):void 0,B=FU6(G.response_format),O=HU6(),L=Math.floor(Date.now()/1000);if(G.stream)return mN($,async(w)=>{let E=Nd$(H,N,U,G,B,$.req.raw.signal);try{let j=jO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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>=rN6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,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 w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:Ud$(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 w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Nd$(H,N,U,G,B,$.req.raw.signal),E=await wO(w),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:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:Ud$(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(TF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(TF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(TF(Y.message,"server_error"),500)}});Dd$=Od$});function NU6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function wd$(){let $=new H1;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=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!rG(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 F of J){if(!F.slug||vZ(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(Xe1(N)!==G)continue;if(!NU6(N.metadata))continue;W.push({orgSlug:F.slug,orgName:F.name??F.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var Ed$=D(()=>{U8();ZO()});var zd$;var jd$=D(()=>{zd$={name:"decocms",version:"4.297.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","@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 OU6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??BU6}}var Pd$,BU6="https://ph.studio.decocms.com",Ad$;var Td$=D(()=>{U8();h50();xC();$9();R$();K91();jd$();Pd$=new H1;Pd$.get("/",($)=>{let Z={version:zd$.version,theme:qi1(),...RH().logo&&{logo:RH().logo},...HN()&&{internalUrl:Z_1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Iy$(),posthog:OU6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:Ts()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});Ad$=Pd$});function ou($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function M71($){return(ou($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function Id$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(ou($))}&sz=${Z}`}function Rd$($,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 qd$($){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()?Rd$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):Rd$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var Ov,DU6,LU6,wU6,EU6,Md$;var kd$=D(()=>{Ov=l0.enum(["good","bad","neutral"]),DU6=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:Ov.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 $})),LU6=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(DU6)),wU6={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()},EU6=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:Ov.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:Ov.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:Ov.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:Ov.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(LU6).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:Ov.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:Ov.optional()})).min(1)})]),Md$=l0.object({...wU6,template:EU6})});function ET0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Md$.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 k71=D(()=>{kd$()});import{join as Vd$}from"path";async function zU6($){try{let Z=await fetch(`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(jU6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=ET0(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()||M71($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function LG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function PU6($,Z){let X=ou($),Q=Z?.brand?.trim()||M71(X),Y=Id$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=qd$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${LG(W)}</title>`,`<meta name="description" content="${LG(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="${LG(W)}" />`,`<meta property="og:description" content="${LG(K)}" />`,`<meta property="og:url" content="${LG(J)}" />`,`<meta property="og:image" content="${LG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${LG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${LG(W)}" />`,`<meta name="twitter:description" content="${LG(K)}" />`,`<meta name="twitter:image" content="${LG(F)}" />`,`<meta name="twitter:image:alt" content="${LG(H)}" />`,`<link rel="canonical" href="${LG(J)}" />`,`<link rel="icon" href="${LG(Y)}" sizes="any" />`].join(`
|
|
2924
2924
|
`)}function AU6($,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}
|
|
2925
2925
|
</head>`)}function Sd$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=ou(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Vd$($,"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(`${KK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(TU6)}),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=$?Vd$($,"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 zU6(ou(Q)),K=PU6(Q,W);return X.html(AU6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var jU6=2500,TU6=1e4;var Cd$=D(()=>{U8();k71();FE();R$()});function Ls($,Z){return fetch(`${KK({})}${$}`,Z)}async function RU6($,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 Ls(`/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}=ET0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var IU6,pN,_d$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},vd$;var fd$=D(()=>{U8();cY();FE();k71();IU6=new Set(["complete","errored","terminated","unknown"]),pN=new H1;pN.use("*",async($,Z)=>{let X=await Q8.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});pN.use("/link-token/*",_d$);pN.use("/suggest",_d$);pN.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 RU6(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)}});pN.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 Ls("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${KE({})}`},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)}});pN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ls(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${KE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:IU6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});pN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ls(`/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)}});pN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ls(`/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:[]})}});vd$=pN});import{createHmac as qU6,timingSafeEqual as MU6}from"crypto";function xd$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let F of Z.split(",")){let H=F.indexOf("=");if(H<=0)continue;let N=F.slice(0,H).trim(),U=F.slice(H+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)>kU6)return!1;let W=qU6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((F)=>{let H=Buffer.from(F,"hex");return K.length===H.length&&MU6(K,H)})}function yd$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=gJ(Z),Q=gJ(gJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:RF(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 gd$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function RF($){return typeof $==="string"?$:void 0}function gJ($){return typeof $==="object"&&$!==null?$:void 0}function jT0($){return typeof $==="number"?new Date($*1000):null}function C71($){return RF($)??RF(gJ($)?.id)}function VU6($){return C71($.subscription)??RF(gJ(gJ($.parent)?.subscription_details)?.subscription)}function SU6($){let Z=jT0($.current_period_end);if(Z)return Z;let X=gJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=gJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function V71($,Z){let X=jT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function S71($,Z){let X=jT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function CU6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=RF(gJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(RF(gJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(RF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=RF(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(gJ(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:gJ(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(RF(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=C71(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(V71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:C71(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:S71(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=RF(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&&V71(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":gd$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:SU6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:S71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=VU6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(V71(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:jT0(X.period_end),lastStripeEventAt:S71(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function _U6($,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:gd$(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 bd$($,Z){let X=_U6($,Z);if(!X)return;yY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:fn1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function hd$($){let Z=new YK(r8().db),X=await CU6(Z,$);if(!(X.handled&&X.topUp))bd$($,X);if(X.handled&&X.topUp)await Yj$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),bd$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await ee1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof lY&&(Q.status===400||Q.status===404)))throw Q}return X}var kU6=300;var ud$=D(()=>{mG();C4();E50();EE();c01()});var vU6=1048576,_71;var cd$=D(()=>{U8();EF();R$();ud$();_71=new H1;_71.post("/webhook",p5({maxSize:vU6,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(!xd$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=yd$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await hd$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as fU6}from"crypto";function xU6($,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 fU6(Buffer.from(Y),Buffer.from(Q))}var bU6=5242880,v71;var ld$=D(()=>{U8();EF();m3();v71=new H1;v71.post("/webhook",p5({maxSize:bU6,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(!xU6(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 fn0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function dd$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var md$,yU6,gU6,id$;var pd$=D(()=>{U8();A3();Lg();Zy();md$=new H1,yU6=["range","if-none-match","if-modified-since"],gU6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];md$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Au($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await Ut(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&tG()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return dd$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of yU6){let F=$.req.header(K);if(F)G.set(K,F)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(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 Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of gU6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),dd$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});id$=md$});var ws=_((Dv)=>{var hU6=Dv&&Dv.__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]}),uU6=Dv&&Dv.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hU6(Z,$,X)};Object.defineProperty(Dv,"__esModule",{value:!0});uU6(AY(),Dv)});var od$=_((nd$)=>{Object.defineProperty(nd$,"__esModule",{value:!0});nd$.version=void 0;nd$.version="3.4.0"});var sd$=_((IF)=>{var cU6=IF&&IF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(IF,"__esModule",{value:!0});IF.NodeTransport=IF.VERSION=void 0;IF.nodeResolveHost=nU6;var s6=ws(),lU6=j0("net"),f71=j0("tls"),dU6=j0("path"),rd$=j0("fs"),mU6=cU6(j0("dns")),iU6=od$();IF.VERSION=iU6.version;var pU6="nats.js";class ad${socket;version;lang;yields=[];signal=(0,s6.deferred)();closedNotification=(0,s6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=pU6,this.version=IF.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,s6.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 s6.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 s6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new s6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,s6.deferred)(),X,Q=(0,lU6.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,s6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=s6.DataBuffer.concat(...this.yields),Y=(0,s6.extractProtocolMessage)(Q);if(Y!=="")try{let G=s6.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,s6.deferred)();try{if($=(0,dU6.resolve)($),!(0,rd$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,rd$.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,s6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new s6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,s6.deferred)();try{let Y=(0,f71.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 s6.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,s6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new s6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,s6.deferred)();try{let Q=(0,f71.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 s6.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,s6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,s6.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 f71.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,s6.render)($)}`);let Z=(0,s6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,s6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,s6.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}}IF.NodeTransport=ad$;function nU6($){let Z=(0,s6.deferred)();return mU6.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 Qm$=_((Xm$)=>{Object.defineProperty(Xm$,"__esModule",{value:!0});Xm$.connect=tU6;var ed$=sd$(),$m$=ws(),Zm$=ws();function tU6($={}){if((0,Zm$.hasWsProtocol)($))return Promise.reject(Zm$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,$m$.setTransportFactory)({factory:()=>{return new ed$.NodeTransport},dnsResolveFn:ed$.nodeResolveHost}),$m$.NatsConnectionImpl.connect($)}});var Ym$=_((nN)=>{var rU6=nN&&nN.__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]}),aU6=nN&&nN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))rU6(Z,$,X)};Object.defineProperty(nN,"__esModule",{value:!0});nN.connect=void 0;var sU6=Qm$();Object.defineProperty(nN,"connect",{enumerable:!0,get:function(){return sU6.connect}});aU6(ws(),nN)});function Km$($){let Z=$?.connectFn??XB6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function F(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function H(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:ZB6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{O++;let L=aZ($B6,eU6,O-1,2,0.5);await L$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?Gm$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Wm$.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 XB6($){return Jm$.connect($)}var Gm$,Jm$,Wm$,eU6=100,$B6=3000,ZB6=3000;var Fm$=D(()=>{W4();Gm$=V(zc(),1),Jm$=V(Ym$(),1),Wm$=V(UL(),1)});function b71($,Z){return`${$}.${Z}`}class x71{cache;constructor($){this.cache=Qu({ttlMs:$?.ttlMs??QB6,maxSize:$?.maxSize??YB6})}async get($,Z){return this.cache.get(b71($,Z))??null}async set($,Z,X){this.cache.set(b71($,Z),X)}async invalidate($,Z){this.cache.delete(b71($,Z))}teardown(){this.cache.clear()}}var QB6=600000,YB6=5000;var Hm$=()=>{};function zT0($,Z){return`${$}:${Z}`}function y71($){let Z=Qu({ttlMs:$?.ttlMs??GB6,maxSize:$?.maxSize??JB6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,F){let H=X?.();if(!H)return;try{H.publish(Nm$,Y.encode(JSON.stringify({organizationId:K,keyId:F,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,F){return Z.get(zT0(K,F))},set(K,F,H){Z.set(zT0(K,F),H)},invalidate(K,F){Z.delete(zT0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Nm$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(zT0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Nm$="studio.ai-provider-keys.invalidate",GB6=30000,JB6=5000;var Um$=()=>{};class g71{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)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}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var Bm$=($)=>{let Z;return()=>Z??=$()},h71,u71;var Om$=D(()=>{I6();h71=Bm$(()=>w$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),u71=Bm$(()=>w$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function BB6($=wm$){return{name:iK,subjects:[`${Xa0}.>`],storage:EW.StorageType.File,max_age:FB6,max_bytes:NB6,max_msgs_per_subject:UB6,discard:EW.DiscardPolicy.Old,retention:EW.RetentionPolicy.Limits,duplicate_window:HB6,num_replicas:$}}class Em${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 Dm$($){let Z=Lm$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function wB6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,KB6().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 EB6($,Z){return $.info?.cluster?Z:1}function jB6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class c71{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=async(Q,Y)=>{let G=BB6(Y);try{await Q.streams.info(iK),await Q.streams.update(iK,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update(iK,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete(iK),await Q.streams.add(G);else throw J}},X=await g6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await EW.jetstreamManager($),Y=EB6($,wm$);try{await Z(Q,Y)}catch(G){if(Y<=1||!jB6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:Mg});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=wB6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=nB$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=Ya0(F,{runId:Z}),U=performance.now()-H;h71().record(U),u71().add(1,{"org.id":Q??"unknown"}),LB6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Dm$(B.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:B,value:O}=await F.read();if(B)break;if(K(O),N++,++H>=64)H=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(F.releaseLock(),W(),DB6)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 publishSerialized($,Z){try{return await g6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Dm$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=Ya0(Z,{runId:$,dedup:X});h71().record(performance.now()-Y),u71().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=pB$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}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"?EW.DeliverPolicy.New:EW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=QD($),W;try{W=await g6(async()=>{return(await Q.consumers.get(iK,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:Mg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let H=$w0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(rL0()).pipeThrough(aL0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await H.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(iK,{filter:QD($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var EW,Lm$,WB6=($)=>{let Z;return()=>Z??=$()},KB6,FB6=86400000000000,HB6=120000000000,NB6=4294967296,wm$,UB6=500000,OB6,DB6,LB6;var jm$=D(()=>{W4();Ga0();Zw0();sL0();I6();Om$();EW=V(UL(),1),Lm$=V(zc(),1),KB6=WB6(()=>w$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),wm$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);OB6=process.env.STREAM_ENCODE_TRACE==="1",DB6=process.env.DECOPILOT_STREAM_TRACE==="1";LB6=OB6?new Em$:null});function PT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,cW(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 zm$=D(()=>{_8()});class l71{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 Pm$($,Z,X){let Q=Z.organizationId;if(!sQ(Z))return!1;if(!_C(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=wK(Y?.flags),J=await $.storage.taskBoard.update(Z.id,Q,{status:G},Z.updatedBy);return await z6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,J),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var Am$=D(()=>{C6();WX();Bg();xK();E5()});function qB6($){return $ instanceof tX}function MB6($,Z){return Z-$>=RB6}class d71{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??zB6;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??AB6,X=this.options.itemIntervalMs??PB6,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()-Tt0),Ao0);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()-IB6));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 jo0(this.taskBoard,Y,Q),await zo0(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!==Z8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await KN(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),qB6(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()+TB6)).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(()=>{}),x$(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(!MB6(xH(X,Z.reviewCycleStartedAt),Date.now()))return;await hK($,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(!sQ(Q))return!1;let Y=Q.assigneeId===Z8,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 Dg(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 Pm$(J,Q,W))return!0;if(await bO$(J,Q))return!0;if(!Y)return!1;if(!co0(W))return!1;return await UL0(J,Q,{previewMatchesHead:lo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var zB6=60000,PB6=300000,AB6=50,TB6=60000,RB6=900000,IB6=120000;var Tm$=D(()=>{C6();_o0();JN();vt();xK();Am$();E5();sG();To0();ZG();Kt()});import{readdir as kB6,rm as AT0}from"fs/promises";import{join as TT0}from"path";async function RT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-VB6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await Lv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await Rm$($,Y,Z);else if(!Y.startsWith(".")){let G=TT0($,Y),J=await Lv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await Rm$(G,K,Z)}if((await Lv(G)).length===0)await AT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function Rm$($,Z,X){let Q=0,Y=TT0($,Z),G=await Lv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=TT0(Y,W),F=await Lv(K);for(let N of F){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 B=TT0(K,N);await AT0(B,{recursive:!0,force:!0}),Q++}}if((await Lv(K)).length===0)await AT0(K,{recursive:!0,force:!0})}if((await Lv(Y)).length===0)await AT0(Y,{recursive:!0,force:!0});return Q}async function Lv($){try{return(await kB6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var VB6=30;var m71=()=>{};import{DBOS as i71,SchedulerMode as SB6}from"@dbos-inc/dbos-sdk";async function _B6(){let $=[uJ(),wv(),VF()],Z=0;for(let X of $)try{Z+=await RT0(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 vB6($,Z){await i71.runStep(()=>_B6(),{name:"monitoringRetention"})}function qm$(){if(Im$)return;Im$=!0;let $=i71.registerWorkflow(vB6,{name:"monitoringRetentionWorkflow"});i71.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:CB6,mode:SB6.ExactlyOncePerIntervalWhenActive})}var CB6="23 4 * * *",Im$=!1;var Mm$=D(()=>{EY();m71()});function km$($){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 UJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await Lt($.db,Z,Q.role);return Y.boundAuth=i51({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new pw(X,void 0,Y.boundAuth,Q.role,"self"),nO(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Vm$=D(()=>{nw();tO()});function fB6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function bB6(){return{services:fB6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function yB6(){for(let $ of xB6)$()}function Sm$($){let Z=[...p71.logs,$];p71={...p71,logs:Z.length>500?Z.slice(-500):Z},yB6()}function n71(){return gB6}var p71,xB6,gB6=!1;var t71=D(()=>{p71=bB6(),xB6=new Set});import{EventEmitter as hB6}from"events";var o71;var Cm$=D(()=>{t71();o71=new hB6;o71.on("request",($)=>{Sm$($)})});function _m$(){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 B=ru(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>ru(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${J5.tool}${B}${J5.dim}(${w})${J5.reset}`}else if(U.method)G=`${J5.dim}${ru(U.method)}${J5.reset}`}}catch{}}let W=ru(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${J5.mcp}${ru(H.slice(0,12))}\u2026${J5.reset}`}else if(Y==="/mcp")W=`${J5.mcp}/mcp${J5.reset}`;else if(Y==="/mcp/registry")W=`${J5.mcp}/mcp/registry${J5.reset}`;let K=cB6(Q),F=J?"\u25C0":"\u2190";if(!n71())console.log(`${J5.dim}${F}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=uB6(N),B=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!n71())console.log(`${J5.dim}${O}${J5.reset} ${K}${Q}${J5.reset} ${W}${G?` ${G}`:""} ${U}${N}${J5.reset} ${J5.duration}${B}${J5.reset}`);o71.emit("request",{method:Q,path:ru(Y),status:N,duration:H,timestamp:new Date})}}}var J5,uB6=($)=>{if($>=500)return J5.serverError;if($>=400)return J5.clientError;if($>=300)return J5.redirect;return J5.ok},cB6=($)=>{return J5[$]||J5.reset},ru=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var vm$=D(()=>{t71();Cm$();J5={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 ym$}from"crypto";import{mkdir as lB6,readdir as dB6,rm as fm$,stat as gm$}from"fs/promises";import{join as a71,relative as mB6}from"path";import{z as P$}from"zod";function um$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return a71(iB6,Z)}function cm$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function r71($,Z){let X=um$($),Q=cm$(Z);return a71(X,Q)}function pB6($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ym$("sha256",Y).update(G).digest("hex")}function xm$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=pB6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${cm$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function lm$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ym$("md5","etag").update(Q).digest("hex")}"`}async function dm$($,Z,X,Q,Y){try{let G=await dB6($,{withFileTypes:!0});for(let J of G){let W=a71($,J.name),F=mB6(Z,W).replace(/\\/g,"/");if(X&&!F.startsWith(X))continue;if(J.isDirectory())if(Q){let H=F+"/";if(!X||H.startsWith(X)){if(!(X?F.slice(X.length):F).includes("/"))Y.commonPrefixes.add(H)}}else await dm$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let H=F.slice(X.length);if(H.includes(Q)){let N=H.indexOf(Q),U=X+H.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let H=await gm$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:lm$(W,H.mtime,H.size)})}catch{}}}}catch{}}function mm$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:P$.object({prefix:P$.string().optional(),maxKeys:P$.number().optional().default(1000),continuationToken:P$.string().optional(),delimiter:P$.string().optional()}),outputSchema:P$.object({objects:P$.array(P$.object({key:P$.string(),size:P$.number(),lastModified:P$.string(),etag:P$.string()})),nextContinuationToken:P$.string().optional(),isTruncated:P$.boolean(),commonPrefixes:P$.array(P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=um$(Q);await lB6(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await dm$(H,H,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((w)=>w.key>F),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({contentType:P$.string().optional(),contentLength:P$.number(),lastModified:P$.string(),etag:P$.string(),metadata:P$.record(P$.string(),P$.string()).optional()}),handler:async(Y)=>{let G=Y,J=r71(Q,G.key),W=await gm$(J);return{contentType:C91(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:lm$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:P$.object({key:P$.string(),expiresIn:P$.number().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??bm$;return{url:xm$(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:P$.object({key:P$.string(),expiresIn:P$.number().optional(),contentType:P$.string().optional()}),outputSchema:P$.object({url:P$.string(),expiresIn:P$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??bm$;return{url:xm$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:P$.object({key:P$.string()}),outputSchema:P$.object({success:P$.boolean(),key:P$.string()}),handler:async(Y)=>{let G=Y,J=r71(Q,G.key);try{return await fm$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:P$.object({keys:P$.array(P$.string()).max(1000)}),outputSchema:P$.object({deleted:P$.array(P$.string()),errors:P$.array(P$.object({key:P$.string(),message:P$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=r71(Q,K);try{await fm$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function s71($,Z,X){let Q=mm$(Z,X),Y=new tW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:N5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:P$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:P$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(F)=>{try{let H=await J.handler(F);return{content:[{type:"text",text:JSON.stringify(H)}],structuredContent:H}}catch(H){return{content:[{type:"text",text:`Error: ${H.message}`}],isError:!0}}})}let G=new GQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),AJ(Y,G,$,"mcp:dev-assets")}async function im$($,Z,X,Q){let G=mm$(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 iB6="./data/assets",bm$=3600,hm$,pm$;var nm$=D(()=>{R$();vg();U8();dd();$_();gX();zA0();hm$=new H1;hm$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return s71($.req.raw,Z,Q)});pm$=hm$});var tm$={};J4(tm$,{mountDevRoutes:()=>nB6});function nB6($,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 s71(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(),F=await im$(W,K,Y,J);if(F.isError)return Q.json(F.content,500);return Q.json(F.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",pm$);let X=new H1;X.use("*",LW({mountPath:"/api/dev-assets"})),X.route("/",jA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var om$=D(()=>{U8();R91();zA0();nm$()});import{sql as tB6}from"kysely";import{randomUUID as rm$}from"crypto";import{z as oB6}from"zod";async function aB6($){let Z=new Date().toISOString(),X=rm$(),Q=C8.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:rm$(),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 tB6`SELECT
|
|
2926
2926
|
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-CUsv6spx.js";import{I as A}from"./input-CoaAkMbs.js";import{L as F}from"./label-CFCi5sWw.js";import{S as R,a as V,b as z,c as O,d as D}from"./select-Dxa4ghYp.js";import{T as G}from"./textarea-BucHe_0W.js";import{G as J,V as M,K as X,X as $,a5 as q}from"./index-Dv2bxB4K.js";import{s as P}from"./primitives-CCugXZt6.js";import{u as H}from"./use-autosave-B_qlhr_e.js";import"./Check-DhCV1lym.js";import"./ChevronDown-DJ77w-QF.js";import"./ChevronUp-D25-5WvN.js";import"./ArrowUp-DI9yV_Te.js";import"./chat-context-CfIA0tj5.js";import"./use-panel-navigate-BTBs_DfK.js";import"./dialog-DOAS9jm2.js";import"./Copy01-DO3RN7Ju.js";import"./Download01-D-a_A4ZU.js";import"./use-destination-route-0Ja9oRq4.js";import"./constants-dLUUoWH7.js";import"./session-runtime-C-KTDVeQ.js";import"./slugify-CEUa2lfQ.js";import"./hooks-fDzSjiHD.js";import"./use-mcp-client-CqksmDRH.js";import"./auth-B_Cgy3yY.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-Da7ZbkzY.js";import"./task-board-Cn9IqPOj.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-DgA24NSF.js";import"./use-ai-providers-R1h89W_o.js";import"./use-decopilot-events-Cy92xCJJ.js";import"./use-organization-settings-BCD1w8Wj.js";import"./automation-runs-CENlZHMg.js";import"./agent-icon-CKjVMN9p.js";import"./AlertCircle-CpYW_tbO.js";import"./UserSquare-CahIyJPC.js";import"./Tool01-C8fh-Io6.js";import"./ArrowLeft-BIeI5Ths.js";import"./Tool02-roW7uSIj.js";import"./XCircle-CnIoifnv.js";import"./TrendUp01-CM46c3vu.js";import"./ZapSquare-4OOR1PwO.js";import"./Users03-BLEw3RU0.js";import"./CheckCircle-DE79hZ6x.js";import"./ChevronRight-BEt77lZa.js";import"./ChevronSelectorVertical-Cn5vBsE-.js";import"./DotsVertical-DEkiCWy8.js";import"./Stars02-BzdGZ6yZ.js";import"./CreditCard01-BOb1tetV.js";import"./Settings02-Ddvw_YSG.js";import"./Eye-C5afRO8A.js";import"./FilterLines-DynDjwO8.js";import"./Share07-q5VLK848.js";import"./Globe01-BeDvq8im.js";import"./Globe04-C4hEtLor.js";import"./SwitchHorizontal01-BKd5IhHd.js";import"./HardDrive-CheW7xRn.js";import"./Key01-BC9447J1.js";import"./LinkExternal01-DG5XDoMk.js";import"./LockUnlocked01-BlhfTtek.js";import"./LogOut01-BSCd9S_n.js";import"./Monitor01-ygXwT_3r.js";import"./Sun-Bt8gvvFB.js";import"./Palette-CA1thTeY.js";import"./Play-CbKU1VYE.js";import"./Plus-Diyj_tcm.js";import"./SearchLg-CvqUdsC5.js";import"./SearchMd-CRXxkGHM.js";import"./Shield01-rWAB3gsN.js";import"./Stars01-D7H-7apF.js";import"./Trash01-DRFTo4JI.js";import"./Upload01-ccqEJbRu.js";import"./User01-DbfnPV7X.js";import"./Users01-DTezZnQ5.js";import"./XClose-Cclg1STt.js";import"./Zap-62BYm7QF.js";import"./useInfiniteQuery-ClQbS0Zt.js";import"./use-infinite-scroll-BoK3Y8Yl.js";import"./use-connection-row2jEEx.js";import"./table-C0CY3eMs.js";import"./empty-state-wB7cdsM4.js";import"./use-members-vHqlFJqL.js";import"./use-org-auth-client-DR1XE-qy.js";import"./use-automations-DjZJzmmB.js";import"./useSuspenseInfiniteQuery-Cn8lm8m4.js";import"./avatar-TZFKN0WP.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-lSHXd-wn.js";import"./monaco-editor-B6MnVwme.js";import"./spinner-DM70CbRu.js";import"./types-D9KLZPxz.js";import"./shell-layout-Dl45IpsK.js";import"./required-auth-layout-DHkYsbKE.js";import"./use-org-sso-CZjKqWal.js";import"./integration-icon-B1kjPg-O.js";import"./use-navigate-to-agent-BL6l-5ru.js";import"./chart-DfWmHRKh.js";import"./index-MmlkfQk7.js";import"./form-CYZ0mIR7.js";import"./file-type-icon-BRkWsjdq.js";import"./drawer-DVJTlxk3.js";import"./collection-search-DpIcqW3y.js";import"./tabs-IF5NV5EO.js";import"./toggle-group-BsEhxtQF.js";import"./super-agent-icon-B_rY1V5U.js";import"./self-tool-result-B4owPa77.js";import"./alert-dialog-Bc6M16_R.js";import"./extract-connection-data-CHEhDLj2.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-BzQAWrPr.js";import"./authenticate-and-persist-oauth-D1W_9Pdo.js";import"./mcp-oauth-CsG48Ozx.js";import"./track-Doo4GO9s.js";import"./popover-Dej1mwou.js";import"./toolbar-DOT0aNXQ.js";import"./github-repo-picker-B1d5F1h8.js";import"./use-mcp-tools-_g366M0J.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CQcFeKpl.js";import"./use-registry-connections-DhAivdGc.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-Cg_mD2UP.js";import"./collection-tabs-zttZb8LR.js";import"./badge-jcflJQxC.js";import"./select-model-CbRBms5M.js";import"./checkbox-E4gWYNoJ.js";import"./ai-providers-logos-DD3qZ33J.js";import"./cards-CErW68cb.js";import"./dropdown-menu-CoeYZJgs.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-BBK2hoYJ.js";import"./use-file-configs-MKRmx-NC.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-Dc_7XSpk.js";import"./scroll-area-B0rTUaVM.js";import"./search-input-W1_UsQDD.js";import"./use-mcp-auth-status-DBNpg-CQ.js";import"./switch-uCYwLFGz.js";import"./use-secrets-CaqXJ6Eu.js";import"./AreaChart-GiVFThsK.js";import"./config-Btw0Fv6s.js";import"./breadcrumb-CzfLZ0ju.js";import"./command-L5Oti6rc.js";import"./index-DhH_Lh3O.js";import"./get-initials-D-f_fDFw.js";import"./use-tags-DQZbD2QT.js";import"./automation-list-row-CndwcN4f.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-BbFUPRgL.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 Jr(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=J(h);let g;t[4]!==f||t[5]!==a?(g=M(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:$(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,N=U[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,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(X,{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 T=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){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(q,{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(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:P(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(O,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(G,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:P(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=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,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{Jr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-GPSGrvkz.js","assets/index-CUsv6spx.js","assets/index-DJSuP9VA.css","assets/Tool02-roW7uSIj.js","assets/CheckCircle-DE79hZ6x.js","assets/Settings02-Ddvw_YSG.js","assets/use-mcp-client-CqksmDRH.js","assets/constants-dLUUoWH7.js","assets/auth-B_Cgy3yY.js","assets/useInfiniteQuery-ClQbS0Zt.js","assets/use-infinite-scroll-BoK3Y8Yl.js","assets/badge-jcflJQxC.js","assets/input-CoaAkMbs.js","assets/dropdown-menu-CoeYZJgs.js","assets/Check-DhCV1lym.js","assets/ChevronRight-BEt77lZa.js","assets/DotsVertical-DEkiCWy8.js","assets/table-C0CY3eMs.js","assets/toggle-group-BsEhxtQF.js","assets/use-view-mode-CE5TBCSx.js","assets/FilterLines-DynDjwO8.js","assets/Globe01-BeDvq8im.js","assets/SearchMd-CRXxkGHM.js","assets/dialog-DOAS9jm2.js","assets/AlertCircle-CpYW_tbO.js","assets/Download01-D-a_A4ZU.js","assets/Upload01-ccqEJbRu.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-Bc6M16_R.js","assets/Trash01-DRFTo4JI.js","assets/label-CFCi5sWw.js","assets/select-Dxa4ghYp.js","assets/ChevronDown-DJ77w-QF.js","assets/ChevronUp-D25-5WvN.js","assets/switch-uCYwLFGz.js","assets/textarea-BucHe_0W.js","assets/ArrowLeft-BIeI5Ths.js","assets/XCircle-CnIoifnv.js","assets/checkbox-E4gWYNoJ.js","assets/Eye-C5afRO8A.js","assets/LinkExternal01-DG5XDoMk.js","assets/use-copy-lSHXd-wn.js","assets/Copy01-DO3RN7Ju.js","assets/Key01-BC9447J1.js","assets/Plus-Diyj_tcm.js","assets/mcp-oauth-CsG48Ozx.js","assets/Play-CbKU1VYE.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,bp as o}from"./index-CUsv6spx.js";import{R as n}from"./require-capability-CVDpdPyO.js";import"./access-gate-ef2GvJFt.js";import"./capability-load-error-4MkPwOcj.js";const c=s.lazy(()=>o(()=>import("./registry-layout-GPSGrvkz.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])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{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(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-GPSGrvkz.js","assets/index-CUsv6spx.js","assets/index-DJSuP9VA.css","assets/Tool02-roW7uSIj.js","assets/CheckCircle-DE79hZ6x.js","assets/Settings02-Ddvw_YSG.js","assets/use-mcp-client-CqksmDRH.js","assets/constants-dLUUoWH7.js","assets/auth-B_Cgy3yY.js","assets/useInfiniteQuery-ClQbS0Zt.js","assets/use-infinite-scroll-BoK3Y8Yl.js","assets/badge-jcflJQxC.js","assets/input-CoaAkMbs.js","assets/dropdown-menu-CoeYZJgs.js","assets/Check-DhCV1lym.js","assets/ChevronRight-BEt77lZa.js","assets/DotsVertical-DEkiCWy8.js","assets/table-C0CY3eMs.js","assets/toggle-group-BsEhxtQF.js","assets/use-view-mode-CE5TBCSx.js","assets/FilterLines-DynDjwO8.js","assets/Globe01-BeDvq8im.js","assets/SearchMd-CRXxkGHM.js","assets/dialog-DOAS9jm2.js","assets/AlertCircle-CpYW_tbO.js","assets/Download01-D-a_A4ZU.js","assets/Upload01-ccqEJbRu.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-Bc6M16_R.js","assets/Trash01-DRFTo4JI.js","assets/label-CFCi5sWw.js","assets/select-Dxa4ghYp.js","assets/ChevronDown-DJ77w-QF.js","assets/ChevronUp-D25-5WvN.js","assets/switch-uCYwLFGz.js","assets/textarea-BucHe_0W.js","assets/ArrowLeft-BIeI5Ths.js","assets/XCircle-CnIoifnv.js","assets/checkbox-E4gWYNoJ.js","assets/Eye-C5afRO8A.js","assets/LinkExternal01-DG5XDoMk.js","assets/use-copy-lSHXd-wn.js","assets/Copy01-DO3RN7Ju.js","assets/Key01-BC9447J1.js","assets/Plus-Diyj_tcm.js","assets/mcp-oauth-CsG48Ozx.js","assets/Play-CbKU1VYE.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as n,d as c,f as m,j as t,k as f,r as l,bp as p}from"./index-CUsv6spx.js";import{R as u}from"./require-capability-CVDpdPyO.js";import"./access-gate-ef2GvJFt.js";import"./capability-load-error-4MkPwOcj.js";const g=l.lazy(()=>p(()=>import("./registry-layout-GPSGrvkz.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])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(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{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as i}from"./use-infinite-scroll-BoK3Y8Yl.js";import{fi as u}from"./index-CUsv6spx.js";function t(e,r){return u(e,i,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-BoK3Y8Yl.js";import{fi as u,b$ as n}from"./index-CUsv6spx.js";function i(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{i as u};
|