decocms 4.316.7 → 4.316.8
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-pzcnESJh.js → AlertCircle-DxYCNcK8.js} +1 -1
- package/dist/client/assets/{AreaChart-BBl3HuXM.js → AreaChart-CmfyOVSz.js} +1 -1
- package/dist/client/assets/{ArrowLeft-DXuRs3HX.js → ArrowLeft-DdJRt_vK.js} +1 -1
- package/dist/client/assets/{ArrowUp-DMnh6s4b.js → ArrowUp-CixBAt8Q.js} +1 -1
- package/dist/client/assets/{Check-BESi8Og0.js → Check-Eb20R0uP.js} +1 -1
- package/dist/client/assets/{CheckCircle-DWSrREW4.js → CheckCircle-qBq1p-Wj.js} +1 -1
- package/dist/client/assets/{ChevronDown-D9SrOc49.js → ChevronDown-Bv15tE3e.js} +1 -1
- package/dist/client/assets/{ChevronRight-PYqPsqmX.js → ChevronRight-Ci9WZW0s.js} +1 -1
- package/dist/client/assets/{ChevronSelectorVertical-DtCb6SRW.js → ChevronSelectorVertical-Dw6UipKY.js} +1 -1
- package/dist/client/assets/{ChevronUp-DInto1b8.js → ChevronUp-CJSi4ok2.js} +1 -1
- package/dist/client/assets/{Copy01-l041cd35.js → Copy01-CbJTmUFe.js} +1 -1
- package/dist/client/assets/{CreditCard01-p5hPt9es.js → CreditCard01-Cdyvlf63.js} +1 -1
- package/dist/client/assets/{DotsVertical-CH_GCWYz.js → DotsVertical-BhHlLSsp.js} +1 -1
- package/dist/client/assets/{Download01-gw2mF-MC.js → Download01-DlfNPuhH.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-BFz7XpiN.js → ErrorBarContext-hLwbmw2P.js} +1 -1
- package/dist/client/assets/{Eye-Cm7KzDnH.js → Eye-CD_6MgPf.js} +1 -1
- package/dist/client/assets/{FilterLines-CafyJI14.js → FilterLines-DdFZlVgI.js} +1 -1
- package/dist/client/assets/{GitBranch01-Bxb2j_fZ.js → GitBranch01-LMEq5ZXZ.js} +1 -1
- package/dist/client/assets/{Globe01-DLNdolGS.js → Globe01-BJpcU1hY.js} +1 -1
- package/dist/client/assets/{Globe04-CViLCpme.js → Globe04-D16fda-t.js} +1 -1
- package/dist/client/assets/{HardDrive-QJn1w8tw.js → HardDrive-CFC2NbAD.js} +1 -1
- package/dist/client/assets/{Image01-B_oUPQXv.js → Image01-CsV_5vxX.js} +1 -1
- package/dist/client/assets/{Key01-BnQHMp8V.js → Key01-1-wwfLyJ.js} +1 -1
- package/dist/client/assets/{LinkExternal01-B8eerp5u.js → LinkExternal01--B4PKy8C.js} +1 -1
- package/dist/client/assets/{LockUnlocked01-B-LL1VJN.js → LockUnlocked01-x8CVxEbg.js} +1 -1
- package/dist/client/assets/{LogOut01-39Jb5GrZ.js → LogOut01-DQgirYVV.js} +1 -1
- package/dist/client/assets/{Monitor01-CQB2vCrj.js → Monitor01-C0j6D2fo.js} +1 -1
- package/dist/client/assets/{Package-5u5XI3F0.js → Package-DuLKvK8F.js} +1 -1
- package/dist/client/assets/{Palette-CXA1gi33.js → Palette-cNnA20fO.js} +1 -1
- package/dist/client/assets/{Play-B-a-uZIp.js → Play-DPV4DI_n.js} +1 -1
- package/dist/client/assets/{Plus-DuBsnz4i.js → Plus-bEkTtkKz.js} +1 -1
- package/dist/client/assets/{SearchLg-B8cxnIXO.js → SearchLg-BdF7piHb.js} +1 -1
- package/dist/client/assets/{SearchMd-TCWEaJg-.js → SearchMd-CJQ8cMjx.js} +1 -1
- package/dist/client/assets/{Sector-DBm4aDhi.js → Sector-ljpJVNLt.js} +1 -1
- package/dist/client/assets/{Settings02-Dy-2Qj4d.js → Settings02-CNUNhUgm.js} +1 -1
- package/dist/client/assets/{Share07-Rp0r2KZ9.js → Share07-C1YlUnXi.js} +1 -1
- package/dist/client/assets/{Shield01-DtK5gafE.js → Shield01-CkMXeKwS.js} +1 -1
- package/dist/client/assets/{Stars01-BB8IcNTL.js → Stars01-CHLSkzFP.js} +1 -1
- package/dist/client/assets/{Stars02-Bbmo0zY3.js → Stars02-D-xvdNDD.js} +1 -1
- package/dist/client/assets/{Sun-CLDrV-25.js → Sun-Wp9EFk29.js} +1 -1
- package/dist/client/assets/{SwitchHorizontal01-CMuMpxZg.js → SwitchHorizontal01-rurvH3NP.js} +1 -1
- package/dist/client/assets/{Tool01-Dkl-Om1v.js → Tool01-yRCio4tn.js} +1 -1
- package/dist/client/assets/{Tool02-BMdZDsm0.js → Tool02-BEkq_UYF.js} +1 -1
- package/dist/client/assets/{Trash01-l-_qVOL8.js → Trash01-BF-11Z1s.js} +1 -1
- package/dist/client/assets/{TrendUp01-D6VAnyKs.js → TrendUp01-DxMv3fk0.js} +1 -1
- package/dist/client/assets/{Upload01-BLnsIrPZ.js → Upload01-BOCrxZQR.js} +1 -1
- package/dist/client/assets/{User01-Ck3_FIpD.js → User01-CpM2XW8p.js} +1 -1
- package/dist/client/assets/{UserSquare-CHnwGSuk.js → UserSquare-LJomGlyM.js} +1 -1
- package/dist/client/assets/{Users01-CFzvYiuw.js → Users01-DeUETtu_.js} +1 -1
- package/dist/client/assets/{Users03-Df29VRo0.js → Users03-DFOE_2-2.js} +1 -1
- package/dist/client/assets/{XCircle-BlZmdI-G.js → XCircle-B5vQfqGO.js} +1 -1
- package/dist/client/assets/{XClose-CnMJB9wB.js → XClose-Ba3XQssr.js} +1 -1
- package/dist/client/assets/{YAxis-B2Kiqu39.js → YAxis-C9GiZqnq.js} +1 -1
- package/dist/client/assets/{Zap-I-DMHk8W.js → Zap-BKNLqGjJ.js} +1 -1
- package/dist/client/assets/{ZapSquare-CKPKakyU.js → ZapSquare-CM3Nbg7t.js} +1 -1
- package/dist/client/assets/{ZoomOut-Db6FAGuS.js → ZoomOut-7Tk19jfc.js} +1 -1
- package/dist/client/assets/{access-gate-D0wuDw30.js → access-gate-CqhWkz2i.js} +1 -1
- package/dist/client/assets/{agent-icon-D0VUz3F6.js → agent-icon-w4R2jc53.js} +1 -1
- package/dist/client/assets/{agents-list-BYjyrbW6.js → agents-list-CDeH5mua.js} +1 -1
- package/dist/client/assets/{ai-providers-D8X6OwxC.js → ai-providers-DDvjwzWy.js} +1 -1
- package/dist/client/assets/{alert-kBJMHqj0.js → alert-BrNJxiqY.js} +1 -1
- package/dist/client/assets/{alert-dialog-CADdLgiP.js → alert-dialog-BjMRiobA.js} +1 -1
- package/dist/client/assets/{analytics-tab-BM221syJ.js → analytics-tab-RCsJdvCm.js} +1 -1
- package/dist/client/assets/{api-keys-CnVHWdU5.js → api-keys-DpupF6Ta.js} +1 -1
- package/dist/client/assets/{app-editor-C8ciFeVU.js → app-editor-D3ntLHjS.js} +1 -1
- package/dist/client/assets/{auth-ltjrHdFv.js → auth-DPbVtDUU.js} +1 -1
- package/dist/client/assets/{auth-catchall-C1MGyFJv.js → auth-catchall-Uq-U88m_.js} +1 -1
- package/dist/client/assets/{auth-entry-zNm52PxS.js → auth-entry-DDLZNGZv.js} +1 -1
- package/dist/client/assets/{auth-split-layout-YOL3Lk19.js → auth-split-layout-R3LFcplO.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-C5WoxICz.js → authenticate-and-persist-oauth-B9KBhaKh.js} +1 -1
- package/dist/client/assets/{automation-list-row-S8Kym9UP.js → automation-list-row-B_jk-CDq.js} +1 -1
- package/dist/client/assets/{automation-runs-DfK0VSMx.js → automation-runs-D30XDZRc.js} +1 -1
- package/dist/client/assets/{automations-ybxFpAZq.js → automations-GkNAR7bE.js} +1 -1
- package/dist/client/assets/{avatar-CAMx88Qh.js → avatar-BY92F4ad.js} +1 -1
- package/dist/client/assets/{badge-BQ00ii0C.js → badge-BR_XljuY.js} +1 -1
- package/dist/client/assets/{block-document-7UrdrreU.js → block-document-CINlvN6A.js} +1 -1
- package/dist/client/assets/{breadcrumb-Bbul4qd6.js → breadcrumb-Bc4JIo3J.js} +1 -1
- package/dist/client/assets/{buckets-ComEGlo4.js → buckets-BUtzynXz.js} +1 -1
- package/dist/client/assets/{bulk-category-panel-3U5YyUy0.js → bulk-category-panel-BQMXPsuX.js} +1 -1
- package/dist/client/assets/{capability-load-error-weIa1Afc.js → capability-load-error-CVkgY2J4.js} +1 -1
- package/dist/client/assets/{cards-CBOWo6Jv.js → cards-BJ0aI8_q.js} +1 -1
- package/dist/client/assets/{category-editor-Bvc2adb5.js → category-editor-B-OVEZbF.js} +1 -1
- package/dist/client/assets/{cdn-tab-BUQMxVBn.js → cdn-tab-wM-WQ63z.js} +1 -1
- package/dist/client/assets/{chart-C5ZFqDIF.js → chart-BwGsSrhZ.js} +1 -1
- package/dist/client/assets/{chat-context-BNnytLLb.js → chat-context-Cco1pivx.js} +1 -1
- package/dist/client/assets/{checkbox-8NR47DPn.js → checkbox-CDbf8BBM.js} +1 -1
- package/dist/client/assets/{choose-editor-Eg8Voxgu.js → choose-editor-Cblp6Sh9.js} +1 -1
- package/dist/client/assets/{cli-auth-success-Dgv7x5WB.js → cli-auth-success-B59QsFt6.js} +1 -1
- package/dist/client/assets/{collection-detail-CthozOZl.js → collection-detail-Bjx918Rr.js} +1 -1
- package/dist/client/assets/{collection-display-button-fdjUSWwM.js → collection-display-button-BX62xg4W.js} +1 -1
- package/dist/client/assets/{collection-search-CfmsG6EB.js → collection-search-Bzjfhxul.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-ZF9BQojD.js → collection-table-wrapper-JL8pr-GN.js} +1 -1
- package/dist/client/assets/{collection-tabs-BMjNkk-e.js → collection-tabs-CDynQFjW.js} +1 -1
- package/dist/client/assets/{command-B4vg3kev.js → command-CrPl1P1v.js} +1 -1
- package/dist/client/assets/{commerce-onboarding-CfgHbPRo.js → commerce-onboarding-p_f_6FGF.js} +1 -1
- package/dist/client/assets/{config-F76h-4Nb.js → config-a8v7b3uF.js} +1 -1
- package/dist/client/assets/{connect-B9CVnB_d.js → connect-ZhOJ8Vca.js} +1 -1
- package/dist/client/assets/{connection-CTJSKgoV.js → connection-9wGAtpBl.js} +1 -1
- package/dist/client/assets/{connection-card-CrXfxqk-.js → connection-card-OTfQst01.js} +1 -1
- package/dist/client/assets/{connection-detail-GNtdKuvP.js → connection-detail-CqWHYlYV.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-kZEDJqLp.js → connection-form-helpers-cIAbpE3O.js} +1 -1
- package/dist/client/assets/{connections-BZc41jEB.js → connections-3asH1ZHi.js} +1 -1
- package/dist/client/assets/{decopilot-sse-pool-C6zMztYI.js → decopilot-sse-pool-DehHkBgy.js} +1 -1
- package/dist/client/assets/{dialog-4i8tKyZs.js → dialog-BWZ-h6mW.js} +1 -1
- package/dist/client/assets/{domain-settings-Dl1fMq9O.js → domain-settings-Cx5Jc1vj.js} +1 -1
- package/dist/client/assets/{drawer-BOqo92AD.js → drawer-DLdgOnkI.js} +1 -1
- package/dist/client/assets/{dropdown-menu-DHdxnqdQ.js → dropdown-menu-DuMndB0N.js} +1 -1
- package/dist/client/assets/{e2e-tab-DnD_6pcK.js → e2e-tab-ByFhcI1q.js} +1 -1
- package/dist/client/assets/{editor-B0xnuCCp.js → editor-BySvQBuX.js} +1 -1
- package/dist/client/assets/{empty-state-TkGPHkkR.js → empty-state-BC-ydujK.js} +1 -1
- package/dist/client/assets/{empty-state-CI1Sx67B.js → empty-state-D59-EXiy.js} +1 -1
- package/dist/client/assets/{extract-connection-data-BAHgy3b5.js → extract-connection-data-CEqw-EJY.js} +1 -1
- package/dist/client/assets/{file-explorer-LChlqKma.js → file-explorer-CYu8Tft6.js} +1 -1
- package/dist/client/assets/{file-type-icon-6Mfusmw2.js → file-type-icon-Bsjcp9VP.js} +1 -1
- package/dist/client/assets/{folder-icon-Cb7l5H7F.js → folder-icon-BQrWn4YK.js} +1 -1
- package/dist/client/assets/{form-DqHZuRjN.js → form-BJ7iKOGy.js} +1 -1
- package/dist/client/assets/{general-XZ1dA7r5.js → general-DQOIyRSU.js} +1 -1
- package/dist/client/assets/{github-repo-picker-BT0gAgwT.js → github-repo-picker-DTu9Rc_U.js} +1 -1
- package/dist/client/assets/{hooks-C0P3-Ouc.js → hooks-DyBznHIN.js} +1 -1
- package/dist/client/assets/{hosting-tab-PF205pJH.js → hosting-tab-BrxXni8T.js} +1 -1
- package/dist/client/assets/{index-C0FQdaYP.js → index-BfRm5Prf.js} +1 -1
- package/dist/client/assets/{index-sCVfOAw1.js → index-BrNrV4tj.js} +1 -1
- package/dist/client/assets/{index-C6HV7BvV.js → index-CEYPS6t1.js} +1 -1
- package/dist/client/assets/{index-BmAm7rGx.js → index-CkV2Ad16.js} +1 -1
- package/dist/client/assets/{index-DicOUXXF.js → index-Cnrmg7Sw.js} +1 -1
- package/dist/client/assets/{index-CTr9GRKD.js → index-D0OuD0aw.js} +1 -1
- package/dist/client/assets/{index-Shv9_4go.js → index-D7aoPi7g.js} +6 -6
- package/dist/client/assets/{index-ChRU4p6-.js → index-DMc9AFb8.js} +1 -1
- package/dist/client/assets/{index-BfSwG7jI.js → index-VPFEEz3Y.js} +3 -3
- package/dist/client/assets/{index-redirect-DjMv0397.js → index-redirect-G1vNLqIK.js} +1 -1
- package/dist/client/assets/{infra-billing-DnPvMV-w.js → infra-billing-6669Wvf3.js} +1 -1
- package/dist/client/assets/{input-BTAsE3JA.js → input-Jwsq1p59.js} +1 -1
- package/dist/client/assets/{integration-icon-RkVfBWiU.js → integration-icon-DCo0C0nC.js} +1 -1
- package/dist/client/assets/{invite-member-dialog-DiGxeKHf.js → invite-member-dialog-DM9vw8s9.js} +1 -1
- package/dist/client/assets/{label-CvqDH6pp.js → label-IQXBKL0A.js} +1 -1
- package/dist/client/assets/{layout-CXv8NOkC.js → layout-CFmbF8fK.js} +1 -1
- package/dist/client/assets/{login-DTCxt54t.js → login-CvMZ86JI.js} +1 -1
- package/dist/client/assets/{markdown-BIiViQno.js → markdown-CMUMuWo8.js} +1 -1
- package/dist/client/assets/{mcp-oauth-CpjxOVqq.js → mcp-oauth-DoXPg1lT.js} +1 -1
- package/dist/client/assets/{members-BxEREf0f.js → members-3FQa3BUN.js} +1 -1
- package/dist/client/assets/{monaco-editor-BBOBGlaR.js → monaco-editor-C8Ljyyw0.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-sNg9slOY.js → monitoring-stats-row-wixAUsdX.js} +1 -1
- package/dist/client/assets/{multi-select-By4YQF2Y.js → multi-select-C5ysj02F.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DjHV_BtN.js → oauth-callback-ai-provider-l2MdraSy.js} +1 -1
- package/dist/client/assets/{oauth-callback-CDudkkZz.js → oauth-callback-zTZeNVqa.js} +1 -1
- package/dist/client/assets/{onboarding-Co15NqH2.js → onboarding-BwUbT0cK.js} +1 -1
- package/dist/client/assets/{org-layout-DJ2bCa2R.js → org-layout-CsKTES2L.js} +1 -1
- package/dist/client/assets/{organization-choice-Sb8qhqxT.js → organization-choice-CdO5XJKs.js} +1 -1
- package/dist/client/assets/{orgs-GPs3AEGn.js → orgs-BYBWIc7Z.js} +1 -1
- package/dist/client/assets/{page-seo-form-CHCXqtv3.js → page-seo-form-BDRoNeFx.js} +1 -1
- package/dist/client/assets/{popover-Ds86LKX0.js → popover-ij0svucG.js} +1 -1
- package/dist/client/assets/{post-calendar-aQhAaMIr.js → post-calendar-BbsX87_T.js} +1 -1
- package/dist/client/assets/{post-editor-CIlDh-Vc.js → post-editor-h6w4I9ZS.js} +1 -1
- package/dist/client/assets/{primitives-PNdNgUxv.js → primitives-DuEapsi7.js} +1 -1
- package/dist/client/assets/{profile-CoILZvtm.js → profile-BGZBi6QT.js} +1 -1
- package/dist/client/assets/{project-app-view-Bn7vL1yx.js → project-app-view-DNCXwiez.js} +1 -1
- package/dist/client/assets/{prompts-BSI9TwkU.js → prompts-j4FtgRsB.js} +1 -1
- package/dist/client/assets/record-editor-_ikmjKxL.js +1 -0
- package/dist/client/assets/{redirect-editor-CziL7gC6.js → redirect-editor-BvTmI3Kg.js} +1 -1
- package/dist/client/assets/registry-BV-iwWNW.js +2 -0
- package/dist/client/assets/{registry-layout-BdbPNxAs.js → registry-layout-kHL_6bBy.js} +1 -1
- package/dist/client/assets/{reports-CpsHu5F_.js → reports-CS014rdq.js} +1 -1
- package/dist/client/assets/{require-capability-BVA_PM9d.js → require-capability-bmqBJQzK.js} +1 -1
- package/dist/client/assets/{required-auth-layout-CT5fghv3.js → required-auth-layout-DHiafxJe.js} +1 -1
- package/dist/client/assets/{reset-password-cXFKRfj0.js → reset-password--L9BgyDR.js} +1 -1
- package/dist/client/assets/{review-settings-Dul3FnUR.js → review-settings-FspSNK4C.js} +1 -1
- package/dist/client/assets/{roles-wKcS0rHZ.js → roles-Bg1BztSJ.js} +1 -1
- package/dist/client/assets/{scroll-area-DOLH1hgj.js → scroll-area-WPaSc-Gy.js} +1 -1
- package/dist/client/assets/{search-input-CeEId8JN.js → search-input-DZhHq80D.js} +1 -1
- package/dist/client/assets/{secrets-BBYUOuHb.js → secrets-DXpqeCwB.js} +1 -1
- package/dist/client/assets/{sections-editor-BEKYvzfb.js → sections-editor-zYydvqwm.js} +1 -1
- package/dist/client/assets/{select-B96sC0jU.js → select-Cj47fYAP.js} +1 -1
- package/dist/client/assets/{select-model-DKInz36h.js → select-model-Dy6xcYmT.js} +1 -1
- package/dist/client/assets/{self-tool-result-4Q8hQ6Im.js → self-tool-result-B-QtkyJE.js} +1 -1
- package/dist/client/assets/{seo-editor-CimcXOM1.js → seo-editor-BaWAkLyV.js} +1 -1
- package/dist/client/assets/{settings-layout-Bg9SMgxG.js → settings-layout-C3usVBay.js} +1 -1
- package/dist/client/assets/{shell-controls-j00j0s1I.js → shell-controls-ClgYTjKc.js} +1 -1
- package/dist/client/assets/{shell-layout-Bpk7ohiD.js → shell-layout-DwNMmbai.js} +1 -1
- package/dist/client/assets/{skill-preview-B1BayRfx.js → skill-preview-Olh0vSgI.js} +1 -1
- package/dist/client/assets/{skills-BFOpcwAW.js → skills-DgtOm9L0.js} +1 -1
- package/dist/client/assets/{spinner-CBT7H6Nj.js → spinner-Cjs_Q2Re.js} +1 -1
- package/dist/client/assets/{sso-gXKByJzv.js → sso-D5jE56J_.js} +1 -1
- package/dist/client/assets/{store-DcrcC4yE.js → store-0lLifZn2.js} +1 -1
- package/dist/client/assets/store-registry-DEKcUAxj.js +2 -0
- package/dist/client/assets/{super-agent-icon-CcEEod1i.js → super-agent-icon-Cskp_DHm.js} +1 -1
- package/dist/client/assets/{switch-DhvugTsO.js → switch-Cl3zliT1.js} +1 -1
- package/dist/client/assets/{synced-repos-49m5ry0r.js → synced-repos-CW5C3-Hv.js} +1 -1
- package/dist/client/assets/{table-CBDqSL5J.js → table-DQACY323.js} +1 -1
- package/dist/client/assets/{tabs-BHzFvM3d.js → tabs-dCa-HMU5.js} +1 -1
- package/dist/client/assets/{task-board-BsniqWRK.js → task-board-CNsj1P77.js} +1 -1
- package/dist/client/assets/{tasks-kdlDgySk.js → tasks-BN3GZt1f.js} +1 -1
- package/dist/client/assets/{textarea-W0cHs7kb.js → textarea-9dSZZaaI.js} +1 -1
- package/dist/client/assets/{thread-route-X2aYk-A-.js → thread-route-QQoL8601.js} +1 -1
- package/dist/client/assets/{toggle-group-DPowLvjC.js → toggle-group-BJ2Dw4w8.js} +1 -1
- package/dist/client/assets/{toolbar-C_LYTIqP.js → toolbar-v_n93XOW.js} +1 -1
- package/dist/client/assets/{track-C6ehW_55.js → track-BfFCGHHa.js} +1 -1
- package/dist/client/assets/{types-M5Xw3OeR.js → types-CJF2y9z4.js} +1 -1
- package/dist/client/assets/{use-ai-providers-DS9TpJ7R.js → use-ai-providers-pq7pHCJO.js} +1 -1
- package/dist/client/assets/{use-api-keys-JA-drWGf.js → use-api-keys-L6l3Ihn8.js} +1 -1
- package/dist/client/assets/{use-automations-fmUj9duL.js → use-automations-DKvQQ-Un.js} +1 -1
- package/dist/client/assets/{use-autosave-BU_QPyqZ.js → use-autosave-D1EB0xCQ.js} +1 -1
- package/dist/client/assets/{use-connection-BudxFSJ1.js → use-connection-gwy1-aoh.js} +1 -1
- package/dist/client/assets/{use-copy-BLd03kFT.js → use-copy-DE_73RZk.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-CTGh03SX.js → use-create-virtual-mcp-D2VWnmML.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-ypk7z-ra.js → use-debounced-autosave-KiWGPHI8.js} +1 -1
- package/dist/client/assets/{use-debounced-value-C5uG6eOe.js → use-debounced-value-1xVNprnQ.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-5HPG38qC.js → use-decopilot-events-CXhyu1GG.js} +1 -1
- package/dist/client/assets/{use-delete-connection-CnzXCJH0.js → use-delete-connection-DaS0EFE4.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-B0bHz9Kb.js → use-deployment-admin-BK6jaS4w.js} +1 -1
- package/dist/client/assets/{use-destination-route-ChWdmqCT.js → use-destination-route-Dq8o_NoS.js} +1 -1
- package/dist/client/assets/{use-file-configs-C9ZZlKNd.js → use-file-configs-y-5UVs8c.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-Dd5C23ac.js → use-infinite-scroll-KMYUKVfY.js} +1 -1
- package/dist/client/assets/{use-join-requests-C6Jv955V.js → use-join-requests-BzKe96rz.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-Cptezoi_.js → use-mcp-auth-status-BlEZkVmH.js} +1 -1
- package/dist/client/assets/{use-mcp-client-B4byQ1wO.js → use-mcp-client-BgFseqPh.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-Bb7R3ndw.js → use-mcp-tools-CtFKKmtd.js} +1 -1
- package/dist/client/assets/{use-members-pG405IAQ.js → use-members-lRc2qCIE.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-BhD-C3eq.js → use-navigate-to-agent-SoOQYvc2.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-Br2IIgta.js → use-org-auth-client-B4UjNXjz.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-vOy2V2LC.js → use-org-repo-syncs-bE1aTdKv.js} +1 -1
- package/dist/client/assets/{use-org-sso-B4Tot0-C.js → use-org-sso-CbIeyqui.js} +1 -1
- package/dist/client/assets/{use-organization-roles-qSoCa9ga.js → use-organization-roles-BLo0T8Fm.js} +1 -1
- package/dist/client/assets/{use-organization-settings-CxDKMH66.js → use-organization-settings-DWaM_I5Z.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-BxQr2f1i.js → use-panel-navigate-BgYbuioR.js} +1 -1
- package/dist/client/assets/{use-registry-connections-m9TXCiaY.js → use-registry-connections-CvmL6uQj.js} +1 -1
- package/dist/client/assets/{use-secrets-CANXygBX.js → use-secrets-DWRmBbSF.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-CFJlEZeQ.js → use-section-preview-base-DarbWu6k.js} +1 -1
- package/dist/client/assets/{use-status-sounds-B8QrmHEw.js → use-status-sounds-ZWQqhqFf.js} +1 -1
- package/dist/client/assets/{use-tags-BokBbgMx.js → use-tags-nluWdBq3.js} +1 -1
- package/dist/client/assets/{use-view-mode-DSpZVPxq.js → use-view-mode-A8EChCzN.js} +1 -1
- package/dist/client/assets/{use-virtual-mcp-BKGaR5Vw.js → use-virtual-mcp-CF0V8LwT.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-C7vyKwkW.js +1 -0
- package/dist/client/assets/useSuspenseInfiniteQuery-94-R8xK3.js +1 -0
- package/dist/client/assets/{users-DVKkHzQu.js → users-UynRf9Bl.js} +1 -1
- package/dist/client/assets/{variant-calendar-CEQj7rFz.js → variant-calendar-BH5D4ifY.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-TgslKinU.js → view-mode-toggle-C2tUQoYX.js} +1 -1
- package/dist/client/index.html +1 -1
- package/dist/server/cli.js +1 -1
- package/dist/server/server.js +1 -1
- package/package.json +1 -1
- package/dist/client/assets/record-editor-CCTZlM8B.js +0 -1
- package/dist/client/assets/registry-DY3NnGfO.js +0 -2
- package/dist/client/assets/store-registry-B5IW1osW.js +0 -2
- package/dist/client/assets/useInfiniteQuery-BXzx91qu.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-ByKcG5VI.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -2981,7 +2981,7 @@ Respond with ONLY a JSON object of this shape, and nothing else:
|
|
|
2981
2981
|
${G.join(`
|
|
2982
2982
|
`)}`:Y}function vB6($){let Z=new Set;for(let X of $)for(let Q of X.split(`
|
|
2983
2983
|
`)){let Y=Q.trim();if(/^Co-authored-by:\s/i.test(Y))Z.add(Y)}return[...Z]}var sd$=200,TB6=12,IB6,MB6=300,HX1=3;var FX1=D(()=>{XL();gT0();IB6={aheadBy:0,behindBy:0,files:[]}});function bB6($){if(!$||$.includes(".."))return!1;return fB6.test($)}function ed$($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!bB6(Z))return null;let{__resolveType:X,...Q}=$;return{resolveType:Z,payload:Q}}function $m$($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var fB6;var Zm$=D(()=>{fB6=/^[\w./@-]+$/});function va($,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 Xm$($,Z,X,Q){if(!Q.connectionId)throw new kv("Push requires a connected GitHub account. Connect mcp-github for this project and restart the sandbox.");let Y=$.organization?.id;if(!Y)throw new kv(K9);await lO({ctx:$,connectionId:Q.connectionId,organizationId:Y,forceRefresh:!0,onLegacyMintError:(F)=>{let N=F instanceof Error?F.message:K9;throw new kv(N)}});let{cloneUrl:G,gitUserName:J,gitUserEmail:W}=await fK(Q.connectionId,Q.owner,Q.name,$.db,$.vault).catch((F)=>{let{code:N,message:U}=z9$(F instanceof Error?F.message:String(F));throw N?new kv(U):F}),K=Gl($),H=await Z.proxyDaemonRequest(X,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:G},identity:{userName:J,userEmail:W}},...K?{operator:K}:{}})});if(!H.ok){let F=await uO(H,xB6).catch(()=>H.statusText);throw Error(`Failed to refresh sandbox git credentials (${H.status}): ${F}`)}}var xB6=10485760,kv;var NX1=D(()=>{NJ();MT0();An();ii0();dy();kv=class kv extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function gB6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!yB6.test(Z))throw Error(`Invalid branch name: ${$}`)}function Vv($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(uB6)])}async function cB6($,Z){let X=$.var.studioContext,Q=HJ(Z.branch),Y=$.req.query("thread")??Q,G=Y&&Y===Q?Z.branchThread:Y?await X.storage.threads.get(Y).catch(()=>null):null,J=G?.virtual_mcp_id===Z.virtualMcpId?G:null,W=kC(J?.metadata?.runtime);if(W)return W;let K=BD0(Z.virtualMcpMetadata),H=K==="cms"?await i71(X,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",N=!!J&&(H==="gone"||H==="alive"&&K==="cms");if(N&&J)an(X,J.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:J?"unstamped":"threadless",liveness:H,resolved:F,stamped:N});return F}async function dB6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await WQ($.var.studioContext)}catch{return null}}function Sv($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function Fl($){let{virtualMcpMetadata:Z,connectionIds:X}=$.get("vmClaim"),Q=$.var.studioContext,Y=va(Z,X);if(!Y)throw new h4(404,"AUTH","repo","Project has no GitHub repository");let G=n(Q);return kT0(Q,G.id,Y)}function UX1($,Z){if(Z instanceof SA0)return $.json({error:Z.message},429,{...T5,...Z.retryAfterMs===null?{}:{"Retry-After":String(Math.ceil(Z.retryAfterMs/1000))}});if(Z instanceof h4){let Q=Z.status===404?404:Z.status===409||Z.status===422?409:502;return $.json({error:Z.message},Q,T5)}let X=Z instanceof Error?Z.message:String(Z);return $.json({error:X},502,T5)}async function Gm$($,Z,X){let Q;try{Q=await fetch(Z,X)}catch{return $.json({error:"Preview unreachable"},502)}let Y;try{Y=await Q.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(Y,{status:Q.status,headers:{"content-type":Q.headers.get("content-type")??"application/json"}})}async function Jm$($){try{let Z=await Fl($),X=await hT0(Z,$.get("vmClaim").branch);return $.json(X,200,T5)}catch(Z){return UX1($,Z)}}function fa($,Z){let Q=(cT0.get($)??Promise.resolve()).catch(()=>{}).then(Z),Y=Q.catch(()=>{});return cT0.set($,Y),Y.finally(()=>{if(cT0.get($)===Y)cT0.delete($)}),Q}async function X7($,Z,X){if(!X?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,T5);let Q=X?.runner??Sv($);if(Q instanceof Response)return Q;let{claimName:Y,userId:G,projectRef:J}=$.get("vmClaim"),W=X?.method??"POST",K=null,H=new Headers;if(X?.jsonBody!==void 0)K=X.jsonBody,H.set("content-type","application/json");else if(X?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=X?.signal,N={method:W,headers:H,body:K,...F?{signal:F}:{}},U=async()=>{let B=await Q.proxyDaemonRequest(Y,Z,N);if(X?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Q.adoptLiveClaim({userId:G,projectRef:J},Y))B=await Q.proxyDaemonRequest(Y,Z,N);if(B.status===404){try{await B.body?.cancel()}catch{}return new Response(JSON.stringify({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."}),{status:410,headers:{"content-type":"application/json",...T5}})}}let O=await B.text(),L=X?.redactRepoDir?mB6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...T5}})};try{if(F){let B=U();return B.catch(()=>{}),await Promise.race([B,new Promise((L,w)=>{if(F.aborted)return w(F.reason);F.addEventListener("abort",()=>w(F.reason),{once:!0})})])}return await U()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function mB6($){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 dT0($,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 iB6($){return Wm$.includes($)}var yB6,Qm$=524288,hB6=65536,uB6=1e4,Ym$=2000,lB6,cT0,T5,Wm$,Km$=()=>{let $=new K1;$.use("/:virtualMcpId/:branch/*",lB6),$.post("/:virtualMcpId/:branch/write",(X)=>X7(X,"/_sandbox/write",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/unlink",(X)=>X7(X,"/_sandbox/unlink",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/mkdir",(X)=>X7(X,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/rename",(X)=>X7(X,"/_sandbox/rename",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/read",(X)=>X7(X,"/_sandbox/read",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/glob",(X)=>X7(X,"/_sandbox/glob",{forwardJsonBody:!0,signal:Vv(X)})),$.post("/:virtualMcpId/:branch/grep",(X)=>X7(X,"/_sandbox/grep",{forwardJsonBody:!0,signal:Vv(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 X7(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 X7(X,`/_sandbox/exec/${encodeURIComponent(Q)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(X)=>X7(X,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(X)=>{let Q=X.req.param("step");if(!Q||!iB6(Q))return X.json({error:`step must be one of: ${Wm$.join(", ")}`},400);let Y=X.get("vmClaim"),G=await i71(X.var.studioContext,{claimName:Y.claimName})==="gone"?null:await dB6(X);if(!G)return X.json({error:"sandbox not found: nothing is running at this ref"},404,T5);if(Q==="start"){let J=n(X.var.studioContext),W=ly(Y.virtualMcpMetadata);try{await V70({ctx:X.var.studioContext,runner:G,handle:Y.claimName,orgId:J.id,userId:Y.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return X.json({error:`Failed to push env to daemon: ${H}`},502)}}return X7(X,`/_sandbox/setup/${Q}`,{signal:X.req.raw.signal,map404to410:!0,runner:G})}),$.get("/:virtualMcpId/:branch/events",(X)=>{let Q=X.get("vmClaim");if(!Q.runner)return ZU(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 Kd$(X,{ctx:X.var.studioContext,claimName:Q.claimName,runner:Q.runner,virtualMcpId:Q.virtualMcpId,branch:Q.branch,userId:Q.userId,projectRef:Q.projectRef,virtualMcpMetadata:Q.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Jm$(X);return Z(X)});let Z=(X)=>X7(X,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ym$)])});return $.post("/:virtualMcpId/:branch/git/status",(X)=>{if(X.get("vmClaim").runtime==="cms")return Jm$(X);return X7(X,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([X.req.raw.signal,AbortSignal.timeout(Ym$)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")try{let Y=await X.req.json().catch(()=>({})),G=await Fl(X),J=await uT0(G,Q.branch,Y.base);return X.json(J,200,T5)}catch(Y){return UX1(X,Y)}return X7(X,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(X)=>{if(X.get("vmClaim").runtime==="cms")return X.json({ok:!0},200,T5);let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y,virtualMcpMetadata:G,connectionIds:J}=X.get("vmClaim"),W=X.var.studioContext;return fa(Y,async()=>{try{await p71(W,Q,Y);let K=va(G,J);if(K)await Xm$(W,Q,Y,K)}catch(K){if(K instanceof kv)return X.json({error:K.message},403,T5);let H=K instanceof Error?K.message:String(K);return X.json({error:H},502,T5)}return X7(X,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return fa(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,T5);try{let J=await Fl(X);return await ad$(J,Q.branch,G),X.json({ok:!0},200,T5)}catch(J){let W=J instanceof h4&&J.status===409?409:502,K=J instanceof Error?J.message:String(J);return X.json({error:K},W,T5)}});return fa(Q.claimName,()=>X7(X,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(X)=>{let Q=X.get("vmClaim");if(Q.runtime==="cms")return fa(Q.claimName,async()=>{try{let W=await X.req.json().catch(()=>({})),K=await Fl(X),H=W.base??await K.getDefaultBranch();return await lT0(K,Q.branch,H),X.json({ok:!0},200,T5)}catch(W){return UX1(X,W)}});let Y=Sv(X);if(Y instanceof Response)return Y;let{claimName:G}=X.get("vmClaim"),J=X.var.studioContext;return fa(G,async()=>{try{await p71(J,Y,G)}catch(W){let K=W instanceof Error?W.message:String(W);return X.json({error:K},502,T5)}return X7(X,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",o5({maxSize:Qm$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=o71(F)&&U?[F,N]:Y?await Promise.all([dT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Fl(X);return Promise.all([hT0(w,Q.branch),uT0(w,Q.branch)])})(),L=await Bd$(K,B,O);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.post("/:virtualMcpId/:branch/git/judge-review",o5({maxSize:Qm$,onError:(X)=>X.json({error:"Payload too large"},413,T5)}),async(X)=>{let Q=X.get("vmClaim"),Y=null;if(Q.runtime!=="cms"){let H=Sv(X);if(H instanceof Response)return H;Y=H}let{claimName:G,userId:J,projectRef:W}=Q,K=X.var.studioContext;try{let H=await X.req.json().catch(()=>({})),F=H.status,N=H.diff,U=N!=null&&typeof N.diffs==="object"&&N.diffs!==null,[B,O]=o71(F)&&U?[F,N]:Y?await Promise.all([dT0(Y,G,"/_sandbox/git/status","GET",{userId:J,projectRef:W}),dT0(Y,G,"/_sandbox/git/diff","GET",{userId:J,projectRef:W})]):await(async()=>{let w=await Fl(X);return Promise.all([hT0(w,Q.branch),uT0(w,Q.branch)])})(),L=await Dd$(K,B,O,typeof H.language==="string"?H.language:void 0);return X.json(L,200,T5)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return X.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,T5);return X.json({error:F},502,T5)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(X)=>{let Q=Sv(X);if(Q instanceof Response)return Q;let{claimName:Y}=X.get("vmClaim"),G=X.req.query("path");if(!G||!G.startsWith("/")||G.startsWith("//")||G.includes("..")||G.includes("\\"))return X.json({error:"Path not allowed"},403);let J;try{J=await Q.getPreviewUrl(Y)}catch{return X.json({error:"Preview not available"},502)}if(!J)return X.json({error:"Preview not available"},502);let W=J.replace(/\/+$/,"");return Gm$(X,`${W}${G}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",o5({maxSize:hB6,onError:(X)=>X.json({error:"Payload too large"},413)}),async(X)=>{let Q=Sv(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=ed$(J);if(!W)return X.json({error:"Invalid or missing __resolveType"},400);let K=$m$(G,W.resolveType);return Gm$(X,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$};var Hm$=D(()=>{Q8();MH();Yl();m71();wn();Gd$();n3();Jg();Jd$();a3();Wd$();Hd$();ci0();zn();a71();Ld$();$X1();XL();FX1();Zm$();NX1();yB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;lB6=qT0(async($,Z)=>{let X=$.var.studioContext;try{t(X)}catch{return $.json({error:"Unauthorized"},401)}let Q=o0(X);if(!Q)return $.json({error:"Unauthorized"},401);let Y;try{Y=n(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{gB6(J)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await X.storage.virtualMcps.findById(G);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=Dn({orgId:Y.id,virtualMcpId:G,branch:J}),H=await xi0(X,J),F=yi0(H,Q),N=Yd$({userId:F,projectRef:K}),U=W.metadata??null,B=await cB6($,{claimName:N,branch:J,virtualMcpId:G,sandboxUserId:F,virtualMcpMetadata:U,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:null,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await WQ(X)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:N,callerUserId:Q,runner:O,virtualMcpId:G,branch:J,userId:F,projectRef:K,virtualMcpMetadata:U,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});cT0=new Map;T5={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};Wm$=["clone","install","start"]});function Fm$($,Z,X){let Q=BX1.get($);if(!Q)Q={pending:null,running:!1},BX1.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)nB6($,Q);return G}async function nB6($,Z){Z.running=!0;try{while(Z.pending){let X=Z.pending;Z.pending=null;try{let Q=await tB6(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)BX1.delete($)}}async function tB6($){let{client:Z,branch:X,packagePath:Q}=$.deps;for(let Y=0;;Y++){let G=await Hl(Z,X),J=await Z.getCommitTreeSha(G),W=await Z.getDecofileTree(J,Q),K=WX1(W,Q),H=[],F=new Map(K.map((O)=>[O.path,{stem:O.stem,sha:O.sha}]));for(let[O,L]of $.set){let w=KX1(K,O),E=`${JSON.stringify(L,null,2)}
|
|
2984
|
-
`,j=await Z.createBlob(E);await td$(Z.owner,Z.repo,j,E);let z=w[0]??`${yT0(Q)}/${XX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of KX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Va(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:oB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=pB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function oB6($){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 Si0(Q,$.deps.coAuthor)}var pB6=3,BX1;var Nm$=D(()=>{WD0();ST0();W4();XL();gT0();BX1=new Map});import{createHmac as Um$,randomBytes as rB6,timingSafeEqual as sB6}from"crypto";function Bm$(){if(mT0)return mT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mT0=$?Buffer.from($):rB6(32),mT0}function OX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+aB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Um$("sha256",Bm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Om$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Um$("sha256",Bm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!sB6(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 aB6=21600000,mT0=null;var Dm$=D(()=>{E$()});import{z as Nl}from"zod";function $O6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&eB6.test($)}function zm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function ba($){let Z=$.get("decofileScope");return kT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function xa($,Z){if(Z instanceof h4){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 Pm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",jm$),$.use("/:virtualMcpId/:branch/*",jm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(Z),Y=await od$(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=OX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(zm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return xa(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await ba(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return xa(Z,Y)}}),$.patch("/:virtualMcpId/:branch",XO6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=QO6.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{VT0(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);if(ZX1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await ba(Z),W=await Fm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Gl(Q)},G),K=OX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:zm$(Z)})}catch(J){return xa(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(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 h4&&W.status===409))throw W;await lT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&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 xa(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return xa(Z,Q)}}),$}var eB6,Lm$=500,wm$=1048576,Em$=1024,ZO6=8388608,XO6,QO6,jm$;var Am$=D(()=>{Bt0();ST0();Q8();MH();m71();MT0();NX1();$X1();Nm$();Dm$();FX1();XL();gT0();eB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;XO6=o5({maxSize:ZO6,onError:($)=>$.json({error:"Payload too large"},413)}),QO6=Nl.object({set:Nl.record(Nl.string(),Nl.unknown()).optional(),delete:Nl.array(Nl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Lm$,{message:`Patch cannot touch more than ${Lm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=wm$),{message:`Each block must be at most ${wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Em$),{message:`Each block key must be at most ${Em$} characters`}),jm$=qT0(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(!$O6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Om$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!UD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=va(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Tm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",uA0()),Z.route("/",hh$()),Z.route("/",ic$()),Z.route("/",cc$()),Z.route("/",TT0()),Z.route("/tools",ac$()),Z.route("/",oc$()),Z.route("/",Pc$({kvStorage:$.kvStorage})),Z.route("/",jc$()),Z.route("/fs",bc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Km$()),Z.route("/decofile",Pm$()),Z.route("/",hc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",kh$()),Z.route("/monitor",bh$()),Z.route("/sso",fA0()),Z.route("/",RT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Ph$()),$.mountDevAssets)Z.route("/dev-assets",pA0({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("/",cx$()),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",yc$()),Z.route("/mcp",mw0()),Z.route("/mcp/self",AT0()),Z.route("/mcp",nw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Rm$=D(()=>{Q8();FZ1();Ah$();OZ1();Vh$();xh$();nA0();Za();KZ1();zc$();Ac$();xc$();Ko();XZ1();tw0();y71();gc$();uc$();dc$();pc$();rc$();h71();ec$();u71();iw0();Hm$();Am$()});function YO6($){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 GO6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Im$=()=>{let $=new K1;return $.use("*",GO6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:YO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var qm$=D(()=>{Q8();E$();gP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function DO6($){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 LO6($,Z,X){try{return JSON.parse($)}catch{throw new Vm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function wO6($){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:LO6(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 EO6($){let Z=$.map((X)=>{let Q=X.function.parameters?$G(X.function.parameters):$G({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function jO6($){if(!$)return;return{openai:{response_format:$}}}function zO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Mm$($,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 km$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var JO6=256,WO6,KO6,HO6,FO6,NO6,UO6,BO6,OO6,Vm$,Sm$,Cm$;var _m$=D(()=>{c4();Q8();Yl();fN();WO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),KO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),HO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(KO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),FO6=k1.object({type:k1.literal("text")}),NO6=k1.object({type:k1.literal("json_object")}),UO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),BO6=k1.union([FO6,NO6,UO6]),OO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(HO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(WO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:BO6.optional(),user:k1.string().optional()});Vm$=class Vm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Sm$=new K1;Sm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("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(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=OO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=DO6(G.model);if(!J)return $.json(vH("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)=>Ew(j.providerId));if(!E)return $.json(vH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=wO6(G.messages),U=G.tools?EO6(G.tools):void 0,B=jO6(G.response_format),O=zO6(),L=Math.floor(Date.now()/1000);if(G.stream)return ZU($,async(w)=>{let E=Mm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=JO6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:km$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Mm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:km$(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(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Cm$=Sm$});function PO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function vm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!YJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(se1(N)!==G)continue;if(!PO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var fm$=D(()=>{Q8();DO()});var xm$;var bm$=D(()=>{xm$={name:"decocms",version:"4.316.7",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function RO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??TO6}}var ym$,TO6="https://ph.studio.decocms.com",gm$;var hm$=D(()=>{Q8();W90();aC();Q9();E$();n91();bm$();ym$=new K1;ym$.get("/",($)=>{let Z={version:xm$.version,theme:Bp1(),...vF().logo&&{logo:vF().logo},...PN()&&{internalUrl:d_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Cg$(),posthog:RO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ma()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});gm$=ym$});function Ul($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function DX1($){return(Ul($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function lm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ul($))}&sz=${Z}`}function um$($,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 cm$($){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()?um$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):um$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,IO6,qO6,MO6,kO6,dm$;var mm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),IO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),qO6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(IO6)),MO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},kO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(qO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),dm$=c0.object({...MO6,template:kO6})});function iT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=dm$.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 LX1=D(()=>{mm$()});import{join as im$}from"path";async function SO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(VO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=iT0(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()||DX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function CO6($,Z){let X=Ul($),Q=Z?.brand?.trim()||DX1(X),Y=lm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(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="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(H)}" />`,`<meta name="twitter:image:alt" content="${TG(F)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
|
|
2984
|
+
`,j=await Z.createBlob(E);await td$(Z.owner,Z.repo,j,E);let z=w[0]??`${yT0(Q)}/${XX1(O)}.json`;H.push({path:z,mode:"100644",type:"blob",sha:j});let A=z.slice(z.lastIndexOf("/")+1,-5);F.set(z,{stem:A,sha:j,content:E});for(let P of w.slice(1))H.push({path:P,mode:"100644",type:"blob",sha:null}),F.delete(P)}for(let O of $.del)for(let L of KX1(K,O))H.push({path:L,mode:"100644",type:"blob",sha:null}),F.delete(L);if(H.length===0)return G;let N=Q?`${Q}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((O)=>O.type==="blob"&&O.path===N)){let O=await Promise.all([...F.values()].map(async(j)=>({stem:j.stem,content:j.content??await Z.getBlobText(j.sha)}))),{decofile:L,skipped:w}=Va(O);if(w.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:`${Z.owner}/${Z.repo}`,branch:X,packagePath:Q,blocks:w.map((j)=>j.key)});let E=await Z.createBlob(L);H.push({path:N,mode:"100644",type:"blob",sha:E})}let U=await Z.createTree(J,H),B=await Z.createCommit({message:oB6($),treeSha:U,parentShas:[G]});try{return await Z.updateRef(X,B),B}catch(O){if(!(O instanceof h4&&O.status===422)||Y>=pB6-1)throw O;await w$(G7(2000,200,Y,2,0.5))}}}function oB6($){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 Si0(Q,$.deps.coAuthor)}var pB6=3,BX1;var Nm$=D(()=>{WD0();ST0();W4();XL();gT0();BX1=new Map});import{createHmac as Um$,randomBytes as rB6,timingSafeEqual as sB6}from"crypto";function Bm$(){if(mT0)return mT0;let $;try{let Z=C0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return mT0=$?Buffer.from($):rB6(32),mT0}function OX1($){let Z=$.nowMs??Date.now(),X={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+aB6)/1000)},Q=Buffer.from(JSON.stringify(X)).toString("base64url"),Y=Um$("sha256",Bm$()).update(Q).digest("base64url");return`${Q}.${Y}`}function Om$($,Z){let X=$.indexOf(".");if(X<0)return!1;let Q=$.slice(0,X),Y=Buffer.from($.slice(X+1)),G=Buffer.from(Um$("sha256",Bm$()).update(Q).digest("base64url"));if(Y.length!==G.length||!sB6(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 aB6=21600000,mT0=null;var Dm$=D(()=>{E$()});import{z as Nl}from"zod";function $O6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&eB6.test($)}function zm$($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function ba($){let Z=$.get("decofileScope");return kT0($.var.studioContext,Z.organizationId,Z.githubRepo)}function xa($,Z){if(Z instanceof h4){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 Pm$(){let $=new K1;return $.use("/:virtualMcpId/:branch",jm$),$.use("/:virtualMcpId/:branch/*",jm$),$.get("/:virtualMcpId/:branch",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(Z),Y=await od$(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=OX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.body(`{"version":${JSON.stringify(Y.sha)},"token":${JSON.stringify(J)},"apiHost":${JSON.stringify(zm$(Z))},"decofile":${Y.decofile}}`,200,{...G,"content-type":"application/json"})}catch(Q){return xa(Z,Q)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let X=Z.get("decofileScope"),Q=X.packagePath?`${X.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let Y=await ba(Z),G=await Y.getFileTextAtRef(X.branch,Q);if(G===null){let J=await Y.getDefaultBranch();if(J!==X.branch)G=await Y.getFileTextAtRef(J,Q)}if(G===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(G,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(Y){return xa(Z,Y)}}),$.patch("/:virtualMcpId/:branch",XO6,async(Z)=>{let X=Z.get("decofileScope"),Q=Z.var.studioContext,Y=QO6.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{VT0(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);if(ZX1(J))return Z.json({error:`Block key "${J}" collides with a framework resolver module and cannot be written`},400)}try{let J=await ba(Z),W=await Fm$(`${X.organizationId}/${X.virtualMcpId}/${X.branch}`,{client:J,branch:X.branch,packagePath:X.packagePath,coAuthor:Gl(Q)},G),K=OX1({organizationId:X.organizationId,virtualMcpId:X.virtualMcpId,branch:X.branch});return Z.json({version:W,token:K,apiHost:zm$(Z)})}catch(J){return xa(Z,J)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(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 h4&&W.status===409))throw W;await lT0(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 h4&&J.status===409)return Z.json({error:"merge-conflict"},409);if(J instanceof h4&&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 xa(Z,Q)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let X=Z.get("decofileScope");try{let Q=await ba(Z),Y=await Q.getDefaultBranch();if(Y===X.branch)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});try{let[{aheadBy:G,behindBy:J},W]=await Promise.all([Q.compare(Y,X.branch),Q.getBranchHead(X.branch)]);return Z.json({baseBranch:Y,aheadBy:G,behindBy:J,lastCommitAt:W.committedAt})}catch(G){if(G instanceof h4&&G.status===404)return Z.json({baseBranch:Y,aheadBy:0,behindBy:0,lastCommitAt:null});throw G}}catch(Q){return xa(Z,Q)}}),$}var eB6,Lm$=500,wm$=1048576,Em$=1024,ZO6=8388608,XO6,QO6,jm$;var Am$=D(()=>{Bt0();ST0();Q8();MH();m71();MT0();NX1();$X1();Nm$();Dm$();FX1();XL();gT0();eB6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;XO6=o5({maxSize:ZO6,onError:($)=>$.json({error:"Payload too large"},413)}),QO6=Nl.object({set:Nl.record(Nl.string(),Nl.unknown()).optional(),delete:Nl.array(Nl.string()).optional()}).refine(($)=>Object.keys($.set??{}).length>0||($.delete?.length??0)>0,{message:"Patch must set or delete at least one block"}).refine(($)=>Object.keys($.set??{}).length+($.delete?.length??0)<=Lm$,{message:`Patch cannot touch more than ${Lm$} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=wm$),{message:`Each block must be at most ${wm$} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=Em$),{message:`Each block key must be at most ${Em$} characters`}),jm$=qT0(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(!$O6(G))return $.json({error:`Invalid branch name: ${G}`},400);let J=X.auth?.user?.id??null;if(!J){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!Om$(B,{organizationId:Q.id,virtualMcpId:Y,branch:G}))return $.json({error:"Unauthorized"},401)}let W=await X.storage.virtualMcps.findById(Y);if(!W||W.organization_id!==Q.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!UD0(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],N=va(K,F);if(!N)return $.json({error:"Project has no GitHub repository"},404);let U=K?.runtime;return $.set("decofileScope",{organizationId:Q.id,virtualMcpId:Y,branch:G,packagePath:U?.path?.replace(/^\/+|\/+$/g,"")||null,githubRepo:N,userId:J}),Z()})});var Tm$=($)=>{let Z=new K1;if(Z.use("*",Ev),Z.route("/",uA0()),Z.route("/",hh$()),Z.route("/",ic$()),Z.route("/",cc$()),Z.route("/",TT0()),Z.route("/tools",ac$()),Z.route("/",oc$()),Z.route("/",Pc$({kvStorage:$.kvStorage})),Z.route("/",jc$()),Z.route("/fs",bc$({getConnection:$.getNatsConnection})),Z.route("/sandbox",Km$()),Z.route("/decofile",Pm$()),Z.route("/",hc$()),Z.route("/deco-sites",cA0()),Z.route("/hosting",kh$()),Z.route("/monitor",bh$()),Z.route("/sso",fA0()),Z.route("/",RT0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",Ph$()),$.mountDevAssets)Z.route("/dev-assets",pA0({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("/",cx$()),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",yc$()),Z.route("/mcp",mw0()),Z.route("/mcp/self",AT0()),Z.route("/mcp",nw0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var Rm$=D(()=>{Q8();FZ1();Ah$();OZ1();Vh$();xh$();nA0();Za();KZ1();zc$();Ac$();xc$();Ko();XZ1();tw0();y71();gc$();uc$();dc$();pc$();rc$();h71();ec$();u71();iw0();Hm$();Am$()});function YO6($){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 GO6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},Im$=()=>{let $=new K1;return $.use("*",GO6),$.get("/",async(Z)=>{let X=C0(),Q=X.decoSupabaseUrl,Y=X.decoSupabaseServiceKey;if(!Q||!Y)return Z.json({apps:[]});try{let G=await Z7(Q,Y,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:YO6(G)})}catch(G){return console.error("[deco-apps] GET error:",G),Z.json({error:"Failed to fetch apps"},502)}}),$};var qm$=D(()=>{Q8();E$();gP0()});import{z as k1}from"zod";function vH($,Z="invalid_request_error",X=null,Q=null){return{error:{message:$,type:Z,param:X,code:Q}}}function DO6($){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 LO6($,Z,X){try{return JSON.parse($)}catch{throw new Vm$(`Invalid JSON in tool call arguments for function '${X}' (tool_call_id: ${Z}): ${$}`)}}function wO6($){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:LO6(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 EO6($){let Z=$.map((X)=>{let Q=X.function.parameters?$G(X.function.parameters):$G({type:"object",properties:{}});return[X.function.name,u$({description:X.function.description,inputSchema:Q})]});return Object.fromEntries(Z)}function jO6($){if(!$)return;return{openai:{response_format:$}}}function zO6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function Mm$($,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 km$($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var JO6=256,WO6,KO6,HO6,FO6,NO6,UO6,BO6,OO6,Vm$,Sm$,Cm$;var _m$=D(()=>{c4();Q8();Yl();fN();WO6=k1.object({type:k1.literal("function"),function:k1.object({name:k1.string(),description:k1.string().optional(),parameters:k1.record(k1.string(),k1.unknown()).optional()})}),KO6=k1.object({id:k1.string(),type:k1.literal("function"),function:k1.object({name:k1.string(),arguments:k1.string()})}),HO6=k1.discriminatedUnion("role",[k1.object({role:k1.literal("system"),content:k1.string(),name:k1.string().optional()}),k1.object({role:k1.literal("user"),content:k1.union([k1.string(),k1.array(k1.union([k1.object({type:k1.literal("text"),text:k1.string()}),k1.object({type:k1.literal("image_url"),image_url:k1.object({url:k1.string(),detail:k1.string().optional()})})]))]),name:k1.string().optional()}),k1.object({role:k1.literal("assistant"),content:k1.string().nullable().optional(),name:k1.string().optional(),tool_calls:k1.array(KO6).optional()}),k1.object({role:k1.literal("tool"),content:k1.string(),tool_call_id:k1.string()})]),FO6=k1.object({type:k1.literal("text")}),NO6=k1.object({type:k1.literal("json_object")}),UO6=k1.object({type:k1.literal("json_schema"),json_schema:k1.object({name:k1.string(),description:k1.string().optional(),schema:k1.record(k1.string(),k1.unknown()),strict:k1.boolean().optional()})}),BO6=k1.union([FO6,NO6,UO6]),OO6=k1.object({model:k1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:k1.array(HO6),stream:k1.boolean().optional().default(!1),temperature:k1.number().min(0).max(2).optional(),max_tokens:k1.number().positive().optional(),top_p:k1.number().min(0).max(1).optional(),frequency_penalty:k1.number().min(-2).max(2).optional(),presence_penalty:k1.number().min(-2).max(2).optional(),stop:k1.union([k1.string(),k1.array(k1.string())]).optional(),tools:k1.array(WO6).optional(),tool_choice:k1.union([k1.literal("auto"),k1.literal("none"),k1.literal("required"),k1.object({type:k1.literal("function"),function:k1.object({name:k1.string()})})]).optional(),response_format:BO6.optional(),user:k1.string().optional()});Vm$=class Vm$ extends Error{constructor($){super($);this.name="MessageConversionError"}};Sm$=new K1;Sm$.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),X=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(vH("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(vH("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(vH("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Q=await $.req.json(),Y=OO6.safeParse(Q);if(!Y.success){let w=Y.error.issues[0]??{message:"Invalid request",path:[]};return $.json(vH(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let G=Y.data,J=DO6(G.model);if(!J)return $.json(vH("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)=>Ew(j.providerId));if(!E)return $.json(vH("No AI provider credentials configured for this organization. Add a credential in settings or specify one explicitly via 'credential_id:model_id'.","invalid_request_error","model"),400);W=E.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(vH(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),N=wO6(G.messages),U=G.tools?EO6(G.tools):void 0,B=jO6(G.response_format),O=zO6(),L=Math.floor(Date.now()/1000);if(G.stream)return ZU($,async(w)=>{let E=Mm$(F,N,U,G,B,$.req.raw.signal);try{let j=bO(E),z=!1,A=0,P="",I=async()=>{if(P.length===0)return;let k=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{content:k},finish_reason:null}]})})};for await(let k of j.fullStream){if(!z&&(k.type==="text-delta"||k.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(k.type==="text-delta"){if(P+=k.text,P.length>=JO6)await I()}else if(k.type==="tool-call"){await I();let M=A++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{tool_calls:[{index:M,id:k.toolCallId,type:"function",function:{name:k.toolName,arguments:JSON.stringify(k.input)}}]},finish_reason:null}]})})}else if(k.type==="finish")await I(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:G.model,choices:[{index:0,delta:{},finish_reason:km$(k.finishReason)}],usage:k.totalUsage?{prompt_tokens:k.totalUsage.inputTokens??0,completion_tokens:k.totalUsage.outputTokens??0,total_tokens:k.totalUsage.totalTokens??0}:void 0})})}await I(),await w.writeSSE({data:"[DONE]"})}catch(j){let z=j;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=Mm$(F,N,U,G,B,$.req.raw.signal),E=await vO(w),j={role:"assistant",content:E.text||null};if(E.toolCalls&&E.toolCalls.length>0)j.tool_calls=E.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),j.content=null;return $.json({id:O,object:"chat.completion",created:L,model:G.model,choices:[{index:0,message:j,finish_reason:km$(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(vH("Request aborted","invalid_request_error"),400);if(Y.name==="MessageConversionError")return $.json(vH(Y.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",Y.message,Y.stack),$.json(vH(Y.message,"server_error"),500)}});Cm$=Sm$});function PO6($){if(typeof $!=="object"||$===null)return!1;let X=$.githubRepo?.url;return typeof X==="string"&&X.length>0}function vm$(){let $=new K1;return $.use("*",async(Z,X)=>{await X(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let X=Z.get("studioContext"),Q=o0(X);if(!Q)return Z.json({error:"Authentication required"},401);let G=(Z.req.query("site")??"").trim().toLowerCase();if(!YJ(G))return Z.json({error:"Invalid site slug"},400);let J=await X.db.selectFrom("member").innerJoin("organization","organization.id","member.organizationId").select(["organization.id as id","organization.slug as slug","organization.name as name","organization.metadata as metadata"]).where("member.userId","=",Q).execute(),W=[];for(let H of J){if(!H.slug||hZ(H))continue;let F=await X.storage.virtualMcps.list(H.id);for(let N of F){if(se1(N)!==G)continue;if(!PO6(N.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:N.id,title:N.title,icon:N.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var fm$=D(()=>{Q8();DO()});var xm$;var bm$=D(()=>{xm$={name:"decocms",version:"4.316.8",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^3.0.85","@ai-sdk/google":"^3.0.83","@ai-sdk/openai":"^3.0.73","@anthropic-ai/sdk":"^0.105.0","@aws-sdk/client-s3":"^3.1013.0","@aws-sdk/client-sts":"^3.1013.0","@aws-sdk/lib-storage":"^3.1013.0","@aws-sdk/s3-request-presigner":"^3.1013.0","@clickhouse/client":"^1.8.1","@dbos-inc/dbos-sdk":"^4.21.6","@inkjs/ui":"^2.0.0","@nats-io/jetstream":"3.4.0","@nats-io/kv":"3.4.0","@nats-io/nats-core":"3.4.0","@nats-io/transport-node":"3.4.0","@openrouter/ai-sdk-provider":"^2.9.1","@opentelemetry/core":"^2.6.0","embedded-postgres":"^18.3.0-beta.16",ink:"^6.8.0",kysely:"^0.28.12","posthog-node":"^5.0.0",react:"^19.2.6","react-dom":"^19.2.6"},devDependencies:{"@ai-sdk/provider":"^3.0.10","@better-auth/sso":"1.4.1","@decocms/better-auth":"1.5.17","@decocms/bindings":"workspace:*","@decocms/mcp-utils":"workspace:*","@decocms/runtime":"workspace:*","@decocms/sandbox":"workspace:*","@decocms/shared":"workspace:*","@jitl/quickjs-wasmfile-release-sync":"0.31.0","@modelcontextprotocol/sdk":"1.29.0","@opentelemetry/api":"^1.9.0","@opentelemetry/api-logs":"^0.211.0","@opentelemetry/exporter-logs-otlp-proto":"^0.211.0","@opentelemetry/exporter-prometheus":"^0.208.0","@opentelemetry/exporter-trace-otlp-proto":"^0.207.0","@opentelemetry/instrumentation-runtime-node":"^0.24.0","@opentelemetry/resources":"^2.6.0","@opentelemetry/sdk-logs":"^0.211.0","@opentelemetry/sdk-metrics":"^2.2.0","@opentelemetry/sdk-node":"^0.207.0","@opentelemetry/sdk-trace-base":"^2.5.0","@types/bun":"^1.3.1","@types/google.maps":"^3.65.2","@types/pg":"^8.15.6","@types/react-syntax-highlighter":"^15.5.13","@vercel/nft":"^1.1.1",ai:"^6.0.208","better-auth":"1.4.22",croner:"^9.1.0",degit:"^2.8.4",hono:"^4.10.7",jose:"^6.0.11",nanoid:"^5.1.6",pg:"^8.16.3",typescript:"^7.0.2",typescript5:"npm:typescript@^5.9.3",zod:"4.3.6"},homepage:"https://github.com/decocms/studio",keywords:["mcp","model-context-protocol","ai","gateway","self-hosted","tools"],license:"MIT",publishConfig:{access:"public"}}});function RO6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??TO6}}var ym$,TO6="https://ph.studio.decocms.com",gm$;var hm$=D(()=>{Q8();W90();aC();Q9();E$();n91();bm$();ym$=new K1;ym$.get("/",($)=>{let Z={version:xm$.version,theme:Bp1(),...vF().logo&&{logo:vF().logo},...PN()&&{internalUrl:d_1()},...C0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!C0().firecrawlApiKey,hostingEnabled:!!C0().controlplaneRestUrl&&!!C0().controlplaneServiceToken,hostingControlPlaneGa:C0().hostingControlPlaneGa,monitorEnabled:!!C0().clickhouseAnalyticsUrl&&!!C0().clickhouseAnalyticsPassword,monitorGa:C0().monitorGa,auth:Cg$(),posthog:RO6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:ma()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});gm$=ym$});function Ul($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function DX1($){return(Ul($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((X)=>X.charAt(0).toUpperCase()+X.slice(1)).join(" ")}function lm$($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Ul($))}&sz=${Z}`}function um$($,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 cm$($){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()?um$(`${Y.trim().replace(/\s+/g," ")} \u2014 ${J}`,200):um$(`How does ${X} really perform? ${J}`,200);return{title:G,description:W}}import{z as c0}from"zod";var Cv,IO6,qO6,MO6,kO6,dm$;var mm$=D(()=>{Cv=c0.enum(["good","bad","neutral"]),IO6=c0.preprocess(($)=>{if(Array.isArray($))return{kind:"text",value:$.find((X)=>X!==null&&typeof X!=="object")??""};return $!==null&&typeof $==="object"?$:{kind:"text",value:$}},c0.object({kind:c0.enum(["text","number","sparkline","badge","score"]).catch("text"),value:c0.coerce.string().optional(),tone:Cv.optional(),muted:c0.boolean().optional(),delta:c0.coerce.string().optional(),deltaDir:c0.enum(["up","down","neutral"]).optional(),points:c0.array(c0.coerce.number()).optional(),label:c0.coerce.string().optional()}).transform(($)=>{if($.kind==="badge"&&$.label==null)$.label=$.value??"";if($.kind==="score"){let Z=Number($.value);if(Number.isNaN(Z))return{...$,kind:"text"}}return $})),qO6=c0.preprocess(($)=>{let Z=$;if(Z&&typeof Z==="object"&&!Array.isArray(Z)&&Array.isArray(Z.cells))Z=Z.cells;if(Array.isArray(Z)&&Z.length===1&&Array.isArray(Z[0]))Z=Z[0];if(Array.isArray(Z))return Z;if(Z&&typeof Z==="object")return Object.values(Z);return Z},c0.array(IO6)),MO6={key:c0.coerce.string(),title:c0.coerce.string(),eyebrow:c0.coerce.string().optional(),headline:c0.coerce.string(),annotation:c0.coerce.string().optional(),methodology:c0.coerce.string().optional(),sources:c0.array(c0.object({name:c0.coerce.string(),logoUrl:c0.coerce.string()})).optional()},kO6=c0.discriminatedUnion("template",[c0.object({template:c0.literal("cover"),score:c0.object({value:c0.coerce.number(),max:c0.coerce.number().optional(),grade:c0.coerce.string().optional(),label:c0.coerce.string().optional()}).optional(),brandImage:c0.coerce.string().optional(),screenshot:c0.coerce.string().optional(),mobileScreenshot:c0.coerce.string().optional()}),c0.object({template:c0.literal("cta"),ctaUrl:c0.coerce.string().optional(),ctaLabel:c0.coerce.string().optional(),bullets:c0.array(c0.coerce.string()).optional()}),c0.object({template:c0.literal("series"),points:c0.array(c0.coerce.number()).min(2),xLabels:c0.array(c0.coerce.string()).min(1),unit:c0.coerce.string().optional(),callout:c0.object({index:c0.coerce.number(),value:c0.coerce.string(),tone:Cv.optional()})}),c0.object({template:c0.literal("threshold"),value:c0.coerce.string().default(""),metricLabel:c0.coerce.string().optional(),ratio:c0.coerce.number(),thresholdRatio:c0.coerce.number().optional(),thresholdLabel:c0.coerce.string().default(""),tone:Cv.optional()}),c0.object({template:c0.literal("stats"),stats:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("bars"),items:c0.array(c0.object({value:c0.coerce.string(),label:c0.coerce.string(),ratio:c0.coerce.number(),tone:Cv.optional()})).min(1)}),c0.object({template:c0.literal("gauges"),gauges:c0.array(c0.object({label:c0.coerce.string(),value:c0.coerce.string(),status:c0.enum(["good","warn","bad"]).catch("warn"),caption:c0.coerce.string().optional(),ratio:c0.coerce.number().optional()})).min(1)}),c0.object({template:c0.literal("checklist"),checks:c0.array(c0.object({label:c0.coerce.string(),status:c0.enum(["pass","fail","warn"]).catch("fail"),value:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("table"),columns:c0.array(c0.object({label:c0.coerce.string(),align:c0.enum(["left","right"]).optional()})).min(1),rows:c0.array(qO6).min(1),highlightRow:c0.coerce.number().optional()}),c0.object({template:c0.literal("products"),products:c0.array(c0.object({name:c0.coerce.string(),price:c0.coerce.string().optional(),image:c0.coerce.string().optional(),url:c0.coerce.string().optional()})).min(1)}),c0.object({template:c0.literal("list"),entries:c0.array(c0.object({label:c0.coerce.string(),severity:c0.enum(["error","warning","notice"]).catch("notice")})).min(1),moreCount:c0.coerce.number().optional()}),c0.object({template:c0.literal("keywords"),volumeLabel:c0.coerce.string().optional(),keywords:c0.array(c0.object({term:c0.coerce.string(),volume:c0.coerce.string(),position:c0.coerce.number().catch(0)})).min(1)}),c0.object({template:c0.literal("competitor"),metricLabel:c0.coerce.string().optional(),competitors:c0.array(c0.object({name:c0.coerce.string(),value:c0.coerce.string(),tone:Cv.optional(),isYou:c0.boolean().optional()})).min(1)}),c0.object({template:c0.literal("scorecard"),rivalLabel:c0.coerce.string().optional(),dimensions:c0.array(c0.object({label:c0.coerce.string(),you:c0.coerce.string(),rival:c0.coerce.string().optional(),rivalName:c0.coerce.string().optional(),tone:Cv.optional()})).min(1)})]),dm$=c0.object({...MO6,template:kO6})});function iT0($){let Z=[],X=[...$.sections].sort((Y,G)=>Y.position-G.position).map((Y)=>{let G=dm$.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 LX1=D(()=>{mm$()});import{join as im$}from"path";async function SO6($){try{let Z=await fetch(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent($)}`,{headers:{Accept:"application/json"},signal:AbortSignal.timeout(VO6)});if(!Z.ok)return null;let X=await Z.json(),{deck:Q}=iT0(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()||DX1($),score:Q.meta.scores?.cover??J?.score?.value,verdict:Y?.annotation?.trim()||Y?.headline?.trim()||void 0}}catch{return null}}function TG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function CO6($,Z){let X=Ul($),Q=Z?.brand?.trim()||DX1(X),Y=lm$(X,128),J=`${(C0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(X)}`,{title:W,description:K}=cm$({brand:Q,domain:X,score:Z?.score,verdict:Z?.verdict}),H=`${J}/og.png`,F=`${Q} commerce report by decocms`;return[`<title>${TG(W)}</title>`,`<meta name="description" content="${TG(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="${TG(W)}" />`,`<meta property="og:description" content="${TG(K)}" />`,`<meta property="og:url" content="${TG(J)}" />`,`<meta property="og:image" content="${TG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${TG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${TG(W)}" />`,`<meta name="twitter:description" content="${TG(K)}" />`,`<meta name="twitter:image" content="${TG(H)}" />`,`<meta name="twitter:image:alt" content="${TG(F)}" />`,`<link rel="canonical" href="${TG(J)}" />`,`<link rel="icon" href="${TG(Y)}" sizes="any" />`].join(`
|
|
2985
2985
|
`)}function _O6($,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}
|
|
2986
2986
|
</head>`)}function pm$($){let Z=new K1;return Z.get("/:domain/og.png",async(X)=>{let Q=Ul(X.req.param("domain")),Y=async()=>{let G=$?Bun.file(im$($,"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(`${DK({})}/api/v2/public/diagnostics/${encodeURIComponent(Q)}/og.png`,{signal:AbortSignal.timeout(vO6)}),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=$?im$($,"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 SO6(Ul(Q)),K=CO6(Q,W);return X.html(_O6(J,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return X.html(J)}}),Z}var VO6=2500,vO6=1e4;var nm$=D(()=>{Q8();LX1();AE();E$()});function ya($,Z){return fetch(`${DK({})}${$}`,Z)}async function fO6($,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 ya(`/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}=iT0(J);return{status:W.slides.length?"ready":"empty",deck:W,scanned_at:J.scanned_at,drops:K}}var bO6,QU,tm$=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},om$;var rm$=D(()=>{Q8();rY();AE();LX1();bO6=new Set(["complete","errored","terminated","unknown"]),QU=new K1;QU.use("*",async($,Z)=>{let X=await e$.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});QU.use("/link-token/*",tm$);QU.use("/suggest",tm$);QU.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 fO6(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)}});QU.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 ya("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${PE({})}`},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)}});QU.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let X=await ya(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${PE({})}`}});if(!X.ok)return $.json({error:`status HTTP ${X.status}`},502);let Y=(await X.json()).status??"unknown",G={done:bO6.has(Y),status:Y};return $.json(G)}catch{return $.json({error:"status failed"},502)}});QU.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let X=await ya(`/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)}});QU.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let X=await ya(`/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:[]})}});om$=QU});import{createHmac as xO6,timingSafeEqual as yO6}from"crypto";function am$($,Z,X,Q=Date.now()){if(!Z||!X)return!1;let Y,G=[];for(let H of Z.split(",")){let F=H.indexOf("=");if(F<=0)continue;let N=H.slice(0,F).trim(),U=H.slice(F+1).trim();if(N==="t")Y=U;else if(N==="v1")G.push(U)}if(!Y||G.length===0)return!1;let J=Number(Y);if(!Number.isFinite(J)||Math.abs(Q/1000-J)>gO6)return!1;let W=xO6("sha256",X).update(`${Y}.${$}`).digest("hex"),K=Buffer.from(W,"hex");return G.some((H)=>{let F=Buffer.from(H,"hex");return K.length===F.length&&yO6(K,F)})}function em$($){let Z;try{Z=JSON.parse($)}catch{return null}let X=mJ(Z),Q=mJ(mJ(X?.data)?.object);if(!X||typeof X.type!=="string"||!Q)return null;return{id:fH(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 $i$($){switch($){case"active":case"trialing":return"active";case"past_due":return"past_due";default:return"canceled"}}function fH($){return typeof $==="string"?$:void 0}function mJ($){return typeof $==="object"&&$!==null?$:void 0}function pT0($){return typeof $==="number"?new Date($*1000):null}function jX1($){return fH($)??fH(mJ($)?.id)}function hO6($){return jX1($.subscription)??fH(mJ(mJ($.parent)?.subscription_details)?.subscription)}function uO6($){let Z=pT0($.current_period_end);if(Z)return Z;let X=mJ($.items)?.data;if(!Array.isArray(X))return null;let Q=0;for(let Y of X){let G=mJ(Y)?.current_period_end;if(typeof G==="number"&&G>Q)Q=G}return Q>0?new Date(Q*1000):null}function wX1($,Z){let X=pT0($.created);return!!X&&!!Z.lastStripeEventAt&&X<Z.lastStripeEventAt}function EX1($,Z){let X=pT0($.created);if(!X)return;return Z.lastStripeEventAt&&Z.lastStripeEventAt>X?void 0:X}async function lO6($,Z){let X=Z.data.object;switch(Z.type){case"checkout.session.completed":case"checkout.session.async_payment_succeeded":{let Q=fH(mJ(X.metadata)?.orgId);if(!Q)return{handled:!1,reason:"no orgId"};if(fH(mJ(X.metadata)?.kind)==="topup"){if(X.mode!=="payment")return{handled:!1,reason:"topup with wrong mode"};if(fH(X.payment_status)!=="paid")return{handled:!1,reason:"payment not confirmed"};let J=fH(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(mJ(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:mJ(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(fH(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=jX1(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(wX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Q,{stripeCustomerId:jX1(X.customer),stripeSubscriptionId:G,status:"active",lastStripeEventAt:EX1(Z,Y)}),{handled:!0,organizationId:Q}}case"customer.subscription.updated":case"customer.subscription.deleted":{let Q=fH(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&&wX1(Z,Y))return{handled:!1,reason:"stale event"};let J=G?"canceled":$i$(X.status);return await $.updateStripeState(Y.organizationId,{status:J,currentPeriodEnd:uO6(X),...G&&{stripeSubscriptionId:null},lastStripeEventAt:EX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}case"invoice.paid":{let Q=hO6(X);if(!Q)return{handled:!1,reason:"no sub id"};let Y=await $.getBillingByStripeSubscriptionId(Q);if(!Y)return{handled:!1,reason:"unknown subscription"};if(wX1(Z,Y))return{handled:!1,reason:"stale event"};return await $.updateStripeState(Y.organizationId,{status:"active",currentPeriodEnd:pT0(X.period_end),lastStripeEventAt:EX1(Z,Y)}),{handled:!0,organizationId:Y.organizationId}}default:return{handled:!1,reason:`unhandled event ${Z.type}`}}}function cO6($,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:$i$(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 sm$($,Z){let X=cO6($,Z);if(!X)return;pY({event:X.name,organizationId:X.organizationId,...$.id?{uuid:Pt1(`stripe:${$.id}:${X.name}`)}:{},...$.created?{timestamp:new Date($.created*1000)}:{},properties:X.properties})}async function Zi$($){let Z=new NK(r8().db),X=await lO6(Z,$);if(!(X.handled&&X.topUp))sm$($,X);if(X.handled&&X.topUp)await Uz$({organizationId:X.organizationId,amountCents:X.topUp.creditCents,referenceId:X.topUp.referenceId}),sm$($,X);if(!X.handled&&X.orphanSubscriptionId)try{await o0$(X.orphanSubscriptionId),console.error("stripe webhook: canceled orphan subscription",{subscriptionId:X.orphanSubscriptionId,eventId:$.id})}catch(Q){if(!(Q instanceof sY&&(Q.status===400||Q.status===404)))throw Q}return X}var gO6=300;var Xi$=D(()=>{sG();S4();u50();_E();M11()});var dO6=1048576,zX1;var Qi$=D(()=>{Q8();MH();E$();Xi$();zX1=new K1;zX1.post("/webhook",o5({maxSize:dO6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=C0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let X=await $.req.text();if(!am$(X,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let Y=em$(X);if(!Y)return $.json({error:"invalid payload"},400);let G=await Zi$(Y);return console.log("stripe webhook",{eventId:Y.id,type:Y.type,livemode:Y.livemode,...G}),$.json({received:!0})})});import{timingSafeEqual as mO6}from"crypto";function pO6($,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 mO6(Buffer.from(Y),Buffer.from(Q))}var iO6=5242880,PX1;var Yi$=D(()=>{Q8();MH();a3();PX1=new K1;PX1.post("/webhook",o5({maxSize:iO6,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(!pO6(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 Nt0())?.markTenantPoolsDirty(G,Y)??[];return $.json({ok:!0,pools:W})})});function Gi$($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var Ji$,nO6,tO6,Wi$;var Ki$=D(()=>{Q8();S3();Cg();zy();Ji$=new K1,nO6=["range","if-none-match","if-modified-since"],tO6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];Ji$.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),X=Z.organization?.id;if(!Z.auth?.user?.id){if(gu($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new Z$(401,{message:"Authentication required"})}if(!X)throw new Z$(401,{message:"Organization context required"});let Q=$.req.path.replace(/^.*\/files\//,"");if(!Q)throw new Z$(400,{message:"Missing file key"});let Y=await vt(Q,Z);if(!Y)throw new Z$(503,{message:"Object storage not configured"});if(Y.startsWith("data:")&&ZJ()){let K=Y.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new Z$(500,{message:"Invalid data URL from storage"});let[,H,F]=K,N=Buffer.from(F,"base64"),U=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return Gi$(U,H),new Response(N,{status:200,headers:U})}let G=new Headers;for(let K of nO6){let H=$.req.header(K);if(H)G.set(K,H)}let J=await fetch(Y,{headers:G});if(J.status===403||J.status===404)throw new Z$(404,{message:"File not found"});if(!J.ok&&J.status!==304&&J.status!==416)throw console.error(`[files] upstream storage error ${J.status} for key:`,Q),new Z$(502,{message:"Upstream storage error"});let W=new Headers;for(let K of tO6){let H=J.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),Gi$(W,W.get("content-type")??""),new Response(J.body,{status:J.status,headers:W})});Wi$=Ji$});var ga=_((_v)=>{var oO6=_v&&_v.__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]}),rO6=_v&&_v.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))oO6(Z,$,X)};Object.defineProperty(_v,"__esModule",{value:!0});rO6(CY(),_v)});var Ni$=_((Hi$)=>{Object.defineProperty(Hi$,"__esModule",{value:!0});Hi$.version=void 0;Hi$.version="3.4.0"});var Oi$=_((bH)=>{var sO6=bH&&bH.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(bH,"__esModule",{value:!0});bH.NodeTransport=bH.VERSION=void 0;bH.nodeResolveHost=QD6;var $5=ga(),aO6=A0("net"),AX1=A0("tls"),eO6=A0("path"),Ui$=A0("fs"),$D6=sO6(A0("dns")),ZD6=Ni$();bH.VERSION=ZD6.version;var XD6="nats.js";class Bi${socket;version;lang;yields=[];signal=(0,$5.deferred)();closedNotification=(0,$5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=XD6,this.version=bH.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,$5.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 $5.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 $5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:J}=G,W=J==="ECONNREFUSED"?new $5.errors.ConnectionError("connection refused",{cause:G}):G;throw this.socket?.destroy(),W}}dial($){let Z=(0,$5.deferred)(),X,Q=(0,aO6.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,$5.deferred)(),Z;return this.socket.on("data",(X)=>{this.yields.push(X);let Q=$5.DataBuffer.concat(...this.yields),Y=(0,$5.extractProtocolMessage)(Q);if(Y!=="")try{let G=$5.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,$5.deferred)();try{if($=(0,eO6.resolve)($),!(0,Ui$.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,Ui$.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,$5.extend)(X,this.options.tls,Y)}catch(Y){return Promise.reject(new $5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,$5.deferred)();try{let Y=(0,AX1.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 $5.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,$5.extend)(Z,this.options.tls,Q)}catch(Q){return Promise.reject(new $5.errors.ConnectionError(Q.message,{cause:Q}))}let X=(0,$5.deferred)();try{let Q=(0,AX1.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 $5.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,$5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,$5.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 AX1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,$5.render)($)}`);let Z=(0,$5.deferred)();try{this.socket.write($,(X)=>{if(X){if(this.options.debug)console.error(`!!! ${(0,$5.render)($)}: ${X}`);return Z.reject(X)}return Z.resolve()})}catch(X){if(this.options.debug)console.error(`!!! ${(0,$5.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}}bH.NodeTransport=Bi$;function QD6($){let Z=(0,$5.deferred)();return $D6.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 ji$=_((Ei$)=>{Object.defineProperty(Ei$,"__esModule",{value:!0});Ei$.connect=YD6;var Di$=Oi$(),Li$=ga(),wi$=ga();function YD6($={}){if((0,wi$.hasWsProtocol)($))return Promise.reject(wi$.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,Li$.setTransportFactory)({factory:()=>{return new Di$.NodeTransport},dnsResolveFn:Di$.nodeResolveHost}),Li$.NatsConnectionImpl.connect($)}});var zi$=_((YU)=>{var JD6=YU&&YU.__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]}),WD6=YU&&YU.__exportStar||function($,Z){for(var X in $)if(X!=="default"&&!Object.prototype.hasOwnProperty.call(Z,X))JD6(Z,$,X)};Object.defineProperty(YU,"__esModule",{value:!0});YU.connect=void 0;var KD6=ji$();Object.defineProperty(YU,"connect",{enumerable:!0,get:function(){return KD6.connect}});WD6(ga(),YU)});function Ri$($){let Z=$?.connectFn??UD6,X=null,Q=null,Y=!1,G=!1,J=!1,W=[];function K(){return X!==null&&!X.isClosed()&&!X.isDraining()&&!J}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let U of W)try{U()}catch{}}function F(U){(async()=>{for await(let B of U.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),J=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),J=!1,Q=null,H()})().catch(()=>{})}async function N(U,B){let O=0;while(!G)try{X=await Z({servers:U,timeout:ND6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${X.getServer()} after ${O} attempt(s)`),Q=null,J=!1,F(X),H();return}catch{O++;let L=G7(FD6,HD6,O-1,2,0.5);await w$(L)}}return{init(U,B){if(Y)return;Y=!0,G=!1;let O=B?.creds?Pi$.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;N(U,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?X:null},getJetStream(){if(!K())return null;if(!Q)Q=Ti$.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 UD6($){return Ai$.connect($)}var Pi$,Ai$,Ti$,HD6=100,FD6=3000,ND6=3000;var Ii$=D(()=>{W4();Pi$=V(yl(),1),Ai$=V(zi$(),1),Ti$=V(DU(),1)});function TX1($,Z){return`${$}.${Z}`}class RX1{cache;constructor($){this.cache=ju({ttlMs:$?.ttlMs??BD6,maxSize:$?.maxSize??OD6})}async get($,Z){return this.cache.get(TX1($,Z))??null}async set($,Z,X){this.cache.set(TX1($,Z),X)}async invalidate($,Z){this.cache.delete(TX1($,Z))}teardown(){this.cache.clear()}}var BD6=600000,OD6=5000;var qi$=()=>{};function nT0($,Z){return`${$}:${Z}`}function IX1($){let Z=ju({ttlMs:$?.ttlMs??DD6,maxSize:$?.maxSize??LD6}),X=$?.getConnection,Q=crypto.randomUUID(),Y=new TextEncoder,G=new TextDecoder,J=null;function W(K,H){let F=X?.();if(!F)return;try{F.publish(Mi$,Y.encode(JSON.stringify({organizationId:K,keyId:H,originId:Q})))}catch(N){console.warn("[ProviderKeyCache] Publish failed (non-critical):",N)}}return{get(K,H){return Z.get(nT0(K,H))},set(K,H,F){Z.set(nT0(K,H),F)},invalidate(K,H){Z.delete(nT0(K,H)),W(K,H)},start(){if(J)return;let K=X?.();if(!K)return;J=K.subscribe(Mi$),(async()=>{for await(let H of J)try{let F=JSON.parse(G.decode(H.data));if(F.originId===Q)continue;Z.delete(nT0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){J?.unsubscribe(),J=null,Z.clear()}}}var Mi$="studio.ai-provider-keys.invalidate",DD6=30000,LD6=5000;var ki$=()=>{};class qX1{options;subscription=null;onCancel=null;encoder=new TextEncoder;originId=crypto.randomUUID();constructor($){this.options=$}async start($){if($)this.onCancel=$;if(this.subscription)return;if(!this.onCancel)return;let Z=this.options.getConnection();if(!Z)return;let X=new TextDecoder,Q=Z.subscribe("studio.decopilot.cancel");this.subscription=Q,(async()=>{for await(let Y of Q)try{let G=JSON.parse(X.decode(Y.data));if(G.originId===this.originId)continue;this.onCancel?.(G.taskId)}catch{}})().catch(console.error)}broadcast($){if(/[.*>\s]/.test($)){console.warn("[NatsCancelBroadcast] Invalid threadId, skipping broadcast");return}this.onCancel?.($);try{let Z=this.options.getConnection();if(!Z)return;let X=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",X)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var Vi$=($)=>{let Z;return()=>Z??=$()},MX1,kX1;var Si$=D(()=>{G6();MX1=Vi$(()=>J$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),kX1=Vi$(()=>J$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function TD6($=vi$){return{name:$H,subjects:[`${ys0}.>`],storage:IW.StorageType.File,max_age:jD6,max_bytes:PD6,max_msgs_per_subject:AD6,discard:IW.DiscardPolicy.Old,retention:IW.RetentionPolicy.Limits,duplicate_window:zD6,num_replicas:$}}class fi${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 Ci$($){let Z=_i$.headers();for(let[X,Q]of Object.entries($))Z.set(X,Q);return Z}function MD6($,Z){let X=0;return{publish(Q,Y,G,J){Q.publish(Y,G,J?{headers:J}:void 0).catch((W)=>{if(X++,ED6().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 kD6($,Z){return $.info?.cluster?Z:1}function VD6($){if(!($ instanceof Error))return!1;if(/non-clustered/i.test($.message))return!0;return/replicas?\b/i.test($.message)&&/not supported|can ?not|exceed|insufficient|greater than/i.test($.message)}class VX1{options;js=null;jsm=null;constructor($){this.options=$}async init(){let $=this.options.getConnection();if(!$){console.log("[Decopilot] StreamBuffer.init skipped: NATS not connected yet");return}let Z=async(Q,Y)=>{let G=TD6(Y);try{await Q.streams.info($H),await Q.streams.update($H,G)}catch(J){if(J instanceof Error&&J.message.includes("stream not found"))await Q.streams.add(G),await Q.streams.update($H,G);else if(J instanceof Error&&/can ?not change.*storage|storage type/i.test(J.message))await Q.streams.delete($H),await Q.streams.add(G);else throw J}},X=await u6(async()=>{let Q=this.options.getJetStreamManager?await this.options.getJetStreamManager():await IW.jetstreamManager($),Y=kD6($,vi$);try{await Z(Q,Y)}catch(G){if(Y<=1||!VD6(G))throw G;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${Y} (${G.message}); falling back to an unreplicated stream`),await Z(Q,1)}return Q},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:cg});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=MD6(Z,Q),J=!1,W=()=>{if(J)return;J=!0;let H=aO$(Z);Y.publish(H.subject,H.data).catch(()=>{})};X.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),N=hs0(H,{runId:Z}),U=performance.now()-F;MX1().record(U),kX1().add(1,{"org.id":Q??"unknown"}),qD6?.record(U,N.reduce((B,O)=>B+O.data.length,0));for(let B of N)G.publish(Y,B.subject,B.data,B.headers?Ci$(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,N=0,U;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),N++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){U=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),ID6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:N,publishErrors:G.errorCount}))}if(U!==void 0)throw U})()}async publishSerialized($,Z){try{return await u6(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:Ci$(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:cg}),!0}catch(X){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,X),!1}}async publishRawChunk($,Z,X){let Q=this.js;if(!Q)return!1;let Y=performance.now(),G=hs0(Z,{runId:$,dedup:X});MX1().record(performance.now()-Y),kX1().add(1);for(let J of G)if(!await this.publishSerialized(Q,J))return!1;return!0}async publishDone($,Z,X){let Q=this.js;if(!Q)return!1;let Y=sO$({runId:$,fenceToken:Z,finalSeq:X});return await this.publishSerialized(Q,Y)}async createTailStream($,Z,X){let Q=this.js;if(!Q)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let Y=X?.deliverPolicy==="new"?IW.DeliverPolicy.New:IW.DeliverPolicy.All,G=X?.closeOnDone??!1,J=ED($),W;try{W=await u6(async()=>{return(await Q.consumers.get($H,{filter_subjects:J,deliver_policy:Y})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:cg})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=Rw0({messages:async function*(){try{for await(let L of W)yield{subject:L.subject,data:L.data,headers:L.headers}}finally{W.stop()}}(),onCancel:()=>W.stop()}).pipeThrough(zw0()).pipeThrough(Pw0()).getReader(),N=!1,U=()=>{if(N)return;N=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),U()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:E}=await F.read();if(w){O(),L.close();return}let j=E;if(j.kind==="done"){if(G){O(),L.close();return}continue}L.enqueue(j.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge($H,{filter:ED($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var IW,_i$,wD6=($)=>{let Z;return()=>Z??=$()},ED6,jD6=86400000000000,zD6=120000000000,PD6=4294967296,vi$,AD6=500000,RD6,ID6,qD6;var bi$=D(()=>{W4();us0();Iw0();Aw0();G6();Si$();IW=V(DU(),1),_i$=V(yl(),1),ED6=wD6(()=>J$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),vi$=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);RD6=process.env.STREAM_ENCODE_TRACE==="1",ID6=process.env.DECOPILOT_STREAM_TRACE==="1";qD6=RD6?new fi$:null});function tT0($,Z,X,Q){if(!Q)return!1;return $.emit(Z,tW(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 xi$=D(()=>{_8()});class SX1{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 yi$($,Z,X){let Q=Z.organizationId;if(!QY(Z,(await n9($,Q)).review))return!1;if(!cC(X))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Q))return!1;let Y=await $.storage.organizationSettings.get(Q),G=IK(Y?.flags),J=await A6($,Q),W=await $.storage.taskBoard.update(Z.id,Q,XY(J,G),Z.updatedBy);return await T6($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:G,reason:"pr_merged"}}),x$(Q,W),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${G}`),!0}var gi$=D(()=>{j6();BX();Rg();v5();iK();z5()});function xD6($){return $ instanceof $Q}function yD6($,Z){return Z-$>=fD6}class CX1{taskBoard;contextFactory;billing;db;options;timer=null;running=!1;cursor=null;constructor($,Z,X,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=X;this.db=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??SD6;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??_D6,X=this.options.itemIntervalMs??CD6,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()-Xo0),jr0);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()-bD6));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 Lr0(this.taskBoard,Y,Q,await KN(this.db,Q)),await wr0(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!==Y8)continue;let W=await this.contextFactory(Y,J.assignedBy??J.createdBy);if(!W)continue;await EN(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),xD6(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()+vD6),(await KN(this.db,Y)).progress).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Q} failed`,W))}return Z}async returnToTodo($,Z,X){try{let Q=await KN(this.db,Z),Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!=="in_progress")return;let G=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy,Q);if(!G)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:X}}).catch(()=>{}),x$(Z,G)}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(!yD6(mF(X,Z.reviewCycleStartedAt),Date.now()))return;await nK($,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;let Y=await KN(this.db,Z);if(!QY(Q,Y.review))return!1;let G=Q.assigneeId===Y8,J=await this.taskBoard.listPrs($,Z),W=await this.contextFactory(Z,Q.assignedBy??Q.createdBy);if(!W)return!1;if(J.length===0){if(G)await this.handOffReviewWithoutPr(W,Q);return!1}let K=await Promise.all(J.map(async(H)=>({...H,...await qg(Z,H)})));if(K.every((H)=>H.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${K.length} PR(s)) \u2014 proceeding on unknown`);if(await yi$(W,Q,K))return!0;if(await dD$(W,Q))return!0;if(await this.resolveConflictFromSweep(W,Q,K))return!0;if(!G)return!1;if(!Qr0(K))return!1;return await kL0(W,Q,{previewMatchesHead:Yr0(K)}),!0}async resolveConflictFromSweep($,Z,X){let Q=X.find((Y)=>Y.state!=="closed"&&Y.conflict===!0);if(!Q)return!1;return await FD($,Z.organizationId,Z,{pr:{number:Q.number,url:Q.url},conflict:!0}).catch((Y)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",Y),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var SD6=60000,CD6=300000,_D6=50,vD6=60000,fD6=900000,bD6=120000;var hi$=D(()=>{v5();j6();oo0();jN();$o();iK();gi$();z5();JJ();zr0();YY();Vt();Ig()});import{readdir as gD6,rm as oT0}from"fs/promises";import{join as rT0}from"path";async function sT0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-hD6),Z.setUTCHours(0,0,0,0);let X=0;try{let Q=await vv($);for(let Y of Q)if(/^\d{4}$/.test(Y))X+=await ui$($,Y,Z);else if(!Y.startsWith(".")){let G=rT0($,Y),J=await vv(G);for(let K of J){if(!/^\d{4}$/.test(K))continue;X+=await ui$(G,K,Z)}if((await vv(G)).length===0)await oT0(G,{recursive:!0,force:!0})}}catch(Q){console.warn("monitoring retention cleanup failed:",Q)}return X}async function ui$($,Z,X){let Q=0,Y=rT0($,Z),G=await vv(Y);for(let W of G){if(!/^\d{2}$/.test(W))continue;let K=rT0(Y,W),H=await vv(K);for(let N of H){if(!/^\d{2}$/.test(N))continue;let U=new Date(`${Z}-${W}-${N}T00:00:00Z`);if(isNaN(U.getTime()))continue;if(U<X){let B=rT0(K,N);await oT0(B,{recursive:!0,force:!0}),Q++}}if((await vv(K)).length===0)await oT0(K,{recursive:!0,force:!0})}if((await vv(Y)).length===0)await oT0(Y,{recursive:!0,force:!0});return Q}async function vv($){try{return(await gD6($)).filter((X)=>!X.startsWith("."))}catch{return[]}}var hD6=30;var _X1=()=>{};import{DBOS as vX1,SchedulerMode as uD6}from"@dbos-inc/dbos-sdk";async function cD6(){let $=[nJ(),fv(),hH()],Z=0;for(let X of $)try{Z+=await sT0(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 dD6($,Z){await vX1.runStep(()=>cD6(),{name:"monitoringRetention"})}function ci$(){if(li$)return;li$=!0;let $=vX1.registerWorkflow(dD6,{name:"monitoringRetentionWorkflow"});vX1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:lD6,mode:uD6.ExactlyOncePerIntervalWhenActive})}var lD6="23 4 * * *",li$=!1;var di$=D(()=>{MY();_X1()});function mi$($){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 EJ.create();Y.auth.user={id:X,role:Q.role},Y.organization={id:Q.orgId,slug:Q.orgSlug,name:Q.orgName};let G=await yt($.db,Z,Q.role);return Y.boundAuth=S91({auth:Y.authInstance,headers:new Headers,role:Q.role,permissions:G,userId:X}),Y.access=new JE(X,void 0,Y.boundAuth,Q.role,"self"),WD(Y,{id:Q.orgId,slug:Q.orgSlug}),Y}}var ii$=D(()=>{pB();KD()});function mD6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function iD6(){return{services:mD6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function nD6(){for(let $ of pD6)$()}function pi$($){let Z=[...fX1.logs,$];fX1={...fX1,logs:Z.length>500?Z.slice(-500):Z},nD6()}function bX1(){return tD6}var fX1,pD6,tD6=!1;var xX1=D(()=>{fX1=iD6(),pD6=new Set});import{EventEmitter as oD6}from"events";var yX1;var ni$=D(()=>{xX1();yX1=new oD6;yX1.on("request",($)=>{pi$($)})});function ti$(){return async($,Z)=>{let X=Date.now(),Q=$.req.method,Y=$.req.path;if(Y==="/api/auth/get-session"||Y.includes("favicon")){await Z();return}let G="",J=!1;if(Y.startsWith("/mcp")&&Q==="POST"){J=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let U=await $.req.raw.clone().json();if(U.method==="tools/call"&&U.params?.name){let B=Bl(U.params.name),O=U.params.arguments||{},L=Object.keys(O).map((E)=>Bl(E)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";G=`${K5.tool}${B}${K5.dim}(${w})${K5.reset}`}else if(U.method)G=`${K5.dim}${Bl(U.method)}${K5.reset}`}}catch{}}let W=Bl(Y);if(Y.startsWith("/mcp/conn_")){let F=Y.split("/")[2]??"";W=`/mcp/${K5.mcp}${Bl(F.slice(0,12))}\u2026${K5.reset}`}else if(Y==="/mcp")W=`${K5.mcp}/mcp${K5.reset}`;else if(Y==="/mcp/registry")W=`${K5.mcp}/mcp/registry${K5.reset}`;let K=sD6(Q),H=J?"\u25C0":"\u2190";if(!bX1())console.log(`${K5.dim}${H}${K5.reset} ${K}${Q}${K5.reset} ${W}${G?` ${G}`:""}`);try{await Z()}finally{let F=Date.now()-X,N=$.res.status,U=rD6(N),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=J?"\u25B6":"\u2192";if(!bX1())console.log(`${K5.dim}${O}${K5.reset} ${K}${Q}${K5.reset} ${W}${G?` ${G}`:""} ${U}${N}${K5.reset} ${K5.duration}${B}${K5.reset}`);yX1.emit("request",{method:Q,path:Bl(Y),status:N,duration:F,timestamp:new Date})}}}var K5,rD6=($)=>{if($>=500)return K5.serverError;if($>=400)return K5.clientError;if($>=300)return K5.redirect;return K5.ok},sD6=($)=>{return K5[$]||K5.reset},Bl=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var oi$=D(()=>{xX1();ni$();K5={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 ei$}from"crypto";import{mkdir as aD6,readdir as eD6,rm as ri$,stat as $p$}from"fs/promises";import{join as hX1,relative as $L6}from"path";import{z as T$}from"zod";function Xp$($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return hX1(ZL6,Z)}function Qp$($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function gX1($,Z){let X=Xp$($),Q=Qp$(Z);return hX1(X,Q)}function XL6($,Z,X,Q){let Y=C0().encryptionKey||"dev-secret",G=`${$}:${Z}:${X}:${Q}`;return ei$("sha256",Y).update(G).digest("hex")}function ai$($,Z,X,Q,Y){let G=Math.floor(Date.now()/1000)+Q,J=XL6(Z,X,G,Y),W=new URL(`/api/dev-assets/${Z}/${Qp$(X)}`,$);return W.searchParams.set("expires",G.toString()),W.searchParams.set("signature",J),W.searchParams.set("method",Y),W.toString()}function Yp$($,Z,X){let Q=`${$}:${Z.getTime()}:${X}`;return`"${ei$("md5","etag").update(Q).digest("hex")}"`}async function Gp$($,Z,X,Q,Y){try{let G=await eD6($,{withFileTypes:!0});for(let J of G){let W=hX1($,J.name),H=$L6(Z,W).replace(/\\/g,"/");if(X&&!H.startsWith(X))continue;if(J.isDirectory())if(Q){let F=H+"/";if(!X||F.startsWith(X)){if(!(X?H.slice(X.length):H).includes("/"))Y.commonPrefixes.add(F)}}else await Gp$(W,Z,X,Q,Y);else if(J.isFile()){if(Q&&X){let F=H.slice(X.length);if(F.includes(Q)){let N=F.indexOf(Q),U=X+F.slice(0,N+1);Y.commonPrefixes.add(U);continue}}try{let F=await $p$(W);Y.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:Yp$(W,F.mtime,F.size)})}catch{}}}}catch{}}function Jp$($,Z){let Q=n($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:T$.object({prefix:T$.string().optional(),maxKeys:T$.number().optional().default(1000),continuationToken:T$.string().optional(),delimiter:T$.string().optional()}),outputSchema:T$.object({objects:T$.array(T$.object({key:T$.string(),size:T$.number(),lastModified:T$.string(),etag:T$.string()})),nextContinuationToken:T$.string().optional(),isTruncated:T$.boolean(),commonPrefixes:T$.array(T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=G.prefix||"",W=G.maxKeys??1000,K=G.delimiter,H=G.continuationToken,F=Xp$(Q);await aD6(F,{recursive:!0});let N={objects:[],commonPrefixes:new Set};await Gp$(F,F,J,K,N),N.objects.sort((w,E)=>w.key.localeCompare(E.key));let U=0;if(H){if(U=N.objects.findIndex((w)=>w.key>H),U===-1)U=N.objects.length}let B=N.objects.slice(U,U+W),O=U+W<N.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(N.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({contentType:T$.string().optional(),contentLength:T$.number(),lastModified:T$.string(),etag:T$.string(),metadata:T$.record(T$.string(),T$.string()).optional()}),handler:async(Y)=>{let G=Y,J=gX1(Q,G.key),W=await $p$(J);return{contentType:EZ1(G.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:Yp$(J,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:T$.object({key:T$.string(),expiresIn:T$.number().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??si$;return{url:ai$(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:T$.object({key:T$.string(),expiresIn:T$.number().optional(),contentType:T$.string().optional()}),outputSchema:T$.object({url:T$.string(),expiresIn:T$.number()}),handler:async(Y)=>{let G=Y,J=G.expiresIn??si$;return{url:ai$(Z,Q,G.key,J,"PUT"),expiresIn:J}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:T$.object({key:T$.string()}),outputSchema:T$.object({success:T$.boolean(),key:T$.string()}),handler:async(Y)=>{let G=Y,J=gX1(Q,G.key);try{return await ri$(J),{success:!0,key:G.key}}catch{return{success:!1,key:G.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:T$.object({keys:T$.array(T$.string()).max(1000)}),outputSchema:T$.object({deleted:T$.array(T$.string()),errors:T$.array(T$.object({key:T$.string(),message:T$.string()}))}),handler:async(Y)=>{let G=Y,J=[],W=[];return await Promise.all(G.keys.map(async(K)=>{let H=gX1(Q,K);try{await ri$(H),J.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:J,errors:W}}}]}async function uX1($,Z,X){let Q=Jp$(Z,X),Y=new ZK({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:B5});for(let J of Q){let W="shape"in J.inputSchema?J.inputSchema.shape:T$.object({}).shape,K=J.outputSchema&&"shape"in J.outputSchema?J.outputSchema.shape:T$.object({}).shape;Y.registerTool(J.name,{description:J.description??"",inputSchema:W,outputSchema:K,annotations:J.annotations,_meta:J._meta},async(H)=>{try{let F=await J.handler(H);return{content:[{type:"text",text:JSON.stringify(F)}],structuredContent:F}}catch(F){return{content:[{type:"text",text:`Error: ${F.message}`}],isError:!0}}})}let G=new FQ({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await Y.connect(G),MJ(Y,G,$,"mcp:dev-assets")}async function Wp$($,Z,X,Q){let G=Jp$(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 ZL6="./data/assets",si$=3600,Zp$,Kp$;var Hp$=D(()=>{E$();og();Q8();Jm();L_();mX();nA0();Zp$=new K1;Zp$.all("/",async($)=>{let Z=$.get("studioContext"),X=new URL($.req.url),Q=`${X.protocol}//${X.host}`;return uX1($.req.raw,Z,Q)});Kp$=Zp$});var Fp$={};J4(Fp$,{mountDevRoutes:()=>QL6});function QL6($,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 uX1(Q.req.raw,Y,J)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Q)=>{let Y=Q.get("studioContext"),G=new URL(Q.req.url),J=`${G.protocol}//${G.host}`,W=Q.req.param("toolName");if(!W)return Q.json({error:"Missing tool name"},400);let K=await Q.req.json(),H=await Wp$(W,K,Y,J);if(H.isError)return Q.json(H.content,500);return Q.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",Kp$);let X=new K1;X.use("*",TW({mountPath:"/api/dev-assets"})),X.route("/",pA0({orgFromPath:!1})),$.route("/api/dev-assets",X)}var Np$=D(()=>{Q8();HZ1();nA0();Hp$()});import{sql as YL6}from"kysely";import{randomUUID as Up$}from"crypto";import{z as GL6}from"zod";async function WL6($){let Z=new Date().toISOString(),X=Up$(),Q=C8.SELF($.organizationId),Y="registry.publish_request.created",G={requestId:$.request.id,requestedId:$.request.requested_id,title:$.request.title,status:$.request.status,createdAt:$.request.created_at,requester:{name:$.request.requester_name,email:$.request.requester_email}};await $.db.insertInto("events").values({id:X,organization_id:$.organizationId,type:"registry.publish_request.created",source:Q,specversion:"1.0",subject:$.request.id,time:Z,datacontenttype:"application/json",dataschema:null,data:JSON.stringify(G),cron:null,status:"pending",attempts:0,last_error:null,next_retry_at:null,created_at:Z,updated_at:Z}).execute();let J=await $.db.selectFrom("event_subscriptions").select(["id"]).where("organization_id","=",$.organizationId).where("enabled","=",1).where("event_type","=","registry.publish_request.created").where((W)=>W.or([W("publisher","is",null),W("publisher","=",Q)])).execute();if(J.length>0)await $.db.insertInto("event_deliveries").values(J.map((W)=>({id:Up$(),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 YL6`SELECT
|
|
2987
2987
|
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-BfSwG7jI.js";import{I as z}from"./input-BTAsE3JA.js";import{L as F}from"./label-CvqDH6pp.js";import{S as A,a as R,b as O,c as V,d as D}from"./select-B96sC0jU.js";import{T as J}from"./textarea-W0cHs7kb.js";import{g as M,x as $,k as q,z as G,K as H}from"./index-Shv9_4go.js";import{s as P}from"./primitives-PNdNgUxv.js";import{u as Q}from"./use-autosave-BU_QPyqZ.js";import"./Check-BESi8Og0.js";import"./ChevronDown-D9SrOc49.js";import"./ChevronUp-DInto1b8.js";import"./ArrowUp-DMnh6s4b.js";import"./chat-context-BNnytLLb.js";import"./use-panel-navigate-BxQr2f1i.js";import"./use-destination-route-ChWdmqCT.js";import"./thread-route-X2aYk-A-.js";import"./dialog-4i8tKyZs.js";import"./Copy01-l041cd35.js";import"./Download01-gw2mF-MC.js";import"./constants-dLUUoWH7.js";import"./session-runtime-C-KTDVeQ.js";import"./slugify-CEUa2lfQ.js";import"./hooks-C0P3-Ouc.js";import"./use-mcp-client-B4byQ1wO.js";import"./auth-ltjrHdFv.js";import"./delay-CnY5UFtP.js";import"./backoff-CrEUbyZT.js";import"./decopilot-sse-pool-C6zMztYI.js";import"./task-board-BsniqWRK.js";import"./use-is-desktop-app-BNujXJc_.js";import"./use-virtual-mcp-BKGaR5Vw.js";import"./use-ai-providers-DS9TpJ7R.js";import"./location-oTTXFrSF.js";import"./use-decopilot-events-5HPG38qC.js";import"./use-organization-settings-CxDKMH66.js";import"./automation-runs-DfK0VSMx.js";import"./agent-icon-D0VUz3F6.js";import"./AlertCircle-pzcnESJh.js";import"./UserSquare-CHnwGSuk.js";import"./Tool01-Dkl-Om1v.js";import"./ArrowLeft-DXuRs3HX.js";import"./Tool02-BMdZDsm0.js";import"./XCircle-BlZmdI-G.js";import"./TrendUp01-D6VAnyKs.js";import"./ZapSquare-CKPKakyU.js";import"./ZoomOut-Db6FAGuS.js";import"./Users03-Df29VRo0.js";import"./CheckCircle-DWSrREW4.js";import"./ChevronRight-PYqPsqmX.js";import"./ChevronSelectorVertical-DtCb6SRW.js";import"./DotsVertical-CH_GCWYz.js";import"./Stars02-Bbmo0zY3.js";import"./CreditCard01-p5hPt9es.js";import"./Settings02-Dy-2Qj4d.js";import"./Eye-Cm7KzDnH.js";import"./FilterLines-CafyJI14.js";import"./Share07-Rp0r2KZ9.js";import"./GitBranch01-Bxb2j_fZ.js";import"./Globe01-DLNdolGS.js";import"./Globe04-CViLCpme.js";import"./SwitchHorizontal01-CMuMpxZg.js";import"./HardDrive-QJn1w8tw.js";import"./Image01-B_oUPQXv.js";import"./Key01-BnQHMp8V.js";import"./LinkExternal01-B8eerp5u.js";import"./LockUnlocked01-B-LL1VJN.js";import"./LogOut01-39Jb5GrZ.js";import"./Monitor01-CQB2vCrj.js";import"./Sun-CLDrV-25.js";import"./Package-5u5XI3F0.js";import"./Palette-CXA1gi33.js";import"./Play-B-a-uZIp.js";import"./Plus-DuBsnz4i.js";import"./SearchLg-B8cxnIXO.js";import"./SearchMd-TCWEaJg-.js";import"./Shield01-DtK5gafE.js";import"./Stars01-BB8IcNTL.js";import"./Trash01-l-_qVOL8.js";import"./Upload01-BLnsIrPZ.js";import"./User01-Ck3_FIpD.js";import"./Users01-CFzvYiuw.js";import"./XClose-CnMJB9wB.js";import"./Zap-I-DMHk8W.js";import"./useInfiniteQuery-BXzx91qu.js";import"./use-infinite-scroll-Dd5C23ac.js";import"./use-connection-BudxFSJ1.js";import"./table-CBDqSL5J.js";import"./empty-state-TkGPHkkR.js";import"./use-members-pG405IAQ.js";import"./use-org-auth-client-Br2IIgta.js";import"./use-automations-fmUj9duL.js";import"./useSuspenseInfiniteQuery-ByKcG5VI.js";import"./avatar-CAMx88Qh.js";import"./format-time-BnbuEtat.js";import"./differenceInSeconds-NQ4PDo0z.js";import"./use-copy-BLd03kFT.js";import"./markdown-BIiViQno.js";import"./monaco-editor-BBOBGlaR.js";import"./spinner-CBT7H6Nj.js";import"./editor-B0xnuCCp.js";import"./types-M5Xw3OeR.js";import"./shell-layout-Bpk7ohiD.js";import"./required-auth-layout-CT5fghv3.js";import"./use-org-sso-B4Tot0-C.js";import"./integration-icon-RkVfBWiU.js";import"./use-navigate-to-agent-BhD-C3eq.js";import"./chart-C5ZFqDIF.js";import"./index-BmAm7rGx.js";import"./AreaChart-BBl3HuXM.js";import"./form-DqHZuRjN.js";import"./file-type-icon-6Mfusmw2.js";import"./drawer-BOqo92AD.js";import"./collection-search-CfmsG6EB.js";import"./tabs-BHzFvM3d.js";import"./toggle-group-DPowLvjC.js";import"./super-agent-icon-CcEEod1i.js";import"./self-tool-result-4Q8hQ6Im.js";import"./alert-dialog-CADdLgiP.js";import"./extract-connection-data-BAHgy3b5.js";import"./metadata-dUsYcpuu.js";import"./provision-repo-scoped-github-connection-CMPWtdMv.js";import"./use-debounced-value-C5uG6eOe.js";import"./authenticate-and-persist-oauth-C5WoxICz.js";import"./mcp-oauth-CpjxOVqq.js";import"./track-C6ehW_55.js";import"./popover-Ds86LKX0.js";import"./toolbar-C_LYTIqP.js";import"./github-repo-picker-BT0gAgwT.js";import"./use-mcp-tools-Bb7R3ndw.js";import"./agent-capabilities-B52k7xCe.js";import"./connection-card-CrXfxqk-.js";import"./use-registry-connections-m9TXCiaY.js";import"./retry-CErkP7V6.js";import"./connection-slug-CITJ0kGN.js";import"./connection-form-helpers-kZEDJqLp.js";import"./collection-tabs-BMjNkk-e.js";import"./badge-BQ00ii0C.js";import"./select-model-DKInz36h.js";import"./checkbox-8NR47DPn.js";import"./ai-providers-logos-DD3qZ33J.js";import"./folder-icon-Cb7l5H7F.js";import"./dropdown-menu-DHdxnqdQ.js";import"./question-004-sINsf4GQ.js";import"./use-status-sounds-B8QrmHEw.js";import"./skill-preview-B1BayRfx.js";import"./use-file-configs-C9ZZlKNd.js";import"./pt-BR-CLy76QW2.js";import"./use-debounced-autosave-ypk7z-ra.js";import"./scroll-area-DOLH1hgj.js";import"./search-input-CeEId8JN.js";import"./use-mcp-auth-status-Cptezoi_.js";import"./switch-DhvugTsO.js";import"./use-secrets-CANXygBX.js";import"./config-F76h-4Nb.js";import"./command-B4vg3kev.js";import"./index-ChRU4p6-.js";import"./get-initials-D-f_fDFw.js";import"./breadcrumb-Bbul4qd6.js";import"./use-tags-BokBbgMx.js";import"./automation-list-row-S8Kym9UP.js";import"./site-error--i37Vnuw.js";import"./use-org-repo-syncs-vOy2V2LC.js";import"./cards-CBOWo6Jv.js";const U={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"}]},W={authors:"sandbox.recordEditor.titleAuthor"};function Zr(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:G(b,a,l)})},t[7]=b,t[8]=a,t[9]=p,t[10]=k):k=t[10];const[e,S]=Q(C,k);let v;t[11]!==e||t[12]!==S?(v=(l,o)=>S({...e,[l]:o}),t[11]=e,t[12]=S,t[13]=v):v=t[13];const s=v,N=W[a];let n;t[14]!==i||t[15]!==N?(n=i(N),t[14]=i,t[15]=N,t[16]=n):n=t[16];let c;t[17]!==n?(c=r.jsx("span",{className:"text-sm font-medium",children:n}),t[17]=n,t[18]=c):c=t[18];let d;t[19]!==p.isError||t[20]!==p.isPending?(d=r.jsx(q,{isPending:p.isPending,isError:p.isError}),t[19]=p.isError,t[20]=p.isPending,t[21]=d):d=t[21];let y;t[22]!==c||t[23]!==d?(y=r.jsxs("div",{className:"flex h-12 shrink-0 items-center justify-between border-b px-6",children:[c,d]}),t[22]=c,t[23]=d,t[24]=y):y=t[24];const T=U[a];let x;if(t[25]!==e||t[26]!==s||t[27]!==i||t[28]!==T){let l;t[30]!==e||t[31]!==s||t[32]!==i?(l=o=>r.jsx("div",{className:"space-y-2",children:o.widget==="image"?r.jsx(H,{schema:{type:"string",format:"image-uri",title:i(o.labelKey)},value:e[o.key],onChange:m=>s(o.key,m),path:o.key,label:i(o.labelKey)}):o.widget==="select"?r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),r.jsxs(A,{value:P(e[o.key])||o.options?.[0]?.value,onValueChange:m=>s(o.key,m),children:[r.jsx(R,{id:o.key,className:"h-10 w-full",children:r.jsx(O,{placeholder:i(o.labelKey)})}),r.jsx(V,{children:(o.options??[]).map(m=>r.jsx(D,{value:m.value,children:i(m.labelKey)},m.value))})]})]}):r.jsxs(r.Fragment,{children:[r.jsx(F,{htmlFor:o.key,children:i(o.labelKey)}),o.widget==="textarea"?r.jsx(J,{id:o.key,value:P(e[o.key]),onChange:m=>s(o.key,m.target.value),rows:3}):r.jsx(z,{id:o.key,value:P(e[o.key]),placeholder:o.placeholderKey?i(o.placeholderKey):void 0,onChange:m=>s(o.key,m.target.value),className:"h-10"})]})},o.key),t[30]=e,t[31]=s,t[32]=i,t[33]=l):l=t[33],x=T.map(l),t[25]=e,t[26]=s,t[27]=i,t[28]=T,t[29]=x}else x=t[29];let u;t[34]!==x?(u=r.jsx("div",{className:"min-w-0 flex-1 overflow-y-auto px-6 py-6",children:r.jsx("div",{className:"mx-auto max-w-xl space-y-6",children:x})}),t[34]=x,t[35]=u):u=t[35];let j;return t[36]!==u||t[37]!==y?(j=r.jsxs("div",{className:"flex h-full flex-col",children:[y,u]}),t[36]=u,t[37]=y,t[38]=j):j=t[38],j}export{Zr as RecordEditor};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BdbPNxAs.js","assets/index-BfSwG7jI.js","assets/index-DZ3ZDC5F.css","assets/Tool02-BMdZDsm0.js","assets/CheckCircle-DWSrREW4.js","assets/Settings02-Dy-2Qj4d.js","assets/use-mcp-client-B4byQ1wO.js","assets/constants-dLUUoWH7.js","assets/auth-ltjrHdFv.js","assets/useInfiniteQuery-BXzx91qu.js","assets/use-infinite-scroll-Dd5C23ac.js","assets/badge-BQ00ii0C.js","assets/input-BTAsE3JA.js","assets/dropdown-menu-DHdxnqdQ.js","assets/Check-BESi8Og0.js","assets/ChevronRight-PYqPsqmX.js","assets/DotsVertical-CH_GCWYz.js","assets/table-CBDqSL5J.js","assets/toggle-group-DPowLvjC.js","assets/use-view-mode-DSpZVPxq.js","assets/FilterLines-CafyJI14.js","assets/Globe01-DLNdolGS.js","assets/SearchMd-TCWEaJg-.js","assets/dialog-4i8tKyZs.js","assets/AlertCircle-pzcnESJh.js","assets/Download01-gw2mF-MC.js","assets/Upload01-BLnsIrPZ.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CADdLgiP.js","assets/Trash01-l-_qVOL8.js","assets/label-CvqDH6pp.js","assets/select-B96sC0jU.js","assets/ChevronDown-D9SrOc49.js","assets/ChevronUp-DInto1b8.js","assets/switch-DhvugTsO.js","assets/textarea-W0cHs7kb.js","assets/ArrowLeft-DXuRs3HX.js","assets/XCircle-BlZmdI-G.js","assets/checkbox-8NR47DPn.js","assets/Eye-Cm7KzDnH.js","assets/LinkExternal01-B8eerp5u.js","assets/use-copy-BLd03kFT.js","assets/Copy01-l041cd35.js","assets/Key01-BnQHMp8V.js","assets/Plus-DuBsnz4i.js","assets/mcp-oauth-CpjxOVqq.js","assets/Play-B-a-uZIp.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as i,j as e,r as s,k as a,bq as o}from"./index-BfSwG7jI.js";import{R as n}from"./require-capability-BVA_PM9d.js";import"./access-gate-D0wuDw30.js";import"./capability-load-error-weIa1Afc.js";const c=s.lazy(()=>o(()=>import("./registry-layout-BdbPNxAs.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function u(){const r=i.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(n,{capability:"registry:manage",area:"the registry",children:e.jsx(s.Suspense,{fallback:e.jsx("div",{className:"flex-1 flex items-center justify-center",children:e.jsx(a,{size:20,className:"animate-spin text-muted-foreground"})}),children:e.jsx(c,{})})}),r[0]=t):t=r[0],t}export{u as default};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/registry-layout-BdbPNxAs.js","assets/index-BfSwG7jI.js","assets/index-DZ3ZDC5F.css","assets/Tool02-BMdZDsm0.js","assets/CheckCircle-DWSrREW4.js","assets/Settings02-Dy-2Qj4d.js","assets/use-mcp-client-B4byQ1wO.js","assets/constants-dLUUoWH7.js","assets/auth-ltjrHdFv.js","assets/useInfiniteQuery-BXzx91qu.js","assets/use-infinite-scroll-Dd5C23ac.js","assets/badge-BQ00ii0C.js","assets/input-BTAsE3JA.js","assets/dropdown-menu-DHdxnqdQ.js","assets/Check-BESi8Og0.js","assets/ChevronRight-PYqPsqmX.js","assets/DotsVertical-CH_GCWYz.js","assets/table-CBDqSL5J.js","assets/toggle-group-DPowLvjC.js","assets/use-view-mode-DSpZVPxq.js","assets/FilterLines-CafyJI14.js","assets/Globe01-DLNdolGS.js","assets/SearchMd-TCWEaJg-.js","assets/dialog-4i8tKyZs.js","assets/AlertCircle-pzcnESJh.js","assets/Download01-gw2mF-MC.js","assets/Upload01-BLnsIrPZ.js","assets/metadata-dUsYcpuu.js","assets/alert-dialog-CADdLgiP.js","assets/Trash01-l-_qVOL8.js","assets/label-CvqDH6pp.js","assets/select-B96sC0jU.js","assets/ChevronDown-D9SrOc49.js","assets/ChevronUp-DInto1b8.js","assets/switch-DhvugTsO.js","assets/textarea-W0cHs7kb.js","assets/ArrowLeft-DXuRs3HX.js","assets/XCircle-BlZmdI-G.js","assets/checkbox-8NR47DPn.js","assets/Eye-Cm7KzDnH.js","assets/LinkExternal01-B8eerp5u.js","assets/use-copy-BLd03kFT.js","assets/Copy01-l041cd35.js","assets/Key01-BnQHMp8V.js","assets/Plus-DuBsnz4i.js","assets/mcp-oauth-CpjxOVqq.js","assets/Play-B-a-uZIp.js"])))=>i.map(i=>d[i]);
|
|
2
|
-
import{c as n,d as c,f as m,j as t,k as f,r as l,bq as p}from"./index-BfSwG7jI.js";import{R as u}from"./require-capability-BVA_PM9d.js";import"./access-gate-D0wuDw30.js";import"./capability-load-error-weIa1Afc.js";const g=l.lazy(()=>p(()=>import("./registry-layout-BdbPNxAs.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46])));function h(){const e=n.c(5),i=c();let s;e[0]===Symbol.for("react.memo_cache_sentinel")?(s={from:"/shell/$org"},e[0]=s):s=e[0];const{org:o}=m(s);let r;e[1]===Symbol.for("react.memo_cache_sentinel")?(r=t.jsx("div",{className:"h-full flex items-center justify-center",children:t.jsx(f,{size:20,className:"animate-spin text-muted-foreground"})}),e[1]=r):r=e[1];let a;return e[2]!==i||e[3]!==o?(a=t.jsx(u,{capability:"registry:manage",area:"the registry",children:t.jsx(l.Suspense,{fallback:r,children:t.jsx(g,{onBack:()=>i({to:"/$org/settings/store",params:{org:o}})})})}),e[2]=i,e[3]=o,e[4]=a):a=e[4],a}export{h as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{I as u}from"./use-infinite-scroll-Dd5C23ac.js";import{fg as i}from"./index-BfSwG7jI.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-Dd5C23ac.js";import{fg as u,b$ as n}from"./index-BfSwG7jI.js";function a(r,e){return u({...r,enabled:!0,suspense:!0,throwOnError:n},s,e)}export{a as u};
|