decocms 4.245.4 → 4.246.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DL1CP1hy.js → AlertCircle-CVPo0qEm.js} +1 -1
- package/dist/client/assets/{AreaChart-CYhcBp2n.js → AreaChart-ChVNju8m.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DK8zcE-P.js → ArrowLeft-CUw2oDuz.js} +1 -1
- package/dist/client/assets/{ArrowUp-O7-j4Kzy.js → ArrowUp-Tf9X-9eZ.js} +1 -1
- package/dist/client/assets/{ArrowUpRight-BVdzIoIc.js → ArrowUpRight-CWFkobB4.js} +1 -1
- package/dist/client/assets/{Check-DExpXoeZ.js → Check-D_7f8Wel.js} +1 -1
- package/dist/client/assets/{CheckCircle-JEKJY3AR.js → CheckCircle-CEGfcpsW.js} +1 -1
- package/dist/client/assets/{ChevronDown-Dr72eRtC.js → ChevronDown-Bg-1Juk5.js} +1 -1
- package/dist/client/assets/{ChevronRight-B9ZA_kXM.js → ChevronRight-CLyRbaUU.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-CPSw060y.js → ChevronSelectorVertical-Dz9WarkK.js} +1 -1
- package/dist/client/assets/{ChevronUp-CJuVoP_H.js → ChevronUp-BqRX9ZFE.js} +1 -1
- package/dist/client/assets/{Copy01-zCwt0G1u.js → Copy01-Bwkkomxj.js} +1 -1
- package/dist/client/assets/{CreditCard01-CPnF0kPW.js → CreditCard01-ygPw-EKC.js} +1 -1
- package/dist/client/assets/{DotsVertical-DWSyrznd.js → DotsVertical-CHA2avQZ.js} +1 -1
- package/dist/client/assets/{Download01-_kWGFF2R.js → Download01-CmXY93tt.js} +1 -1
- package/dist/client/assets/{Eye-EX4w3-JJ.js → Eye-CEo3fQQh.js} +1 -1
- package/dist/client/assets/{FilterLines-D7tmy7VI.js → FilterLines-BbuCX0gh.js} +1 -1
- package/dist/client/assets/{Globe01-D59ZIidh.js → Globe01-DDOmP6mo.js} +1 -1
- package/dist/client/assets/{Globe04-Bqbezsix.js → Globe04-Cfd8Rd9g.js} +1 -1
- package/dist/client/assets/{HardDrive-CrDFw6-C.js → HardDrive-DfEb0Y6k.js} +1 -1
- package/dist/client/assets/{Key01-i0P60pua.js → Key01-BW9ldI4y.js} +1 -1
- package/dist/client/assets/{LayoutLeft-yR2O4lcC.js → LayoutLeft-BmDj8huh.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BoR9I2q2.js → LinkExternal01-i7PYdGoV.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-JkxWJcVa.js → LockUnlocked01-BVZ6q8T0.js} +1 -1
- package/dist/client/assets/{LogOut01-BR5P77Eq.js → LogOut01-C7qNJNUJ.js} +1 -1
- package/dist/client/assets/{Monitor01-DQBHxIhU.js → Monitor01-CoRTt5aG.js} +1 -1
- package/dist/client/assets/{Palette-Ck8Zugmc.js → Palette-DfKiT9du.js} +1 -1
- package/dist/client/assets/{Play-B2JN4tOi.js → Play-DdLA8Y7E.js} +1 -1
- package/dist/client/assets/{Plus-DBIW8BmC.js → Plus-C_NskSm6.js} +1 -1
- package/dist/client/assets/{SearchLg-Cg_qg2uT.js → SearchLg-mKc3T504.js} +1 -1
- package/dist/client/assets/{SearchMd-CDtyRISc.js → SearchMd-CGhMwkV3.js} +1 -1
- package/dist/client/assets/{Settings02-CixZsBne.js → Settings02-BSpuV9Fn.js} +1 -1
- package/dist/client/assets/{Share07-sN97eq8b.js → Share07-TZt-qDi6.js} +1 -1
- package/dist/client/assets/{Shield01-DO0FlFWx.js → Shield01-D5T84I2m.js} +1 -1
- package/dist/client/assets/{Stars01-BEghjgKF.js → Stars01-BPtc2LR_.js} +1 -1
- package/dist/client/assets/{Stars02-Cf7pycCj.js → Stars02-C1dUyp2n.js} +1 -1
- package/dist/client/assets/{Sun-CGI6h2sV.js → Sun-F2AiKbgs.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CqLck4PK.js → SwitchHorizontal01-o0AhqUK3.js} +1 -1
- package/dist/client/assets/{Tool01-Q74WMKFI.js → Tool01-C7JK84AW.js} +1 -1
- package/dist/client/assets/{Tool02-COUcw3ab.js → Tool02-BD0oj0Z6.js} +1 -1
- package/dist/client/assets/{Trash01-fndrO3VF.js → Trash01-BDJfIYOv.js} +1 -1
- package/dist/client/assets/{TrendUp01-cGf0wL6U.js → TrendUp01-DE-6F3ol.js} +1 -1
- package/dist/client/assets/{Upload01-CoOUkNK-.js → Upload01-FJqJWa79.js} +1 -1
- package/dist/client/assets/{User01-z75QOIvz.js → User01-CuvMZdbR.js} +1 -1
- package/dist/client/assets/{Users01-D0pT6-I6.js → Users01-By8YR5pB.js} +1 -1
- package/dist/client/assets/{Users03-DEW0AZzB.js → Users03-nzSyOTiI.js} +1 -1
- package/dist/client/assets/{X-BnVnruz7.js → X-Bjbq04_M.js} +1 -1
- package/dist/client/assets/{XCircle-B-K-NMeg.js → XCircle-C74a-_sm.js} +1 -1
- package/dist/client/assets/{XClose-Ct6f5P2W.js → XClose-eOvoOXbJ.js} +1 -1
- package/dist/client/assets/{YAxis-D3lV6IEm.js → YAxis-BzEpT0hC.js} +1 -1
- package/dist/client/assets/{Zap-C1t0MYbg.js → Zap-CLxSKLFj.js} +1 -1
- package/dist/client/assets/{ZapSquare-D_Z9NIao.js → ZapSquare-BO2oEmgN.js} +1 -1
- package/dist/client/assets/{access-gate-DKSn70ns.js → access-gate-BN2QeuZr.js} +1 -1
- package/dist/client/assets/{agent-icon-N10iH1xS.js → agent-icon-BZ_a04S0.js} +1 -1
- package/dist/client/assets/{agents-list-p5vEs41c.js → agents-list-Cl403wj6.js} +1 -1
- package/dist/client/assets/{ai-providers-U2Bw9sUD.js → ai-providers-CzC61PdA.js} +1 -1
- package/dist/client/assets/{alert-DFJJIbfK.js → alert-BWXJ6k1b.js} +1 -1
- package/dist/client/assets/{alert-dialog-s_v9kj8r.js → alert-dialog-NtCURUS6.js} +1 -1
- package/dist/client/assets/{api-keys-DTFy4O0m.js → api-keys-DNmBaalA.js} +1 -1
- package/dist/client/assets/{app-editor-BXcIlIq8.js → app-editor-D73mAE8x.js} +1 -1
- package/dist/client/assets/{auth-PabUZ5MK.js → auth-Rsm-TwXB.js} +1 -1
- package/dist/client/assets/{auth-catchall-CZwfxQ42.js → auth-catchall-3pQg0Ts9.js} +1 -1
- package/dist/client/assets/{auth-entry-fOITLcMI.js → auth-entry-Bl0QmoRA.js} +1 -1
- package/dist/client/assets/{auth-split-layout-CRa7xrzM.js → auth-split-layout-DZehLX5A.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Doz4qFK6.js → authenticate-and-persist-oauth-tLzP2M0J.js} +1 -1
- package/dist/client/assets/{automation-list-row-B5z_x4bg.js → automation-list-row-Bi3fiD0Q.js} +1 -1
- package/dist/client/assets/{automation-runs-DUy6uLsc.js → automation-runs-JBQJQge0.js} +1 -1
- package/dist/client/assets/{automations-o83bK5Kz.js → automations-BAck69ny.js} +1 -1
- package/dist/client/assets/{avatar-DqQxOcgj.js → avatar-CBzKZbE1.js} +1 -1
- package/dist/client/assets/{badge-Cm4fIZLs.js → badge-eekEIbP8.js} +1 -1
- package/dist/client/assets/{billing-DXg_SszM.js → billing-DZFzNlnB.js} +1 -1
- package/dist/client/assets/{block-document-CqFnlwFf.js → block-document-BFXGao31.js} +1 -1
- package/dist/client/assets/{buckets-BNGfwz8G.js → buckets-D_qEvbgt.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-g7UYfJzn.js → bulk-category-panel-DjEaSMSL.js} +1 -1
- package/dist/client/assets/{capability-load-error-Cebv5SRI.js → capability-load-error-c_fIc3KM.js} +1 -1
- package/dist/client/assets/{card-BCXXDAzK.js → card-DQyD1SfG.js} +1 -1
- package/dist/client/assets/{cards-CncUl_R4.js → cards-DAc3Shxa.js} +1 -1
- package/dist/client/assets/{category-editor-DPWwASUN.js → category-editor-BMDR50Xz.js} +1 -1
- package/dist/client/assets/{chart-B9PWnrec.js → chart-P7oWZYVe.js} +1 -1
- package/dist/client/assets/{chat-context-DCjIuGpA.js → chat-context-BkjqmU0S.js} +1 -1
- package/dist/client/assets/{checkbox-Bsv7TekW.js → checkbox-4PZ-TCkO.js} +1 -1
- package/dist/client/assets/{choose-editor-BIabz5L_.js → choose-editor-C5SnqFDh.js} +1 -1
- package/dist/client/assets/{cli-auth-success-C13wqGlq.js → cli-auth-success-DEurxdbo.js} +1 -1
- package/dist/client/assets/{collection-detail-D9crSpy8.js → collection-detail-HSvlsHZw.js} +1 -1
- package/dist/client/assets/{collection-display-button-DNsBjQEc.js → collection-display-button-B0B_nbOq.js} +1 -1
- package/dist/client/assets/{collection-search-DldYUBMG.js → collection-search-C5P6fLDH.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-v7Cpj2Ih.js → collection-table-wrapper-CGXTAvhx.js} +1 -1
- package/dist/client/assets/{collection-tabs-Xbfqz75v.js → collection-tabs-CRuLBCvv.js} +1 -1
- package/dist/client/assets/{command-BPStBQvN.js → command-CDNa6JaM.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-rmVoXbVb.js → commerce-onboarding-C4N9O1Dv.js} +1 -1
- package/dist/client/assets/{connect-D4HVuA9P.js → connect-MM-qRvgP.js} +1 -1
- package/dist/client/assets/{connection-Dh7zVSdj.js → connection-CFsgz5YS.js} +1 -1
- package/dist/client/assets/{connection-card-DGYEO2-M.js → connection-card-DK5N_2iN.js} +1 -1
- package/dist/client/assets/{connection-detail-CoswJmDR.js → connection-detail-BrpJJsqW.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-Dc8S5-Kz.js → connection-form-helpers-DEnfprhg.js} +1 -1
- package/dist/client/assets/{connections-DVz9pqfH.js → connections-BmXTX8FM.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-BTvCMc6r.js → decopilot-sse-pool-CKRo9fBY.js} +1 -1
- package/dist/client/assets/{dialog-BIaL_SY_.js → dialog-BpQAmXF3.js} +1 -1
- package/dist/client/assets/{domain-settings-DPkimT4p.js → domain-settings-COum_2MT.js} +1 -1
- package/dist/client/assets/{drawer-Dxws_Ny6.js → drawer-lxnvjOeP.js} +1 -1
- package/dist/client/assets/{dropdown-menu-BP8b0NH2.js → dropdown-menu-4KPedagu.js} +1 -1
- package/dist/client/assets/{empty-state-BU16D4QD.js → empty-state-Bl06p-6p.js} +1 -1
- package/dist/client/assets/{extract-connection-data-CWNc628w.js → extract-connection-data-CpKok1ru.js} +1 -1
- package/dist/client/assets/{file-explorer-ClSVQGJK.js → file-explorer-xfr61aqG.js} +1 -1
- package/dist/client/assets/{file-type-icon-B4k0AhCj.js → file-type-icon-BvMUNvfi.js} +1 -1
- package/dist/client/assets/{form-DPD7zwQl.js → form-BqKQOwQZ.js} +1 -1
- package/dist/client/assets/{general-CFeEG4pG.js → general-De86W_WJ.js} +1 -1
- package/dist/client/assets/{github-repo-picker-DqGlvjEZ.js → github-repo-picker-DAXFK2-S.js} +1 -1
- package/dist/client/assets/{hooks-yS334sJm.js → hooks-CDsDpsP1.js} +1 -1
- package/dist/client/assets/{index-B3kZ43lJ.css → index-B1fXHVYV.css} +1 -1
- package/dist/client/assets/{index-B1HFvCJ9.js → index-C76wd4Bx.js} +1 -1
- package/dist/client/assets/{index-DjXGFEmZ.js → index-CGAtXWmG.js} +1 -1
- package/dist/client/assets/{index-C8y7Xfpf.js → index-CQDQvza4.js} +1 -1
- package/dist/client/assets/{index-weXNg5bM.js → index-Cq_SuyL5.js} +1 -1
- package/dist/client/assets/{index-BliC7_CQ.js → index-DAcR43oY.js} +1 -1
- package/dist/client/assets/{index-CWw-7NR4.js → index-DUrRTWP1.js} +1 -1
- package/dist/client/assets/{index-B-zeJX6v.js → index-Df2M2pRd.js} +54 -54
- package/dist/client/assets/{index-BAFcPo8o.js → index-DpoaDjw6.js} +1 -1
- package/dist/client/assets/{index-DMAZRNWH.js → index-MlSj0cB6.js} +1 -1
- package/dist/client/assets/{index-U67qRk6V.js → index-TsnmB6QP.js} +5 -5
- package/dist/client/assets/{index-redirect-DOAZmIQO.js → index-redirect-QXFoC_U-.js} +1 -1
- package/dist/client/assets/{infra-billing-jkhiV8IG.js → infra-billing-ks0f65VN.js} +1 -1
- package/dist/client/assets/{input-D2mmmfwt.js → input-C54c2ZL2.js} +1 -1
- package/dist/client/assets/{integration-icon-B_IPko0A.js → integration-icon-CV_tk3iI.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-D9dkqHbk.js → invite-member-dialog-DA6uSSMg.js} +1 -1
- package/dist/client/assets/{label-OimsuGS-.js → label-BMmJV9YF.js} +1 -1
- package/dist/client/assets/{layout-DoK9ll5n.js → layout-C4ziMUb6.js} +1 -1
- package/dist/client/assets/{login-BDbcKmBQ.js → login-C9kBUsUO.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CsZvBfah.js → mcp-oauth-DpfKHKRB.js} +1 -1
- package/dist/client/assets/{members-I3Xm8CFT.js → members-CrVzYxuh.js} +1 -1
- package/dist/client/assets/{monaco-editor-DNS_Vdd4.js → monaco-editor-Bu_igJzL.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DQFJNxbn.js → monitoring-stats-row-DU8Tf4TH.js} +1 -1
- package/dist/client/assets/{multi-select-BT9DV9ku.js → multi-select-BGDWGV9V.js} +1 -1
- package/dist/client/assets/{oauth-callback-CnJ_6R1F.js → oauth-callback-DMfy0ENp.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-Bckmvaa1.js → oauth-callback-ai-provider-Bkv1oNjP.js} +1 -1
- package/dist/client/assets/{onboarding-GrbPSyRV.js → onboarding-CTV9hAv7.js} +1 -1
- package/dist/client/assets/{org-layout-DjgZp5he.js → org-layout-C4728LTk.js} +1 -1
- package/dist/client/assets/{organization-choice-BIvMS2qm.js → organization-choice-DuIoQUnJ.js} +1 -1
- package/dist/client/assets/{orgs-5o5TJAST.js → orgs-CHJxetYQ.js} +1 -1
- package/dist/client/assets/{page-seo-form-CVM_xa-E.js → page-seo-form-DT_QZW5v.js} +1 -1
- package/dist/client/assets/{popover-DMzNRhqM.js → popover-B_jNHg8G.js} +1 -1
- package/dist/client/assets/{post-editor-DpiQrdCr.js → post-editor-ipgEXPLv.js} +1 -1
- package/dist/client/assets/{primitives-2l80F2YB.js → primitives-CLriX7Ai.js} +1 -1
- package/dist/client/assets/{profile-DhGLwbyp.js → profile-CRLJkePJ.js} +1 -1
- package/dist/client/assets/{project-app-view-BaRTl1Cz.js → project-app-view-Cr5j5DRz.js} +1 -1
- package/dist/client/assets/record-editor-Bc0ue2LZ.js +1 -0
- package/dist/client/assets/{redirect-editor-BdR41_B5.js → redirect-editor-DSxkgPfs.js} +1 -1
- package/dist/client/assets/registry-WToWOiBH.js +2 -0
- package/dist/client/assets/{registry-layout-DZOZges2.js → registry-layout-B76GyWey.js} +1 -1
- package/dist/client/assets/{reports-C3C2DF83.js → reports-DINCKaIu.js} +1 -1
- package/dist/client/assets/{require-capability-BRtsujkT.js → require-capability-BVRUhwyU.js} +1 -1
- package/dist/client/assets/{required-auth-layout-B8c25OBU.js → required-auth-layout-Bg8Z1JJx.js} +1 -1
- package/dist/client/assets/{reset-password-B8h-YF17.js → reset-password-Bv4DFTBB.js} +1 -1
- package/dist/client/assets/{roles-DMWuQQO1.js → roles-Bj77hcwQ.js} +1 -1
- package/dist/client/assets/{search-input-CQCe6qRN.js → search-input-C1rZ446-.js} +1 -1
- package/dist/client/assets/{secrets-D3bNPg6K.js → secrets-Bl1XQ6Tj.js} +1 -1
- package/dist/client/assets/{sections-editor-CRkjnv5W.js → sections-editor-ByP5gmbj.js} +1 -1
- package/dist/client/assets/{select-DpMb9ZTj.js → select-C9bBNjME.js} +1 -1
- package/dist/client/assets/{select-model-ZuGG5hhj.js → select-model-Cgyob8ID.js} +1 -1
- package/dist/client/assets/{self-tool-result-DXZIo3By.js → self-tool-result-CY73_W-2.js} +1 -1
- package/dist/client/assets/{seo-editor-DlrCkYY0.js → seo-editor-CSppFx9X.js} +1 -1
- package/dist/client/assets/{settings-layout-C9i7m-Ii.js → settings-layout-VQ7lzoYv.js} +1 -1
- package/dist/client/assets/{settings-section-Ddtk2O_c.js → settings-section-ClwVHkEb.js} +1 -1
- package/dist/client/assets/{settings-subnav-HFkLhBsm.js → settings-subnav-CJOMrTUM.js} +1 -1
- package/dist/client/assets/{shell-controls-DKqnwO_R.js → shell-controls-CSuxo5Hc.js} +1 -1
- package/dist/client/assets/{shell-layout-C85zoiRI.js → shell-layout-DXGwRXd8.js} +1 -1
- package/dist/client/assets/{sidebar-DQXEDjXr.js → sidebar-BwZSToHx.js} +1 -1
- package/dist/client/assets/{skeleton-QkZG_rdP.js → skeleton-CeDoEV9h.js} +1 -1
- package/dist/client/assets/{spinner-BwtMyHrM.js → spinner-CagEqDnj.js} +1 -1
- package/dist/client/assets/{sso-DCS_mMGq.js → sso-Ul0tg10v.js} +1 -1
- package/dist/client/assets/{store-C-5_ToXa.js → store-BV0_Dtcj.js} +1 -1
- package/dist/client/assets/store-registry-COCK-STr.js +2 -0
- package/dist/client/assets/{studio-tools-tL3Oy5Ce.js → studio-tools-Cdfl8h-A.js} +1 -1
- package/dist/client/assets/{switch-DIvMa5N8.js → switch-CjB67xr2.js} +1 -1
- package/dist/client/assets/{synced-repos-CArgoX6q.js → synced-repos-CaiCjg-x.js} +1 -1
- package/dist/client/assets/{tab-id-BJoHfCjh.js → tab-id-Bf34pZkO.js} +1 -1
- package/dist/client/assets/{table-CgSwxqHr.js → table-BrovHZb-.js} +1 -1
- package/dist/client/assets/{tabs-BVipNI0S.js → tabs-CpDhoI6V.js} +1 -1
- package/dist/client/assets/{tasks-B5aMspo8.js → tasks-C1d-xg2J.js} +1 -1
- package/dist/client/assets/{textarea-AJ4M9M-f.js → textarea-xw3d2lSr.js} +1 -1
- package/dist/client/assets/{toggle-group-DqYw_S9m.js → toggle-group-C4dTrrkI.js} +1 -1
- package/dist/client/assets/{toolbar-lQOYKYWt.js → toolbar-Bl4ZCxj-.js} +1 -1
- package/dist/client/assets/{tooltip-slKJgNRK.js → tooltip-Dui8uwfb.js} +1 -1
- package/dist/client/assets/{track-DJdpTEZB.js → track-HMYqIDwl.js} +1 -1
- package/dist/client/assets/{types-DGC-6CNG.js → types-CDL_M1sd.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DzpsC0v7.js → use-ai-providers-Cn9Wfner.js} +1 -1
- package/dist/client/assets/{use-api-keys-O8Xu3TjM.js → use-api-keys-Nv9isq14.js} +1 -1
- package/dist/client/assets/{use-automations-BKhUK6wp.js → use-automations-DUlBexKL.js} +1 -1
- package/dist/client/assets/{use-autosave-Co9fgVIk.js → use-autosave-BCy6OHmc.js} +1 -1
- package/dist/client/assets/{use-capability-BqxhmF3Q.js → use-capability-C8KDRmGN.js} +1 -1
- package/dist/client/assets/{use-clock-tick-DWZe92Du.js → use-clock-tick-TYNg8WMH.js} +1 -1
- package/dist/client/assets/{use-commerce-diagnostic-DgxqUY0S.js → use-commerce-diagnostic-A6-yljOP.js} +1 -1
- package/dist/client/assets/{use-connection-B4_vNo9P.js → use-connection-CVbtwrXg.js} +1 -1
- package/dist/client/assets/{use-copy-DfjL9Nuy.js → use-copy-BgkKwLZy.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-B29Z8OFj.js → use-create-virtual-mcp-Cxnf2a52.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-Ba1eGKaC.js → use-debounced-autosave-B3UdpOcR.js} +1 -1
- package/dist/client/assets/{use-debounced-value-DOumC7lb.js → use-debounced-value-CbFpjEHk.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-DxS5MZxW.js → use-decopilot-events-DAdI8zSd.js} +1 -1
- package/dist/client/assets/{use-delete-connection-BH0Fumnp.js → use-delete-connection-CC5hxfgA.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-tOkr0X50.js → use-deployment-admin-DVrnI08o.js} +1 -1
- package/dist/client/assets/{use-file-configs-DSKpZydu.js → use-file-configs-Igsyli8Z.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Bas4p9Ru.js → use-infinite-scroll-Be_rrlkh.js} +1 -1
- package/dist/client/assets/{use-join-requests-cpv9dbFd.js → use-join-requests-DGwfr_VS.js} +1 -1
- package/dist/client/assets/{use-mcp-client-Cn14RanX.js → use-mcp-client-DrV_gANw.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-D6_K_HHd.js → use-mcp-tools-D7FZY8v9.js} +1 -1
- package/dist/client/assets/{use-members-Dujh8JDk.js → use-members-DZrJpdEV.js} +1 -1
- package/dist/client/assets/{use-mobile-DDap3KQv.js → use-mobile-Dj4teMZ8.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-DHUVQaXh.js → use-navigate-to-agent-DG8b56CY.js} +1 -1
- package/dist/client/assets/{use-open-billing-url-BDzukGTa.js → use-open-billing-url-QPGbYmh4.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CsMFy44j.js → use-org-auth-client-BlI-piJ2.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-C1eNvV3n.js → use-org-repo-syncs-bPt48aZ_.js} +1 -1
- package/dist/client/assets/{use-org-sso-rFuRC6sh.js → use-org-sso-B_R0AVqH.js} +1 -1
- package/dist/client/assets/{use-organization-roles-DWrYaBVi.js → use-organization-roles-wqxD4fog.js} +1 -1
- package/dist/client/assets/{use-organization-settings-sEsfAiSY.js → use-organization-settings-DeTNeW2s.js} +1 -1
- package/dist/client/assets/{use-registry-connections-fdK2egLa.js → use-registry-connections-C2_YX7H9.js} +1 -1
- package/dist/client/assets/{use-secrets-CIW9QO-0.js → use-secrets-BpWEKdQc.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DoA3n9u_.js → use-section-preview-base-CPVX9_IU.js} +1 -1
- package/dist/client/assets/{use-settings-tabs-DtJvwnHa.js → use-settings-tabs-BTawDEOX.js} +1 -1
- package/dist/client/assets/{use-status-sounds-3baBowb9.js → use-status-sounds-BDTLgkqj.js} +1 -1
- package/dist/client/assets/{use-tags-B0dbx_vm.js → use-tags-U9E57C54.js} +1 -1
- package/dist/client/assets/{use-view-mode-Dn2DgXog.js → use-view-mode-C1C1HBxK.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-CUUpo6j1.js → use-virtual-mcp-CGjEzqre.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-PYUi9uU7.js +1 -0
- package/dist/client/assets/{useRouterState-D_0JK-4N.js → useRouterState-B3vV-q96.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-EaQ6A3_m.js +1 -0
- package/dist/client/assets/{users-BbRLrsbU.js → users-CpL0wgr2.js} +1 -1
- package/dist/client/assets/{variant-calendar-WEhLMNNv.js → variant-calendar-DwD-5jZh.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-CQgpOmAJ.js → view-mode-toggle-DFIslB1O.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/cli.js +2 -2
- package/dist/server/server.js +2 -2
- package/package.json +1 -1
- package/dist/client/assets/record-editor-C6_SGMLa.js +0 -1
- package/dist/client/assets/registry-B11oMXLc.js +0 -2
- package/dist/client/assets/store-registry-DSkcJNdy.js +0 -2
- package/dist/client/assets/useInfiniteQuery-LOLzN0HS.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-BEwAIzqn.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -1525,7 +1525,7 @@ Use this to continue with the user's request \u2014 do NOT call subtask again fo
|
|
|
1525
1525
|
|
|
1526
1526
|
`).trim();return{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,...$.toolAllowlist!==void 0?{toolAllowlist:$.toolAllowlist}:{},...$.maxAgentSteps!==void 0?{maxAgentSteps:$.maxAgentSteps}:{},...$.isSubagent!==void 0?{isSubagent:$.isSubagent}:{},...$.subtaskJobId!==void 0?{subtaskJobId:$.subtaskJobId}:{},...$.resumedFromBackground!==void 0?{resumedFromBackground:$.resumedFromBackground}:{},mode:$.mode,...$.windowSize!==void 0?{windowSize:$.windowSize}:{},...$.triggerId!==void 0?{triggerId:$.triggerId}:{},...$.runMetadata!==void 0?{runMetadata:$.runMetadata}:{},branch:Z.branch??$.branch??null,sandboxProviderKind:$.sandboxProviderKind,harnessId:$.harnessId,organizationId:$.organizationId,userId:$.userId,taskId:$.taskId,messageId:Z.messageId,...Z.runFenceToken!==void 0?{runFenceToken:Z.runFenceToken}:{},...$.isResume!==void 0?{isResume:$.isResume}:{},...X?{systemContext:X}:{}}}function Ew4($,Z){let X=$.find((Q)=>Q.id===Z);if(!X)throw new DK("empty_request",`Persisted request message missing for messageId=${Z}`);if(X.role==="system")throw new DK("empty_request",`Persisted message ${Z} has role=system; expected non-system request message`);return X}function jw4($){let Z=$.models;return{"decopilot.agent.id":$.agent.id,"decopilot.model.id":Z.thinking.id,"decopilot.credential.id":Z.credentialId,"decopilot.organization.id":$.organizationId,"decopilot.user.id":$.userId,"decopilot.thread.id":$.taskId??""}}async function kF$($,Z,X){return cZ1("decopilot.dispatchRunAndWait",async(Q)=>{let{taskId:Y,uiStream:G,registrySignal:J}=await Aw4($,Z,X,Q),W=X.streamBuffer,K=W?await W.createTailStream(Y,$.abortSignal,{deliverPolicy:"new",closeOnDone:!0}):null;if(W&&K){let F=W.pump(G,Y,J,$.organizationId);F.catch(()=>{});let H=K.getReader();try{while(!0){let{done:N}=await H.read();if(N)break}}finally{H.releaseLock()}await F}else{if(W)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"producer-fallback-no-pump",taskId:Y,hasTail:!!K,note:"createTailStream returned null \u2014 draining producer stream directly; projector persistence depends on streamBuffer publish health"}));let F=G.getReader();try{while(!0){let{done:H}=await F.read();if(H)break}}finally{F.releaseLock()}}return{taskId:Y}},jw4($))}async function zw4($,Z,X,Q){let[Y,G,J]=await Promise.all([$.storage.threads.list(Q,{limit:9,agentId:X}).catch(()=>null),$.storage.interests.getForAgent(Z,X,Q).catch(()=>null),$.storage.virtualMcps.list(Z).catch(()=>null)]),W={};if(Y&&Y.total>0)W.recentThreads={total:Y.total,threads:Y.threads.map((K)=>({id:K.id,title:K.title,updated_at:K.updated_at}))};if(G&&G.interests.length>0)W.interests=G.interests.map((K)=>({title:K.title,summary:K.summary}));if(J)W.agents=J.map((K)=>({id:K.id,name:K.title,description:K.description,status:K.status}));return W}async function Pw4({virtualMcp:$,agentId:Z,organizationId:X,ctx:Q}){return B50({virtualMcp:$,agentId:Z,organizationId:X,ctx:Q})}async function Aw4($,Z,X,Q){let{runRegistry:Y,streamBuffer:G}=X;yt0($.harnessId);let J=$.harnessId;if(!qF$($))$={...$,messages:$.messages.map((F)=>F.id?F:{...F,id:sp()})};let W=!1,K;try{let F=$.models;Q.setAttribute("decopilot.harnessId",J),Z.sandboxPreference="agent-sandbox",Q.setAttribute("decopilot.dispatchTarget.sandboxProviderKind","agent-sandbox");let H=Uw0({harnessId:J,sandboxProviderKind:"agent-sandbox"}),N=PF$(F),U=await l3(Z.db,$.organizationId,Z.organization?.role??Z.auth.user?.role);if(!c3(U,N.thinking.credentialId,N.thinking.id))throw new DK("model_not_allowed","Model not allowed for your role");N=Ow0(U,N);let O=$.windowSize??oG;if(!$.taskId)throw Error("dispatchRunAndWait: taskId is required");if(H)await u3(G,$.taskId,wn[0]);let B=await NY$(Z,$.organizationId,Z.metadata?.runMetadata),D=(y0)=>y0?Lw4(Z,$.organizationId,y0.credentialId,y0.id,B):Promise.resolve(void 0),[L,E,j,z,A,P,I,q,k]=await Promise.all([Z.storage.virtualMcps.findById($.agent.id,$.organizationId),D(N.thinking),D(N.fast),D(N.smart),D(N.image),D(N.webSearch),D(N.deepResearch),Hw0(Z.storage.threads,{organization_id:$.organizationId,thread_id:$.taskId,userId:$.userId,defaultWindowSize:O}),zw4(Z,$.organizationId,$.agent.id,$.userId)]);if(H)await u3(G,$.taskId,wn[1]);let C=E?{thinking:E,...j?{fast:j}:{},...z?{smart:z}:{},...A?{image:A}:{},...P?{webSearch:P}:{},...I?{deepResearch:I}:{}}:void 0,l=E?ZB0(E):null;if(K=q.thread.id,Z.metadata.threadId=q.thread.id,Q.setAttribute("decopilot.thread.id",q.thread.id),q.thread.created_by!==$.userId)throw new DK("not_thread_owner","You are not allowed to write to this thread because you are not the owner");if(l?.asyncResearch){let y0=[["thinking",N.thinking.id]];if(N.fast)y0.push(["fast",N.fast.id]);if(N.smart)y0.push(["smart",N.smart.id]);if(N.image)y0.push(["image",N.image.id]);for(let[i,S0]of y0)if(l.asyncResearch.canHandle(S0))throw Error(`Model "${S0}" can only be used as a Deep Research model. It is not usable as the ${i} model \u2014 set it in the Deep Research slot instead.`)}let x=q.thread.message_storage_version===2?new GX({storage:Z.storage.threads.messageParts(),orgId:$.organizationId,threadId:q.thread.id,runId:q.thread.id}):null;if(!L)throw new DK("agent_not_found","Agent not found");let n=await Pw4({virtualMcp:L,agentId:$.agent.id,organizationId:$.organizationId,ctx:Z});if($.isResume)await Y.execute({type:"RESUME",taskId:q.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:xt0()});else await Y.execute({type:"START",taskId:q.thread.id,orgId:$.organizationId,userId:$.userId,abortController:new AbortController,podId:xt0(),runConfig:{models:$.models,agent:$.agent,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,mode:$.mode,windowSize:$.windowSize,triggerId:$.triggerId},messageId:$.messageId});W=!0,await Z.storage.threads.clearCancelRequested(q.thread.id);let u;if($.runFenceToken)u=$.runFenceToken;else u=Fw0(),await Z.storage.threads.setRunFence(q.thread.id,u);let a=Y.getAbortSignal(q.thread.id);if(!a)throw await Y.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed"}),Error("Run was cancelled immediately after starting");if($.abortSignal){let y0=$.abortSignal;if(y0.aborted)await Y.execute({type:"CANCEL",taskId:q.thread.id});else y0.addEventListener("abort",()=>{Y.execute({type:"CANCEL",taskId:q.thread.id}).catch(()=>{})},{once:!0})}if(!$.isResume)G?.purge(q.thread.id);let O0=[],B0,e;if(qF$($)){if(e=await q.loadHistory(O),B0=Ew4(e,$.messageId),$.systemContext)O0=[{id:`system-${$.messageId}`,role:"system",parts:[{type:"text",text:$.systemContext}]}]}else{O0=$.messages.filter((i)=>i.role==="system");let y0=$.messages.find((i)=>i.role!=="system");if(B0=y0?(await gB0([y0],Z,{threadId:q.thread.id})).find((i)=>i.role!=="system"):void 0,!$.isResume){if(!B0)throw new DK("empty_request","No user message found in input \u2014 expected at least one non-system message");if(x)await x.emitUserMessage(B0).catch((i)=>{console.error("[decopilot:stream] v2 user-message emit failed",i)})}}if(B0)await wF$(G,q.thread.id,B0);let o=[],P0=Z.organization,Y0=Date.now(),j0=B0?(await hB0([B0],Z))[0]:void 0;if(!j0||!B0)throw new DK("empty_request","No user message found in input \u2014 expected at least one non-system message");HF$($.models,[j0]);let x0=await KF$({ctx:Z,threadId:q.thread.id,userMessage:B0,windowSize:O,isSubagent:$.isSubagent===!0,systemMessages:O0}),u0={url:"",headers:{},expiresAt:0},Q0=void 0,w0=void 0,L0={cwd:null},I0=$.agent.instructions??(typeof n.metadata?.instructions==="string"?n.metadata.instructions:void 0),$0={taskId:$.taskId,isSubagent:$.isSubagent,subtaskJobId:$.subtaskJobId,resumedFromBackground:$.resumedFromBackground,virtualMcp:n,branch:$.branch,messages:x0,modelSources:C,mcpSource:Q0,objectStorageSource:w0,userContext:k},X0={harnessId:J,threadId:q.thread.id,userMessage:j0,harness:{sessionId:void 0},workspace:L0,models:N,mcp:u0,mode:$.mode,temperature:$.temperature,toolApprovalLevel:$.toolApprovalLevel,toolAllowlist:$.toolAllowlist??null,maxAgentSteps:$.maxAgentSteps,user:{id:$.userId,email:Z.auth.user?.email??""},organizationId:$.organizationId,organizationSlug:P0.slug,agent:{id:$.agent.id,instructions:I0,...$.agent.disallowedTools?{disallowedTools:$.agent.disallowedTools}:{}},triggerId:$.triggerId,currentThreadTitle:q.thread.title,runFenceToken:u};if(H)await u3(G,$.taskId,wn[2]);let R0=MK(J),G0=R0?await Z.storage.threads.getAckedSeq(q.thread.id):0;if(G0>0)console.log("[dispatch] resuming a sandbox-hosted turn",{runId:q.thread.id,fromSeq:G0});let N0=R0?await Z.storage.claudeSubscriptions.findLiveToken($.userId).catch((y0)=>{return console.warn("[dispatch] claude subscription lookup failed",y0),null}):null,E1=async function*(){let y0={...X0,signal:a};if(Gn0(y0,$0),H)await u3(G,q.thread.id,wn[3]);yield*(R0?new Dt0({ctx:Z,harnessId:J,virtualMcpId:n.id,...G0>0?{resume:{reason:"the Studio process driving the previous attempt stopped"}}:{},branch:await CO0(Z,{threadId:q.thread.id,agentRepo:n.metadata?.githubRepo,runBranch:$.branch}),credential:N0?{providerId:kJ$,apiKey:N0}:E?{providerId:E.providerId,apiKey:E.apiKey,...E.baseUrl?{baseUrl:E.baseUrl}:{}}:null}):new Fn0({ctx:Z,harnessId:J})).dispatch(y0)},n0=ww4(()=>Dw4({runId:q.thread.id,fenceToken:u,streamBuffer:G??{publishRawChunk:async()=>!1,publishDone:async()=>!1},chunks:LF$(E1()),...R0?{startSeq:G0,initialAckSeq:G0,onPublished:(y0)=>Z.storage.threads.bumpAckedSeq(q.thread.id,u,y0)}:{},errorMessageId:qB(q.thread.id,u),loadOriginalMessages:x?async()=>(await Z.storage.threads.messageParts().loadWindow(q.thread.id,{limit:1})).messages.map(Nw0):void 0,title:{currentThreadTitle:q.thread.title,threadId:q.thread.id,persistTitle:async(y0,i)=>{await Z.storage.threads.update(y0,{title:i})}},hooks:{onStep:()=>{let y0=Y.dispatch({type:"STEP_DONE",taskId:q.thread.id});o.push(Y.react(y0).catch((i)=>{console.error("[decopilot:stream] onStepFinish reactor failed",i)}))},onFinish:async(y0,i)=>{let S0=o.length,X1=performance.now();if(await Promise.allSettled(o),TF$.record(performance.now()-X1,{phase:"settle"}),a.aborted)return;await q$(0);let A1=RF$?Aw():null,k0=performance.now(),g1=Bw0(i,y0?.parts);await Y.execute({type:"FINISH",taskId:q.thread.id,threadStatus:g1});let N8=performance.now()-k0;if(TF$.record(N8,{phase:"save"}),RF$&&A1){let t4=Aw()??A1,r6=-1;try{r6=JSON.stringify(y0)?.length??-1}catch{}console.warn(JSON.stringify({msg:"decopilot-finish-trace",threadId:q.thread.id,pendingOps:S0,saveMs:Math.round(N8),parts:y0?.parts?.length??0,messageBytes:r6,rssDelta:t4.rss-A1.rss,heapUsedDelta:t4.heapUsed-A1.heapUsed,externalDelta:t4.external-A1.external}))}},onError:(y0)=>{if(a.aborted){y1.capture({distinctId:$.userId,event:"chat_message_aborted",groups:{organization:$.organizationId},properties:{organization_id:$.organizationId,thread_id:q.thread.id,agent_id:$.agent.id,model_id:N.thinking.id,mode:$.mode,duration_ms:Date.now()-Y0,is_resume:$.isResume??!1}});return}if(Un(y0)){console.log(`[decopilot] attempt superseded by a newer dispatch; leaving the terminal to it thread=${q.thread.id}`);return}console.error("[decopilot] stream error:",y3(y0)),Y.execute({type:"FINISH",taskId:q.thread.id,threadStatus:"failed",errorText:y3(y0)}).catch((i)=>{console.error("[decopilot:stream] onError reactor failed",i)})}}}));return{taskId:q.thread.id,uiStream:n0,registrySignal:a}}catch(F){if(W&&K)Y.execute({type:"FINISH",taskId:K,threadStatus:"failed",errorText:y3(F)}).catch((H)=>{console.error("[decopilot:stream] catch-block reactor failed",H)});throw F}}var TF$,RF$,IF$;var ww0=w(()=>{up();Lp0();M4();MJ$();WB0();On();S3();Nx();JF$();Oy();np0();jB();FF$();RB();ft0();zy();NF$();Sy();Vt0();EF$();Cy();b6();AF$();u4();TF$=S$.createHistogram("decopilot.finish.duration",{description:"Wall time of onFinish flush segments, tagged by phase",unit:"ms"}),RF$=process.env.DECOPILOT_FINISH_TRACE==="1";IF$=["decopilot","claude-code"]});function VF$($){return OF$($)||BF$($)}async function Tw4($){let Z=$.getReader();try{while(!0){let{done:X}=await Z.read();if(X)break}}finally{Z.releaseLock()}}function Rw4($,Z){let X=$.getReader(),Q=!1,Y=()=>{if(Q)return;Q=!0,X.releaseLock()};return new ReadableStream({async pull(G){try{let{done:J,value:W}=await X.read();if(J)Y(),G.close();else G.enqueue(W)}catch(J){Z(J),Y(),G.error(J)}},async cancel(G){await X.cancel(G),Y()}})}async function SF$($){if(!$.chunks&&!$.chunkStream)throw Error("projectChunks requires chunks or chunkStream");let Z=null,X=!1,Q=void 0,Y={inputTokens:0,outputTokens:0,totalTokens:0},G=[],J=null,W=(B)=>{if(J===null)J=B;throw B},K=$.chunks?async function*(){try{for await(let B of $.chunks){if(VF$(B))continue;yield B}}catch(B){throw Z=B,B}}():void 0,F=$.chunkStream?Rw4($.chunkStream,(B)=>{Z=B}).pipeThrough(new TransformStream({transform(B,D){if(!VF$(B))D.enqueue(B)}})):void 0,H={emitStepParts:(B)=>$.persistence.emitStepParts(B).catch(W),emitFinal:(B)=>$.persistence.emitFinal(B).catch(W),emitError:(B,D)=>$.persistence.emitError(B,D).catch(W)},{uiStream:N,whenComplete:U}=Yw0({chunks:K,chunkStream:F,originalMessages:$.originalMessages??[],title:$.title?{currentThreadTitle:$.title.currentThreadTitle,threadId:$.title.threadId,persistTitle:$.title.persistTitle}:{currentThreadTitle:void 0,threadId:"projector",persistTitle:async()=>{}},persistence:H,sanitizeErrorText:$.sanitizeErrorText,errorMessageId:$.errorMessageId,generateMessageId:$.generateMessageId,hooks:{onUsage:(B)=>{Y={inputTokens:B.inputTokens,outputTokens:B.outputTokens,totalTokens:B.totalTokens}},onError:()=>{X=!0},onFinish:(B,D)=>{Q=D,G=Array.isArray(B.parts)?B.parts.filter((L)=>L!=null&&typeof L==="object"&&("type"in L)):[]}}});if(await Tw4(N).catch(()=>{}),await U,J!==null)throw J;if(Z!==null)throw Z;return{failed:X&&Q===void 0,finishReason:Q,usage:Y,finalParts:G}}var CF$=w(()=>{kt0();Sy()});var Ln=786432;function qw4($){if(/[.*>\s]/.test($))throw Error("Invalid NATS subject token")}function MB($){return qw4($),`${Dw0}.${$}`}function _F$($){let Z=`${$.runId}:${$.fenceToken}:${$.seq}`;return $.fragmentIndex===void 0?Z:`${Z}:frag:${$.fragmentIndex}`}function Mw4($){return`${$.runId}:${$.fenceToken}:done:${$.finalSeq}`}function vF$($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>0?Z:null}function kw4($){if(!$)return null;let Z=Number($);return Number.isInteger(Z)&&Z>=0?Z:null}function Vw4($){if(!$)return null;let Z=$.split(":"),[X,Q,Y,G,J]=Z;if(!X||!Q||!Y)return null;if(Y==="done"){let K=vF$(G);return Z.length===4&&K!==null?{kind:"done",runId:X,fenceToken:Q,finalSeq:K}:null}if(Y==="ckpt")return null;let W=vF$(Y);if(W===null)return null;if(Z.length===3)return{kind:"chunk",runId:X,fenceToken:Q,seq:W,fragmentIndex:null};if(Z.length===5&&G==="frag"){let K=kw4(J);return K===null?null:{kind:"chunk",runId:X,fenceToken:Q,seq:W,fragmentIndex:K}}return null}function ht0($,Z){let X=MB(Z.runId),Q=gt0.encode(JSON.stringify({p:$}));if(Q.length>Iw4)return[];if(Q.length<=Ln)return[{subject:X,data:Q,msgId:Z.dedup?_F$({runId:Z.runId,...Z.dedup}):void 0}];let Y=Math.ceil(Q.length/Ln),G=[];for(let J=0;J<Y;J++)G.push({subject:X,data:Q.slice(J*Ln,(J+1)*Ln),headers:{[fF$]:String(J),[bF$]:String(Y)},msgId:Z.dedup?_F$({runId:Z.runId,...Z.dedup,fragmentIndex:J}):void 0});return G}function xF$($){return{subject:MB($.runId),data:gt0.encode(JSON.stringify({done:!0,finalSeq:$.finalSeq})),msgId:Mw4($)}}function yF$($){return{subject:MB($),data:gt0.encode(JSON.stringify({done:!0}))}}function Sw4($){let Z=$.reduce((Y,G)=>Y+(G?.length??0),0),X=new Uint8Array(Z),Q=0;for(let Y of $){if(!Y)continue;X.set(Y,Q),Q+=Y.length}return X}function Lw0(){let $=null;return new TransformStream({transform(Z,X){let Q=Z.headers?.get(bF$);if(!Q){X.enqueue(Z);return}let Y=Number(Q),G=Number(Z.headers?.get(fF$)??"0");if(G===0)$={total:Y,received:0,parts:Array(Y)};else if(!$||$.total!==Y)return;if(!$.parts[G])$.received++;if($.parts[G]=Z.data,$.received<$.total)return;let J=Sw4($.parts);$=null,X.enqueue({subject:Z.subject,data:J,headers:Z.headers})}})}function Cw4($){return typeof $==="number"&&Number.isInteger($)&&$>0}function vw4($){let Z=Vw4($.headers?.get("Nats-Msg-Id")||void 0),X;try{X=JSON.parse(_w4.decode($.data))}catch{return null}if(!X||typeof X!=="object")return null;let Q=X;if(Q.done===!0)return{kind:"done",runId:Z?.kind==="done"?Z.runId:null,fenceToken:Z?.kind==="done"?Z.fenceToken:null,envelopeFinalSeq:Cw4(Q.finalSeq)?Q.finalSeq:null,msgIdFinalSeq:Z?.kind==="done"?Z.finalSeq:null};if("p"in Q)return{kind:"chunk",seq:Z?.kind==="chunk"?Z.seq:null,runId:Z?.kind==="chunk"?Z.runId:null,fenceToken:Z?.kind==="chunk"?Z.fenceToken:null,chunk:Q.p};return null}function Ew0(){return new TransformStream({transform($,Z){let X=vw4($);if(X)Z.enqueue(X)}})}var Dw0="decopilot.stream",fF$="Dp-Frag-Idx",bF$="Dp-Frag-Total",Iw4=33554432,gt0,_w4;var gF$=w(()=>{gt0=new TextEncoder;_w4=new TextDecoder});var jw0=w(()=>{gF$()});var mH="DECOPILOT_STREAMS";var ut0=w(()=>{jw0()});function hF$($,Z){return new TransformStream({transform(X,Q){if(X.runId!==$||X.fenceToken!==Z)return;Q.enqueue(X)}})}function uF$(){let $=1;return new TransformStream({transform(Z,X){if(Z.kind==="done"){X.enqueue(Z);return}if(Z.seq===null){X.error(Error("projector chunk missing seq"));return}if(Z.seq<$)return;if(Z.seq>$){X.error(new En($,Z.seq));return}$++,X.enqueue(Z)}})}function cF$($){let Z=$.getReader(),X=!1,Q=0,Y=()=>{if(X)return;X=!0,Z.releaseLock()};return new ReadableStream({async pull(G){for(;;){let{done:J,value:W}=await Z.read();if(J){await Z.cancel(),Y(),G.error(Error("reader stopped before done"));return}let K=W;if(K.kind==="done"){if(!(K.envelopeFinalSeq!=null&&K.envelopeFinalSeq===K.msgIdFinalSeq))continue;if(K.envelopeFinalSeq!==Q){await Z.cancel(),Y(),G.error(new En(Q+1,null));return}await Z.cancel(),Y(),G.close();return}Q=K.seq??Q,G.enqueue(K.chunk);return}},async cancel(G){await Z.cancel(G),Y()}})}function fw4($){if(Symbol.asyncIterator in $)return $[Symbol.asyncIterator]();let Z=$[Symbol.iterator]();return{next:async()=>Z.next(),return:async(X)=>Z.return?Z.return(X):{done:!0,value:X}}}function Pw0($){let Z=fw4($.messages),X=$.idleTimeoutMs,Q=!1,Y=(G)=>{if(Q)return;Q=!0,Z.return?.(G).catch(()=>{}),$.onCancel?.()};return new ReadableStream({async pull(G){if(X===void 0){let{done:H,value:N}=await Z.next();if(H){G.close();return}G.enqueue(N);return}let J=new AbortController,W=Z.next().then((H)=>{return J.abort(),H}),K=q$(X,{signal:J.signal}).then(()=>"idle").catch(()=>"cancelled"),F=await Promise.race([W,K]);if(F==="idle"){G.error(new zw0(X));return}if(F==="cancelled")return;if(F.done){G.close();return}G.enqueue(F.value)},async cancel(G){Y(G)}})}var zw0,En;var Aw0=w(()=>{u4();zw0=class zw0 extends Error{idleTimeoutMs;constructor($){super("producer produced no output before timeout");this.idleTimeoutMs=$;this.name="StreamIdleTimeoutError"}};En=class En extends Error{expectedSeq;gotSeq;constructor($,Z){super(Z===null?`missing seq ${$} (stream ended at the fenced done)`:`missing seq ${$} (next delivered is ${Z})`);this.expectedSeq=$;this.gotSeq=Z;this.name="StreamGapError"}}});function bw4($){let X=Pw0({messages:$.messages,idleTimeoutMs:$.idleTimeoutMs,onCancel:$.onDone}).pipeThrough(Lw0()).pipeThrough(Ew0()).pipeThrough(hF$($.runId,$.fenceToken)).pipeThrough(uF$());return cF$(X)}async function dF$($){let X=await(await $.js.consumers.get(mH,{filter_subjects:MB($.runId),deliver_policy:lF$.DeliverPolicy.All})).consume();async function*Q(){try{for await(let Y of X)yield{subject:Y.subject,data:Y.data,headers:Y.headers}}finally{X.stop()}}return bw4({messages:Q(),runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs,onDone:()=>X.stop()})}var lF$;var mF$=w(()=>{ut0();Aw0();jw0();lF$=V(bw(),1)});async function xw4($){let X=($.requestMessageId?await $.messageParts.maxCreatedAtMsForMessage($.runId,$.requestMessageId):null)??await $.messageParts.maxCreatedAtMsForRun($.runId);return new GX({storage:$.messageParts,orgId:$.orgId,threadId:$.runId,runId:$.runId,baseTimeMs:(X??Date.now())+1})}async function iF$($){let Z=await xw4($),X=$.replaceFinal?(Q)=>Z.replaceFinal(Q):(Q)=>Z.emitFinal(Q);return{emitStepParts:(Q)=>Z.emitStepParts(Q),emitFinal:X,emitError:(Q,Y)=>Z.emitError(Q,Y)}}var pF$=w(()=>{RB()});function Tw0($,Z){yw4.add(1,{"org.id":Z??"unknown"})}var yw4;var nF$=w(()=>{b6();yw4=S$.createCounter("decopilot.projector.poison_runs",{description:"Number of decopilot runs that exhausted retries and were sent to the DLQ",unit:"{runs}"})});class ct0{intervalMs;lastBumpMs=new Map;constructor($=3000){this.intervalMs=$}shouldBump($,Z=Date.now()){let X=this.lastBumpMs.get($);if(X!==void 0&&Z-X<this.intervalMs)return!1;return this.lastBumpMs.set($,Z),!0}clear($){this.lastBumpMs.delete($)}}function tF$($,Z,X,Q){return $.pipeThrough(new TransformStream({transform(Y,G){if(X.shouldBump(Z))Q();G.enqueue(Y)},flush(){X.clear(Z)}}))}function gw4($){return`liveness: no stream events for ${Math.round($/60000)}m`}function dt0($){return $.runFenceToken!==null&&$.runFenceToken!==$.fenceToken}function rF$($){lt0=$}function aF$(){if(!lt0)throw Error("[projector-workflow] runtime not initialized \u2014 setProjectorWorkflowRuntime() must run before workflows fire");return lt0}function sF$(){return aF$()}async function eF$($,Z,X){let Q=aF$(),Y=Q.getJetStream();if(!Y)throw Error("JetStream unavailable");let G=(await Q.messageParts.loadWindow($.runId,{limit:500})).messages.map(Nw0);return{chunkCount:0,attempts:1,outcome:await SF$({chunkStream:tF$(await dF$({js:Y,runId:$.runId,fenceToken:$.fenceToken,idleTimeoutMs:$.idleTimeoutMs}),$.runId,hw4,()=>{Q.bumpProgress({runId:$.runId,orgId:Z}).catch(()=>{})}),persistence:await iF$({messageParts:Q.messageParts,orgId:Z,runId:$.runId,requestMessageId:$.messageId,replaceFinal:!0}),originalMessages:G,errorMessageId:qB($.runId,$.fenceToken),title:{threadId:$.runId,currentThreadTitle:X,persistTitle:async(W,K)=>{await Q.persistTitle($.runId,Z,K),await Q.onTitleUpdated({runId:$.runId,orgId:Z,title:K})}}})}}async function oF$($,Z,X){let Q=await $.resolveRun(Z).catch(()=>null);return Q!==null&&Q.runFenceToken===X&&["completed","failed","requires_action"].includes(Q.status)}async function $H$($,Z,X){let Q=await uw4($,Z);if("skip"in Q)return;let Y=Q.row.orgId,G=Q.row.createdBy??$.runId,J=Q.row.title;try{let{outcome:W}=await X($,Y,J),K=W?.failed?"failed":Bw0(W?.finishReason,W?.finalParts);if(K==="failed"){let F=W?.finishReason?`harness reported an error: ${W.finishReason}`:"harness reported an error";if(Tw0($.runId,Y),await Z.markRunFailed($.runId,Y,F,"harness"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:G,reason:F,kind:"harness"})}else if(K==="requires_action")await Z.markRunRequiresAction($.runId,Y),await Z.clearSynthesizedError($.runId,$.fenceToken);else{if(await Z.completeRunIfNotCompleted($.runId,Y))await Z.recordCompleted({runId:$.runId,orgId:Y,distinctId:G,usage:W?.usage??{inputTokens:0,outputTokens:0,totalTokens:0}});await Z.clearSynthesizedError($.runId,$.fenceToken)}await Z.purgeRun($.runId,$.fenceToken)}catch(W){if(W instanceof En){if(await oF$(Z,$.runId,$.fenceToken)){await Z.clearSynthesizedError($.runId,$.fenceToken),await Z.purgeRun($.runId,$.fenceToken);return}let U=`stream truncated before projection could replay it: ${W.message}`;if(Tw0($.runId,Y),await Z.markRunFailed($.runId,Y,U,"projection"))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:G,reason:U,kind:"projection"});await Z.purgeRun($.runId,$.fenceToken);return}let K=W instanceof zw0;if(K&&await oF$(Z,$.runId,$.fenceToken)){await Z.purgeRun($.runId,$.fenceToken);return}let F=K?gw4(W.idleTimeoutMs):W instanceof Error?W.message:String(W),H=K?"liveness":"projection";if(Tw0($.runId,Y),await Z.markRunFailed($.runId,Y,F,H))await Z.recordFailed({runId:$.runId,orgId:Y,distinctId:G,reason:F,kind:H});if(K)await Z.clearSynthesizedError($.runId,$.fenceToken);throw W}}async function uw4($,Z){let X=await Z.resolveRun($.runId);if(!X)return{skip:"missing"};if(dt0({status:X.status,runFenceToken:X.runFenceToken,fenceToken:$.fenceToken}))return{skip:"stale",row:X};if(X.version!==2)return{skip:"legacy-v1",row:X};return{row:X}}var lt0=null,hw4;var mt0=w(()=>{CF$();mF$();Aw0();pF$();nF$();ft0();hw4=new ct0});function ZH$($,Z){switch($.type){case"START":{let X={type:"RUN_STARTED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,runConfig:$.runConfig,podId:$.podId,messageId:$.messageId};if(Z?.status.tag==="running")return[{type:"PREVIOUS_RUN_ABORTED",taskId:$.taskId,orgId:Z.orgId},X];return[X]}case"STEP_DONE":{if(Z?.status.tag!=="running")return[];return[{type:"STEP_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:Z.status.stepCount+1}]}case"FINISH":{if(Z==null||Z.status.tag!=="running")return[];let{stepCount:X}=Z.status;if($.threadStatus==="completed")return[{type:"RUN_COMPLETED",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];if($.threadStatus==="requires_action")return[{type:"RUN_REQUIRES_ACTION",taskId:$.taskId,orgId:Z.orgId,stepCount:X}];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"error",errorText:$.errorText??null}]}case"CANCEL":{if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:"cancelled"}]}case"RESUME":{if(Z?.status.tag==="running")return[];return[{type:"RUN_RESUMED",taskId:$.taskId,orgId:$.orgId,userId:$.userId,abortController:$.abortController,podId:$.podId}]}case"FORCE_FAIL":{if($.reason==="ghost")return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z?.orgId??$.orgId,reason:$.reason,expectedFenceToken:$.expectedFenceToken??null}];if(Z?.status.tag!=="running")return[];return[{type:"RUN_FAILED",taskId:$.taskId,orgId:Z.orgId,reason:$.reason}]}}}function XH$($,Z,X=new Date){switch(Z.type){case"RUN_STARTED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"RUN_RESUMED":return{taskId:Z.taskId,orgId:Z.orgId,userId:Z.userId,status:{tag:"running",abortController:Z.abortController,stepCount:0,startedAt:X}};case"STEP_COMPLETED":if($?.status.tag!=="running")return $;return{...$,status:{...$.status,stepCount:Z.stepCount}};case"RUN_COMPLETED":return;case"RUN_REQUIRES_ACTION":return;case"RUN_FAILED":return;case"PREVIOUS_RUN_ABORTED":return}}function QH$($){if(!$?.trim())return{...jn};for(let{kind:Z,reason:X,match:Q}of cw4)if(Q.test($))return{kind:Z,reason:X};return{...jn}}var cw4,jn;var YH$=w(()=>{cw4=[{kind:"credits",reason:"Run stopped: the organization is out of AI credits",match:/\[CREDITS\]|requires more credits|\b402\b/i},{kind:"sandbox_unreachable",reason:"Run stopped: its sandbox became unreachable mid-run",match:/\[SANDBOX_UNREACHABLE\]|sandbox stream broke/i},{kind:"cancelled",reason:"Run cancelled before it finished",match:/^\s*(error:\s*)?cancelled\b|run cancelled/i},{kind:"overloaded",reason:"Run stopped: the model provider was overloaded or rate-limited",match:/\boverloaded\b|\brate.?limit|\b429\b/i},{kind:"context_length",reason:"Run stopped: the conversation exceeded the model's context window",match:/context (length|window)|too many tokens|maximum context/i},{kind:"model_error",reason:"Run stopped: the model provider rejected the request",match:/\bAPI Error\b|\b5\d{2}\b.*provider|provider returned/i}],jn={kind:"error",reason:"Run ended with an error \u2014 see the run's messages"}});function mw4($,Z){if($!=="error")return dw4[$];let{kind:X,reason:Q}=QH$(Z);return{failure_reason:Q,failure_kind:X}}async function GH$($,Z,X,Q){let{storage:Y,sseHub:G}=Q,J=await Y.get($,Z);G.emit(Z,kW($,X,{virtualMcpId:J?.virtual_mcp_id??void 0,createdBy:J?.created_by,triggerId:J?.trigger_id,title:J?.title,branch:J?.branch??null,harnessId:J?.harness_id??void 0,createdAt:J?.created_at,updatedAt:J?.updated_at})),G.emit(Z,A$0($,X))}async function iw4($,Z){let{storage:X,sseHub:Q}=Z;switch($.type){case"RUN_STARTED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_config:$.runConfig??null,run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);Q.emit($.orgId,kW($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at,messageId:$.messageId}));return}case"RUN_RESUMED":{await X.update($.taskId,$.orgId,{status:"in_progress",run_started_at:new Date().toISOString(),last_progress_at:null,failure_reason:null,failure_kind:null});let Y=await X.get($.taskId,$.orgId);Q.emit($.orgId,kW($.taskId,"in_progress",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at}));return}case"STEP_COMPLETED":Q.emit($.orgId,Wf0($.taskId,$.stepCount));return;case"RUN_COMPLETED":await GH$($.taskId,$.orgId,"completed",Z);return;case"RUN_REQUIRES_ACTION":await GH$($.taskId,$.orgId,"requires_action",Z);return;case"RUN_FAILED":{if($.reason==="ghost"){if(!await X.forceFailIfInProgress($.taskId,$.orgId,$.expectedFenceToken))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null})}else{if(!await X.forceFailIfInProgress($.taskId,$.orgId))return;await X.update($.taskId,$.orgId,{run_config:null,run_started_at:null,...mw4($.reason,$.errorText)})}let Y=await X.get($.taskId,$.orgId);Q.emit($.orgId,kW($.taskId,"failed",{virtualMcpId:Y?.virtual_mcp_id??void 0,createdBy:Y?.created_by,triggerId:Y?.trigger_id,title:Y?.title,branch:Y?.branch??null,harnessId:Y?.harness_id??void 0,createdAt:Y?.created_at,updatedAt:Y?.updated_at})),Q.emit($.orgId,A$0($.taskId,"failed")),await Z.onThreadFinished?.($.taskId,$.orgId).catch((G)=>console.error("[run-reactor] thread-finish hook failed",G));return}case"PREVIOUS_RUN_ABORTED":return}}async function JH$($,Z){for(let{event:X}of $)await iw4(X,Z)}var lw4="Run stalled \u2014 no progress within the idle timeout window",dw4;var WH$=w(()=>{O8();YH$();dw4={reaped:{failure_reason:lw4,failure_kind:"stall"},cancelled:{failure_reason:"Run cancelled before it finished",failure_kind:"cancelled"},error:{failure_reason:jn.reason,failure_kind:jn.kind}}});function KH$($){return $.now-$.lastProgressAt>$.idleTimeoutMs}function FH$($){return Math.max($.persistedLastProgressAt??Number.NEGATIVE_INFINITY,$.currentRunStartedAt)}class pt0{deps;clock;states=new Map;reaperTimer=null;constructor($,Z=()=>new Date){this.deps=$;this.clock=Z;this.reaperTimer=setInterval(()=>{this.reapStaleRuns().catch((X)=>{console.error("[RunRegistry] Reaper sweep failed",X)})},pw4)}async execute($){let Z=this.dispatch($);return await this.react(Z),Z}dispatch($){let Z=this.states.get($.taskId),X=ZH$($,Z),Q=[];for(let Y of X){let G=this.states.get(Y.taskId);if(Y.type==="PREVIOUS_RUN_ABORTED"||Y.type==="RUN_FAILED"){if(G?.status.tag==="running")G.status.abortController.abort()}let J=XH$(G,Y,this.clock());if(J===void 0)this.states.delete(Y.taskId);else this.states.set(Y.taskId,J);if(Q.push({event:Y,state:J}),nw4.has(Y.type))HH$().add(1,{"org.id":Y.orgId});else if(tw4.has(Y.type)&&G?.status.tag==="running")HH$().add(-1,{"org.id":Y.orgId})}return Q}react($){return JH$($,this.deps)}getAbortSignal($){let Z=this.states.get($);if(Z?.status.tag==="running")return Z.status.abortController.signal;return null}isRunning($){return this.states.get($)?.status.tag==="running"}async stopAll(){for(let[,$]of this.states)if($.status.tag==="running")$.status.abortController.abort();this.states.clear()}dispose(){if(this.reaperTimer)clearInterval(this.reaperTimer),this.reaperTimer=null}async reapStaleRuns(){let $=this.clock().getTime(),Z=[...this.states].filter(([,X])=>X.status.tag==="running");for(let[X,Q]of Z){if(this.states.get(X)?.status.tag!=="running")continue;let G;try{let W=await this.deps.storage.getProgress(X,Q.orgId);G=FH$({persistedLastProgressAt:W?.lastProgressAt??null,currentRunStartedAt:Q.status.startedAt.getTime()})}catch(W){console.warn(`[RunRegistry] Reaper progress read failed for ${X}; skipping`,W);continue}if(!KH$({lastProgressAt:G,now:$,idleTimeoutMs:Rw0}))continue;let J=await this.deps.storage.get(X,Q.orgId).catch(()=>null);if(J&&J.status!=="in_progress"){let W=this.states.get(X);if(W?.status.tag==="running")W.status.abortController.abort();this.states.delete(X);continue}console.warn(`[RunRegistry] Reaping stuck run for thread ${X} (idle > ${Rw0/60000}m) ...`),ow4().add(1,{"org.id":Q.orgId,reason:"idle_timeout"}),await this.execute({type:"FORCE_FAIL",taskId:X,reason:"reaped"}).catch((W)=>{console.error("[RunRegistry] Reaper execute failed",W)})}}}var pw4=300000,it0,Rw0,nw4,tw4,NH$=($)=>{let Z;return()=>Z??=$()},HH$,ow4;var nt0=w(()=>{WH$();b6();it0=Number(process.env.RUN_IDLE_TIMEOUT_MS),Rw0=Number.isFinite(it0)&&it0>0?it0:600000,nw4=new Set(["RUN_STARTED","RUN_RESUMED"]),tw4=new Set(["RUN_COMPLETED","RUN_FAILED","RUN_REQUIRES_ACTION","PREVIOUS_RUN_ABORTED"]),HH$=NH$(()=>S$.createUpDownCounter("decopilot.stream.inflight",{description:"Number of in-flight decopilot stream requests",unit:"{requests}"})),ow4=NH$(()=>S$.createCounter("decopilot.run.reaped",{description:"Number of decopilot runs force-failed by the progress-based reaper",unit:"{runs}"}))});async function UH$($){let{runId:Z}=$,X=sF$(),Q=await X.resolveRun(Z),Y=$.fenceToken??Q?.runFenceToken;if(!Q||Q.version!==2||Y==null)return;if(dt0({status:Q.status,runFenceToken:Q.runFenceToken,fenceToken:Y}))return;if(!X.getJetStream())throw Error("JetStream unavailable for consume step");await $H$({runId:Z,fenceToken:Y,messageId:$.messageId,idleTimeoutMs:$.idleTimeoutMs??Rw0},X,eF$)}var OH$=w(()=>{mt0();nt0()});import{DBOS as FC}from"@dbos-inc/dbos-sdk";function ot0($){tt0=$}function rt0(){if(!tt0)throw Error("[hostedHarness] runtime not initialized \u2014 setHostedHarnessRuntime() must run before workflows fire");return tt0}async function rw4($,Z){let X=rt0(),{request:Q}=$,Y=Z??await X.studioContextFactory(Q.organizationId,Q.userId);if(!Y)throw Error("user membership lost mid-dispatch");if(Q.runMetadata)Y.metadata.runMetadata=Q.runMetadata;let G=new AbortController;BH$().add(1);try{if(Ry(Y,"in_progress",$.threadId),!Q.runMetadata?.taskBoardItemId)WK$(Y,$.threadId);await X.dispatchRunFn({...Q,abortSignal:G.signal},Y,X.deps)}finally{BH$().add(-1)}}function wH$($,Z){let X=rt0(),Q=Z?.isQueued??ew4,Y=new Dn({intervalMs:Z?.intervalMs,sleepFn:Z?.sleepFn,emit:async()=>{if(await Q($)){await sw4(X,$);return}Y.stop()}});return Y.arm(),()=>Y.stop()}async function ew4($){try{return(await FC.getWorkflowStatus(at0($.runId,$.fenceToken)))?.status==="ENQUEUED"}catch(Z){return console.error(`[hostedHarness] could not read child status for run=${$.runId} fence=${$.fenceToken}`,Z),!0}}function $D4($,Z,X,Q=1){let Y=X instanceof Error?X.message:String(X);return{messageId:qB($,Z),errorChunk:{type:"error",errorText:Y},seq:Q,finalSeq:Q}}function ZD4($){if(!($ instanceof Error))return;let Z=$.lastAckSeq;return typeof Z==="number"?Z+1:void 0}async function XD4($,Z){let X=rt0(),{streamBuffer:Q}=X.deps,{messageId:Y,errorChunk:G,seq:J,finalSeq:W}=$D4($.runId,$.fenceToken,Z,ZD4(Z));if(!Q){console.error(`[hostedHarness] no streamBuffer configured; dropping terminal error for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}if(!await Q.publishRawChunk($.runId,G,{fenceToken:$.fenceToken,seq:J})){console.error(`[hostedHarness] failed to publish terminal error chunk for run=${$.runId} fence=${$.fenceToken} messageId=${Y}`);return}await Q.publishDone($.runId,$.fenceToken,W)}async function QD4($){try{await FC.runStep(()=>rw4($),{name:"runHostedHarness",retriesAllowed:!1})}catch(Z){if(Un(Z)){console.log(`[hostedHarness] attempt superseded by a newer dispatch; leaving the terminal to it run=${$.runId} fence=${$.fenceToken}`);return}await FC.runStep(()=>XD4($,Z),{name:"publishHostedHarnessFailure",retriesAllowed:!0}).catch((X)=>{console.error(`[hostedHarness] could not publish terminal error for run=${$.runId} fence=${$.fenceToken}`,X)})}}function at0($,Z){return`decopilot-hosted:${$}:${Z}`}async function DH$($){return{workflowID:(await FC.startWorkflow(YD4,{workflowID:at0($.runId,$.fenceToken),queueName:MK($.request.harnessId)?WF:JF,enqueueOptions:{priority:pO0($.request.runMetadata)}})($)).workflowID}}async function HC($,Z){await FC.cancelWorkflow(at0($,Z))}var tt0=null,aw4,BH$=()=>aw4??=S$.createUpDownCounter("hosted_runs.active",{description:"Hosted agent-loop runs executing on this pod",unit:"{runs}"}),sw4=($,Z)=>u3($.deps.streamBuffer,Z.runId,"waiting-capacity"),YD4;var st0=w(()=>{bt0();Sy();On();b6();cp();h5();YD4=FC.registerWorkflow(QD4,{name:"hostedHarnessWorkflow",maxRecoveryAttempts:1000})});import{DBOS as vy}from"@dbos-inc/dbos-sdk";function Zo0($){yt0($)}function Xo0($){et0=$}function GD4(){if(!et0)throw Error("[threadGate] runtime not initialized \u2014 setThreadGateRuntime() must run before workflows fire");return et0}function JD4($,Z=Fw0){let X=$.runFenceToken;if(X)return{runFenceToken:X,claimedRequest:$,shouldPersistFence:!1};let Q=Z();return{runFenceToken:Q,claimedRequest:{...$,runFenceToken:Q},shouldPersistFence:!0}}async function WD4($){let Z=GD4(),{request:X}=$,Q=X.taskId??$.threadId;if(UF$({harnessId:X.harnessId}))await u3(Z.deps.streamBuffer,Q,"starting-run");let Y=await Z.studioContextFactory(X.organizationId,X.userId);if(!Y)throw Error("user membership lost mid-dispatch");Zo0(X.harnessId);let G=X.taskId??$.threadId,{runFenceToken:J,claimedRequest:W,shouldPersistFence:K}=JD4(X);if(K)await Y.storage.threads.setRunFence(G,J);return{runFenceToken:J,hostedEnqueue:{runId:Q,fenceToken:J,threadId:$.threadId,request:W}}}async function KD4($){if($.source!=="user-message")return;let{request:Z}=$;y1.capture({distinctId:Z.userId,event:"chat_message_started",groups:{organization:Z.organizationId},properties:{organization_id:Z.organizationId,agent_id:Z.agent,mode:Z.mode,thread_id:Z.taskId??$.threadId,credential_id:Z.models.credentialId}})}async function FD4($,Z){if($.source!=="user-message")return;let{request:X}=$;y1.capture({distinctId:X.userId,event:"chat_message_failed",groups:{organization:X.organizationId},properties:{organization_id:X.organizationId,thread_id:X.taskId??$.threadId,agent_id:X.agent,model_id:X.models.thinking.id,mode:X.mode,error_category:"setup",error_message:Z}})}async function Iw0($){Zo0($.request.harnessId),await vy.runStep(()=>KD4($),{name:"trackMessageStarted"});let Z;try{Z=await vy.runStep(()=>WD4($),{name:"dispatchRunAndWait",retriesAllowed:!0}),await DH$(Z.hostedEnqueue)}catch(G){let J=G instanceof Error?G.message:String(G);throw await vy.runStep(()=>FD4($,J),{name:"trackMessageFailed"}),G}let X=$.request.taskId??$.threadId,Q="messages"in $.request?void 0:$.request.messageId,Y=wH$(Z.hostedEnqueue);try{await vy.runStep(()=>UH$({runId:X,fenceToken:Z.runFenceToken,messageId:Q}),{name:"consumeRunProjection"})}finally{Y()}return{taskId:$.request.taskId??$.threadId}}async function HD4($){return Iw0($)}async function lH($,Z){return Zo0($.request.harnessId),{workflowID:(await vy.startWorkflow(ND4,{queueName:RJ,enqueueOptions:{queuePartitionKey:$.threadId,priority:pO0($.request.runMetadata)},workflowID:Z?.workflowID})($)).workflowID}}var $o0=1,et0=null,ND4;var LH$=w(()=>{ww0();M4();Sy();OH$();cp();st0();ND4=vy.registerWorkflow(HD4,{name:"threadGateWorkflow",maxRecoveryAttempts:1000})});var dH=w(()=>{LH$();st0()});async function zn($,Z,X){let Q=Z.organizationId,Y=Z.assignedBy??Z.createdBy,G=X.harnessId??"decopilot",J=await $X($,"smart"),W=dD(Q),K=await $.storage.threads.create({...X.fence?{id:X.fence.threadId}:{},organization_id:Q,title:X.title,status:"in_progress",virtual_mcp_id:W,message_storage_version:2,harness_id:G,sandbox_provider_kind:"agent-sandbox",created_by:Y});if(!K.isNew)return{threadId:K.id,isNew:!1};let F={...K.metadata??{},...MK(G)?{read_only:!0}:{},...X.pinnedRef?{pinnedRef:X.pinnedRef}:{},...X.repo?{githubRepo:{url:X.repo.url,owner:X.repo.owner,name:X.repo.name,installationId:X.repo.installationId,connectionId:X.repo.connectionId}}:{}},H=X.pinnedRef?X.pinnedRef:X.repo?CH(K.id,X.repo.connectionId):MK(G)?CH(K.id):null;await $.storage.threads.update(K.id,{metadata:F,...H?{branch:H}:{},updated_by:Y}),await $.storage.taskBoard.linkThread(Z.id,K.id,Q);let N={id:crypto.randomUUID(),role:"user",parts:[{type:"text",text:X.prompt}]};return await new GX({storage:$.storage.threads.messageParts(),orgId:Q,threadId:K.id,runId:K.id}).emitRequestMessage(N),await lH({threadId:K.id,source:"background-tool",request:{messages:[N],models:{credentialId:J.credentialId,thinking:{id:J.modelId,title:J.modelMeta.title}},agent:{id:W,...X.agent??{}},temperature:X.temperature,toolApprovalLevel:"auto",mode:"default",organizationId:Q,userId:Y,harnessId:G,sandboxProviderKind:"agent-sandbox",...X.repo?{}:H?{branch:H}:{},taskId:K.id,runMetadata:{...mO0(Z),[iO0]:X.runClass??"new_task",...X.modelClass&&X.modelClass!=="default"?{[JB0]:X.modelClass}:{}}}},X.fence?{workflowID:X.fence.workflowID}:void 0),{threadId:K.id,isNew:!0}}var Qo0=w(()=>{up();cp();OB();dH();RB();O8();S3();On();WB0()});function UD4($){let Z=new Map($.map((G)=>[G.id,G])),X=new Map;for(let G of Wy($)){let J=EH$(G.owner,G.repo);X.set(J,[...X.get(J)??[],G])}if(X.size!==1)return null;let Q=[...X.values()][0],Y=Q.find((G)=>{let J=Z.get(G.connectionId);return J?uL(J):!1})??Q[0];return{connectionId:Y.connectionId,owner:Y.owner,name:Y.repo,installationId:Y.installationId,url:`https://github.com/${Y.owner}/${Y.repo}`}}async function qw0($,Z){try{let{items:X}=await $.storage.connections.list(Z,{slug:"mcp-github"}),Q=UD4(X);if(Q)return{repo:Q};let Y=new Map;for(let J of Wy(X)){let W=EH$(J.owner,J.repo);if(!Y.has(W))Y.set(W,{connectionId:J.connectionId,repo:`${J.owner}/${J.repo}`})}let G=Y;if(G.size===0)return console.warn(`[task-board] claude-code skipped for org ${Z}: `+"no importable repos \u2014 running Decopilot"),null;return console.warn(`[task-board] claude-code for org ${Z}: ${G.size} importable repos \u2014 the run picks one with TASK_ADD_REPO`),{choices:[...G.values()]}}catch(X){return console.warn("[task-board] repo lookup for claude-code failed",X),null}}function jH$($,Z,X){let Q=["You've been assigned this task. Complete it and finish with a pull request if it makes sense (like a coding task) or is explicitly requested.","","You are running AUTONOMOUSLY \u2014 no human is watching, so drive this to "+"completion yourself. Make reasonable decisions and move on; do not stop to ask for confirmation.","",`Title: ${$.title}`];if($.description)Q.push("","Description:",$.description);if(Q.push("",Z?`The repository ${Z.owner}/${Z.name} is already cloned at your working directory, on its own branch. \`git\` and \`gh\` are authenticated. ${Si}`:["Your working directory is EMPTY: this organization has several repositories, so nothing has been cloned yet. FIRST call `mcp__studio__TASK_ADD_REPO` with the connectionId of the repository this task is about. It clones that repository into your working directory and waits for the checkout, so once it returns the repository is there on its own branch and `git` and `gh` are authenticated. Do not read files, run `git`, or run `gh` before it returns; there is nothing there yet.","","Repositories in this organization:",...(X?.repoChoices??[]).map((Y)=>`- ${Y.repo} (connectionId: ${Y.connectionId})`),X?.repoChoices?.length?"Pick the one the task is about. If the task doesn't say and the names don't settle it, take the first.":"Call `mcp__studio__TASK_ADD_REPO` with no arguments to list them."].join(`
|
|
1527
1527
|
`),""),X?.resolveConflict&&X.pr)Q.push(`Pull request #${X.pr.number} (${X.pr.url}) is approved but has a MERGE CONFLICT with its base branch.`,`Check that branch out (\`gh pr checkout ${X.pr.number}\`), merge or rebase the base branch into it, resolve the conflicts, and push to update the SAME pull request \u2014 do NOT open a new one. Resolve by preserving BOTH sides' intent; never blindly discard either side, and change only what the conflict requires.`,"");else if(X?.feedback)Q.push(X.pr?`A reviewer requested changes on pull request #${X.pr.number} (${X.pr.url}):`:"A reviewer requested changes on your previous work:",X.feedback,X.pr?`Check that branch out (\`gh pr checkout ${X.pr.number}\`) before editing, address the feedback, then push to update the SAME pull request \u2014 do NOT open a new one.`:"Address this feedback.","The reviewer judged the DEPLOYED PREVIEW, not your diff. Reproduce their check there before you push again \u2014 a fix that only looks right in the code comes straight back.","");else if(X?.pr)Q.push(`This task already has an open pull request #${X.pr.number} (${X.pr.url}), and you are already on its branch.`,"Continue that work: commit and push to update the SAME pull request \u2014 do NOT open a new one. If it already does everything the task asks, say so and stop rather than changing it.","");return Q.push("How to finish:","- Make the change, commit it, push the branch, and open a pull request"+(X?.pr?" \u2014 or push to the existing one, per the instruction above.":"."),"- Change only what the task needs. Don't refactor around it.","- The change must be REACHABLE from the surface the task names: edit the component that route actually renders, not one that merely looks like the right place. A change nothing imports is dead code, and it is the most common reason a task comes back rejected.","- Before handing over, VERIFY the task's outcome the way the reviewer will: get the PR's `previewUrl` from `mcp__studio__TASK_BOARD_ITEM_PRS_GET` (give the deploy a minute), open the affected route there, and confirm the behaviour actually happens. A green test suite is not the bar \u2014 the reviewer approves what it can see on the preview.","- As soon as `gh pr create` prints the URL, call `mcp__studio__TASK_BOARD_ITEM_PR_LINK` with that url. Do this even if you also mention the PR in a comment \u2014 the reviewers are dispatched from the linked PR, not from your message.",`- Then move this task to review on the board: call \`mcp__studio__TASK_BOARD_ITEM_UPDATE\` with id "${$.id}" and status "in_review". Pass ONLY the fields you are changing.`,'- If the task turns out to need no code change, do NOT open a PR: explain why in a comment on the task (`mcp__studio__TASK_BOARD_COMMENT_CREATE`) and move it to "done" instead of "in_review". There is nothing for a reviewer to review, so In Review would strand it.',`- Anything a reviewer should know (a decision you made, something you found and deliberately left alone, a question) goes on the task as a comment: \`mcp__studio__TASK_BOARD_COMMENT_CREATE\` with taskBoardItemId "${$.id}". Read what's already there first with \`mcp__studio__TASK_BOARD_COMMENT_LIST\` \u2014 a comment may be addressed to you.`,"",`(task id: ${$.id})`),Q.join(`
|
|
1528
|
-
`)}var EH$=($,Z)=>`${$}/${Z}`.toLowerCase();var Yo0=w(()=>{cO0();TQ();E9()});import{createHmac as OD4,randomBytes as BD4,timingSafeEqual as wD4}from"crypto";function DD4(){if(Mw0)return Mw0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Mw0=$?Buffer.from($):BD4(32),Mw0}function Go0($,Z,X){return`rtok_${OD4("sha256",DD4()).update(`${$}:${Z}:${X.toISOString()}`).digest("base64url")}`}function zH$($,Z,X,Q){let Y=Buffer.from($),G=Buffer.from(Go0(Z,X,Q));return Y.length===G.length&&wD4(Y,G)}var Mw0=null;var Jo0=w(()=>{T$()});import{createHash as LD4}from"crypto";function Wo0($,Z){if($.status===null||PH$.has($.status))return!1;return!Wn({updated_at:$.lastActiveAt,last_progress_at:null},Z)}function PD4($,Z){return Z-$>=zD4}async function kw0($,Z,X){let Q=await $.storage.organizationSettings.get(Z.organizationId),Y=DH(Q?.flags);if(Y.length===0)return;let G=G90(Q?.flags,"cheap_reviewer_model")?"reviewer":"default",J=await MD4($,Z),W=new Date(J);await Promise.all(Y.map(async(K)=>{if(ID4(Z,K,J)){await qK($,Z,`${Tx[K]} failed ${Ko0} times on `+"this review \u2014 it will not be retried");return}if(K==="qa"&&X?.previewMatchesHead===!1){if(PD4(J,Date.now()))await qK($,Z,"the pull request's deploy preview is not showing its latest commit (its checks never went green), so QA cannot verify this change against what the PR actually does");return}if(qD4(Z,K,J))return;let F=AD4(Z,K,J);await SD4($,Z,K,W,F,G).catch((H)=>console.error(`[task-board] ${K} reviewer enqueue failed`,H))}))}function AD4($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>Rx(Y.title,Z)&&Fo0(Y,Q)&&new Date(Y.createdAt).getTime()>=X).length}function TD4($,Z){if(!$||!Z||!("choices"in Z))return null;return Z.choices.find((X)=>X.repo===$)?.connectionId??null}function RD4($,Z,X){let Q=$.threads.filter((Y)=>Rx(Y.title,Z)&&new Date(Y.createdAt).getTime()<X).map((Y)=>new Date(Y.lastActiveAt).getTime()).filter((Y)=>Number.isFinite(Y));return Q.length===0?0:Math.max(...Q)}function Fo0($,Z){if($.status==="failed")return!0;return $.status!==null&&!PH$.has($.status)&&!Wo0($,Z)}function AH$($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>{if(!Rx(Y.title,Z))return!1;return Wo0(Y,Q)||new Date(Y.createdAt).getTime()>=X})}function ID4($,Z,X,Q=Date.now()){let Y=AH$($,Z,X,Q);return Y.length>0&&Y.every((G)=>Fo0(G,Q))&&Y.length>=Ko0}function qD4($,Z,X,Q=Date.now()){let Y=AH$($,Z,X,Q);if(Y.length===0)return!1;if(Y.some((J)=>Wo0(J,Q)))return!0;let G=Y.filter((J)=>Fo0(J,Q));if(G.length>=Ko0)return!0;return G.length!==Y.length}async function MD4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);return LH(X)}function kD4($,Z,X,Q){return`review:${$}:${Z}:${X.toISOString()}:${Q}`}function VD4($){return`thrd_${LD4("sha256").update($).digest("hex").slice(0,32)}`}async function SD4($,Z,X,Q,Y,G){let J=Z.organizationId,W=Go0(Z.id,X,Q),K=await qw0($,J),F=K&&"repo"in K?K.repo:null,H=K!==null,N=RD4(Z,X,Q.getTime()),U=TD4(Z.repo,K),O=H?"mcp__studio__TASK_BOARD_ITEM_PRS_GET":"TASK_BOARD_ITEM_PRS_GET",B=H?"mcp__studio__TASK_BOARD_REVIEW_DECISION":"TASK_BOARD_REVIEW_DECISION",D=H?"mcp__studio__TASK_BOARD_COMMENT_CREATE":"TASK_BOARD_COMMENT_CREATE",L=H?"mcp__studio__TASK_BOARD_COMMENT_LIST":"TASK_BOARD_COMMENT_LIST",E=[jD4[X],"","You are running AUTONOMOUSLY \u2014 no human is watching this run. Making the "+'approve / request-changes call IS your job; you are the decision-maker, not an assistant asking a human to decide. NEVER use `user_ask` to ask whether to approve, or to confirm an obvious call ("Approve the PR?"). Reserve `user_ask` for a genuine, unresolvable blocker only a human can clear (e.g. a missing credential, or a requirement so ambiguous you '+"truly cannot judge the outcome) \u2014 that should be rare. When in doubt "+"between asking and deciding, DECIDE.","","Do NOT push commits, merge, or change the code to fix what you find. You "+"are reviewing, not implementing \u2014 the tools that would let you rewrite "+"the checkout are removed from this run on purpose. Report what you find in your decision instead."].join(`
|
|
1528
|
+
`)}var EH$=($,Z)=>`${$}/${Z}`.toLowerCase();var Yo0=w(()=>{cO0();TQ();E9()});import{createHmac as OD4,randomBytes as BD4,timingSafeEqual as wD4}from"crypto";function DD4(){if(Mw0)return Mw0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return Mw0=$?Buffer.from($):BD4(32),Mw0}function Go0($,Z,X){return`rtok_${OD4("sha256",DD4()).update(`${$}:${Z}:${X.toISOString()}`).digest("base64url")}`}function zH$($,Z,X,Q){let Y=Buffer.from($),G=Buffer.from(Go0(Z,X,Q));return Y.length===G.length&&wD4(Y,G)}var Mw0=null;var Jo0=w(()=>{T$()});import{createHash as LD4}from"crypto";function Wo0($,Z){if($.status===null||PH$.has($.status))return!1;return!Wn({updated_at:$.lastActiveAt,last_progress_at:null},Z)}function PD4($,Z){return Z-$>=zD4}async function kw0($,Z,X){let Q=await $.storage.organizationSettings.get(Z.organizationId),Y=DH(Q?.flags);if(Y.length===0)return;let G=G90(Q?.flags,"cheap_reviewer_model")?"reviewer":"default",J=await MD4($,Z),W=new Date(J);await Promise.all(Y.map(async(K)=>{if(ID4(Z,K,J)){await qK($,Z,`${Tx[K]} failed ${Ko0} times on `+"this review \u2014 it will not be retried");return}if(K==="qa"&&X?.previewMatchesHead===!1){if(PD4(J,Date.now()))await qK($,Z,"the pull request's deploy preview is not showing its latest commit (its checks never went green), so QA cannot verify this change against what the PR actually does");return}if(qD4(Z,K,J))return;let F=AD4(Z,K,J);await SD4($,Z,K,W,F,G).catch((H)=>console.error(`[task-board] ${K} reviewer enqueue failed`,H))}))}function AD4($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>Rx(Y.title,Z)&&Fo0(Y,Q)&&new Date(Y.createdAt).getTime()>=X).length}function TD4($,Z){if(!$||!Z||!("choices"in Z))return null;return Z.choices.find((X)=>X.repo===$)?.connectionId??null}function RD4($,Z,X){let Q=$.threads.filter((Y)=>Rx(Y.title,Z)&&Y.status==="completed"&&new Date(Y.createdAt).getTime()<X).map((Y)=>new Date(Y.lastActiveAt).getTime()).filter((Y)=>Number.isFinite(Y));return Q.length===0?0:Math.max(...Q)}function Fo0($,Z){if($.status==="failed")return!0;return $.status!==null&&!PH$.has($.status)&&!Wo0($,Z)}function AH$($,Z,X,Q=Date.now()){return $.threads.filter((Y)=>{if(!Rx(Y.title,Z))return!1;return Wo0(Y,Q)||new Date(Y.createdAt).getTime()>=X})}function ID4($,Z,X,Q=Date.now()){let Y=AH$($,Z,X,Q);return Y.length>0&&Y.every((G)=>Fo0(G,Q))&&Y.length>=Ko0}function qD4($,Z,X,Q=Date.now()){let Y=AH$($,Z,X,Q);if(Y.length===0)return!1;if(Y.some((J)=>Wo0(J,Q)))return!0;let G=Y.filter((J)=>Fo0(J,Q));if(G.length>=Ko0)return!0;return G.length!==Y.length}async function MD4($,Z){let X=await $.storage.taskBoard.listActivity(Z.id,Z.organizationId);return LH(X)}function kD4($,Z,X,Q){return`review:${$}:${Z}:${X.toISOString()}:${Q}`}function VD4($){return`thrd_${LD4("sha256").update($).digest("hex").slice(0,32)}`}async function SD4($,Z,X,Q,Y,G){let J=Z.organizationId,W=Go0(Z.id,X,Q),K=await qw0($,J),F=K&&"repo"in K?K.repo:null,H=K!==null,N=RD4(Z,X,Q.getTime()),U=TD4(Z.repo,K),O=H?"mcp__studio__TASK_BOARD_ITEM_PRS_GET":"TASK_BOARD_ITEM_PRS_GET",B=H?"mcp__studio__TASK_BOARD_REVIEW_DECISION":"TASK_BOARD_REVIEW_DECISION",D=H?"mcp__studio__TASK_BOARD_COMMENT_CREATE":"TASK_BOARD_COMMENT_CREATE",L=H?"mcp__studio__TASK_BOARD_COMMENT_LIST":"TASK_BOARD_COMMENT_LIST",E=[jD4[X],"","You are running AUTONOMOUSLY \u2014 no human is watching this run. Making the "+'approve / request-changes call IS your job; you are the decision-maker, not an assistant asking a human to decide. NEVER use `user_ask` to ask whether to approve, or to confirm an obvious call ("Approve the PR?"). Reserve `user_ask` for a genuine, unresolvable blocker only a human can clear (e.g. a missing credential, or a requirement so ambiguous you '+"truly cannot judge the outcome) \u2014 that should be rare. When in doubt "+"between asking and deciding, DECIDE.","","Do NOT push commits, merge, or change the code to fix what you find. You "+"are reviewing, not implementing \u2014 the tools that would let you rewrite "+"the checkout are removed from this run on purpose. Report what you find in your decision instead."].join(`
|
|
1529
1529
|
`),j=[...H?[]:[E,""],`Task title: ${Z.title}`,Z.description?`
|
|
1530
1530
|
Task description:
|
|
1531
1531
|
${Z.description}
|
|
@@ -2830,7 +2830,7 @@ Respond with the structured verdict and a short reason.`,My$;var Vy$=w(()=>{_4()
|
|
|
2830
2830
|
${G.join(`
|
|
2831
2831
|
`)}`:Y}function qG6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2832
2832
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var Og$=200,LG6=12,PG6=300,w91=3;var D91=w(()=>{q_();gP0()});function kG6($){if(!$||$.includes(".."))return!1;return MG6.test($)}function wg$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!kG6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function Dg$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var MG6;var Lg$=w(()=>{MG6=/^[\w./@-]+$/});function L91($){let Z;try{Z=new URL($)}catch{return null}if(!Z.hostname.endsWith(".localhost"))return null;let X=Z.host;return Z.hostname="127.0.0.1",{url:Z.toString(),hostHeader:X}}function Ja($,Z){let X=$?.githubRepo;if(!X?.owner||!X?.name)return null;if(!X.connectionId)return X;if(!Z.includes(X.connectionId))return null;return X}async function Eg$($,Z,X,Q){if(!Q.connectionId)throw new k_("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new k_(Z9);await nO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(H)=>{let N=H instanceof Error?H.message:Z9;throw new k_(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await tO(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((H)=>{let{code:N,message:U}=Z4$(H instanceof Error?H.message:String(H));throw N?new k_(U):H}),K=dh($),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 UB(F,VG6).catch(()=>F.statusText);throw Error(`Failed to refresh sandbox git credentials (${F.status}): ${H}`)}}var VG6=10485760,k_;var E91=w(()=>{uG();MP0();gp();cd0();ux();k_=class k_ extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function CG6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!SG6.test(Z))throw Error(`Invalid branch name: ${$}`)}function V_($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(vG6)])}function fG6($,Z,X){let Q=B5($)[Z]?.[X];return!!Q&&Object.keys(AY(Q)).length>0}function S_($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function th($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=Ja(Z,X);if(!Y)throw new Q6(404,"AUTH","repo","Project has no GitHub repository");let G=t(Q);return kP0(Q,G.id,Y)}function j91($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,i5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,i5)}async function Pg$($){try{let Z=await th($),X=await hP0(Z,$.get("vmClaim").branch);return $.json(X,200,i5)}catch(Z){return j91($,Z)}}function Wa($,Z){let Q=(lP0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return lP0.set($,Y),Y.finally(()=>{if(lP0.get($)===Y)lP0.delete($)}),Q}async function dZ($,Z,X){if($.get("vmClaim").fastPreview)return $.json({error:"sandbox not found: Fast Preview projects are sandbox-less"},404,i5);let Q=S_($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,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 O=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&O.status===404){try{await O.body?.cancel()}catch{}if(await Q.adoptLiveClaim?.({userId:G,projectRef:J},Y))O=await Q.proxyDaemonRequest(Y,Z,N);if(O.status===404){try{await O.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...i5}})}}let B=await O.text(),D=X?.redactRepoDirUnlessDesktop&&Q.kind!=="user-desktop"?xG6(B):B,L=O.headers.get("content-type")??"application/json";return new Response(D,{status:O.status,headers:{"content-type":L,...i5}})};try{if(H){let O=U();return O.catch(()=>{}),await Promise.race([O,new Promise((D,L)=>{if(H.aborted)return L(H.reason);H.addEventListener("abort",()=>L(H.reason),{once:!0})})])}return await U()}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:`Daemon unreachable: ${B}`},502)}}function xG6($){try{let Z=JSON.parse($);if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&"repoDir"in Z)return JSON.stringify({...Z,repoDir:null})}catch{}return $}async function dP0($,Z,X,Q="GET",Y){let G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null});if(G.status===404&&Y){try{await G.body?.cancel()}catch{}if(await $.adoptLiveClaim?.(Y,Z))G=await $.proxyDaemonRequest(Z,X,{method:Q,headers:new Headers,body:null})}if(G.status===404){try{await G.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let J=await G.text();if(!G.ok){let W=`Daemon error (${G.status})`;try{W=JSON.parse(J).error??W}catch{}throw Error(W)}return JSON.parse(J)}function yG6($){return Ag$.includes($)}var SG6,jg$=524288,_G6=65536,vG6=1e4,zg$=2000,bG6,lP0,i5,Ag$,Tg$=()=>{let $=new H1;$.use("/:virtualMcpId/:branch/*",bG6),$.post("/:virtualMcpId/:branch/write",(X)=>dZ(X,"/_sandbox/write",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>dZ(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>dZ(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>dZ(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>dZ(X,"/_sandbox/read",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>dZ(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>dZ(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:V_(X)})),$.post("/:virtualMcpId/:branch/exec/:script",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(X)=>{let Q=X.req.param("script");if(!Q)return X.json({error:"missing script name"},400);return dZ(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDirUnlessDesktop:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>dZ(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!yG6(Q))return X.json({error:`step must be one of: ${Ag$.join(", ")}`},400);if(Q==="start"){let Y=X.get("vmClaim");if(Y.runner){let G=t(X.var.studioContext),J=Yy(Y.virtualMcpMetadata);try{await fO0({ctx:X.var.studioContext,runner:Y.runner,handle:Y.claimName,orgId:G.id,userId:Y.callerUserId,entries:J})}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:`Failed to push env to daemon: ${K}`},502)}}}return dZ(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return TN(X,async(Y)=>{await Y.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return Py$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Pg$(X);return Z(X)});let Z=(X)=>dZ(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(zg$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").fastPreview)return Pg$(X);return dZ(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(zg$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)try{let Y=await X.req.json().catch(()=>({})),G=await th(X),J=await uP0(G,Q.branch,Y.base);return X.json(J,200,i5)}catch(Y){return j91(X,Y)}return dZ(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").fastPreview)return X.json({ok:!0},200,i5);let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return Wa(Y,async()=>{try{await s51(W,Q,Y);let K=Ja(G,J);if(K)await Eg$(W,Q,Y,K)}catch(K){if(K instanceof k_)return X.json({error:K.message},403,i5);let F=K instanceof Error?K.message:String(K);return X.json({error:F},502,i5)}return dZ(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Wa(Q.claimName,async()=>{let Y=await X.req.json().catch(()=>({})),G=Array.isArray(Y.filepaths)?Y.filepaths.filter((J)=>typeof J==="string"):[];if(G.length===0)return X.json({error:"filepaths is required"},400,i5);try{let J=await th(X);return await Bg$(J,Q.branch,G),X.json({ok:!0},200,i5)}catch(J){let W=J instanceof Q6&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,i5)}});return Wa(Q.claimName,()=>dZ(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.fastPreview)return Wa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await th(X),F=W.base??await K.getDefaultBranch();return await cP0(K,Q.branch,F),X.json({ok:!0},200,i5)}catch(W){return j91(X,W)}});let Y=S_(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return Wa(G,async()=>{try{await s51(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,i5)}return dZ(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",M9({maxSize:jg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=S_(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,[O,B]=Z91(H)&&U?[H,N]:Y?await Promise.all([dP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await th(X);return Promise.all([hP0(L,Q.branch),uP0(L,Q.branch)])})(),D=await qy$(K,O,B);return X.json(D,200,i5)}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,i5);return X.json({error:H},502,i5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",M9({maxSize:jg$,onError:(X)=>X.json({error:"Payload too large"},413,i5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(!Q.fastPreview){let F=S_(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,[O,B]=Z91(H)&&U?[H,N]:Y?await Promise.all([dP0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dP0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let L=await th(X);return Promise.all([hP0(L,Q.branch),uP0(L,Q.branch)])})(),D=await ky$(K,O,B,typeof F.language==="string"?F.language:void 0);return X.json(D,200,i5)}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,i5);return X.json({error:H},502,i5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,""),K=L91(`${W}${G}`),F;try{F=await fetch(K?.url??`${W}${G}`,{...K?{headers:{host:K.hostHeader}}:{}})}catch{return X.json({error:"Preview unreachable"},502)}let H;try{H=await F.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(H,{status:F.status,headers:{"content-type":F.headers.get("content-type")??"application/json"}})}),$.post("/:virtualMcpId/:branch/preview-invoke",M9({maxSize:_G6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=S_(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G;try{G=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!G)return X.json({error:"Preview not available"},502);let J;try{J=await X.req.json()}catch{return X.json({error:"Invalid JSON body"},400)}if(!J||typeof J!=="object"||Array.isArray(J))return X.json({error:"Invalid JSON body"},400);let W=wg$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=Dg$(G,W.resolveType),F=L91(K),H;try{H=await fetch(F?.url??K,{method:"POST",headers:{"content-type":"application/json",...F?{host:F.hostHeader}:{}},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}catch{return X.json({error:"Preview unreachable"},502)}let N;try{N=await H.text()}catch{return X.json({error:"Preview unreachable"},502)}return new Response(N,{status:H.status,headers:{"content-type":H.headers.get("content-type")??"application/json"}})}),$};var Rg$=w(()=>{D8();BN();lh();a51();TH();jy$();S3();dX();O8();fB0();KB();zy$();Ay$();Fp0();xp();Y91();Vy$();W91();q_();D91();Lg$();E91();SG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;bG6=qP0(async($,Z)=>{let X=$.var.studioContext;try{r(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=G1(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=t(X)}catch{return $.json({error:"Organization scope required"},403)}let G=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!G||!J)return $.json({error:"virtualMcpId and branch are required"},400);try{CG6(J)}catch(O){let B=O instanceof Error?O.message:String(O);return $.json({error:B},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=ei({orgId:Y.id,virtualMcpId:G,branch:J}),F=await vH(X,J,Q),H=Ey$({userId:F,projectRef:K}),N=W.metadata??null;if(LW$(N).fastPreviewCapability&&!fG6(N,F,J))return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[],fastPreview:!0}),Z();let U;try{U=(await oX(X,{userId:F,branch:J,virtualMcpMetadata:N})).provider}catch{U=null}if(!U)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:H,callerUserId:Q,runner:U,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((O)=>O.connection_id)??[]}),Z()});lP0=new Map;i5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Ag$=["clone","install","start"]});function Ig$($,Z,X){let Q=z91.get($);if(!Q)Q={pending:null,running:!1},z91.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)hG6($,Q);return G}async function hG6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await uG6(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)z91.delete($)}}async function uG6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Ga(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getTreeRecursive(J),K=O91(W,Q),F=[],H=new Map(K.map((B)=>[B.path,{stem:B.stem,sha:B.sha}]));for(let[B,D]of $.set){let L=B91(K,B),E=`${JSON.stringify(D,null,2)}
|
|
2833
|
-
`,j=await Z.createBlob(E);await Ng$(Z.owner,Z.repo,j,E);let z=L[0]??`${yP0(Q)}/${K91(B)}.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 L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of B91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Za(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:cG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=gG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function cG6($){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 _d0(Q,$.deps.coAuthor)}var gG6=3,z91;var qg$=w(()=>{qO0();SP0();u4();q_();gP0();z91=new Map});import{createHmac as Mg$,randomBytes as lG6,timingSafeEqual as dG6}from"crypto";function kg$(){if(mP0)return mP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mP0=$?Buffer.from($):lG6(32),mP0}function P91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+mG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Mg$("sha256",kg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Vg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Mg$("sha256",kg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!dG6(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 mG6=21600000,mP0=null;var Sg$=w(()=>{T$()});import{z as oh}from"zod";function pG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&iG6.test($)}function _g$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function iP0($){let Z=$.get("decofileScope");return kP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function pP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function vg$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Cg$),$.use("/:virtualMcpId/:branch/*",Cg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Ug$(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=P91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(_g$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return pP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=nG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await iP0(Z),W=await Ig$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:dh(Q)},G),K=P91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:_g$(Z)})}catch(J){return pP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await cP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return pP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return pP0(Z,Q)}}),$}var iG6,nG6,Cg$;var fg$=w(()=>{SP0();D8();a51();MP0();E91();W91();qg$();Sg$();D91();q_();gP0();iG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;nG6=oh.object({set:oh.record(oh.string(),oh.unknown()).optional(),delete:oh.array(oh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Cg$=qP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!pG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Vg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ja(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 bg$=($)=>{let Z=new H1;if(Z.use("*",D_),Z.route("/",dz0()),Z.route("/",Xf$()),Z.route("/",Gy$()),Z.route("/",Xy$()),Z.route("/",TP0()),Z.route("/tools",Uy$()),Z.route("/",Fy$()),Z.route("/",gx$({kvStorage:$.kvStorage})),Z.route("/",xx$()),Z.route("/fs",ox$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Tg$()),Z.route("/decofile",vg$()),Z.route("/",ex$()),Z.route("/deco-sites",iz0()),Z.route("/sso",yz0()),Z.route("/",RP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",tv$()),$.mountDevAssets)Z.route("/dev-assets",pz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",SC$()),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",ax$()),Z.route("/mcp",aw0()),Z.route("/mcp/self",AP0()),Z.route("/mcp",$D0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var xg$=w(()=>{D8();j61();ov$();T61();nz0();Mr();L61();yx$();hx$();rx$();fn();F61();ZD0();m51();sx$();$y$();Qy$();Jy$();Hy$();p51();Oy$();n51();sw0();Rg$();fg$()});function tG6($){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 oG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},yg$=()=>{let $=new H1;return $.use("*",oG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:tG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var gg$=w(()=>{D8();T$();ij0()});import{z as M1}from"zod";function QF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function GJ6($){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 JJ6($,Z,X){try{return JSON.parse($)}catch{throw new cg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function WJ6($){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:JJ6(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 KJ6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function FJ6($){if(!$)return;return{openai:{response_format:$}}}function HJ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function hg$($,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 ug$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var rG6=256,aG6,sG6,eG6,$J6,ZJ6,XJ6,QJ6,YJ6,cg$,lg$,dg$;var mg$=w(()=>{_4();D8();lh();XN();aG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),sG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),eG6=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(sG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$J6=M1.object({type:M1.literal("text")}),ZJ6=M1.object({type:M1.literal("json_object")}),XJ6=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()})}),QJ6=M1.union([$J6,ZJ6,XJ6]),YJ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(eG6),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(aG6).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:QJ6.optional(),user:M1.string().optional()});cg$=class cg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};lg$=new H1;lg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QF("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(QF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=YJ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=GJ6(G.model);if(!J)return $.json(QF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QF("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(QF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=WJ6(G.messages),U=G.tools?KJ6(G.tools):void 0,O=FJ6(G.response_format),B=HJ6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=hg$(H,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=rG6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:ug$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=hg$(H,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:ug$(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(QF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QF(Y.message,"server_error"),500)}});dg$=lg$});function NJ6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function ig$(){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=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||J7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!NJ6(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 pg$=w(()=>{D8();W_()});var tg$;var ng$=w(()=>{tg$={name:"decocms",version:"4.245.4",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function BJ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??OJ6}}var og$,OJ6="https://ph.studio.decocms.com",rg$;var ag$=w(()=>{D8();Hh0();QC();v9();T$();Y61();ng$();og$=new H1;og$.get("/",($)=>{let Z={version:tg$.version,theme:Ld1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:nV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ov$(),posthog:BJ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});rg$=og$});function rh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function A91($){return(rh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function eg$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(rh($))}&sz=${Z}`}function sg$($,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 $h$($){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()?sg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):sg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,wJ6,DJ6,LJ6,EJ6,Zh$;var Xh$=w(()=>{C_=l0.enum(["good","bad","neutral"]),wJ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),DJ6=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(wJ6)),LJ6={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()},EJ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(DJ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),Zh$=l0.object({...LJ6,template:EJ6})});function nP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Zh$.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 T91=w(()=>{Xh$()});import{join as Qh$}from"path";async function zJ6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(jJ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=nP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||A91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function PJ6($,Z){let X=rh($),Q=Z?.brand?.trim()||A91(X),Y=eg$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=$h$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(F)}" />`,`<meta name="twitter:image:alt" content="${YG(H)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
|
|
2833
|
+
`,j=await Z.createBlob(E);await Ng$(Z.owner,Z.repo,j,E);let z=L[0]??`${yP0(Q)}/${K91(B)}.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 L.slice(1))F.push({path:P,mode:"100644",type:"blob",sha:null}),H.delete(P)}for(let B of $.del)for(let D of B91(K,B))F.push({path:D,mode:"100644",type:"blob",sha:null}),H.delete(D);if(F.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((B)=>B.type==="blob"&&B.path===N)){let B=await Promise.all([...H.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:D,skipped:L}=Za(B);if(L.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:L.map((j)=>j.key)});let E=await Z.createBlob(D);F.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,F),O=await Z.createCommit({message:cG6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,O),O}catch(B){if(!(B instanceof Q6&&B.status===422)||Y>=gG6-1)throw B;await q$(pZ(2000,200,Y,2,0.5))}}}function cG6($){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 _d0(Q,$.deps.coAuthor)}var gG6=3,z91;var qg$=w(()=>{qO0();SP0();u4();q_();gP0();z91=new Map});import{createHmac as Mg$,randomBytes as lG6,timingSafeEqual as dG6}from"crypto";function kg$(){if(mP0)return mP0;let $;try{let Z=b0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mP0=$?Buffer.from($):lG6(32),mP0}function P91($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+mG6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Mg$("sha256",kg$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Vg$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Mg$("sha256",kg$()).update(Q).digest("base64url"));if(Y.length!==G.length||!dG6(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 mG6=21600000,mP0=null;var Sg$=w(()=>{T$()});import{z as oh}from"zod";function pG6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&iG6.test($)}function _g$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function iP0($){let Z=$.get("decofileScope");return kP0($.var.studioContext,Z.organizationId,Z.githubRepo)}function pP0($,Z){if(Z instanceof Q6){let Q=Z.status===404?404:Z.status===409?409:Z.status===422?409:502;return $.json({error:Z.message},Q)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},500)}function vg$(){let $=new H1;return $.use("/:virtualMcpId/:branch",Cg$),$.use("/:virtualMcpId/:branch/*",Cg$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Ug$(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=P91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(_g$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return pP0(Z,Q)}}),$.patch("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=nG6.safeParse(await Z.req.json().catch(()=>null));if(!Y.success)return Z.json({error:"Invalid body",details:Y.error.issues},400);let G=Y.data;for(let J of[...Object.keys(G.set??{}),...G.delete??[]])try{VP0(J)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[J,W]of Object.entries(G.set??{}))if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${J}" must be a JSON object`},400);try{let J=await iP0(Z),W=await Ig$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:dh(Q)},G),K=P91({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:_g$(Z)})}catch(J){return pP0(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({error:"Branch is already the default branch"},400);let G=`chore(decofile): publish ${X.branch}`;try{let J;try{J=await Q.mergeBranch(Y,X.branch,G)}catch(W){if(!(W instanceof Q6&&W.status===409))throw W;await cP0(Q,X.branch,Y),J=await Q.mergeBranch(Y,X.branch,G)}return J?Z.json({result:"merged",sha:J}):Z.json({result:"up-to-date"})}catch(J){if(J instanceof Q6&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof Q6&&J.status===405){let K=await Q.findOpenPullRequest(Y,X.branch)??await Q.createPullRequest({base:Y,head:X.branch,title:`Publish ${X.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.html_url})}throw J}}catch(Q){return pP0(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await iP0(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});try{let{aheadBy:G,behindBy:J}=await Q.compare(Y,X.branch);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J})}catch(G){if(G instanceof Q6&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0});throw G}}catch(Q){return pP0(Z,Q)}}),$}var iG6,nG6,Cg$;var fg$=w(()=>{SP0();D8();a51();MP0();E91();W91();qg$();Sg$();D91();q_();gP0();iG6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;nG6=oh.object({set:oh.record(oh.string(),oh.unknown()).optional(),delete:oh.array(oh.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}),Cg$=qP0(async($,Z)=>{let X=$.var.studioContext,Q=X.organization;if(!Q)return $.json({error:"Organization scope required"},500);let Y=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!Y||!G)return $.json({error:"virtualMcpId and branch are required"},400);if(!pG6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let O=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!O||!Vg$(O,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!vB0(K)||K?.fastPreview!==!0)return $.json({error:"Fast Preview is not enabled for this project"},404);let H=W.connections?.map((O)=>O.connection_id)??[],N=Ja(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 bg$=($)=>{let Z=new H1;if(Z.use("*",D_),Z.route("/",dz0()),Z.route("/",Xf$()),Z.route("/",Gy$()),Z.route("/",Xy$()),Z.route("/",TP0()),Z.route("/tools",Uy$()),Z.route("/",Fy$()),Z.route("/",gx$({kvStorage:$.kvStorage})),Z.route("/",xx$()),Z.route("/fs",ox$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Tg$()),Z.route("/decofile",vg$()),Z.route("/",ex$()),Z.route("/deco-sites",iz0()),Z.route("/sso",yz0()),Z.route("/",RP0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",tv$()),$.mountDevAssets)Z.route("/dev-assets",pz0({orgFromPath:!0}));return Z.use("/mcp/:connectionId?",$.mcpAuth),Z.use("/mcp/:connectionId/ui-resource",$.mcpAuth),Z.use("/mcp/gateway/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/virtual-mcp/:virtualMcpId?",$.mcpAuth),Z.use("/mcp/self",$.mcpAuth),Z.use("/mcp/task-run/:threadId",$.mcpAuth),Z.route("/",SC$()),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",ax$()),Z.route("/mcp",aw0()),Z.route("/mcp/self",AP0()),Z.route("/mcp",$D0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var xg$=w(()=>{D8();j61();ov$();T61();nz0();Mr();L61();yx$();hx$();rx$();fn();F61();ZD0();m51();sx$();$y$();Qy$();Jy$();Hy$();p51();Oy$();n51();sw0();Rg$();fg$()});function tG6($){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 oG6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},yg$=()=>{let $=new H1;return $.use("*",oG6),$.get("/",async(Z)=>{let X=b0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await lZ(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:tG6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var gg$=w(()=>{D8();T$();ij0()});import{z as M1}from"zod";function QF($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function GJ6($){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 JJ6($,Z,X){try{return JSON.parse($)}catch{throw new cg$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function WJ6($){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:JJ6(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 KJ6($){let Z=$.map((X)=>{let Q=X.function.parameters?xY(X.function.parameters):xY({type:"object",properties:{}});return[X.function.name,b$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function FJ6($){if(!$)return;return{openai:{response_format:$}}}function HJ6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function hg$($,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 ug$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var rG6=256,aG6,sG6,eG6,$J6,ZJ6,XJ6,QJ6,YJ6,cg$,lg$,dg$;var mg$=w(()=>{_4();D8();lh();XN();aG6=M1.object({type:M1.literal("function"),function:M1.object({name:M1.string(),description:M1.string().optional(),parameters:M1.record(M1.string(),M1.unknown()).optional()})}),sG6=M1.object({id:M1.string(),type:M1.literal("function"),function:M1.object({name:M1.string(),arguments:M1.string()})}),eG6=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(sG6).optional()}),M1.object({role:M1.literal("tool"),content:M1.string(),tool_call_id:M1.string()})]),$J6=M1.object({type:M1.literal("text")}),ZJ6=M1.object({type:M1.literal("json_object")}),XJ6=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()})}),QJ6=M1.union([$J6,ZJ6,XJ6]),YJ6=M1.object({model:M1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:M1.array(eG6),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(aG6).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:QJ6.optional(),user:M1.string().optional()});cg$=class cg$ extends Error{constructor($){super($);this.name="MessageConversionError"}};lg$=new H1;lg$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(QF("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(QF("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(QF("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=YJ6.safeParse(Q);if(!Y.success){let L=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(QF(`Invalid request: ${L.message}`,"invalid_request_error",L.path.length>0?L.path.join("."):null),400)}let G=Y.data,J=GJ6(G.model);if(!J)return $.json(QF("Invalid model format. Expected 'model_id' or 'credential_id:model_id' (e.g., 'claude-sonnet-4-6' or 'key_abc123:claude-sonnet-4-6')","invalid_request_error","model"),400);let{credentialId:W}=J,{modelId:K}=J;if(!W){let E=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((j)=>VD(j.providerId));if(!E)return $.json(QF("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(QF(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let H=F.aiSdk.languageModel(K),N=WJ6(G.messages),U=G.tools?KJ6(G.tools):void 0,O=FJ6(G.response_format),B=HJ6(),D=Math.floor(Date.now()/1000);if(G.stream)return TN($,async(L)=>{let E=hg$(H,N,U,G,O,$.req.raw.signal);try{let j=iO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let q=P;P="",await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of j.fullStream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=rG6)await I()}else if(q.type==="tool-call"){await I();let k=A++;await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:k,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await I(),await L.writeSSE({data:JSON.stringify({id:B,object:"chat.completion.chunk",created:D,model:G.model,choices:[{index:0,delta:{},finish_reason:ug$(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await I(),await L.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await L.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let L=hg$(H,N,U,G,O,$.req.raw.signal),E=await dO(L),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:B,object:"chat.completion",created:D,model:G.model,choices:[{index:0,message:j,finish_reason:ug$(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(QF("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(QF(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(QF(Y.message,"server_error"),500)}});dg$=lg$});function NJ6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function ig$(){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=G1(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!oK(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let F of J){if(!F.slug||J7(F))continue;let H=await X.storage.virtualMcps.list(F.id);for(let N of H){if(N.title.toLowerCase()!==G)continue;if(!NJ6(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 pg$=w(()=>{D8();W_()});var tg$;var ng$=w(()=>{tg$={name:"decocms",version:"4.246.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@nats-io/jwt":"0.0.10-5","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function BJ6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??OJ6}}var og$,OJ6="https://ph.studio.decocms.com",rg$;var ag$=w(()=>{D8();Hh0();QC();v9();T$();Y61();ng$();og$=new H1;og$.get("/",($)=>{let Z={version:tg$.version,theme:Ld1(),...jL().logo&&{logo:jL().logo},...TK()&&{internalUrl:nV1()},...b0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!b0().firecrawlApiKey,auth:Ov$(),posthog:BJ6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:!TK()&&b0().sandboxProviderKind==="agent-sandbox"}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});rg$=og$});function rh($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function A91($){return(rh($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function eg$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(rh($))}&sz=${Z}`}function sg$($,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 $h$($){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()?sg$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):sg$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as l0}from"zod";var C_,wJ6,DJ6,LJ6,EJ6,Zh$;var Xh$=w(()=>{C_=l0.enum(["good","bad","neutral"]),wJ6=l0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},l0.object({kind:l0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:l0.coerce.string().optional(),tone:C_.optional(),muted:l0.boolean().optional(),delta:l0.coerce.string().optional(),deltaDir:l0.enum(["up","down","neutral"]).optional(),points:l0.array(l0.coerce.number()).optional(),label:l0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),DJ6=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(wJ6)),LJ6={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()},EJ6=l0.discriminatedUnion("template",[l0.object({template:l0.literal("cover"),score:l0.object({value:l0.coerce.number(),max:l0.coerce.number().optional(),grade:l0.coerce.string().optional(),label:l0.coerce.string().optional()}).optional(),brandImage:l0.coerce.string().optional(),screenshot:l0.coerce.string().optional(),mobileScreenshot:l0.coerce.string().optional()}),l0.object({template:l0.literal("cta"),ctaUrl:l0.coerce.string().optional(),ctaLabel:l0.coerce.string().optional(),bullets:l0.array(l0.coerce.string()).optional()}),l0.object({template:l0.literal("series"),points:l0.array(l0.coerce.number()).min(2),xLabels:l0.array(l0.coerce.string()).min(1),unit:l0.coerce.string().optional(),callout:l0.object({index:l0.coerce.number(),value:l0.coerce.string(),tone:C_.optional()})}),l0.object({template:l0.literal("threshold"),value:l0.coerce.string().default(""),metricLabel:l0.coerce.string().optional(),ratio:l0.coerce.number(),thresholdRatio:l0.coerce.number().optional(),thresholdLabel:l0.coerce.string().default(""),tone:C_.optional()}),l0.object({template:l0.literal("stats"),stats:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("bars"),items:l0.array(l0.object({value:l0.coerce.string(),label:l0.coerce.string(),ratio:l0.coerce.number(),tone:C_.optional()})).min(1)}),l0.object({template:l0.literal("gauges"),gauges:l0.array(l0.object({label:l0.coerce.string(),value:l0.coerce.string(),status:l0.enum(["good","warn","bad"]).catch("warn"),caption:l0.coerce.string().optional(),ratio:l0.coerce.number().optional()})).min(1)}),l0.object({template:l0.literal("checklist"),checks:l0.array(l0.object({label:l0.coerce.string(),status:l0.enum(["pass","fail","warn"]).catch("fail"),value:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("table"),columns:l0.array(l0.object({label:l0.coerce.string(),align:l0.enum(["left","right"]).optional()})).min(1),rows:l0.array(DJ6).min(1),highlightRow:l0.coerce.number().optional()}),l0.object({template:l0.literal("products"),products:l0.array(l0.object({name:l0.coerce.string(),price:l0.coerce.string().optional(),image:l0.coerce.string().optional(),url:l0.coerce.string().optional()})).min(1)}),l0.object({template:l0.literal("list"),entries:l0.array(l0.object({label:l0.coerce.string(),severity:l0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:l0.coerce.number().optional()}),l0.object({template:l0.literal("keywords"),volumeLabel:l0.coerce.string().optional(),keywords:l0.array(l0.object({term:l0.coerce.string(),volume:l0.coerce.string(),position:l0.coerce.number().catch(0)})).min(1)}),l0.object({template:l0.literal("competitor"),metricLabel:l0.coerce.string().optional(),competitors:l0.array(l0.object({name:l0.coerce.string(),value:l0.coerce.string(),tone:C_.optional(),isYou:l0.boolean().optional()})).min(1)}),l0.object({template:l0.literal("scorecard"),rivalLabel:l0.coerce.string().optional(),dimensions:l0.array(l0.object({label:l0.coerce.string(),you:l0.coerce.string(),rival:l0.coerce.string().optional(),rivalName:l0.coerce.string().optional(),tone:C_.optional()})).min(1)})]),Zh$=l0.object({...LJ6,template:EJ6})});function nP0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=Zh$.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 T91=w(()=>{Xh$()});import{join as Qh$}from"path";async function zJ6($){try{let Z=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(jJ6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=nP0(X);if(!Q.slides.length)return null;let Y=Q.slides.find((W)=>W.template.template==="cover"),G=Y?.template,J=G&&G.template==="cover"?G:void 0;return{brand:Q.meta.brand?.trim()||A91($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function YG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function PJ6($,Z){let X=rh($),Q=Z?.brand?.trim()||A91(X),Y=eg$(X,128),J=`${(b0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=$h$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),F=`${J}/og.png`,H=`${Q} commerce report by decocms`;return[`<title>${YG(W)}</title>`,`<meta name="description" content="${YG(K)}" />`,'<meta name="robots" content="noindex, follow" />','<meta property="og:type" content="website" />','<meta property="og:site_name" content="decocms" />',`<meta property="og:title" content="${YG(W)}" />`,`<meta property="og:description" content="${YG(K)}" />`,`<meta property="og:url" content="${YG(J)}" />`,`<meta property="og:image" content="${YG(F)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${YG(H)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${YG(W)}" />`,`<meta name="twitter:description" content="${YG(K)}" />`,`<meta name="twitter:image" content="${YG(F)}" />`,`<meta name="twitter:image:alt" content="${YG(H)}" />`,`<link rel="canonical" href="${YG(J)}" />`,`<link rel="icon" href="${YG(Y)}" sizes="any" />`].join(`
|
|
2834
2834
|
`)}function AJ6($,Z){return $.replace(/<title>[\s\S]*?<\/title>\s*/i,"").replace(/<meta\s+name="(?:description|twitter:[^"]*)"[^>]*>\s*/gi,"").replace(/<meta\s+property="og:[^"]*"[^>]*>\s*/gi,"").replace(/<link\s+rel="icon"[^>]*>\s*/gi,"").replace("</head>",` ${Z}
|
|
2835
2835
|
</head>`)}function Yh$($){let Z=new H1;return Z.get("/:domain/og.png",async(X)=>{let Q=rh(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(Qh$($,"report-og-fallback.png")):null;if(!G||!await G.exists())return X.notFound();return X.body(new Uint8Array(await G.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let G=await fetch(`${oW({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(TJ6)}),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=$?Qh$($,"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 zJ6(rh(Q)),K=PJ6(Q,W);return X.html(AJ6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var jJ6=2500,TJ6=1e4;var Gh$=w(()=>{D8();T91();vL();T$()});function Ka($,Z){return fetch(`${oW({})}${$}`,Z)}async function RJ6($,Z,X){let Q=new URLSearchParams;if(Z)Q.set("pw",Z);if(X)Q.set("lang",X);let Y=Q.toString()?`?${Q.toString()}`:"",G=await Ka(`/api/v2/public/diagnostics/${encodeURIComponent($)}${Y}`,{headers:{Accept:"application/json"}});if(G.status===404)return{status:"not_found",deck:null,scanned_at:null,drops:[]};if(!G.ok)throw Error(`report read HTTP ${G.status}`);let J=await G.json(),{deck:W,drops:K}=nP0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var IJ6,IN,Jh$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},Wh$;var Kh$=w(()=>{D8();_Y();vL();T91();IJ6=new Set(["complete","errored","terminated","unknown"]),IN=new H1;IN.use("*",async($,Z)=>{let X=await F8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",X?.user?.id?{email:X.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});IN.use("/link-token/*",Jh$);IN.use("/suggest",Jh$);IN.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let X=$.get("reportUser"),Q=$.req.query("key")?.trim()||void 0,Y=$.req.query("lang")?.trim()||void 0;try{let G=await RJ6(Z,Q,Y);if($.header("Cache-Control","private, no-store"),X||!G.deck)return $.json(G);return $.json({...G,deck:{...G.deck,slides:G.deck.slides.slice(0,1)},truncated:G.status==="ready"})}catch{return $.json({error:"report read failed"},502)}});IN.post("/run",async($)=>{let Z=$.get("reportUser"),X;try{X=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let Q=typeof X.domain==="string"?X.domain.trim():"";if(!Q)return $.json({error:"domain is required"},400);let Y=Z?.email,G=typeof X.distinctId==="string"&&X.distinctId.trim()&&X.distinctId.length<=200?X.distinctId.trim():void 0;try{let J=await Ka("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${_L({})}`},body:JSON.stringify({url:Q,...Y?{email:Y}:{},distinct_id:G})});if(!J.ok)return $.json({error:`run HTTP ${J.status}`},502);let W=await J.json(),K=W.blocked?{state:"blocked"}:W.status==="fresh"?{state:"fresh"}:W.mode==="sync"?{state:"sync"}:{state:"running",id:W.id??null};return $.json(K)}catch{return $.json({error:"run failed"},502)}});IN.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await Ka(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${_L({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:IJ6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});IN.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await Ka(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(X.status===404)return $.json(null);if(!X.ok)return $.json({error:`link token HTTP ${X.status}`},502);return $.json(await X.json())}catch{return $.json({error:"link token resolve failed"},502)}});IN.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await Ka(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!X.ok)return $.json({suggestions:[]});let Q=await X.json();return $.json({suggestions:Array.isArray(Q.suggestions)?Q.suggestions:[]})}catch{return $.json({suggestions:[]})}});Wh$=IN});import{createHmac as qJ6,timingSafeEqual as MJ6}from"crypto";function Hh$($,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)>kJ6)return!1;let W=qJ6("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&&MJ6(K,H)})}function Nh$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=PJ(Z),Q=PJ(PJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:YF(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 Uh$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function YF($){return typeof $==="string"?$:void 0}function PJ($){return typeof $==="object"&&$!==null?$:void 0}function tP0($){return typeof $==="number"?new Date($*1000):null}function q91($){return YF($)??YF(PJ($)?.id)}function VJ6($){return q91($.subscription)??YF(PJ(PJ($.parent)?.subscription_details)?.subscription)}function SJ6($){let Z=tP0($.current_period_end);if(Z)return Z;let X=PJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=PJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function R91($,Z){let X=tP0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function I91($,Z){let X=tP0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function CJ6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=YF(PJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(YF(PJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(YF(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=YF(X.id);if(!J)return console.error("stripe webhook: topup session without id",{eventId:Z.id,organizationId:Q}),{handled:!1,reason:"topup session without id"};let W=Number(PJ(X.metadata)?.creditCents);if(!Number.isInteger(W)||W<=0)return console.error("stripe webhook: paid topup with bad metadata \u2014 credit NOT applied",{eventId:Z.id,organizationId:Q,creditCents:PJ(X.metadata)?.creditCents}),{handled:!1,reason:"bad topup metadata"};return{handled:!0,organizationId:Q,topUp:{creditCents:W,referenceId:`stripe-topup:${J}`}}}if(X.mode!=="subscription")return{handled:!1,reason:"not a subscription checkout"};if(YF(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=q91(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(R91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:q91(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:I91(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=YF(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&&R91(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":Uh$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:SJ6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:I91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=VJ6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(R91(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:tP0(X.period_end),lastStripeEventAt:I91(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function _J6($,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:Uh$(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 Fh$($,Z){let X=_J6($,Z);if(!X)return;MY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Ii1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Oh$($){let Z=new iW(p8().db),X=await CJ6(Z,$);if(!(X.handled&&X.topUp))Fh$($,X);if(X.handled&&X.topUp)await Gw$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),Fh$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await ha1(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof vY&&(Q.status===400||Q.status===404)))throw Q}return X}var kJ6=300;var Bh$=w(()=>{_G();M4();H60();lL();cs0()});var vJ6=1048576,M91;var wh$=w(()=>{D8();BN();T$();Bh$();M91=new H1;M91.post("/webhook",M9({maxSize:vJ6,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(!Hh$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=Nh$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Oh$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as fJ6}from"crypto";function xJ6($,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 fJ6(Buffer.from(Y),Buffer.from(Q))}var bJ6=5242880,k91;var Dh$=w(()=>{D8();BN();vp();k91=new H1;k91.post("/webhook",M9({maxSize:bJ6,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(!xJ6(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 Qp0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Lh$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Eh$,yJ6,gJ6,jh$;var zh$=w(()=>{D8();K3();zy();Lx();Eh$=new H1,yJ6=["range","if-none-match","if-modified-since"],gJ6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Eh$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(Rh($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new $$(401,{message:"Authentication required"})}if(!X)throw new $$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new $$(400,{message:"Missing file key"});let Y=await Fn(Q,Z);if(!Y)throw new $$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&O3()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new $$(500,{message:"Invalid data URL from storage"});let[,F,H]=K,N=Buffer.from(H,"base64"),U=new Headers({"Content-Type":F,"Cache-Control":"private, max-age=86400"});return Lh$(U,F),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of yJ6){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 $$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new $$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of gJ6){let F=J.headers.get(K);if(F)W.set(K,F)}return W.set("Cache-Control","private, max-age=86400"),Lh$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});jh$=Eh$});var Fa=_((__)=>{var hJ6=__&&__.__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]}),uJ6=__&&__.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))hJ6(Z,$,X)};Object.defineProperty(__,"__esModule",{value:!0});uJ6(HY(),__)});var Th$=_((Ph$)=>{Object.defineProperty(Ph$,"__esModule",{value:!0});Ph$.version=void 0;Ph$.version="3.4.0"});var qh$=_((GF)=>{var cJ6=GF&&GF.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(GF,"__esModule",{value:!0});GF.NodeTransport=GF.VERSION=void 0;GF.nodeResolveHost=nJ6;var o6=Fa(),lJ6=z0("net"),V91=z0("tls"),dJ6=z0("path"),Rh$=z0("fs"),mJ6=cJ6(z0("dns")),iJ6=Th$();GF.VERSION=iJ6.version;var pJ6="nats.js";class Ih${socket;version;lang;yields=[];signal=(0,o6.deferred)();closedNotification=(0,o6.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=pJ6,this.version=GF.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:X}=this.options,{handshakeFirst:Q}=X||{};try{if(Q===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let Y=await this.peekInfo();(0,o6.checkOptions)(Y,Z);let{tls_required:G,tls_available:J}=Y,W=J===!0&&Z.tls!==null;if(!Q&&(G||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(G&&this.socket.encrypted!==!0)throw o6.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(Y){let G=Y;if(!G)G=new o6.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new o6.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,o6.deferred)(),X,Q=(0,lJ6.createConnection)($.port,$.hostname,()=>{Z.resolve(Q),Q.removeAllListeners()});return Q.on("error",(Y)=>{X=Y}),Q.on("close",()=>{Q.removeAllListeners(),Z.reject(X)}),Q.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,o6.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=o6.DataBuffer.concat(...this.yields),Y=(0,o6.extractProtocolMessage)(Q);if(Y!=="")try{let G=o6.INFO.exec(Y);if(!G)throw Error("unexpected response from server");let J=JSON.parse(G[1]);$.resolve(J)}catch(G){$.reject(G)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(X)=>{Z=X}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,o6.deferred)();try{if($=(0,dJ6.resolve)($),!(0,Rh$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Rh$.readFile)($,(X,Q)=>{if(X)return Z.reject(X);Z.resolve(Q)})}catch(X){Z.reject(X)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:X,caFile:Q,ca:Y,keyFile:G,key:J}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(X)$.cert=X;if(G){let W=await this.loadFile(G);if(W)$.key=W}else if(J)$.key=J;if(Q){let W=await this.loadFile(Q);if(W)$.ca=[W]}else if(Y)$.ca=Y;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,X={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)X.socket=this.socket;if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};X=(0,o6.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,o6.deferred)();try{let Y=(0,V91.connect)($.port,$.hostname,X,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(G)=>{Z=G}),Y.on("secureConnect",()=>{if(X.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject(Z),Y.removeAllListeners()}),Y.setNoDelay(!0)}catch(Y){Q.reject(new o6.errors.ConnectionError(Y.message,{cause:Y}))}return Q}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Q=await this.loadClientCerts()||{};Z=(0,o6.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,o6.deferred)();try{let Q=(0,V91.connect)(Z,()=>{Q.removeAllListeners(),X.resolve(Q)});Q.on("error",(Y)=>{$=Y}),Q.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Q.authorized)throw Q.authorizationError}),Q.on("close",()=>{X.reject($),Q.removeAllListeners()})}catch(Q){X.reject(new o6.errors.ConnectionError(Q.message,{cause:Q}))}return X}setupHandlers(){let $;this.socket.on("data",(Z)=>{return this.yields.push(Z),this.signal.resolve()}),this.socket.on("error",(Z)=>{$=Z}),this.socket.on("end",()=>{if(this.socket?.destroyed)return;this.socket?.write(new Uint8Array(0),()=>{this.socket?.end()})}),this.socket.on("close",()=>{this._closed($,!1)})}[Symbol.asyncIterator](){return this.iterate()}async*iterate(){while(!0){if(this.yields.length===0)await this.signal;let $=this.yields;this.yields=[];for(let Z=0;Z<$.length;Z++){if(this.options.debug)console.info(`> ${(0,o6.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,o6.deferred)()}}discard(){if(this.done=!0,this.socket)try{this.socket.removeAllListeners(),this.socket.destroy()}catch{}}disconnect(){this._closed(void 0,!0).then().catch()}isEncrypted(){return this.socket instanceof V91.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,o6.render)($)}`);let Z=(0,o6.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,o6.render)($)}: ${X}`);Z.reject(X)}return Z}send($){this._send($).catch((X)=>{})}async _closed($,Z=!0){if(!this.connected)return;if(this.done){this.socket?.destroy();return}if(this.closeError=$,!$&&this.socket&&Z)try{await this._send(new TextEncoder().encode(""))}catch(X){if(this.options.debug)console.log("transport close terminated with an error",X)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(X){console.log(X)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}GF.NodeTransport=Ih$;function nJ6($){let Z=(0,o6.deferred)();return mJ6.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 Ch$=_((Sh$)=>{Object.defineProperty(Sh$,"__esModule",{value:!0});Sh$.connect=tJ6;var Mh$=qh$(),kh$=Fa(),Vh$=Fa();function tJ6($={}){if((0,Vh$.hasWsProtocol)($))return Promise.reject(Vh$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,kh$.setTransportFactory)({factory:()=>{return new Mh$.NodeTransport},dnsResolveFn:Mh$.nodeResolveHost}),kh$.NatsConnectionImpl.connect($)}});var _h$=_((qN)=>{var rJ6=qN&&qN.__createBinding||(Object.create?function($,Z,X,Q){if(Q===void 0)Q=X;var Y=Object.getOwnPropertyDescriptor(Z,X);if(!Y||("get"in Y?!Z.__esModule:Y.writable||Y.configurable))Y={enumerable:!0,get:function(){return Z[X]}};Object.defineProperty($,Q,Y)}:function($,Z,X,Q){if(Q===void 0)Q=X;$[Q]=Z[X]}),aJ6=qN&&qN.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))rJ6(Z,$,X)};Object.defineProperty(qN,"__esModule",{value:!0});qN.connect=void 0;var sJ6=Ch$();Object.defineProperty(qN,"connect",{enumerable:!0,get:function(){return sJ6.connect}});aJ6(Fa(),qN)});function xh$($){let Z=$?.connectFn??X36,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 O of U.status())if(O.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(O.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,F()})().catch(()=>{})}async function N(U,O){let B=0;while(!G)try{X=await Z({servers:U,timeout:Z36,reconnect:!0,maxReconnectAttempts:-1,...O?{authenticator:O}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${B} attempt(s)`),Q=null,J=!1,H(X),F();return}catch{B++;let D=pZ($36,eJ6,B-1,2,0.5);await q$(D)}}return{init(U,O){if(Y)return;Y=!0,G=!1;let B=O?.creds?vh$.credsAuthenticator(new TextEncoder().encode(O.creds)):void 0;N(U,B).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=bh$.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 X36($){return fh$.connect($)}var vh$,fh$,bh$,eJ6=100,$36=3000,Z36=3000;var yh$=w(()=>{u4();vh$=V(Pu(),1),fh$=V(_h$(),1),bh$=V(bw(),1)});function S91($,Z){return`${$}.${Z}`}class C91{cache;constructor($){this.cache=Nh({ttlMs:$?.ttlMs??Q36,maxSize:$?.maxSize??Y36})}async get($,Z){return this.cache.get(S91($,Z))??null}async set($,Z,X){this.cache.set(S91($,Z),X)}async invalidate($,Z){this.cache.delete(S91($,Z))}teardown(){this.cache.clear()}}var Q36=600000,Y36=5000;var gh$=()=>{};function oP0($,Z){return`${$}:${Z}`}function _91($){let Z=Nh({ttlMs:$?.ttlMs??G36,maxSize:$?.maxSize??J36}),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(hh$,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(oP0(K,F))},set(K,F,H){Z.set(oP0(K,F),H)},invalidate(K,F){Z.delete(oP0(K,F)),W(K,F)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(hh$),(async()=>{for await(let F of J)try{let H=JSON.parse(G.decode(F.data));if(H.originId===Q)continue;Z.delete(oP0(H.organizationId,H.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var hh$="studio.ai-provider-keys.invalidate",G36=30000,J36=5000;var uh$=()=>{};class v91{options;subscriptions=[];onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();seenMessageIds=new Set;constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscriptions.length>0)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder;this.subscriptions=ch$.map((Q)=>Z.subscribe(Q));for(let Q of this.subscriptions)(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;if(G.messageId&&this.hasSeen(G.messageId))continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId,messageId:crypto.randomUUID()}));for(let Q of ch$)Z.publish(Q,X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}publishControlFrame($,Z){}async stop(){for(let $ of this.subscriptions)$.unsubscribe();this.subscriptions=[],this.seenMessageIds.clear(),this.onCancel=null}hasSeen($){if(this.seenMessageIds.has($))return!0;if(this.seenMessageIds.add($),this.seenMessageIds.size>1000){let Z=this.seenMessageIds.values().next().value;if(Z)this.seenMessageIds.delete(Z)}return!1}}var ch$;var lh$=w(()=>{ch$=["studio.decopilot.cancel","mesh.decopilot.cancel"]});var dh$=($)=>{let Z;return()=>Z??=$()},f91,b91;var mh$=w(()=>{b6();f91=dh$(()=>S$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),b91=dh$(()=>S$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function O36(){return{name:mH,subjects:[`${Dw0}.>`],storage:GW.StorageType.File,max_age:F36,max_bytes:N36,max_msgs_per_subject:U36,discard:GW.DiscardPolicy.Old,retention:GW.RetentionPolicy.Limits,duplicate_window:H36,num_replicas:1}}class nh${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 ih$($){let Z=ph$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function L36($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,K36().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 E36($){if(!($ instanceof Error))return!1;if($.name==="TimeoutError")return!0;return/timeout|no responders|503/i.test($.message)}class x91{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=O36(),X=await N9(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await GW.jetstreamManager($);try{await Q.streams.info(mH),await Q.streams.update(mH,Z)}catch(Y){if(Y instanceof Error&&Y.message.includes("stream not found"))await Q.streams.add(Z);else if(Y instanceof Error&&/can ?not change.*storage|storage type/i.test(Y.message))await Q.streams.delete(mH),await Q.streams.add(Z);else throw Y}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:E36});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=L36(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let F=yF$(Z);Y.publish(F.subject,F.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(F)=>{let H=performance.now(),N=ht0(F,{runId:Z}),U=performance.now()-H;if(f91().record(U),b91().add(1,{"org.id":Q??"unknown"}),D36?.record(U,N.reduce((O,B)=>O+B.data.length,0)),N.length===0){console.warn(`[Decopilot] dropping oversized stream chunk for thread ${Z}`);return}for(let O of N)G.publish(Y,O.subject,O.data,O.headers?ih$(O.headers):void 0)};return(async()=>{let F=$.getReader(),H=0,N=0,U;try{while(!0){let{done:O,value:B}=await F.read();if(O)break;if(K(B),N++,++H>=64)H=0,await new Promise((D)=>setImmediate(D))}}catch(O){U=O,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,O?.message??O)}finally{if(F.releaseLock(),W(),w36)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=ht0(Z,{runId:$,dedup:X});if(f91().record(performance.now()-Y),b91().add(1),G.length===0)return console.warn(`[Decopilot] dropping oversized raw chunk for thread ${$} (> MAX_CHUNKED_BYTES)`),!0;for(let J of G)await Q.publish(J.subject,J.data,{...J.headers?{headers:ih$(J.headers)}:{},...J.msgId?{msgID:J.msgId}:{}});return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=xF$({runId:$,fenceToken:Z,finalSeq:X});return await Q.publish(Y.subject,Y.data,{msgID:Y.msgId}),!0}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?GW.DeliverPolicy.New:GW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=MB($),W;try{W=await(await Q.consumers.get(mH,{filter_subjects:J,deliver_policy:Y})).consume()}catch(D){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",D?.message??D),null}let H=Pw0({messages:async function*(){try{for await(let D of W)yield{subject:D.subject,data:D.data,headers:D.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(Lw0()).pipeThrough(Ew0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{H.releaseLock()}catch{}},O=!1,B=()=>{if(O)return;O=!0,W.stop(),H.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",B,{once:!0}),new ReadableStream({async pull(D){for(;;){let{done:L,value:E}=await H.read();if(L){B(),D.close();return}let j=E;if(j.kind==="done"){if(G){B(),D.close();return}continue}D.enqueue(j.chunk);return}},cancel(){B()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(mH,{filter:MB($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var GW,ph$,W36=($)=>{let Z;return()=>Z??=$()},K36,F36=86400000000000,H36=120000000000,N36=4294967296,U36=500000,B36,w36,D36;var th$=w(()=>{u4();ut0();Aw0();jw0();b6();mh$();GW=V(bw(),1),ph$=V(Pu(),1),K36=W36(()=>S$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"}));B36=process.env.STREAM_ENCODE_TRACE==="1",w36=process.env.DECOPILOT_STREAM_TRACE==="1";D36=B36?new nh$:null});function rP0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,kW(X,Q.status,{title:Q.title??void 0,virtualMcpId:Q.virtual_mcp_id??void 0,createdBy:Q.created_by??void 0,triggerId:Q.trigger_id??null,branch:Q.branch??null,harnessId:Q.harness_id??void 0,createdAt:Q.created_at,updatedAt:Q.updated_at})),!0}var oh$=w(()=>{O8()});class y91{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 rh$($,Z,X){let Q=Z.organizationId;if(Z.status!=="in_review")return!1;if(!zr(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.taskBoard.update(Z.id,Q,{status:"done"},Z.updatedBy);return await C6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:"done",reason:"pr_merged"}}),H8(Q,Y),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to done`),!0}var ah$=w(()=>{sX();Pr();h5()});function I36($){return $ instanceof n7}function q36($,Z){return Z-$>=T36}class g91{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??j36;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??P36,X=this.options.itemIntervalMs??z36,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()-Cn0),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()-R36));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 Kt0(this.taskBoard,Y,Q),await Ft0(this.taskBoard,this.billing,Y,Q)}catch(G){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${X} failed`,G)}}async dispatchDueRetries($){let Z=0,X=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Q,organizationId:Y,attempts:G}of X)try{if(!await this.taskBoard.claimDueRetry(Q,Y,new Date))continue;let J=await this.taskBoard.getById(Q,Y);if(!J||J.status!=="in_progress"||J.assigneeId!==n8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await iH(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),I36(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()+A36)).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(()=>{}),H8(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(!q36(LH(X),Date.now()))return;await qK($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,X){if(!await this.taskBoard.claimSweep($,Z,X))return!1;let Q=await this.taskBoard.getById($,Z);if(!Q)return!1;if(Q.status!=="in_review")return!1;let Y=Q.assigneeId===n8,G=await this.taskBoard.listPrs($,Z),J=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!J)return!1;if(G.length===0){if(Y)await this.handOffReviewWithoutPr(J,Q);return!1}let W=await Promise.all(G.map(async(K)=>({...K,...await by(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await rh$(J,Q,W.map((K)=>K.merged)))return!0;if(await oH$(J,Q))return!0;if(!Y)return!1;if(!Eo0(W))return!1;return await kw0(J,Q,{previewMatchesHead:jo0(W)}),!0}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var j36=60000,z36=300000,P36=50,A36=60000,T36=900000,R36=120000;var sh$=w(()=>{E9();Ho0();cH();Vn();ah$();h5();E3();To0();kK();An()});import{readdir as M36,rm as aP0}from"fs/promises";import{join as sP0}from"path";async function eP0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-k36),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await v_($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await eh$($,Y,Z);else if(!Y.startsWith(".")){let G=sP0($,Y),J=await v_(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await eh$(G,K,Z)}if((await v_(G)).length===0)await aP0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function eh$($,Z,X){let Q=0,Y=sP0($,Z),G=await v_(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=sP0(Y,W),F=await v_(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 O=sP0(K,N);await aP0(O,{recursive:!0,force:!0}),Q++}}if((await v_(K)).length===0)await aP0(K,{recursive:!0,force:!0})}if((await v_(Y)).length===0)await aP0(Y,{recursive:!0,force:!0});return Q}async function v_($){try{return(await M36($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var k36=30;var h91=()=>{};import{DBOS as u91,SchedulerMode as V36}from"@dbos-inc/dbos-sdk";async function C36(){let $=[qJ(),f_(),FF()],Z=0;for(let X of $)try{Z+=await eP0(X)}catch(Q){console.error("[monitoring-retention] cleanup failed:",Q)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function _36($,Z){await u91.runStep(()=>C36(),{name:"monitoringRetention"})}function Zu$(){if($u$)return;$u$=!0;let $=u91.registerWorkflow(_36,{name:"monitoringRetentionWorkflow"});u91.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:S36,mode:V36.ExactlyOncePerIntervalWhenActive})}var S36="23 4 * * *",$u$=!1;var Xu$=w(()=>{JY();h91()});function Qu$($){return async(Z,X)=>{let Q=await $.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["member.role","organization.id as orgId","organization.slug as orgSlug","organization.name as orgName"]).where("member.userId","=",X).where("member.organizationId","=",Z).executeTakeFirst();if(!Q)return console.warn(`[automationContextFactory] User ${X} not found in org ${Z} \u2014 returning null`),null;let Y=await sG.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await c41($.db,Z,Q.role);return Y.boundAuth=u41({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new wL(X,void 0,Y.boundAuth,Q.role,"self"),AB(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var Yu$=w(()=>{DL();YC()});function v36(){return{services:[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}],migrationsStatus:"pending",serverUrl:null,logs:[]}}function b36(){for(let $ of f36)$()}function Gu$($){let Z=[...c91.logs,$];c91={...c91,logs:Z.length>500?Z.slice(-500):Z},b36()}function l91(){return x36}var c91,f36,x36=!1;var d91=w(()=>{c91=v36(),f36=new Set});import{EventEmitter as y36}from"events";var m91;var Ju$=w(()=>{d91();m91=new y36;m91.on("request",($)=>{Gu$($)})});function Wu$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let O=ah(U.params.name),B=U.params.arguments||{},D=Object.keys(B).map((E)=>ah(E)),L=D.length>0?D.slice(0,3).join(",")+(D.length>3?"\u2026":""):"";G=`${Y5.tool}${O}${Y5.dim}(${L})${Y5.reset}`}else if(U.method)G=`${Y5.dim}${ah(U.method)}${Y5.reset}`}}catch{}}let W=ah(Y);if(Y.startsWith("/mcp/conn_")){let H=Y.split("/")[2]??"";W=`/mcp/${Y5.mcp}${ah(H.slice(0,12))}\u2026${Y5.reset}`}else if(Y==="/mcp")W=`${Y5.mcp}/mcp${Y5.reset}`;else if(Y==="/mcp/registry")W=`${Y5.mcp}/mcp/registry${Y5.reset}`;let K=h36(Q),F=J?"\u25C0":"\u2190";if(!l91())console.log(`${Y5.dim}${F}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let H=Date.now()-X,N=$.res.status,U=g36(N),O=H<1000?`${H}ms`:`${(H/1000).toFixed(1)}s`,B=J?"\u25B6":"\u2192";if(!l91())console.log(`${Y5.dim}${B}${Y5.reset} ${K}${Q}${Y5.reset} ${W}${G?` ${G}`:""} ${U}${N}${Y5.reset} ${Y5.duration}${O}${Y5.reset}`);m91.emit("request",{method:Q,path:ah(Y),status:N,duration:H,timestamp:new Date})}}}var Y5,g36=($)=>{if($>=500)return Y5.serverError;if($>=400)return Y5.clientError;if($>=300)return Y5.redirect;return Y5.ok},h36=($)=>{return Y5[$]||Y5.reset},ah=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var Ku$=w(()=>{d91();Ju$();Y5={reset:"\x1B[0m",dim:"\x1B[2m",bold:"\x1B[1m",GET:"\x1B[36m",POST:"\x1B[33m",PUT:"\x1B[35m",DELETE:"\x1B[31m",ok:"\x1B[32m",redirect:"\x1B[36m",clientError:"\x1B[33m",serverError:"\x1B[31m",mcp:"\x1B[35m",tool:"\x1B[96m",duration:"\x1B[90m"}});import{createHmac as Uu$}from"crypto";import{mkdir as u36,readdir as c36,rm as Fu$,stat as Ou$}from"fs/promises";import{join as p91,relative as l36}from"path";import{z as z$}from"zod";function wu$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return p91(d36,Z)}function Du$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function i91($,Z){let X=wu$($),Q=Du$(Z);return p91(X,Q)}function m36($,Z,X,Q){let Y=b0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return Uu$("sha256",Y).update(G).digest("hex")}function Nu$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=m36(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Du$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Lu$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${Uu$("md5","etag").update(Q).digest("hex")}"`}async function Eu$($,Z,X,Q,Y){try{let G=await c36($,{withFileTypes:!0});for(let J of G){let W=p91($,J.name),F=l36(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 Eu$(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 Ou$(W);Y.objects.push({key:F,size:H.size,lastModified:H.mtime.toISOString(),etag:Lu$(W,H.mtime,H.size)})}catch{}}}}catch{}}function ju$($,Z){let Q=t($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:z$.object({prefix:z$.string().optional(),maxKeys:z$.number().optional().default(1000),continuationToken:z$.string().optional(),delimiter:z$.string().optional()}),outputSchema:z$.object({objects:z$.array(z$.object({key:z$.string(),size:z$.number(),lastModified:z$.string(),etag:z$.string()})),nextContinuationToken:z$.string().optional(),isTruncated:z$.boolean(),commonPrefixes:z$.array(z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,F=G.continuationToken,H=wu$(Q);await u36(H,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Eu$(H,H,J,K,N),N.objects.sort((L,E)=>L.key.localeCompare(E.key));let U=0;if(F){if(U=N.objects.findIndex((L)=>L.key>F),U===-1)U=N.objects.length}let O=N.objects.slice(U,U+W),B=U+W<N.objects.length,D=B?O[O.length-1]?.key:void 0;return{objects:O,isTruncated:B,nextContinuationToken:D,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({contentType:z$.string().optional(),contentLength:z$.number(),lastModified:z$.string(),etag:z$.string(),metadata:z$.record(z$.string(),z$.string()).optional()}),handler:async(Y)=>{let G=Y,J=i91(Q,G.key),W=await Ou$(J);return{contentType:I61(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Lu$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Hu$;return{url:Nu$(Z,Q,G.key,J,"GET"),expiresIn:J}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:z$.object({key:z$.string(),expiresIn:z$.number().optional(),contentType:z$.string().optional()}),outputSchema:z$.object({url:z$.string(),expiresIn:z$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??Hu$;return{url:Nu$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:z$.object({key:z$.string()}),outputSchema:z$.object({success:z$.boolean(),key:z$.string()}),handler:async(Y)=>{let G=Y,J=i91(Q,G.key);try{return await Fu$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:z$.object({keys:z$.array(z$.string()).max(1000)}),outputSchema:z$.object({deleted:z$.array(z$.string()),errors:z$.array(z$.object({key:z$.string(),message:z$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let F=i91(Q,K);try{await Fu$(F),J.push(K)}catch(H){W.push({key:K,message:H instanceof Error?H.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function n91($,Z,X){let Q=ju$(Z,X),Y=new bW({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:F5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:z$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:z$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(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 eX({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),GJ(Y,G,$,"mcp:dev-assets")}async function zu$($,Z,X,Q){let G=ju$(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 d36="./data/assets",Hu$=3600,Bu$,Pu$;var Au$=w(()=>{T$();cy();D8();ml();wC();_X();nz0();Bu$=new H1;Bu$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return n91($.req.raw,Z,Q)});Pu$=Bu$});var Tu$={};Y4(Tu$,{mountDevRoutes:()=>i36});function i36($,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 n91(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 zu$(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",Pu$);let X=new H1;X.use("*",QW({mountPath:"/api/dev-assets"})),X.route("/",pz0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Ru$=w(()=>{D8();E61();nz0();Au$()});import{sql as p36}from"kysely";import{randomUUID as Iu$}from"crypto";import{z as n36}from"zod";async function o36($){let Z=new Date().toISOString(),X=Iu$(),Q=l4.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Iu$(),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 p36`SELECT
|
|
2836
2836
|
pg_notify('studio_events', ${X}),
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as B,b as L,j as r}from"./index-U67qRk6V.js";import{I as A}from"./input-D2mmmfwt.js";import{L as P}from"./label-OimsuGS-.js";import{S as R,a as V,b as z,c as J,d as O}from"./select-DpMb9ZTj.js";import{T as D}from"./textarea-AJ4M9M-f.js";import{F as M,T as _,J as $,V as q,_ as G}from"./index-B-zeJX6v.js";import{s as F}from"./primitives-2l80F2YB.js";import{u as H}from"./use-autosave-Co9fgVIk.js";import"./tooltip-slKJgNRK.js";import"./Check-DExpXoeZ.js";import"./ChevronDown-Dr72eRtC.js";import"./ChevronUp-CJuVoP_H.js";import"./ArrowUp-O7-j4Kzy.js";import"./chat-context-DCjIuGpA.js";import"./tab-id-BJoHfCjh.js";import"./dialog-BIaL_SY_.js";import"./X-BnVnruz7.js";import"./Copy01-zCwt0G1u.js";import"./Download01-_kWGFF2R.js";import"./hooks-yS334sJm.js";import"./use-mcp-client-Cn14RanX.js";import"./auth-PabUZ5MK.js";import"./decopilot-sse-pool-BTvCMc6r.js";import"./backoff-CrEUbyZT.js";import"./delay-CnY5UFtP.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-CUUpo6j1.js";import"./use-ai-providers-DzpsC0v7.js";import"./studio-tools-tL3Oy5Ce.js";import"./use-decopilot-events-DxS5MZxW.js";import"./use-organization-settings-sEsfAiSY.js";import"./automation-runs-DUy6uLsc.js";import"./agent-icon-N10iH1xS.js";import"./AlertCircle-DL1CP1hy.js";import"./Tool01-Q74WMKFI.js";import"./ArrowLeft-DK8zcE-P.js";import"./Tool02-COUcw3ab.js";import"./XCircle-B-K-NMeg.js";import"./ArrowUpRight-BVdzIoIc.js";import"./TrendUp01-cGf0wL6U.js";import"./ZapSquare-D_Z9NIao.js";import"./Users03-DEW0AZzB.js";import"./CheckCircle-JEKJY3AR.js";import"./ChevronRight-B9ZA_kXM.js";import"./ChevronSelectorVertical-CPSw060y.js";import"./DotsVertical-DWSyrznd.js";import"./Stars02-Cf7pycCj.js";import"./CreditCard01-CPnF0kPW.js";import"./Settings02-CixZsBne.js";import"./Eye-EX4w3-JJ.js";import"./FilterLines-D7tmy7VI.js";import"./Share07-sN97eq8b.js";import"./Globe01-D59ZIidh.js";import"./Globe04-Bqbezsix.js";import"./SwitchHorizontal01-CqLck4PK.js";import"./HardDrive-CrDFw6-C.js";import"./Key01-i0P60pua.js";import"./LayoutLeft-yR2O4lcC.js";import"./LinkExternal01-BoR9I2q2.js";import"./LockUnlocked01-JkxWJcVa.js";import"./LogOut01-BR5P77Eq.js";import"./Monitor01-DQBHxIhU.js";import"./Sun-CGI6h2sV.js";import"./Palette-Ck8Zugmc.js";import"./Play-B2JN4tOi.js";import"./Plus-DBIW8BmC.js";import"./SearchLg-Cg_qg2uT.js";import"./SearchMd-CDtyRISc.js";import"./Shield01-DO0FlFWx.js";import"./Stars01-BEghjgKF.js";import"./Trash01-fndrO3VF.js";import"./Upload01-CoOUkNK-.js";import"./User01-z75QOIvz.js";import"./Users01-D0pT6-I6.js";import"./XClose-Ct6f5P2W.js";import"./Zap-C1t0MYbg.js";import"./useInfiniteQuery-LOLzN0HS.js";import"./use-infinite-scroll-Bas4p9Ru.js";import"./use-connection-B4_vNo9P.js";import"./card-BCXXDAzK.js";import"./sidebar-DQXEDjXr.js";import"./use-mobile-DDap3KQv.js";import"./table-CgSwxqHr.js";import"./empty-state-BU16D4QD.js";import"./use-members-Dujh8JDk.js";import"./use-org-auth-client-CsMFy44j.js";import"./use-clock-tick-DWZe92Du.js";import"./use-automations-BKhUK6wp.js";import"./useSuspenseInfiniteQuery-BEwAIzqn.js";import"./avatar-DqQxOcgj.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-DfjL9Nuy.js";import"./monaco-editor-DNS_Vdd4.js";import"./spinner-BwtMyHrM.js";import"./types-DGC-6CNG.js";import"./shell-layout-C85zoiRI.js";import"./required-auth-layout-B8c25OBU.js";import"./use-org-sso-rFuRC6sh.js";import"./integration-icon-B_IPko0A.js";import"./use-navigate-to-agent-DHUVQaXh.js";import"./reusable-new-chat-CouMjkYR.js";import"./chart-B9PWnrec.js";import"./index-weXNg5bM.js";import"./form-DPD7zwQl.js";import"./file-type-icon-B4k0AhCj.js";import"./drawer-Dxws_Ny6.js";import"./collection-search-DldYUBMG.js";import"./deco-site-production-url-BjY4ZYd-.js";import"./tabs-BVipNI0S.js";import"./toggle-group-DqYw_S9m.js";import"./use-commerce-diagnostic-DgxqUY0S.js";import"./popover-DMzNRhqM.js";import"./self-tool-result-DXZIo3By.js";import"./alert-dialog-s_v9kj8r.js";import"./extract-connection-data-CWNc628w.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-DOumC7lb.js";import"./authenticate-and-persist-oauth-Doz4qFK6.js";import"./mcp-oauth-CsZvBfah.js";import"./track-DJdpTEZB.js";import"./toolbar-lQOYKYWt.js";import"./skeleton-QkZG_rdP.js";import"./github-repo-picker-DqGlvjEZ.js";import"./use-mcp-tools-D6_K_HHd.js";import"./agent-capabilities-C4tLW0Za.js";import"./connection-card-DGYEO2-M.js";import"./use-registry-connections-fdK2egLa.js";import"./retry-CErkP7V6.js";import"./connection-slug-eyAPH6o3.js";import"./connection-form-helpers-Dc8S5-Kz.js";import"./collection-tabs-Xbfqz75v.js";import"./badge-Cm4fIZLs.js";import"./command-BPStBQvN.js";import"./index-BAFcPo8o.js";import"./use-open-billing-url-BDzukGTa.js";import"./select-model-ZuGG5hhj.js";import"./checkbox-Bsv7TekW.js";import"./ai-providers-logos-DD3qZ33J.js";import"./settings-section-Ddtk2O_c.js";import"./cards-CncUl_R4.js";import"./dropdown-menu-BP8b0NH2.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-3baBowb9.js";import"./use-capability-BqxhmF3Q.js";import"./use-file-configs-DSKpZydu.js";import"./pt-BR-CLy76QW2.js";import"./switch-DIvMa5N8.js";import"./use-debounced-autosave-Ba1eGKaC.js";import"./index-DjXGFEmZ.js";import"./search-input-CQCe6qRN.js";import"./index-CWw-7NR4.js";import"./use-secrets-CIW9QO-0.js";import"./AreaChart-CYhcBp2n.js";import"./use-tags-B0dbx_vm.js";import"./get-initials-D-f_fDFw.js";import"./automation-list-row-B5z_x4bg.js";import"./use-org-repo-syncs-C1eNvV3n.js";const Q={authors:[{key:"name",labelKey:"sandbox.recordEditor.fieldName",widget:"text"},{key:"type",labelKey:"sandbox.recordEditor.fieldType",widget:"select",options:[{value:"Person",labelKey:"sandbox.recordEditor.optionPerson"},{value:"Organization",labelKey:"sandbox.recordEditor.optionOrganization"}]},{key:"email",labelKey:"sandbox.recordEditor.fieldEmail",widget:"text",placeholderKey:"sandbox.recordEditor.placeholderEmail"},{key:"jobTitle",labelKey:"sandbox.recordEditor.fieldJobTitle",widget:"text"},{key:"company",labelKey:"sandbox.recordEditor.fieldCompany",widget:"text"},{key:"avatar",labelKey:"sandbox.recordEditor.fieldAvatar",widget:"image"}]},U={authors:"sandbox.recordEditor.titleAuthor"};function Qr(I){const t=B.c(39),{orgSlug:E,virtualMcpId:K,branch:w,kind:a,blockKey:b,block:f}=I,i=L();let h;t[0]!==w||t[1]!==E||t[2]!==K?(h={orgSlug:E,virtualMcpId:K,branch:w},t[0]=w,t[1]=E,t[2]=K,t[3]=h):h=t[3];const p=M(h);let g;t[4]!==f||t[5]!==a?(g=_(f,a),t[4]=f,t[5]=a,t[6]=g):g=t[6];const C=g;let k;t[7]!==b||t[8]!==a||t[9]!==p?(k=l=>{p.mutate({blockKey:b,data:q(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=H(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,T=U[a];let n;t[14]!==i||t[15]!==T?(n=i(T),t[14]=i,t[15]=T,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx($,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const N=Q[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==N){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(G,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(P,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(R,{value:F(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(V,{id:o.key,className:"h-10 w-full",children:r.jsx(z,{placeholder:i(o.labelKey)})}),r.jsx(J,{children:(o.options??[]).map(m=>r.jsx(O,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(P,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(D,{id:o.key,value:F(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(A,{id:o.key,value:F(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=N.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=N,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Qr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DZOZges2.js","assets/index-U67qRk6V.js","assets/index-B3kZ43lJ.css","assets/Tool02-COUcw3ab.js","assets/CheckCircle-JEKJY3AR.js","assets/Settings02-CixZsBne.js","assets/use-mcp-client-Cn14RanX.js","assets/auth-PabUZ5MK.js","assets/useInfiniteQuery-LOLzN0HS.js","assets/use-infinite-scroll-Bas4p9Ru.js","assets/studio-tools-tL3Oy5Ce.js","assets/badge-Cm4fIZLs.js","assets/input-D2mmmfwt.js","assets/dropdown-menu-BP8b0NH2.js","assets/Check-DExpXoeZ.js","assets/ChevronRight-B9ZA_kXM.js","assets/DotsVertical-DWSyrznd.js","assets/table-CgSwxqHr.js","assets/toggle-group-DqYw_S9m.js","assets/use-view-mode-Dn2DgXog.js","assets/use-mobile-DDap3KQv.js","assets/FilterLines-D7tmy7VI.js","assets/Globe01-D59ZIidh.js","assets/SearchMd-CDtyRISc.js","assets/dialog-BIaL_SY_.js","assets/X-BnVnruz7.js","assets/AlertCircle-DL1CP1hy.js","assets/Download01-_kWGFF2R.js","assets/Upload01-CoOUkNK-.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-s_v9kj8r.js","assets/card-BCXXDAzK.js","assets/Trash01-fndrO3VF.js","assets/label-OimsuGS-.js","assets/select-DpMb9ZTj.js","assets/tooltip-slKJgNRK.js","assets/ChevronDown-Dr72eRtC.js","assets/ChevronUp-CJuVoP_H.js","assets/switch-DIvMa5N8.js","assets/textarea-AJ4M9M-f.js","assets/ArrowLeft-DK8zcE-P.js","assets/XCircle-B-K-NMeg.js","assets/checkbox-Bsv7TekW.js","assets/Eye-EX4w3-JJ.js","assets/LinkExternal01-BoR9I2q2.js","assets/use-copy-DfjL9Nuy.js","assets/Copy01-zCwt0G1u.js","assets/Key01-i0P60pua.js","assets/Plus-DBIW8BmC.js","assets/mcp-oauth-CsZvBfah.js","assets/Play-B2JN4tOi.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,aF as o}from"./index-U67qRk6V.js";import{R as m}from"./require-capability-BRtsujkT.js";import"./use-capability-BqxhmF3Q.js";import"./access-gate-DKSn70ns.js";import"./capability-load-error-Cebv5SRI.js";const n=s.lazy(()=>o(()=>import("./registry-layout-DZOZges2.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])));function f(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(m,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(n,{})})}),r[0]=t):t=r[0],t}export{f as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-DZOZges2.js","assets/index-U67qRk6V.js","assets/index-B3kZ43lJ.css","assets/Tool02-COUcw3ab.js","assets/CheckCircle-JEKJY3AR.js","assets/Settings02-CixZsBne.js","assets/use-mcp-client-Cn14RanX.js","assets/auth-PabUZ5MK.js","assets/useInfiniteQuery-LOLzN0HS.js","assets/use-infinite-scroll-Bas4p9Ru.js","assets/studio-tools-tL3Oy5Ce.js","assets/badge-Cm4fIZLs.js","assets/input-D2mmmfwt.js","assets/dropdown-menu-BP8b0NH2.js","assets/Check-DExpXoeZ.js","assets/ChevronRight-B9ZA_kXM.js","assets/DotsVertical-DWSyrznd.js","assets/table-CgSwxqHr.js","assets/toggle-group-DqYw_S9m.js","assets/use-view-mode-Dn2DgXog.js","assets/use-mobile-DDap3KQv.js","assets/FilterLines-D7tmy7VI.js","assets/Globe01-D59ZIidh.js","assets/SearchMd-CDtyRISc.js","assets/dialog-BIaL_SY_.js","assets/X-BnVnruz7.js","assets/AlertCircle-DL1CP1hy.js","assets/Download01-_kWGFF2R.js","assets/Upload01-CoOUkNK-.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-s_v9kj8r.js","assets/card-BCXXDAzK.js","assets/Trash01-fndrO3VF.js","assets/label-OimsuGS-.js","assets/select-DpMb9ZTj.js","assets/tooltip-slKJgNRK.js","assets/ChevronDown-Dr72eRtC.js","assets/ChevronUp-CJuVoP_H.js","assets/switch-DIvMa5N8.js","assets/textarea-AJ4M9M-f.js","assets/ArrowLeft-DK8zcE-P.js","assets/XCircle-B-K-NMeg.js","assets/checkbox-Bsv7TekW.js","assets/Eye-EX4w3-JJ.js","assets/LinkExternal01-BoR9I2q2.js","assets/use-copy-DfjL9Nuy.js","assets/Copy01-zCwt0G1u.js","assets/Key01-i0P60pua.js","assets/Plus-DBIW8BmC.js","assets/mcp-oauth-CsZvBfah.js","assets/Play-B2JN4tOi.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as m,d as n,f as c,j as t,k as f,r as l,aF as p}from"./index-U67qRk6V.js";import{R as u}from"./require-capability-BRtsujkT.js";import"./use-capability-BqxhmF3Q.js";import"./access-gate-DKSn70ns.js";import"./capability-load-error-Cebv5SRI.js";const g=l.lazy(()=>p(()=>import("./registry-layout-DZOZges2.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50])));function j(){const e=m.c(5),i=n();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=c(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{j as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-Bas4p9Ru.js";import{e7 as i}from"./index-U67qRk6V.js";function t(e,r){return i(e,u,r)}export{t as u};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as s}from"./use-infinite-scroll-Bas4p9Ru.js";import{e7 as u,b4 as n}from"./index-U67qRk6V.js";function a(e,r){return u({...e,enabled:!0,suspense:!0,throwOnError:n},s,r)}export{a as u};
|