decocms 4.451.1 → 4.452.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/client/assets/{AlertCircle-DDHQi3fm.js → AlertCircle-CQkRRGSg.js} +1 -1
- package/dist/client/assets/{AreaChart-xcCkJdeX.js → AreaChart-B-RuYs_G.js} +1 -1
- package/dist/client/assets/{ArrowLeft-CIsJnvjF.js → ArrowLeft-DR8lCUOF.js} +1 -1
- package/dist/client/assets/{ArrowUp-CtvQk6Vg.js → ArrowUp-7FgpFlyY.js} +1 -1
- package/dist/client/assets/{Building02-BVSXudo-.js → Building02-7V26SUA6.js} +1 -1
- package/dist/client/assets/{CartesianChart-YXdY8HHd.js → CartesianChart-D2qv7oNB.js} +1 -1
- package/dist/client/assets/{Check-Cf-cMW3t.js → Check-CZYLh537.js} +1 -1
- package/dist/client/assets/{CheckCircle-BemNEpVg.js → CheckCircle-BcqKkSj5.js} +1 -1
- package/dist/client/assets/{ChevronUp-B79uJeZN.js → ChevronUp-riNbaljB.js} +1 -1
- package/dist/client/assets/{Copy01-DluK-JtU.js → Copy01-DFthUWqM.js} +1 -1
- package/dist/client/assets/{CreditCard01-BzBUMTax.js → CreditCard01-CyYVeRD3.js} +1 -1
- package/dist/client/assets/{DotsVertical-COzw8ydu.js → DotsVertical-rzfqPSdm.js} +1 -1
- package/dist/client/assets/{ErrorBarContext-CICGscAV.js → ErrorBarContext-DQp6cg0w.js} +1 -1
- package/dist/client/assets/{Image01-DnRAAkhy.js → Image01-CmS6lPNM.js} +1 -1
- package/dist/client/assets/{Key01-DXvy1NNO.js → Key01-CkznrEPX.js} +1 -1
- package/dist/client/assets/{Line-DooN19Jn.js → Line-TP8KMdrq.js} +1 -1
- package/dist/client/assets/{Link01-iwXPIeVc.js → Link01-BK2WDfDE.js} +1 -1
- package/dist/client/assets/{LinkBroken01-ChSpe7Cq.js → LinkBroken01-DE5GGQ-P.js} +1 -1
- package/dist/client/assets/{LinkExternal01-BVDnNs6j.js → LinkExternal01-YQUR5lT6.js} +1 -1
- package/dist/client/assets/{Monitor01-BLZH5esy.js → Monitor01-mscEQ6pB.js} +1 -1
- package/dist/client/assets/{Palette-CaKXG6S_.js → Palette-U32cX76w.js} +1 -1
- package/dist/client/assets/{Plus-DjsQQqpw.js → Plus-B1zA6p-4.js} +1 -1
- package/dist/client/assets/{SearchMd-oXON6Mge.js → SearchMd-nUFR-fun.js} +1 -1
- package/dist/client/assets/{Sector-Df4GIa0t.js → Sector-IJN93tJL.js} +1 -1
- package/dist/client/assets/{ShoppingBag01-DktiI11o.js → ShoppingBag01-xjymcct3.js} +1 -1
- package/dist/client/assets/{Sun-BWosC3Su.js → Sun-CCW_4qiv.js} +1 -1
- package/dist/client/assets/{Tool01-BchdJG2X.js → Tool01-B62In8iq.js} +1 -1
- package/dist/client/assets/{Trash01-BfnCKCGB.js → Trash01-C2tQl3wO.js} +1 -1
- package/dist/client/assets/{Upload01-CNtxqXvb.js → Upload01-BWT4v0Wi.js} +1 -1
- package/dist/client/assets/{User01-DXNh3TnB.js → User01-CjZ2I7BX.js} +1 -1
- package/dist/client/assets/{UserSquare-DZJwwd71.js → UserSquare-CWUXupRN.js} +1 -1
- package/dist/client/assets/{Users01-DAfCqIN7.js → Users01-BCGnPOxS.js} +1 -1
- package/dist/client/assets/{X-C52mq3mn.js → X-CHFG7-mU.js} +1 -1
- package/dist/client/assets/{XAxis-DgLHWAdH.js → XAxis-DIIA1eR_.js} +1 -1
- package/dist/client/assets/{XClose-BqRoe3QG.js → XClose-DTOuD_e7.js} +1 -1
- package/dist/client/assets/{ZoomOut-BlDSjKri.js → ZoomOut-CTvv0VFv.js} +1 -1
- package/dist/client/assets/{access-gate-DbBQLMiF.js → access-gate-YoCC2cak.js} +1 -1
- package/dist/client/assets/{add-connection-dialog-Bll7Vib1.js → add-connection-dialog-BJoFO4TU.js} +1 -1
- package/dist/client/assets/{agent-analytics-DRKGLO_x.js → agent-analytics-pKyZniYD.js} +1 -1
- package/dist/client/assets/agent-app-DwiMM2IP.js +1 -0
- package/dist/client/assets/{agent-assets-D9BHI5EW.js → agent-assets-BBuETSa3.js} +1 -1
- package/dist/client/assets/{agent-automation-ClR5yW20.js → agent-automation-Gf_403yV.js} +1 -1
- package/dist/client/assets/{agent-automations-CCiWhcgf.js → agent-automations-DHEWASaU.js} +1 -1
- package/dist/client/assets/{agent-connect-sources-DFTkcmVS.js → agent-connect-sources-BJfN-vfW.js} +1 -1
- package/dist/client/assets/agent-deck-E2P9m0dI.js +1 -0
- package/dist/client/assets/{agent-e2e-pbVC7Vx7.js → agent-e2e-BUPuBpdn.js} +1 -1
- package/dist/client/assets/{agent-experiments-_aODOZpq.js → agent-experiments-DvP2aKwk.js} +1 -1
- package/dist/client/assets/{agent-file-DtN8kaxY.js → agent-file-CDAQ3_2M.js} +1 -1
- package/dist/client/assets/{agent-git-BCddyL27.js → agent-git-B3crMGWs.js} +1 -1
- package/dist/client/assets/{agent-hosting-CgLWSfX9.js → agent-hosting-MCkMzhov.js} +1 -1
- package/dist/client/assets/{agent-icon-DEoEcQYL.js → agent-icon-BJAncODg.js} +1 -1
- package/dist/client/assets/agent-library-Be8pU2hW.js +1 -0
- package/dist/client/assets/agent-library-file-CY8i2CE4.js +1 -0
- package/dist/client/assets/{agent-monitor-YUBiIydT.js → agent-monitor-CAKsywMv.js} +1 -1
- package/dist/client/assets/{agent-overview-HCAO8obL.js → agent-overview-BeUwu-KG.js} +1 -1
- package/dist/client/assets/agent-settings-CuDtw36W.js +1 -0
- package/dist/client/assets/{agent-site-editor-DH5igdCT.js → agent-site-editor-CiGatYz3.js} +1 -1
- package/dist/client/assets/agent-site-editor-code-DRE7bc_V.js +2 -0
- package/dist/client/assets/agent-site-editor-content-CStkXfya.js +9 -0
- package/dist/client/assets/{agent-site-editor-preview-BBSy8s7P.js → agent-site-editor-preview-D9pvz5fY.js} +3 -3
- package/dist/client/assets/agent-view-CI9PvOjo.js +1 -0
- package/dist/client/assets/{agent-view-guard-BYimT8Jz.js → agent-view-guard-H46J6I2J.js} +1 -1
- package/dist/client/assets/{agents-list-C434Mp2b.js → agents-list-CfV4zbeg.js} +1 -1
- package/dist/client/assets/{ai-providers-DINDBcoG.js → ai-providers-BN2hQMhH.js} +1 -1
- package/dist/client/assets/{alert-_Nu0OQ4m.js → alert-DAHFLojl.js} +1 -1
- package/dist/client/assets/{alert-dialog-D9wz_Poi.js → alert-dialog-DfTPgIPX.js} +1 -1
- package/dist/client/assets/{analytics-sections-_zTIyETq.js → analytics-sections-yoOoelxF.js} +1 -1
- package/dist/client/assets/api-keys-CKqJk5_6.js +1 -0
- package/dist/client/assets/{api-keys-tqQH4z9A.js → api-keys-NZUBfE--.js} +1 -1
- package/dist/client/assets/app-editor-DS_J4EUn.js +1 -0
- package/dist/client/assets/{asset-utils-WUpNFBXm.js → asset-utils-Dg_L4rgJ.js} +1 -1
- package/dist/client/assets/{auth-catchall-mR81Birw.js → auth-catchall-CQNM5IYs.js} +1 -1
- package/dist/client/assets/{auth-entry-DCUAgWIX.js → auth-entry-Bg2aCMAm.js} +1 -1
- package/dist/client/assets/{auth-DDdLUET9.js → auth-g-eeEO2I.js} +1 -1
- package/dist/client/assets/{auth-split-layout-FX4F99rm.js → auth-split-layout-BHWXJwAv.js} +1 -1
- package/dist/client/assets/{authenticate-and-persist-oauth-Bb2l090x.js → authenticate-and-persist-oauth-D01FuEWu.js} +1 -1
- package/dist/client/assets/{automation-list-row-SxUdqZJz.js → automation-list-row-CyxwTlrF.js} +1 -1
- package/dist/client/assets/{automation-runs-Cw-2J5pa.js → automation-runs-xCwcCJC2.js} +1 -1
- package/dist/client/assets/{automations-DXUfchhU.js → automations-Ab2pgU9k.js} +1 -1
- package/dist/client/assets/{autosend-CeDtnxlk.js → autosend-5ui8IdtF.js} +1 -1
- package/dist/client/assets/{avatar-BeFEVdWT.js → avatar-CmjVNkwN.js} +1 -1
- package/dist/client/assets/{badge-Dw0XHZAq.js → badge-DRRTtn5O.js} +1 -1
- package/dist/client/assets/{block-document-HhERskFc.js → block-document-Cu1B3Znw.js} +1 -1
- package/dist/client/assets/{blocks-preview-workspace-context-BqdqlnAP.js → blocks-preview-workspace-context-DKUHWFsF.js} +1 -1
- package/dist/client/assets/{blog-schema-Bzw5lTdw.js → blog-schema-DsqMhqVM.js} +1 -1
- package/dist/client/assets/{buckets-C_vclPuO.js → buckets-yskqiFUf.js} +1 -1
- package/dist/client/assets/{build-improve-prompt-doc-DG46Mbz-.js → build-improve-prompt-doc-Czr7rpOn.js} +1 -1
- package/dist/client/assets/{calendar-BGvJ_APz.js → calendar-hQQyUCsj.js} +1 -1
- package/dist/client/assets/{capability-load-error-m8D5eiRW.js → capability-load-error-CbMIev40.js} +1 -1
- package/dist/client/assets/{category-editor-BoAaFme1.js → category-editor-CERa-ic1.js} +1 -1
- package/dist/client/assets/{chart-AQf5J0lZ.js → chart-V4xaiNPC.js} +1 -1
- package/dist/client/assets/{chat-context-DHGUafJ4.js → chat-context-oxL7wGnz.js} +1 -1
- package/dist/client/assets/{chat-draft-Du6X8nKJ.js → chat-draft-Djy3dkUg.js} +1 -1
- package/dist/client/assets/{checkbox-D-g_vU3W.js → checkbox-D7WjpuVv.js} +1 -1
- package/dist/client/assets/{choose-editor-DJMezn9k.js → choose-editor-BEgt8mUY.js} +1 -1
- package/dist/client/assets/{claim-phase-copy-BTrkr4bY.js → claim-phase-copy-D-j3nn-u.js} +1 -1
- package/dist/client/assets/{cli-auth-success-M_9Lwmu5.js → cli-auth-success-CDTAwVf_.js} +1 -1
- package/dist/client/assets/{client-icons-Do1roBGh.js → client-icons-BRCUVaWX.js} +1 -1
- package/dist/client/assets/{collapsible-DUefED3P.js → collapsible-DIaN6Srf.js} +1 -1
- package/dist/client/assets/{collection-detail-CuQUNXH_.js → collection-detail-DJ79vvsb.js} +1 -1
- package/dist/client/assets/{collection-display-button-CMHxbURQ.js → collection-display-button-D_MeUzdg.js} +1 -1
- package/dist/client/assets/{collection-search-CKxipBbw.js → collection-search-CKIe33RH.js} +1 -1
- package/dist/client/assets/{collection-table-wrapper-CN227TJm.js → collection-table-wrapper-BU7gTJT1.js} +1 -1
- package/dist/client/assets/{collection-tabs-z-VIWVMA.js → collection-tabs-Br7caoEY.js} +1 -1
- package/dist/client/assets/{column-rules-BOkclOCh.js → column-rules-C4SSRzGe.js} +1 -1
- package/dist/client/assets/{combobox-D_pkyBdU.js → combobox-ZWRPqCmz.js} +1 -1
- package/dist/client/assets/{command-B-LkMxT6.js → command-CBb61KwU.js} +1 -1
- package/dist/client/assets/{companion-mcps-section-BPWHNlmG.js → companion-mcps-section-B4YWrazT.js} +1 -1
- package/dist/client/assets/{config-F8FEDZHV.js → config-e26AxbQy.js} +1 -1
- package/dist/client/assets/{connect-CSAnQalo.js → connect-Cis4Tapn.js} +1 -1
- package/dist/client/assets/{connect-layout-CSKeZ95g.js → connect-layout-Dcio3Lf-.js} +1 -1
- package/dist/client/assets/{connection-Da57b2wi.js → connection-BHqwT0eD.js} +1 -1
- package/dist/client/assets/{connection-card-UvAhqwBj.js → connection-card-C2EkxrBF.js} +1 -1
- package/dist/client/assets/{connection-detail-C-Hcx_Z9.js → connection-detail-jcDwf2ZX.js} +1 -1
- package/dist/client/assets/{connection-form-helpers-DyaTkO-i.js → connection-form-helpers-9n8ribSs.js} +1 -1
- package/dist/client/assets/{connections-B2s4aP98.js → connections-D7jA8LjW.js} +1 -1
- package/dist/client/assets/{context-BPEjFj2c.js → context-izLsg2u9.js} +1 -1
- package/dist/client/assets/{context-menu-D65fsibc.js → context-menu-DerEN04P.js} +1 -1
- package/dist/client/assets/{create-organization-dialog-rmBJe-TK.js → create-organization-dialog-CYAsWdo6.js} +1 -1
- package/dist/client/assets/{daily-pulse-39bOcAjW.js → daily-pulse-CnVCBpq0.js} +1 -1
- package/dist/client/assets/{decopilot-CDg-MCtI.js → decopilot-BLnyHUyj.js} +1 -1
- package/dist/client/assets/{device-hint-BckoyQwI.js → device-hint-BELnE8gL.js} +1 -1
- package/dist/client/assets/{dialog-C9YQM7Rb.js → dialog-BrqxKGpn.js} +1 -1
- package/dist/client/assets/{discover-B4mPS-t0.js → discover-CkexzJr8.js} +1 -1
- package/dist/client/assets/{domain-settings-C5SxoG2E.js → domain-settings-BZKJb9dL.js} +1 -1
- package/dist/client/assets/{download-app-dialog-D3HwAGf1.js → download-app-dialog-D4fZwg6L.js} +1 -1
- package/dist/client/assets/{drawer-BbtvDSmI.js → drawer-DnzsJxQZ.js} +1 -1
- package/dist/client/assets/{editor-DiFPb_7W.js → editor-CTFiwz0O.js} +1 -1
- package/dist/client/assets/{empty-state-Jq3vDmCi.js → empty-state-CIlXqsAy.js} +1 -1
- package/dist/client/assets/{empty-state-ChIdoRAZ.js → empty-state-L-fapaGY.js} +1 -1
- package/dist/client/assets/{extract-connection-data-0OXYM8zm.js → extract-connection-data-BojttbHn.js} +1 -1
- package/dist/client/assets/{feature-gate-DyX-49Cz.js → feature-gate-n8g4g4zp.js} +1 -1
- package/dist/client/assets/{feature-paywall-CMm2o9Ho.js → feature-paywall-KXd0tDN_.js} +1 -1
- package/dist/client/assets/{file-explorer-BsD7GHt-.js → file-explorer-BKwSFv0S.js} +1 -1
- package/dist/client/assets/{file-preview-DG7_swxk.js → file-preview-DTF7cqq1.js} +1 -1
- package/dist/client/assets/{file-share-button-d423tG-P.js → file-share-button-YKzQ30pm.js} +1 -1
- package/dist/client/assets/{file-type-icon-Zo3jfkM-.js → file-type-icon-DH3SCrZf.js} +1 -1
- package/dist/client/assets/flat-project-zMUH6pEW.js +1 -0
- package/dist/client/assets/{folder-icon-DrGtPSK9.js → folder-icon-mDaDXy1F.js} +1 -1
- package/dist/client/assets/{form-CYA-1Wz9.js → form-CwmR-nDp.js} +1 -1
- package/dist/client/assets/{gateway-client-DE4QITdV.js → gateway-client-BUVeQ8TP.js} +1 -1
- package/dist/client/assets/{general-C_08074W.js → general-pHKX0mlj.js} +1 -1
- package/dist/client/assets/{home-HCpI5IEw.js → home-DpJ0l_4_.js} +1 -1
- package/dist/client/assets/{icon-button-Cag62vyF.js → icon-button-CLFo5Lxf.js} +1 -1
- package/dist/client/assets/{index-Dm3Ro6iT.js → index-5Z-O-IC_.js} +1 -1
- package/dist/client/assets/{index-BGzd8qMa.js → index-BOU4FVnf.js} +1 -1
- package/dist/client/assets/{index-LffHYdj2.js → index-BQrJviGi.js} +1 -1
- package/dist/client/assets/{index-BiuSAlzd.js → index-BTRkPuaE.js} +5 -5
- package/dist/client/assets/{index-cj3FPIlo.js → index-B_3n7z-z.js} +1 -1
- package/dist/client/assets/{index-DzWyHXO2.js → index-BwZnKcdF.js} +1 -1
- package/dist/client/assets/{index-qFmYqkwW.js → index-CYfmFyzv.js} +3 -3
- package/dist/client/assets/{index-DBg3Da4o.js → index-Cmukyu5i.js} +1 -1
- package/dist/client/assets/{index-UAWA_mBS.js → index-CskCkMle.js} +1 -1
- package/dist/client/assets/{index-BxwNVsQv.js → index-D7BAQWSU.js} +1 -1
- package/dist/client/assets/{index-C-HKqiI5.js → index-D7EpZIyR.js} +1 -1
- package/dist/client/assets/{index-DX971x0F.js → index-DktJOqdm.js} +1 -1
- package/dist/client/assets/{index-C9yvlucI.js → index-DxdM0E0B.js} +1 -1
- package/dist/client/assets/{index-CFxmc0DR.js → index-NRQboip2.js} +1 -1
- package/dist/client/assets/{index-D3bKcVsq.js → index-q1e9PWXS.js} +1 -1
- package/dist/client/assets/{index-redirect-Cms0d9Rf.js → index-redirect-ClcE1C-w.js} +1 -1
- package/dist/client/assets/{infiniteQueryObserver-B7-m24Hr.js → infiniteQueryObserver-DDM1TL4D.js} +1 -1
- package/dist/client/assets/{infra-billing-BD4W3COQ.js → infra-billing-CNDnR1FE.js} +1 -1
- package/dist/client/assets/{input-CYlwvkm5.js → input-BkhtMOai.js} +3 -3
- package/dist/client/assets/{input-CpjWxr53.js → input-C7ggWsLT.js} +1 -1
- package/dist/client/assets/{input-B5d33h6X.js → input-_e15nvFZ.js} +1 -1
- package/dist/client/assets/{integration-icon-BcFb9WXn.js → integration-icon-C5Hxx8nt.js} +1 -1
- package/dist/client/assets/{label-BmSaj4OS.js → label-7CUu5Nng.js} +1 -1
- package/dist/client/assets/{layout-DKTnWTMe.js → layout-l5Dybhax.js} +1 -1
- package/dist/client/assets/{legacy-agents-deep-CbFqRQlc.js → legacy-agents-deep-CdAR76HP.js} +1 -1
- package/dist/client/assets/{legacy-main-redirect-1k1KX6mL.js → legacy-main-redirect-FsmMt53b.js} +1 -1
- package/dist/client/assets/library-8wHr6YwM.js +1 -0
- package/dist/client/assets/{library-tab-rskkU2DA.js → library-tab-D8YaxhRw.js} +1 -1
- package/dist/client/assets/{login-BUVWJTBG.js → login-C-bgG6Sh.js} +1 -1
- package/dist/client/assets/{markdown-D5RcIxaz.js → markdown-B6rsJl8D.js} +1 -1
- package/dist/client/assets/{mcp-app-renderer-4bTrB0jF.js → mcp-app-renderer-C1z0J9GI.js} +1 -1
- package/dist/client/assets/{mcp-oauth-C-EEuNZg.js → mcp-oauth-DiCqLrTx.js} +1 -1
- package/dist/client/assets/{members-CWz-dF_G.js → members-CP1FamHG.js} +1 -1
- package/dist/client/assets/{memory-BfINHUTl.js → memory-CFfQuPfj.js} +1 -1
- package/dist/client/assets/{message-templates-Cq847r4U.js → message-templates-BLkI2XAu.js} +1 -1
- package/dist/client/assets/{mini-report-page-BxFxCQ_x.js → mini-report-page-DoPdD9qO.js} +1 -1
- package/dist/client/assets/{mock-board-BFAIWkA7.js → mock-board-BTXd0sAw.js} +1 -1
- package/dist/client/assets/{monaco-editor-DrtzucP0.js → monaco-editor-DynJau-q.js} +1 -1
- package/dist/client/assets/{monitoring-stats-row-DWbeH1RS.js → monitoring-stats-row-DEGIuizb.js} +1 -1
- package/dist/client/assets/{multi-select-BidbKgY6.js → multi-select-BSBfkzHR.js} +1 -1
- package/dist/client/assets/{mustache-Dy9IxQRw.js → mustache-C6B9oTBs.js} +1 -1
- package/dist/client/assets/{new-project-dialog-Dj5TFcCk.js → new-project-dialog-Ch4HsoZn.js} +1 -1
- package/dist/client/assets/{oauth-callback-Diqg-5tw.js → oauth-callback-KXWSibnc.js} +1 -1
- package/dist/client/assets/{oauth-callback-ai-provider-DdjEQJSy.js → oauth-callback-ai-provider-C9UxxVbB.js} +1 -1
- package/dist/client/assets/{onboarding-BiJRVogp.js → onboarding-NRECAyIG.js} +1 -1
- package/dist/client/assets/{openai-conversation-Cssz-znB.js → openai-conversation-CeIvqTTz.js} +1 -1
- package/dist/client/assets/{optimistic-project-sidebar-views-Bl6nsH4A.js → optimistic-project-sidebar-views-BSGhW_VM.js} +1 -1
- package/dist/client/assets/{org-file-open-context-CTyFwctz.js → org-file-open-context-BXXF2r_W.js} +1 -1
- package/dist/client/assets/{organization-choice-BtNQMYzV.js → organization-choice-B4UdP9Qv.js} +1 -1
- package/dist/client/assets/{orgs-BYnZJx1z.js → orgs-B1zsOJOt.js} +1 -1
- package/dist/client/assets/{page-seo-form-RJHH5jjR.js → page-seo-form-_-ijKB5k.js} +1 -1
- package/dist/client/assets/{pair-PmQIQCBI.js → pair-BCFdDbiP.js} +1 -1
- package/dist/client/assets/{plan-ladder-BbGn-NgZ.js → plan-ladder-CsmVoXQQ.js} +1 -1
- package/dist/client/assets/{popover-DwQhmYZx.js → popover-CrZxQ_WL.js} +1 -1
- package/dist/client/assets/{post-calendar-u9yIz1ap.js → post-calendar-D7geM2YK.js} +1 -1
- package/dist/client/assets/{post-editor-zwUoRB_d.js → post-editor-ChtR1Ltr.js} +1 -1
- package/dist/client/assets/{preview-content-YklxPrDD.js → preview-content-BvBDv3Fi.js} +1 -1
- package/dist/client/assets/{preview-dialog-B6-Ghng-.js → preview-dialog-COx6Lotq.js} +1 -1
- package/dist/client/assets/{profile-DZ3TYytY.js → profile-Bc9S2aAt.js} +1 -1
- package/dist/client/assets/{project-app-view-B13_tHdE.js → project-app-view-ObUx-R3J.js} +1 -1
- package/dist/client/assets/{project-feed-CuWJElvp.js → project-feed-27M9wFaD.js} +1 -1
- package/dist/client/assets/{project-icon-C1TVO88N.js → project-icon-DfxqT1AH.js} +1 -1
- package/dist/client/assets/project-reports-CYg2nuJI.js +1 -0
- package/dist/client/assets/project-tasks-C8uyyfmf.js +1 -0
- package/dist/client/assets/{projects-qlg8VwGy.js → projects-70vA9Ztg.js} +1 -1
- package/dist/client/assets/{projects-empty-state-BBcr5xLl.js → projects-empty-state-DXeCmI_E.js} +1 -1
- package/dist/client/assets/{prompts-IW4xrems.js → prompts-DEQvjN3W.js} +1 -1
- package/dist/client/assets/record-editor-_3tMo9Zr.js +1 -0
- package/dist/client/assets/{redirect-editor-Djr6TkEe.js → redirect-editor-nH8dYkmn.js} +1 -1
- package/dist/client/assets/{reports-DD_aD-uv.js → reports-BXOZrkbg.js} +1 -1
- package/dist/client/assets/reports-Bf-BvYhy.js +1 -0
- package/dist/client/assets/{reports-onboarding-Btv0f8sO.js → reports-onboarding-DL82A2cU.js} +1 -1
- package/dist/client/assets/{reports-tab-DoBMpRJD.js → reports-tab-DO_Lp8eH.js} +2 -2
- package/dist/client/assets/{repositories-ZgvcUEvA.js → repositories-CMKipbLK.js} +1 -1
- package/dist/client/assets/{repository-binding-CQsr_3Zk.js → repository-binding-Bbkm6nc1.js} +1 -1
- package/dist/client/assets/{repository-import-picker-D6vKdpbU.js → repository-import-picker-Cag3a6oY.js} +1 -1
- package/dist/client/assets/{repository-picker-DnfKLU2E.js → repository-picker-CfTYgBDn.js} +1 -1
- package/dist/client/assets/{require-capability-B1clucXi.js → require-capability-DwsTiirz.js} +1 -1
- package/dist/client/assets/{required-auth-layout-5x9XYN7k.js → required-auth-layout-yl3jbIxV.js} +1 -1
- package/dist/client/assets/{reset-password-JId6yrpe.js → reset-password-C5EXdCC7.js} +1 -1
- package/dist/client/assets/{resizable-00FuDjCF.js → resizable-CtYj4VXu.js} +1 -1
- package/dist/client/assets/{resolve-tab-icon-Bi-w5DjE.js → resolve-tab-icon-COPKEIag.js} +1 -1
- package/dist/client/assets/{review-settings-IzuHTtkG.js → review-settings-Dpq07FB5.js} +1 -1
- package/dist/client/assets/{rich-text-link-control-B3wmUrSm.js → rich-text-link-control-CDJeP4n9.js} +1 -1
- package/dist/client/assets/{roles-6EAMaiCw.js → roles-BCA_WGIg.js} +1 -1
- package/dist/client/assets/{route-Bp7poLJJ.js → route-BIN7HFum.js} +1 -1
- package/dist/client/assets/{route-DcKDacvo.js → route-DR7xqOI0.js} +1 -1
- package/dist/client/assets/route-DTM6T9N4.js +1 -0
- package/dist/client/assets/{runnable-block-editor-BPu9lbHb.js → runnable-block-editor-BaDSgAAv.js} +1 -1
- package/dist/client/assets/{sandbox-lifecycle-context-_l6ILxBR.js → sandbox-lifecycle-context-AU726rjo.js} +1 -1
- package/dist/client/assets/{schema-CepQKFSq.js → schema-CUw1risJ.js} +1 -1
- package/dist/client/assets/{scroll-area-BNMPUKzn.js → scroll-area-C2S3fcxE.js} +1 -1
- package/dist/client/assets/{search-input-DroJjkYC.js → search-input-Dd4B3qzf.js} +1 -1
- package/dist/client/assets/{search-toggle-Vpxqce5X.js → search-toggle-CsGviyR_.js} +1 -1
- package/dist/client/assets/{secret-picker-CIV9Pyxx.js → secret-picker-oakuwK6W.js} +1 -1
- package/dist/client/assets/{secrets-Ddw-OUj-.js → secrets-CXgB5-m9.js} +1 -1
- package/dist/client/assets/{sections-editor-B6DapFds.js → sections-editor-D8pxq_yu.js} +1 -1
- package/dist/client/assets/{select-QknS4jya.js → select-C350dwBx.js} +1 -1
- package/dist/client/assets/{select-model-MWiJU5BO.js → select-model-CRWgLGNx.js} +1 -1
- package/dist/client/assets/{seo-editor-BmySIXEZ.js → seo-editor-1V2gYAl_.js} +1 -1
- package/dist/client/assets/{separator-C5QeX-ze.js → separator-CDghQ8gc.js} +1 -1
- package/dist/client/assets/{settings-tab-pWdRgoZd.js → settings-tab-CAkBws58.js} +1 -1
- package/dist/client/assets/{sheet-CuQcjl8J.js → sheet-B2gAUp07.js} +1 -1
- package/dist/client/assets/{shell-layout-DgCL-aOA.js → shell-layout-DT24w4k_.js} +1 -1
- package/dist/client/assets/{skills-C9HRCrz7.js → skills-CyVOwqjn.js} +1 -1
- package/dist/client/assets/{sso-eRxfAwx6.js → sso-CfVGd8zI.js} +1 -1
- package/dist/client/assets/{suggestion-CUAhSpKi.js → suggestion-yycalltA.js} +1 -1
- package/dist/client/assets/{switch-WI6sluFx.js → switch-C4OygJ1j.js} +1 -1
- package/dist/client/assets/{synced-repos-B7M4g-ab.js → synced-repos-CRCUc2yM.js} +1 -1
- package/dist/client/assets/{tab-icon-glyph-BUy8eStz.js → tab-icon-glyph-CnzBc78s.js} +1 -1
- package/dist/client/assets/{table-DahiKrUr.js → table-BVqziFMU.js} +1 -1
- package/dist/client/assets/{tabs-mZ2AJpie.js → tabs-M4EGpP-K.js} +1 -1
- package/dist/client/assets/{task-board-Cg5OuTdd.js → task-board-Dy1oP9tV.js} +1 -1
- package/dist/client/assets/{task-route-CcdO9T8s.js → task-route-Dya6D_p7.js} +1 -1
- package/dist/client/assets/{task-status--I5ZFulR.js → task-status-uh1TpLCM.js} +1 -1
- package/dist/client/assets/{taskboard-analytics-CwIKc_CA.js → taskboard-analytics-dQI3iomY.js} +1 -1
- package/dist/client/assets/{tasks-Cx199_rB.js → tasks-D70uWBSC.js} +1 -1
- package/dist/client/assets/tasks-W04QS25_.js +1 -0
- package/dist/client/assets/{textarea-IAy-ownU.js → textarea-NMcEOyOg.js} +1 -1
- package/dist/client/assets/{thread-analytics-DoucYhij.js → thread-analytics-B54AXYt6.js} +1 -1
- package/dist/client/assets/{thread-button-BS5hFLVf.js → thread-button-CgP5Z586.js} +1 -1
- package/dist/client/assets/{thread-intent-ags1XWir.js → thread-intent-Jf2tKMef.js} +1 -1
- package/dist/client/assets/{thread-route-Cbe9daAp.js → thread-route-DxzVtF_c.js} +1 -1
- package/dist/client/assets/{thread-route-SwwHxRrN.js → thread-route-IxUDda00.js} +1 -1
- package/dist/client/assets/{thread-sheet-body-BzLo18UG.js → thread-sheet-body-B8X3wACw.js} +1 -1
- package/dist/client/assets/{toggle-group-C7J6hm1X.js → toggle-group-DpTIfIjE.js} +1 -1
- package/dist/client/assets/{toolbar-icon-button-MH5hFCTi.js → toolbar-icon-button-C_PK_Noh.js} +1 -1
- package/dist/client/assets/{tooltip-rVl8jzih.js → tooltip-BJNrweFg.js} +1 -1
- package/dist/client/assets/{track-D9Kj7slb.js → track-BtwjnpVQ.js} +1 -1
- package/dist/client/assets/{types-B77htmoi.js → types-Zvb_HNLy.js} +1 -1
- package/dist/client/assets/{usage-stats-B9NCjY7p.js → usage-stats-N89KL5SR.js} +1 -1
- package/dist/client/assets/{use-ai-providers-BBj3hH0A.js → use-ai-providers-Bb-AtX2R.js} +1 -1
- package/dist/client/assets/{use-automations-BMeSuYUl.js → use-automations-CySFN-Fc.js} +1 -1
- package/dist/client/assets/{use-autosave-DddhIIlH.js → use-autosave-DG37V9_z.js} +1 -1
- package/dist/client/assets/{use-chat-layout-state-CcLE4xPO.js → use-chat-layout-state-CmdNghlG.js} +1 -1
- package/dist/client/assets/{use-clock-tick-WbPH8S5J.js → use-clock-tick-BPnWxYd_.js} +1 -1
- package/dist/client/assets/{use-connect-companion-ooa0I2Ht.js → use-connect-companion-ECuWJz0C.js} +1 -1
- package/dist/client/assets/{use-connection-BJVimXqv.js → use-connection-C0aQTMeC.js} +1 -1
- package/dist/client/assets/{use-copy-XLZP4Fnf.js → use-copy-BVWEkCC-.js} +1 -1
- package/dist/client/assets/{use-create-virtual-mcp-P_mw-sB2.js → use-create-virtual-mcp-DEMYuYyB.js} +1 -1
- package/dist/client/assets/{use-date-fns-locale-D1z6vY0T.js → use-date-fns-locale-Bd8PyfIy.js} +1 -1
- package/dist/client/assets/{use-debounced-autosave-DM7h6lLt.js → use-debounced-autosave-DXb_Ac1O.js} +1 -1
- package/dist/client/assets/{use-debounced-value-PqnB6cMC.js → use-debounced-value-DBJBbNih.js} +1 -1
- package/dist/client/assets/{use-deco-credits-CWMvx_aN.js → use-deco-credits-_QhU-dhT.js} +1 -1
- package/dist/client/assets/{use-decopilot-events-B_Wj2FDs.js → use-decopilot-events-D3bXKKWM.js} +1 -1
- package/dist/client/assets/{use-delete-connection-Ct_NbrFe.js → use-delete-connection-DSFkVlnh.js} +1 -1
- package/dist/client/assets/{use-deployment-admin-BrRZ5JXH.js → use-deployment-admin-BruYSdMh.js} +1 -1
- package/dist/client/assets/{use-fast-preview-draft-url-Ckawo-Vn.js → use-fast-preview-draft-url-ZFU-P35J.js} +1 -1
- package/dist/client/assets/{use-file-configs-BCUJhrSS.js → use-file-configs-RTbLyPOX.js} +1 -1
- package/dist/client/assets/{use-infinite-scroll-DOZLICG8.js → use-infinite-scroll-opYdDO9U.js} +1 -1
- package/dist/client/assets/{use-join-requests-LL4W5sq2.js → use-join-requests-c0wYTiAF.js} +1 -1
- package/dist/client/assets/{use-main-panel-tabs-CUdUAhvy.js → use-main-panel-tabs-DLoT5JrG.js} +1 -1
- package/dist/client/assets/{use-mcp-auth-status-D_jLHFPt.js → use-mcp-auth-status-Bc_ELMHW.js} +1 -1
- package/dist/client/assets/{use-mcp-client-5sJCC1_2.js → use-mcp-client-DAfDiXAH.js} +1 -1
- package/dist/client/assets/{use-mcp-prompts-5OccjpiV.js → use-mcp-prompts-CDl0wJU0.js} +1 -1
- package/dist/client/assets/{use-mcp-tools-cj_8qKci.js → use-mcp-tools-C7pm9vnU.js} +1 -1
- package/dist/client/assets/{use-members-C5RWM84Q.js → use-members-CyU3kEXW.js} +1 -1
- package/dist/client/assets/{use-mobile-D06E6E9A.js → use-mobile-DgFuzdmq.js} +1 -1
- package/dist/client/assets/{use-navigate-to-agent-2D1RSJEE.js → use-navigate-to-agent-DrZpt_-x.js} +1 -1
- package/dist/client/assets/use-new-blocks-editor-CD7nCSQB.js +1 -0
- package/dist/client/assets/{use-open-billing-url-CrzuSkfk.js → use-open-billing-url-C-if4cJf.js} +1 -1
- package/dist/client/assets/{use-org-auth-client-CXExidw4.js → use-org-auth-client-C7_w-QfK.js} +1 -1
- package/dist/client/assets/{use-org-fs-BI2aRf-g.js → use-org-fs-CKHreXlO.js} +1 -1
- package/dist/client/assets/{use-org-repo-syncs-DhxRO-sX.js → use-org-repo-syncs-CdOm1Gkh.js} +1 -1
- package/dist/client/assets/{use-org-sso-C8LeExfy.js → use-org-sso-CbL4kkEg.js} +1 -1
- package/dist/client/assets/{use-organization-roles-Z4A7wlo_.js → use-organization-roles-DQ43ZVi5.js} +1 -1
- package/dist/client/assets/{use-organization-settings-0Ql08vCb.js → use-organization-settings-_CCzAfB0.js} +1 -1
- package/dist/client/assets/{use-panel-navigate-DvFfVppm.js → use-panel-navigate-DJawwVTN.js} +1 -1
- package/dist/client/assets/{use-project-scope-DJC0Rmd2.js → use-project-scope-BTHyRdHp.js} +1 -1
- package/dist/client/assets/{use-releases-UqMY8RcZ.js → use-releases-BWJN6YTw.js} +1 -1
- package/dist/client/assets/{use-reports-diagnostic-zVwryKCp.js → use-reports-diagnostic-CiKeDiTH.js} +1 -1
- package/dist/client/assets/{use-secrets-DGDpC9hp.js → use-secrets-CSjuIq4b.js} +1 -1
- package/dist/client/assets/{use-section-preview-base-DryOEAAN.js → use-section-preview-base-CeoNtR7i.js} +1 -1
- package/dist/client/assets/{use-session-runtime-Cosw4CCW.js → use-session-runtime-Wyvnx53o.js} +1 -1
- package/dist/client/assets/{use-tags-BCCzUzPa.js → use-tags-C3diByDZ.js} +1 -1
- package/dist/client/assets/{use-task-board-analytics-CCFQvvsk.js → use-task-board-analytics-Csh4rD2k.js} +1 -1
- package/dist/client/assets/{use-task-board-events-B2orELe0.js → use-task-board-events-BwC1dILR.js} +1 -1
- package/dist/client/assets/{use-task-metadata-8O-Ga8Wr.js → use-task-metadata-DzFvwyIV.js} +1 -1
- package/dist/client/assets/{use-thread-analytics-BYmN2LQm.js → use-thread-analytics-DXqO4MwU.js} +1 -1
- package/dist/client/assets/{use-thread-outputs-DqnIgfuG.js → use-thread-outputs-C05qBJbv.js} +1 -1
- package/dist/client/assets/useInfiniteQuery-DZS3Aawa.js +1 -0
- package/dist/client/assets/{useQueries-Cdt1TSyJ.js → useQueries-BcxNFZiu.js} +1 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-DGDEkzHG.js +1 -0
- package/dist/client/assets/{users-BLEnjq5F.js → users-Cc-KY6pD.js} +1 -1
- package/dist/client/assets/{utils-BiBoFq--.js → utils-DPdaJHGR.js} +1 -1
- package/dist/client/assets/{variant-calendar-Csv8MReF.js → variant-calendar-BJjVTz4W.js} +1 -1
- package/dist/client/assets/{variant-matcher-override-CdOGya1b.js → variant-matcher-override-CwgRSkJP.js} +1 -1
- package/dist/client/assets/{view-mode-toggle-D3nXTaNQ.js → view-mode-toggle-CQqizETf.js} +1 -1
- package/dist/client/assets/{virtual-mcp-DUyYKScq.js → virtual-mcp-BdXZSyI0.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/agent-app-DI84JCkP.js +0 -1
- package/dist/client/assets/agent-deck-CgsUwnay.js +0 -1
- package/dist/client/assets/agent-library-BMVOMtwg.js +0 -1
- package/dist/client/assets/agent-library-file-Bs_Ov692.js +0 -1
- package/dist/client/assets/agent-settings-JOvgc7kq.js +0 -1
- package/dist/client/assets/agent-site-editor-code-De-iSok_.js +0 -2
- package/dist/client/assets/agent-site-editor-content-Ch2WC4sl.js +0 -9
- package/dist/client/assets/agent-view-BtBtSuEv.js +0 -1
- package/dist/client/assets/api-keys-2hDzDTH9.js +0 -1
- package/dist/client/assets/app-editor-BqD9kpqg.js +0 -1
- package/dist/client/assets/flat-project-DUdVe5OD.js +0 -1
- package/dist/client/assets/library-D9RnFFGm.js +0 -1
- package/dist/client/assets/project-reports-hbeMiS7q.js +0 -1
- package/dist/client/assets/project-tasks-DcinQO1a.js +0 -1
- package/dist/client/assets/record-editor-DZiiw2X4.js +0 -1
- package/dist/client/assets/reports-RkncIczX.js +0 -1
- package/dist/client/assets/route-DLd5XMus.js +0 -1
- package/dist/client/assets/tasks-DQZjFSh-.js +0 -1
- package/dist/client/assets/use-new-blocks-editor-DxwEKp1u.js +0 -1
- package/dist/client/assets/useInfiniteQuery-BAMBgsXo.js +0 -1
- package/dist/client/assets/useSuspenseInfiniteQuery-B_8hQc1u.js +0 -1
package/dist/server/server.js
CHANGED
|
@@ -3719,7 +3719,7 @@ ${J.join(`
|
|
|
3719
3719
|
`)}`:X}function vo6($){let Z=new Set;for(let Q of $)for(let Y of Q.split(`
|
|
3720
3720
|
`)){let X=Y.trim();if(/^Co-authored-by:\s/i.test(X))Z.add(X)}return[...Z]}var nY8=200,To6=12,qo6,Io6=300,J_0=3;var iD1=D(()=>{X7();r$();X_0();qo6={aheadBy:0,behindBy:0,files:[]}});function xo6($){if(!$||$.includes(".."))return!1;return bo6.test($)}function oY8($){return fo6.includes($)}function pD1($){let Z=typeof $.__resolveType==="string"?$.__resolveType:null;if(!Z||!xo6(Z))return null;let{__resolveType:Q,...Y}=$;return{resolveType:Z,payload:Y}}function nD1($,Z){return`${$.replace(/\/+$/,"")}/deco/invoke/${Z}`}var bo6,fo6;var rY8=D(()=>{bo6=/^[\w./@-]+$/;fo6=["vtex/loaders/intelligentSearch/productList.ts","vtex/loaders/categories/tree.ts"]});function a60($,Z){let Q=$?.repository;if(!Q?.owner||!Q?.name)return null;if(!Q.connectionId)return Q;if(!Z.includes(Q.connectionId))return null;return Q}async function aY8($,Z,Q,Y){let X=$.organization?.id;if(!X)throw new Xz(v7);let J=await fj($.storage,X,Y);if(J&&await OD($.storage,J)){let F=await qU($,J,{forceRefresh:!0}).catch((U)=>{throw new Xz(U instanceof Error?U.message:v7)});await sY8($,Z,Q,F);return}let G=Y.connectionId??J?.legacyConnectionId;if(!G)throw new Xz("Push requires a connected git account. Connect the repository's provider for this project and restart the sandbox.");await Pm({ctx:$,connectionId:G,organizationId:X,forceRefresh:!0,onLegacyMintError:(F)=>{let U=F instanceof Error?F.message:v7;throw new Xz(U)}});let{cloneUrl:W,gitUserName:K,gitUserEmail:H}=await IU(G,Y.owner,Y.name,$.db,$.vault).catch((F)=>{let{code:U,message:N}=IL$(F instanceof Error?F.message:String(F));throw U?new Xz(N):F});await sY8($,Z,Q,{cloneUrl:W,gitUserName:K,gitUserEmail:H})}async function sY8($,Z,Q,Y){let{cloneUrl:X,gitUserName:J,gitUserEmail:G}=Y,W=vp($),K=await Z.proxyDaemonRequest(Q,"/_sandbox/config",{method:"PUT",headers:new Headers({"content-type":"application/json"}),body:JSON.stringify({git:{repository:{cloneUrl:X},identity:{userName:J,userEmail:G}},...W?{operator:W}:{}})});if(!K.ok){let H=await GE(K,yo6).catch(()=>K.statusText);throw Error(`Failed to refresh sandbox git credentials (${K.status}): ${H}`)}}var yo6=10485760,Xz;var tD1=D(()=>{SW();oC0();E$0();yH0();t00();X7();Xz=class Xz extends Error{constructor($){super($);this.name="GitPushAuthError"}}});function ho6($){let Z=$.startsWith("thread:")?$.slice(7):$;if(!Z||Z.length>255||Z.includes("..")||Z.startsWith("/")||Z.endsWith("/")||Z.endsWith(".lock")||!go6.test(Z))throw Error(`Invalid branch name: ${$}`)}function ay($){return AbortSignal.any([$.req.raw.signal,AbortSignal.timeout(uo6)])}async function co6($,Z){let Q=$.var.studioContext,Y=cW(Z.branch),X=$.req.query("thread")??Y,J=X&&X===Y?Z.branchThread:X?await Q.storage.threads.get(X).catch(()=>null):null,G=J?.virtual_mcp_id===Z.virtualMcpId?J:null,W=Tf(G?.metadata?.runtime);if(W)return W;let K=lR0(Z.virtualMcpMetadata),H=K==="cms"?await qD1(Q,{claimName:Z.claimName}):"alive",F=K==="cms"&&H!=="alive"?"cms":"sandbox",U=!!G&&(H==="gone"||H==="alive"&&K==="cms");if(U&&G)z$0(Q,G.id,F);if(K==="cms")console.log("sandbox proxy: no runtime stamp",{route:$.req.path,method:$.req.method,reason:G?"unstamped":"threadless",liveness:H,resolved:F,stamped:U});return F}async function mo6($){let Z=$.get("vmClaim");if(Z.runner)return Z.runner;try{return await cX($.var.studioContext)}catch{return null}}function ey($){let{runner:Z}=$.get("vmClaim");if(!Z)return $.json({error:"No sandbox runner configured"},503);return Z}async function gp($){let{virtualMcpMetadata:Z,connectionIds:Q}=$.get("vmClaim"),Y=$.var.studioContext,X=a60(Z,Q);if(!X)throw new f0({provider:"github",status:404,message:"Project has no repository"});let J=J0(Y);return jm(Y,J.id,X)}function rD1($,Z){let Q=Z instanceof Error?Z.message:String(Z),Y=cD$(Z);if(Y!==void 0)return $.json({error:Q},429,{...W9,...Y===null?{}:{"Retry-After":String(Math.ceil(Y/1000))}});if(Z instanceof s6)return $.json({error:Q},409,W9);let X=bW(Z);if(X!==null){let J=X===404?404:X===409||X===422?409:502;return $.json({error:Q},J,W9)}return $.json({error:Q},502,W9)}async function oD1($,Z,Q){let Y;try{Y=await fetch(Z,Q)}catch{return $.json({error:"Preview unreachable"},502)}let X;try{X=await Y.text()}catch{return $.json({error:"Preview unreachable"},502)}return new Response(X,{status:Y.status,headers:{"content-type":Y.headers.get("content-type")??"application/json"}})}async function QX8($){try{let Z=await gp($),Q=await G_0(Z,$.get("vmClaim").branch);return $.json(Q,200,W9)}catch(Z){return rD1($,Z)}}function e60($,Z){let Y=(H_0.get($)??Promise.resolve()).catch(()=>{}).then(Z),X=Y.catch(()=>{});return H_0.set($,X),X.finally(()=>{if(H_0.get($)===X)H_0.delete($)}),Y}async function OQ($,Z,Q){if(!Q?.runner&&$.get("vmClaim").runtime==="cms")return $.json({error:"sandbox not found: this session is sandbox-less"},404,W9);let Y=Q?.runner??ey($);if(Y instanceof Response)return Y;let{claimName:X,userId:J,projectRef:G}=$.get("vmClaim"),W=Q?.method??"POST",K=null,H=new Headers;if(Q?.jsonBody!==void 0)K=Q.jsonBody,H.set("content-type","application/json");else if(Q?.forwardJsonBody)K=await $.req.text(),H.set("content-type","application/json");let F=Q?.signal,U={method:W,headers:H,body:K,...F?{signal:F}:{}},N=async()=>{let B=await Y.proxyDaemonRequest(X,Z,U);if(Q?.map404to410&&B.status===404){try{await B.body?.cancel()}catch{}if(await Y.adoptLiveClaim({userId:J,projectRef:G},X))B=await Y.proxyDaemonRequest(X,Z,U);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",...W9}})}}let O=await B.text(),L=Q?.redactRepoDir?do6(O):O,w=B.headers.get("content-type")??"application/json";return new Response(L,{status:B.status,headers:{"content-type":w,...W9}})};try{if(F){let B=N();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 N()}catch(B){let O=B instanceof Error?B.message:String(B);return $.json({error:`Daemon unreachable: ${O}`},502)}}function do6($){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 F_0($,Z,Q,Y="GET",X){let J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null});if(J.status===404&&X){try{await J.body?.cancel()}catch{}if(await $.adoptLiveClaim(X,Z))J=await $.proxyDaemonRequest(Z,Q,{method:Y,headers:new Headers,body:null})}if(J.status===404){try{await J.body?.cancel()}catch{}throw Error("SANDBOX_GONE")}let G=await J.text();if(!J.ok){let W=`Daemon error (${J.status})`;try{W=JSON.parse(G).error??W}catch{}throw Error(W)}return JSON.parse(G)}function io6($){return YX8.includes($)}var go6,eY8=524288,$X8=65536,uo6=1e4,ZX8=2000,lo6,H_0,W9,YX8,XX8=()=>{let $=new $1;$.use("/:virtualMcpId/:branch/*",lo6),$.post("/:virtualMcpId/:branch/write",(Q)=>OQ(Q,"/_sandbox/write",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/unlink",(Q)=>OQ(Q,"/_sandbox/unlink",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/mkdir",(Q)=>OQ(Q,"/_sandbox/mkdir",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/rename",(Q)=>OQ(Q,"/_sandbox/rename",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/read",(Q)=>OQ(Q,"/_sandbox/read",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/glob",(Q)=>OQ(Q,"/_sandbox/glob",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/grep",(Q)=>OQ(Q,"/_sandbox/grep",{forwardJsonBody:!0,signal:ay(Q)})),$.post("/:virtualMcpId/:branch/exec/:script",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}`)}),$.post("/:virtualMcpId/:branch/exec/:script/kill",async(Q)=>{let Y=Q.req.param("script");if(!Y)return Q.json({error:"missing script name"},400);return OQ(Q,`/_sandbox/exec/${encodeURIComponent(Y)}/kill`)}),$.get("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"GET",map404to410:!0,redactRepoDir:!0})),$.put("/:virtualMcpId/:branch/config",(Q)=>OQ(Q,"/_sandbox/config",{method:"PUT",forwardJsonBody:!0,map404to410:!0})),$.post("/:virtualMcpId/:branch/setup/:step",async(Q)=>{let Y=Q.req.param("step");if(!Y||!io6(Y))return Q.json({error:`step must be one of: ${YX8.join(", ")}`},400);let X=Q.get("vmClaim"),J=await qD1(Q.var.studioContext,{claimName:X.claimName})==="gone"?null:await mo6(Q);if(!J)return Q.json({error:"sandbox not found: nothing is running at this ref"},404,W9);if(Y==="start"){let G=J0(Q.var.studioContext),W=Ld(X.virtualMcpMetadata);try{await yR0({ctx:Q.var.studioContext,runner:J,handle:X.claimName,orgId:G.id,userId:X.callerUserId,entries:W})}catch(K){let H=K instanceof Error?K.message:String(K);return Q.json({error:`Failed to push env to daemon: ${H}`},502)}}return OQ(Q,`/_sandbox/setup/${Y}`,{signal:Q.req.raw.signal,map404to410:!0,runner:J})}),$.get("/:virtualMcpId/:branch/events",(Q)=>{let Y=Q.get("vmClaim");if(!Y.runner)return OO(Q,async(X)=>{await X.writeSSE({event:"phase",data:JSON.stringify({kind:"failed",reason:"unknown",message:"No sandbox runner configured on this studio instance."})})});return ZY8(Q,{ctx:Q.var.studioContext,claimName:Y.claimName,runner:Y.runner,virtualMcpId:Y.virtualMcpId,branch:Y.branch,userId:Y.userId,projectRef:Y.projectRef,virtualMcpMetadata:Y.virtualMcpMetadata})}),$.get("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return QX8(Q);return Z(Q)});let Z=(Q)=>OQ(Q,"/_sandbox/git/status",{method:"GET",map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(ZX8)])});return $.post("/:virtualMcpId/:branch/git/status",(Q)=>{if(Q.get("vmClaim").runtime==="cms")return QX8(Q);return OQ(Q,"/_sandbox/git/status",{map404to410:!0,signal:AbortSignal.any([Q.req.raw.signal,AbortSignal.timeout(ZX8)])})}),$.post("/:virtualMcpId/:branch/git/diff",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")try{let X=await Q.req.json().catch(()=>({})),J=await gp(Q),G=await W_0(J,Y.branch,X.base);return Q.json(G,200,W9)}catch(X){return rD1(Q,X)}return OQ(Q,"/_sandbox/git/diff",{forwardJsonBody:!0,map404to410:!0})}),$.post("/:virtualMcpId/:branch/git/publish",async(Q)=>{if(Q.get("vmClaim").runtime==="cms")return Q.json({ok:!0},200,W9);let Y=ey(Q);if(Y instanceof Response)return Y;let{claimName:X,virtualMcpMetadata:J,connectionIds:G}=Q.get("vmClaim"),W=Q.var.studioContext;return e60(X,async()=>{try{await MD1(W,Y,X);let K=a60(J,G);if(K)await aY8(W,Y,X,K)}catch(K){if(K instanceof Xz)return Q.json({error:K.message},403,W9);let H=K instanceof Error?K.message:String(K);return Q.json({error:H},502,W9)}return OQ(Q,"/_sandbox/git/publish",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/discard",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return e60(Y.claimName,async()=>{let X=await Q.req.json().catch(()=>({})),J=Array.isArray(X.filepaths)?X.filepaths.filter((G)=>typeof G==="string"):[];if(J.length===0)return Q.json({error:"filepaths is required"},400,W9);try{let G=await gp(Q);return await tY8(G,Y.branch,J),Q.json({ok:!0},200,W9)}catch(G){let W=bW(G)===409||G instanceof s6?409:502,K=G instanceof Error?G.message:String(G);return Q.json({error:K},W,W9)}});return e60(Y.claimName,()=>OQ(Q,"/_sandbox/git/discard",{forwardJsonBody:!0,map404to410:!0}))}),$.post("/:virtualMcpId/:branch/git/rebase",async(Q)=>{let Y=Q.get("vmClaim");if(Y.runtime==="cms")return e60(Y.claimName,async()=>{try{let W=await Q.req.json().catch(()=>({})),K=await gp(Q),H=W.base??await K.getDefaultBranch();return await K_0(K,Y.branch,H),Q.json({ok:!0},200,W9)}catch(W){return rD1(Q,W)}});let X=ey(Q);if(X instanceof Response)return X;let{claimName:J}=Q.get("vmClaim"),G=Q.var.studioContext;return e60(J,async()=>{try{await MD1(G,X,J)}catch(W){let K=W instanceof Error?W.message:String(W);return Q.json({error:K},502,W9)}return OQ(Q,"/_sandbox/git/rebase",{forwardJsonBody:!0,map404to410:!0})})}),$.post("/:virtualMcpId/:branch/git/suggest-commit",x5({maxSize:eY8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ey(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=kD1(F)&&N?[F,U]:X?await Promise.all([F_0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),F_0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await gp(Q);return Promise.all([G_0(w,Y.branch),W_0(w,Y.branch)])})();await aG(K,J0(K).id,"suggesting a commit message");let L=await GY8(K,B,O);return Q.json(L,200,W9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,W9);return Q.json({error:F},502,W9)}}),$.post("/:virtualMcpId/:branch/git/judge-review",x5({maxSize:eY8,onError:(Q)=>Q.json({error:"Payload too large"},413,W9)}),async(Q)=>{let Y=Q.get("vmClaim"),X=null;if(Y.runtime!=="cms"){let H=ey(Q);if(H instanceof Response)return H;X=H}let{claimName:J,userId:G,projectRef:W}=Y,K=Q.var.studioContext;try{let H=await Q.req.json().catch(()=>({})),F=H.status,U=H.diff,N=U!=null&&typeof U.diffs==="object"&&U.diffs!==null,[B,O]=kD1(F)&&N?[F,U]:X?await Promise.all([F_0(X,J,"/_sandbox/git/status","GET",{userId:G,projectRef:W}),F_0(X,J,"/_sandbox/git/diff","GET",{userId:G,projectRef:W})]):await(async()=>{let w=await gp(Q);return Promise.all([G_0(w,Y.branch),W_0(w,Y.branch)])})();await aG(K,J0(K).id,"judging whether a change needs review");let L=await KY8(K,B,O,typeof H.language==="string"?H.language:void 0);return Q.json(L,200,W9)}catch(H){let F=H instanceof Error?H.message:String(H);if(F==="SANDBOX_GONE")return Q.json({error:"Sandbox handle is gone. The sandbox needs to be re-provisioned."},410,W9);return Q.json({error:F},502,W9)}}),$.get("/:virtualMcpId/:branch/preview-fetch",async(Q)=>{let Y=ey(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J=Q.req.query("path");if(!J||!J.startsWith("/")||J.startsWith("//")||J.includes("..")||J.includes("\\"))return Q.json({error:"Path not allowed"},403);let G;try{G=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W=G.replace(/\/+$/,"");return oD1(Q,`${W}${J}`)}),$.post("/:virtualMcpId/:branch/preview-invoke",x5({maxSize:$X8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let Y=ey(Q);if(Y instanceof Response)return Y;let{claimName:X}=Q.get("vmClaim"),J;try{J=await Y.getPreviewUrl(X)}catch{return Q.json({error:"Preview not available"},502)}if(!J)return Q.json({error:"Preview not available"},502);let G;try{G=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!G||typeof G!=="object"||Array.isArray(G))return Q.json({error:"Invalid JSON body"},400);let W=pD1(G);if(!W)return Q.json({error:"Invalid or missing __resolveType"},400);let K=nD1(J,W.resolveType);return oD1(Q,K,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(W.payload),signal:AbortSignal.timeout(30000)})}),$.post("/:virtualMcpId/:branch/catalog-invoke",x5({maxSize:$X8,onError:(Q)=>Q.json({error:"Payload too large"},413)}),async(Q)=>{let{runner:Y,claimName:X,virtualMcpMetadata:J}=Q.get("vmClaim"),G;try{G=Y?await Y.getPreviewUrl(X):wd(J)}catch{return Q.json({error:"Preview not available"},502)}if(!G)return Q.json({error:"Preview not available"},502);let W;try{W=await Q.req.json()}catch{return Q.json({error:"Invalid JSON body"},400)}if(!W||typeof W!=="object"||Array.isArray(W))return Q.json({error:"Invalid JSON body"},400);let K=pD1(W);if(!K)return Q.json({error:"Invalid or missing __resolveType"},400);if(!oY8(K.resolveType))return Q.json({error:"resolveType not allowed"},403);let H=nD1(G,K.resolveType);return oD1(Q,H,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify(K.payload),signal:AbortSignal.timeout(30000)})}),$};var JX8=D(()=>{J8();JK();_p();RD1();Od();aQ8();O3();jd();eQ8();uW();FH();$Y8();QY8();I71();j$0();_D1();HY8();X7();q5();iD1();rY8();uR0();tD1();go6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;lo6=tC0(async($,Z)=>{let Q=$.var.studioContext;try{n(Q)}catch{return $.json({error:"Unauthorized"},401)}let Y=c0(Q);if(!Y)return $.json({error:"Unauthorized"},401);let X;try{X=J0(Q)}catch{return $.json({error:"Organization scope required"},403)}let J=$.req.param("virtualMcpId"),G=$.req.param("branch");if(!J||!G)return $.json({error:"virtualMcpId and branch are required"},400);try{ho6(G)}catch(L){let w=L instanceof Error?L.message:String(L);return $.json({error:w},400)}let W=await Q.storage.virtualMcps.findById(J);if(!W||W.organization_id!==X.id)return $.json({error:"Virtual MCP not found"},404);let K=T10({orgId:X.id,virtualMcpId:J,branch:G}),H=await r91(Q,G),F=s91(H,Y),U=sQ8({userId:F,projectRef:K}),N=W.metadata??null,B=await co6($,{claimName:U,branch:G,virtualMcpId:J,sandboxUserId:F,virtualMcpMetadata:N,branchThread:H});if(B==="cms")return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:null,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z();let O;try{O=await cX(Q)}catch{O=null}if(!O)return $.json({error:"No sandbox runner found"},404);return $.set("vmClaim",{claimName:U,callerUserId:Y,runner:O,virtualMcpId:J,branch:G,userId:F,projectRef:K,virtualMcpMetadata:N,connectionIds:W.connections?.map((L)=>L.connection_id)??[],runtime:B}),Z()});H_0=new Map;W9={"Cache-Control":"no-store, no-cache, must-revalidate",Pragma:"no-cache"};YX8=["clone","install","start"]});function GX8($,Z,Q){let Y=sD1.get($);if(!Y)Y={pending:null,running:!1},sD1.set($,Y);if(!Y.pending)Y.pending={set:new Map,del:new Set,deps:Z,resolvers:[],rejecters:[]};let X=Y.pending;X.deps=Z;for(let[G,W]of Object.entries(Q.set??{}))X.set.set(G,W),X.del.delete(G);for(let G of Q.delete??[])X.del.add(G),X.set.delete(G);let J=new Promise((G,W)=>{X.resolvers.push(G),X.rejecters.push(W)});if(!Y.running)no6($,Y);return J}async function no6($,Z){Z.running=!0;try{while(Z.pending){let Q=Z.pending;Z.pending=null;try{let Y=await to6(Q);for(let X of Q.resolvers)X(Y)}catch(Y){for(let X of Q.rejecters)X(Y)}}}finally{if(Z.running=!1,!Z.pending)sD1.delete($)}}async function to6($){let{client:Z,branch:Q,packagePath:Y}=$.deps,X=new Map;for(let J=0;;J++){let G=await yp(Z,Q),W=await Z.listDecofileEntries(G,Y),K=cD1(W,Y),H=[],F=new Map(K.map((N)=>[N.path,{stem:N.stem,sha:N.sha}]));for(let[N,B]of $.set){let O=mD1(K,N),L=`${JSON.stringify(B,null,2)}
|
|
3721
3721
|
`;await mY8(Z.repo,L);let w=O[0]??`${Y_0(Y)}/${xD1(N)}.json`;H.push({path:w,content:L});let j=w.slice(w.lastIndexOf("/")+1,-5);F.set(w,{stem:j,content:L});for(let E of O.slice(1))H.push({path:E,deleted:!0}),F.delete(E)}for(let N of $.del)for(let B of mD1(K,N))H.push({path:B,deleted:!0}),F.delete(B);if(H.length===0)return G;let U=Y?`${Y}/.deco/blocks.gen.json`:".deco/blocks.gen.json";if(W.some((N)=>N.type==="blob"&&N.path===U)){let N=await dY8(Z,F.values(),X),{decofile:B,skipped:O}=i60(N);if(O.length>0)console.warn("decofile gen: dropped blocks that were not valid JSON",{repo:UH(Z.repo),branch:Q,packagePath:Y,blocks:O.map((L)=>L.key)});H.push({path:U,content:B})}try{let{sha:N}=await Z.commitFiles({branch:Q,message:oo6($),expectedHead:G,changes:H});return N}catch(N){if(!(N instanceof s6)||J>=po6-1)throw N;await L$(D7(2000,200,J,2,0.5))}}}function oo6($){let Z=(X)=>{let J=X.slice(0,3).join(", ");return X.length>3?`${J} (+${X.length-3} more)`:J},Q=[];if($.set.size>0)Q.push(`update ${Z([...$.set.keys()])}`);if($.del.size>0)Q.push(`delete ${Z([...$.del])}`);let Y=`chore(decofile): ${Q.join("; ")}`;return S51(Y,$.deps.coAuthor)}var po6=3,sD1;var WX8=D(()=>{XT0();sC0();p4();r$();X7();X_0();sD1=new Map});import{createHmac as KX8,randomBytes as ro6,timingSafeEqual as so6}from"crypto";function HX8(){if(U_0)return U_0;let $;try{let Z=j0();$=Z.studioJwtSecret??Z.betterAuthSecret}catch{$=void 0}return U_0=$?Buffer.from($):ro6(32),U_0}function aD1($){let Z=$.nowMs??Date.now(),Q={o:$.organizationId,m:$.virtualMcpId,b:$.branch,e:Math.floor((Z+ao6)/1000)},Y=Buffer.from(JSON.stringify(Q)).toString("base64url"),X=KX8("sha256",HX8()).update(Y).digest("base64url");return`${Y}.${X}`}function FX8($,Z){let Q=$.indexOf(".");if(Q<0)return!1;let Y=$.slice(0,Q),X=Buffer.from($.slice(Q+1)),J=Buffer.from(KX8("sha256",HX8()).update(Y).digest("base64url"));if(X.length!==J.length||!so6(X,J))return!1;let G;try{G=JSON.parse(Buffer.from(Y,"base64url").toString())}catch{return!1}let W=Math.floor((Z.nowMs??Date.now())/1000);return G.o===Z.organizationId&&G.m===Z.virtualMcpId&&G.b===Z.branch&&typeof G.e==="number"&&G.e>=W}var ao6=21600000,U_0=null;var UX8=D(()=>{$$()});function N_0($){return $&&typeof $==="object"&&!Array.isArray($)?$:null}function eo6($){for(let[Z,Q]of Object.entries($)){if(!Z.startsWith("collections/blog/posts/"))continue;let Y=N_0(Q)?.__resolveType;if(typeof Y==="string"&&Y)return Y}return"blog/loaders/Blogpost.ts"}function NX8($){let Z;try{Z=N_0(JSON.parse($))}catch{return $}if(!Z)return $;let Q=eo6(Z),Y={...Z},X=0;for(let[J,G]of Object.entries(Z)){if(!J.startsWith("blog-manager/posts/"))continue;let W=N_0(G),K=W&&N_0(W.post);if(!K)continue;if(K.status==="archived")continue;if(typeof K.slug!=="string"||!K.slug)continue;let F=`collections/blog/posts/${J.slice(19)}`;if(Object.hasOwn(Y,F))continue;Y[F]={name:F,__resolveType:Q,["post"]:{...K,status:"published"}},X++}return X>0?JSON.stringify(Y):$}import{z as hp}from"zod";function Zr6($){return $.length>0&&$.length<=255&&!$.includes("..")&&!$.endsWith("/")&&!$.endsWith(".lock")&&$r6.test($)}function wX8($){return $.req.header("x-forwarded-host")??new URL($.req.url).host}async function $50($){let Z=$.get("decofileScope");return jm($.var.studioContext,Z.organizationId,Z.repository)}function Z50($,Z){let Q=Z instanceof Error?Z.message:String(Z);if(Z instanceof s6)return $.json({error:Q},409);let Y=bW(Z);if(Y!==null){let X=Y===404?404:Y===409||Y===422?409:502;return $.json({error:Q},X)}return $.json({error:Q},500)}function jX8(){let $=new $1;return $.use("/:virtualMcpId/:branch",LX8),$.use("/:virtualMcpId/:branch/*",LX8),$.get("/:virtualMcpId/:branch",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await iY8(Y,Q.branch,Q.packagePath,{createBranchIfMissing:!!Q.userId}),J={ETag:`"${X.sha}"`,"Cache-Control":"no-store","Access-Control-Allow-Origin":"*"};if(Z.req.header("if-none-match")===`"${X.sha}"`)return Z.body(null,304,J);if(!Q.userId)return Z.body(NX8(X.decofile),200,{...J,"content-type":"application/json"});let G=aD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.body(`{"version":${JSON.stringify(X.sha)},"token":${JSON.stringify(G)},"apiHost":${JSON.stringify(wX8(Z))},"decofile":${X.decofile}}`,200,{...J,"content-type":"application/json"})}catch(Y){return Z50(Z,Y)}}),$.get("/:virtualMcpId/:branch/meta",async(Z)=>{let Q=Z.get("decofileScope"),Y=Q.packagePath?`${Q.packagePath}/.deco/meta.gen.json`:".deco/meta.gen.json";try{let X=await $50(Z),J=await X.readFileAtRef(Q.branch,Y);if(J===null){let G=await X.getDefaultBranch();if(G!==Q.branch)J=await X.readFileAtRef(G,Y)}if(J===null)return Z.json({error:"meta.gen.json not committed"},404);return Z.body(J,200,{"content-type":"application/json","Cache-Control":"no-store","Access-Control-Allow-Origin":"*"})}catch(X){return Z50(Z,X)}}),$.patch("/:virtualMcpId/:branch",Yr6,async(Z)=>{let Q=Z.get("decofileScope"),Y=Z.var.studioContext,X=Xr6.safeParse(await Z.req.json().catch(()=>null));if(!X.success)return Z.json({error:"Invalid body",details:X.error.issues},400);let J;try{J=p60(X.data)}catch(G){if(G instanceof n60)return Z.json({error:G.message},400);throw G}for(let G of[...Object.keys(J.set??{}),...J.delete??[]])try{rC0(G)}catch(W){let K=W instanceof Error?W.message:String(W);return Z.json({error:K},400)}for(let[G,W]of Object.entries(J.set??{})){if(typeof W!=="object"||W===null||Array.isArray(W))return Z.json({error:`Block "${G}" must be a JSON object`},400);if(bD1(G))return Z.json({error:`Block key "${G}" collides with a framework resolver module and cannot be written`},400)}try{let G=await $50(Z),W=await GX8(`${Q.organizationId}/${Q.virtualMcpId}/${Q.branch}`,{client:G,branch:Q.branch,packagePath:Q.packagePath,coAuthor:vp(Y)},J),K=aD1({organizationId:Q.organizationId,virtualMcpId:Q.virtualMcpId,branch:Q.branch});return Z.json({version:W,token:K,apiHost:wX8(Z)})}catch(G){return Z50(Z,G)}}),$.post("/:virtualMcpId/:branch/publish",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({error:"Branch is already the default branch"},400);let J=`chore(decofile): publish ${Q.branch}`;try{let G;try{G=await Y.mergeBranches(X,Q.branch,J)}catch(W){if(bW(W)!==409)throw W;await K_0(Y,Q.branch,X),G=await Y.mergeBranches(X,Q.branch,J)}return G?Z.json({result:"merged",sha:G}):Z.json({result:"up-to-date"})}catch(G){if(bW(G)===409)return Z.json({error:"merge-conflict"},409);if(bW(G)===405){let K=await Y.findOpenChangeRequest(X,Q.branch)??await Y.createChangeRequest({base:X,head:Q.branch,title:`Publish ${Q.branch}`});return Z.json({result:"pull-request",number:K.number,url:K.url})}throw G}}catch(Y){return Z50(Z,Y)}}),$.get("/:virtualMcpId/:branch/status",async(Z)=>{let Q=Z.get("decofileScope");try{let Y=await $50(Z),X=await Y.getDefaultBranch();if(X===Q.branch)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});try{let{aheadBy:J,behindBy:G}=await Y.compare(X,Q.branch);return Z.json({baseBranch:X,aheadBy:J,behindBy:G})}catch(J){if(bW(J)===404)return Z.json({baseBranch:X,aheadBy:0,behindBy:0});throw J}}catch(Y){return Z50(Z,Y)}}),$}var $r6,BX8=500,DX8=1048576,OX8=1024,Qr6=8388608,Yr6,Xr6,LX8;var EX8=D(()=>{uR0();sC0();J8();JK();RD1();oC0();tD1();X7();WX8();UX8();iD1();X_0();FH();$r6=/^[a-zA-Z0-9][a-zA-Z0-9/._-]*$/;Yr6=x5({maxSize:Qr6,onError:($)=>$.json({error:"Payload too large"},413)}),Xr6=hp.object({set:hp.record(hp.string(),hp.unknown()).optional(),delete:hp.array(hp.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)<=BX8,{message:`Patch cannot touch more than ${BX8} blocks`}).refine(($)=>Object.values($.set??{}).every((Z)=>JSON.stringify(Z).length<=DX8),{message:`Each block must be at most ${DX8} bytes`}).refine(($)=>[...Object.keys($.set??{}),...$.delete??[]].every((Z)=>Z.length<=OX8),{message:`Each block key must be at most ${OX8} characters`}),LX8=tC0(async($,Z)=>{let Q=$.var.studioContext,Y=Q.organization;if(!Y)return $.json({error:"Organization scope required"},500);let X=$.req.param("virtualMcpId"),J=$.req.param("branch");if(!X||!J)return $.json({error:"virtualMcpId and branch are required"},400);if(!Zr6(J))return $.json({error:`Invalid branch name: ${J}`},400);let G=Q.auth?.user?.id??null;if(!G){let B=$.req.query("token");if(!($.req.method==="GET"&&!$.req.path.match(/\/(publish|status)$/)))return $.json({error:"Unauthorized"},401);if(!B||!FX8(B,{organizationId:Y.id,virtualMcpId:X,branch:J}))return $.json({error:"Unauthorized"},401)}if(!await CJ(Q,Y.id,"cms"))return $.json({error:"This organization's plan does not include the CMS",code:"feature_not_in_plan"},403);let W=await Q.storage.virtualMcps.findById(X);if(!W||W.organization_id!==Y.id)return $.json({error:"Virtual MCP not found"},404);let K=W.metadata??null;if(!wd(K))return $.json({error:"Project has no preview server configured"},404);let F=W.connections?.map((B)=>B.connection_id)??[],U=a60(K,F);if(!U)return $.json({error:"Project has no repository"},404);let N=K?.runtime;return $.set("decofileScope",{organizationId:Y.id,virtualMcpId:X,branch:J,packagePath:N?.path?.replace(/^\/+|\/+$/g,"")||null,repository:U,userId:G}),Z()})});var zX8=($)=>{let Z=new $1;if(Z.use("*",Fp),Z.use("*",c58),Z.route("/",u58($.voiceSessions)),Z.route("/",YC0()),Z.route("/",R98()),Z.route("/",F98()),Z.route("/",fQ8()),Z.route("/",gQ8()),Z.route("/",VQ8()),Z.route("/",bQ8()),Z.route("/",SQ8()),Z.route("/",iC0()),Z.route("/tools",iQ8()),Z.route("/",cQ8()),Z.route("/",YQ8({kvStorage:$.kvStorage})),Z.route("/",ZQ8()),Z.route("/fs",EQ8({getConnection:$.getNatsConnection})),Z.route("/sandbox",XX8()),Z.route("/decofile",jX8()),Z.route("/",qQ8()),Z.route("/",PQ8()),Z.route("/deco-sites",JC0()),Z.route("/hosting",e58()),Z.route("/monitor",G98()),Z.route("/sso",aS0()),Z.route("/",pC0({tokenStorage:$.tokenStorage,automationEventDispatcher:$.automationEventDispatcher})),Z.route("/webhooks",t58()),$.mountDevAssets)Z.route("/dev-assets",HC0({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("/",f88()),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",TQ8()),Z.route("/mcp",sM0()),Z.route("/mcp/self",lC0()),Z.route("/mcp",$I0()),Z.all("/oauth-proxy/:connectionId/*",$.oauthProxyHandler),Z.get("/watch",$.watchHandler),Z};var PX8=D(()=>{J8();l58();m58();lS0();o58();iN1();$98();W98();FC0();aE();uN1();rN1();QQ8();XQ8();zQ8();AQ8();v80();_N1();ZI0();OD1();RQ8();MQ8();kQ8();CQ8();jD1();yQ8();hQ8();mQ8();ED1();pQ8();zD1();aM0();JX8();EX8()});import{z as $g}from"zod";class eD1{adapter;getConnection;kvPromise;constructor($,Z){this.adapter=$;this.getConnection=Z}kv(){let $=this.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new RX8.Kvm(B_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:B_0.StorageType.Memory,ttl:qX8.nanos(kD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}async conversationAgent($){let Z=await this.kv(),Q=`agent.${$.conversationKey}`,Y=Date.now()+45000;while(Date.now()<Y){let X=await Z.get(Q),J=X?.operation==="PUT"?TX8.parse(X.json()):null;if(J?.state==="ready")return J.agentId;if(J?.state==="creating"&&J.expiresAt>Date.now()){await L$(200);continue}let G=AX8.encode(JSON.stringify({state:"creating",expiresAt:Date.now()+40000})),W;try{W=X&&J?await Z.update(Q,G,X.revision):await Z.create(Q,G)}catch{await L$(200);continue}try{let K=await $.ensureConversationAgent();return await Z.update(Q,AX8.encode(JSON.stringify({state:"ready",agentId:K})),W),K}catch(K){throw await Z.delete(Q,{previousSeq:W}).catch(()=>{}),K}}throw new q1(503,{message:"Voice conversation is starting; try again"})}async createSession($){let Z=this.adapter.forConversationModel($.model),Q=await this.conversationAgent(Z);try{return{provider:"elevenlabs",conversationToken:await Z.createConversationToken(Q)}}catch(Y){let X=await this.kv(),J=`agent.${Z.conversationKey}`,G=await X.get(J),W=G?.operation==="PUT"?TX8.parse(G.json()):null;if(G&&W?.state==="ready"&&W.agentId===Q)await X.delete(J,{previousSeq:G.revision}).catch(()=>{});throw Y}}}var B_0,RX8,qX8,AX8,TX8;var MX8=D(()=>{EJ();yU();r$();B_0=C(EK(),1),RX8=C(XA(),1),qX8=C(Rz(),1),AX8=new TextEncoder,TX8=$g.discriminatedUnion("state",[$g.object({state:$g.literal("ready"),agentId:$g.string()}),$g.object({state:$g.literal("creating"),expiresAt:$g.number()})])});import{z as up}from"zod";function Jr6($){return{model:$.model,instructions:`${Eq$}
|
|
3722
|
-
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class $O1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Jr6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:up.object({session:up.object({id:up.string().min(1)}),transport:up.object({type:up.literal("webrtc"),sdp:up.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var IX8=D(()=>{yU()});var VX8;var kX8=D(()=>{VX8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function ZO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:wq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:VX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:kD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var SX8=D(()=>{yU();kX8()});import{z as sX}from"zod";import{createHash as Gr6,createHmac as Wr6}from"crypto";class D_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Gr6("sha256").update(JSON.stringify(ZO1($))).digest("hex"),this.conversationKey=Wr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new D_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=sX.object({agents:sX.array(sX.object({agent_id:sX.string(),name:sX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return sX.object({platform_settings:sX.object({auth:sX.object({enable_auth:sX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...ZO1(this.config)},AbortSignal.timeout(15000));return sX.object({agent_id:sX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return sX.object({token:sX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sX.object({token:sX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var CX8=D(()=>{SX8()});import{createHmac as Kr6,timingSafeEqual as Hr6}from"crypto";import{z as lp}from"zod";function vX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Kr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function bX8($,Z){let Q=Buffer.from(JSON.stringify(_X8.parse($))).toString("base64url");return`${Q}.${vX8(Q,Z)}`}function xX8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(vX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Hr6(W,G))return null;try{let K=_X8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+kD)return null;return K.data}catch{return null}}var _X8;var fX8=D(()=>{yU();_X8=lp.object({sessionId:lp.string().uuid(),organizationId:lp.string().min(1).max(256),userId:lp.string().min(1).max(256),threadId:lp.string().min(1).max(256),expiresAt:lp.number().int().positive()})});import{z as QO1}from"zod";function yX8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return YO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var YO1;var gX8=D(()=>{YO1=QO1.object({provider:QO1.enum(["elevenlabs","openai"]),model:QO1.string().trim().min(1).max(128)})});import{createHash as Fr6}from"crypto";import{z as cp}from"zod";function mp($){return`user.${Fr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class JO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new hX8.Kvm(L_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:L_0.StorageType.Memory,ttl:uX8.nanos(kD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=yX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+kD},W=bX8(G,this.deps.secret),K=await this.kv(),H=mp(G),F=await K.get(H),U=F?.operation==="PUT"?O_0.parse(F.json()):null,N=XO1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:mp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=xX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=mp(Q),J=await Y.get(X),G=J?.operation==="PUT"?O_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,XO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=mp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?O_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,XO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(mp($));if(Q?.operation==="PUT"&&O_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(mp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var L_0,hX8,uX8,O_0,XO1;var lX8=D(()=>{EJ();yU();fX8();gX8();L_0=C(EK(),1),hX8=C(XA(),1),uX8=C(Rz(),1),O_0=cp.object({sessionId:cp.string().uuid(),expiresAt:cp.number(),connected:cp.boolean().optional(),conversation:YO1.optional(),characters:cp.number().int().nonnegative(),requests:cp.number().int().nonnegative()}),XO1=new TextEncoder});function Ur6($){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 Nr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},cX8=()=>{let $=new $1;return $.use("*",Nr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await JG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Ur6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var mX8=D(()=>{J8();$$();ik0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ar6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Tr6($,Z,Q){try{return JSON.parse($)}catch{throw new pX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Rr6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Tr6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function qr6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?oF(Q.function.parameters):oF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Mr6($){if(!$)return;return{openai:{response_format:$}}}function Ir6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function dX8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function iX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Br6=256,Dr6,Or6,Lr6,wr6,jr6,Er6,zr6,Pr6,pX8,nX8,tX8;var oX8=D(()=>{y4();J8();_p();xH();Dr6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Or6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Lr6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Or6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),wr6=y1.object({type:y1.literal("text")}),jr6=y1.object({type:y1.literal("json_object")}),Er6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),zr6=y1.union([wr6,jr6,Er6]),Pr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Lr6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Dr6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:zr6.optional(),user:y1.string().optional()});pX8=class pX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};nX8=new $1;nX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(zN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Pr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ar6(J.model);if(!G)return $.json(zN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>EP(E.providerId));if(!j)return $.json(zN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(zN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Rr6(J.messages),N=J.tools?qr6(J.tools):void 0,B=Mr6(J.response_format),O=Ir6(),L=Math.floor(Date.now()/1000);if(J.stream)return OO($,async(w)=>{let j=dX8(F,U,N,J,B,$.req.raw.signal);try{let E=Dd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=Br6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:iX8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=dX8(F,U,N,J,B,$.req.raw.signal),j=await hU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:iX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(zN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zN(X.message,"server_error"),500)}});tX8=nX8});function Vr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function rX8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!EZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(LA(U)!==J)continue;if(!Vr6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var sX8=D(()=>{J8();Z3()});var eX8;var aX8=D(()=>{eX8={name:"decocms",version:"4.451.1",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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:"^7.0.107","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 Cr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Sr6}}var $J8,Sr6="https://ph.studio.decocms.com",ZJ8;var QJ8=D(()=>{J8();Cs();cf();k9();$$();wN1();aX8();$J8=new $1;$J8.get("/",($)=>{let Z={version:eX8.version,theme:q5$(),...oK().logo&&{logo:oK().logo},...uD()&&{internalUrl:np1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:C68(),posthog:Cr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:IO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZJ8=$J8});function Zg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GO1($){return(Zg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function YJ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zg($))}&sz=${Z}`}function _r6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function XJ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=_r6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as P$}from"zod";var vr6,JJ8;var GJ8=D(()=>{vr6=P$.object({check_id:P$.string(),title:P$.string(),description:P$.string().optional(),impact:P$.string().optional(),why:P$.string().optional(),category:P$.string(),severity:P$.string(),value_band:P$.string().optional(),value_driver:P$.string().optional(),controllability:P$.string().optional(),pages:P$.array(P$.string()),tasks:P$.array(P$.string()),evidence:P$.string(),sample_scope:P$.string().optional(),sources:P$.array(P$.string())}),JJ8=P$.object({domain:P$.string(),brand:P$.string(),favicon:P$.string().optional(),scanned_at:P$.string().nullable(),lang:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),totals:P$.object({measured:P$.number(),registry_total:P$.number(),passed:P$.number(),failed:P$.number(),blocked:P$.number()}),buckets:P$.array(P$.object({id:P$.enum(["critical","important","worth"]),label:P$.string(),items:P$.array(vr6)})),passing:P$.object({count:P$.number(),items:P$.array(P$.object({check_id:P$.string(),title:P$.string()}))}),not_measured:P$.object({count:P$.number(),groups:P$.array(P$.object({reason:P$.string(),label:P$.string(),count:P$.number(),checks:P$.array(P$.string())}))}),categories:P$.array(P$.object({key:P$.string(),label:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),pass:P$.number(),fail:P$.number()})),screenshots:P$.array(P$.object({url:P$.string(),page_type:P$.string().optional(),viewport:P$.enum(["desktop","mobile"]),image_url:P$.string()}))})});function WJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function w_0($,Z={}){let Q=await fetch(WJ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return JJ8.parse(await Q.json())}async function KJ8($,Z={}){let Q=await fetch(WJ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var WO1=D(()=>{GJ8();tB()});import{join as HJ8}from"path";async function xr6($){try{let Z=await w_0($,{signal:AbortSignal.timeout(br6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function HG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function fr6($,Z){let Q=Zg($),Y=Z?.brand?.trim()||GO1(Q),X=YJ8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=XJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${HG(W)}</title>`,`<meta name="description" content="${HG(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="${HG(W)}" />`,`<meta property="og:description" content="${HG(K)}" />`,`<meta property="og:url" content="${HG(G)}" />`,`<meta property="og:image" content="${HG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${HG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${HG(W)}" />`,`<meta name="twitter:description" content="${HG(K)}" />`,`<meta name="twitter:image" content="${HG(H)}" />`,`<meta name="twitter:image:alt" content="${HG(F)}" />`,`<link rel="canonical" href="${HG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${HG(G)}.md" />`,`<link rel="icon" href="${HG(X)}" sizes="any" />`].join(`
|
|
3722
|
+
Start in ${$.language==="pt"?"Brazilian Portuguese":"English"}, and follow the user's language.`,delegation:{type:"client"},audio:{output:{voice:$.voice}},store:!1}}class $O1{config;constructor($){this.config=$}async createSession(){return{provider:"openai",transport:"webrtc"}}async negotiate($){let Z=await fetch("https://api.openai.com/v1/live/sessions",{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json","OpenAI-Safety-Identifier":$.safetyIdentifier},body:JSON.stringify({session:Jr6({...this.config,language:$.language,model:$.model}),transport:{type:"webrtc",sdp:$.sdp}}),signal:AbortSignal.timeout(15000)});if(!Z.ok)throw await Z.body?.cancel(),Error(`OpenAI Live request failed (${Z.status})`);return{sdp:up.object({session:up.object({id:up.string().min(1)}),transport:up.object({type:up.literal("webrtc"),sdp:up.string().min(1).max(1e5)})}).parse(await Z.json()).transport.sdp}}}var IX8=D(()=>{yU()});var VX8;var kX8=D(()=>{VX8=[{name:"delegate_to_agent",description:"Submit a complete request to the selected Studio agent. Returns after acceptance while work continues in the background. Results arrive later.",parameters:{type:"object",properties:{request:{type:"string",description:"The complete user request, with relevant conversational details. Preserve intent and constraints."}},required:["request"]}},{name:"get_agent_status",description:"Read the current chat's work status and known results. This does not track independent organization tasks; delegate fresh task-status queries to the Studio agent. Use when asked, never poll.",parameters:{type:"object",properties:{}}},{name:"stop_agent_work",description:"Request cancellation in the current chat ONLY when the user explicitly asks. Speaking over the companion is not cancellation. To stop independent tasks, delegate that request to the Studio agent.",parameters:{type:"object",properties:{}}}]});function ZO1($){return{conversation_config:{agent:{first_message:"",language:"en",prompt:{prompt:wq$,llm:$.conversationModel,thinking_budget:0,max_tokens:512,tools:VX8.map((Z)=>({...Z,type:"client",expects_response:!0,response_timeout_secs:Z.name==="delegate_to_agent"?20:5,...Z.name==="delegate_to_agent"?{execution_mode:"async",interruption_mode:"allow",pre_tool_speech:"off"}:{}}))}},asr:{provider:"scribe_realtime",quality:"high"},turn:{turn_eagerness:"normal",turn_timeout:-1,silence_end_call_timeout:-1},tts:{voice_id:$.voiceId,model_id:$.model},conversation:{max_duration_seconds:kD/1000,client_events:["audio","interruption","user_transcript","agent_response","client_tool_call","vad_score"]}},platform_settings:{auth:{enable_auth:!0},privacy:{record_voice:!1,retention_days:1,delete_audio:!0,delete_transcript_and_pii:!0},overrides:{conversation_config_override:{agent:{language:!0}}}}}}var SX8=D(()=>{yU();kX8()});import{z as sX}from"zod";import{createHash as Gr6,createHmac as Wr6}from"crypto";class D_0{config;conversationKey;configurationKey;constructor($){this.config=$;this.configurationKey=Gr6("sha256").update(JSON.stringify(ZO1($))).digest("hex"),this.conversationKey=Wr6("sha256",$.apiKey).update(this.configurationKey).digest("hex")}forConversationModel($){return $===this.config.conversationModel?this:new D_0({...this.config,conversationModel:$})}async request($,Z,Q){let Y=await fetch(`https://api.elevenlabs.io/v1${$}`,{method:Z===void 0?"GET":"POST",headers:{"xi-api-key":this.config.apiKey,"Content-Type":"application/json"},body:JSON.stringify(Z),signal:Q});if(!Y.ok)throw await Y.body?.cancel(),Error(`ElevenLabs request failed (${Y.status})`);return Y}async ensureConversationAgent(){let $=`Studio voice ${this.configurationKey.slice(0,24)}`,Z=await this.request(`/convai/agents?search=${encodeURIComponent($)}&page_size=100`,void 0,AbortSignal.timeout(15000)),{agents:Q}=sX.object({agents:sX.array(sX.object({agent_id:sX.string(),name:sX.string()}))}).parse(await Z.json()),Y=Q.find((J)=>J.name===$);if(Y){let J=await this.request(`/convai/agents/${encodeURIComponent(Y.agent_id)}`,void 0,AbortSignal.timeout(15000));return sX.object({platform_settings:sX.object({auth:sX.object({enable_auth:sX.literal(!0)})})}).parse(await J.json()),Y.agent_id}let X=await this.request("/convai/agents/create",{name:$,...ZO1(this.config)},AbortSignal.timeout(15000));return sX.object({agent_id:sX.string().min(1)}).parse(await X.json()).agent_id}async createConversationToken($){let Z=await this.request(`/convai/conversation/token?agent_id=${encodeURIComponent($)}`,void 0,AbortSignal.timeout(15000));return sX.object({token:sX.string().min(1)}).parse(await Z.json()).token}async createTranscriptionToken(){let $=await this.request("/single-use-token/realtime_scribe",{},AbortSignal.timeout(15000));return sX.object({token:sX.string().min(1)}).parse(await $.json()).token}synthesize($,Z){return this.request(`/text-to-speech/${encodeURIComponent(this.config.voiceId)}/stream?output_format=mp3_44100_128`,{text:$,model_id:this.config.model},AbortSignal.any([Z,AbortSignal.timeout(60000)]))}}var CX8=D(()=>{SX8()});import{createHmac as Kr6,timingSafeEqual as Hr6}from"crypto";import{z as lp}from"zod";function vX8($,Z){if(!Z)throw Error("Voice requires a shared authentication secret");return Kr6("sha256",Z).update(`studio-voice-session:v1:${$}`).digest("base64url")}function bX8($,Z){let Q=Buffer.from(JSON.stringify(_X8.parse($))).toString("base64url");return`${Q}.${vX8(Q,Z)}`}function xX8($,Z,Q=Date.now()){if(!Z||$.length>4096)return null;let Y=$.split(".");if(Y.length!==2)return null;let[X,J]=Y;if(!X||!J)return null;let G=Buffer.from(vX8(X,Z)),W=Buffer.from(J);if(W.length!==G.length||!Hr6(W,G))return null;try{let K=_X8.safeParse(JSON.parse(Buffer.from(X,"base64url").toString()));if(!K.success||K.data.expiresAt<=Q||K.data.expiresAt>Q+kD)return null;return K.data}catch{return null}}var _X8;var fX8=D(()=>{yU();_X8=lp.object({sessionId:lp.string().uuid(),organizationId:lp.string().min(1).max(256),userId:lp.string().min(1).max(256),threadId:lp.string().min(1).max(256),expiresAt:lp.number().int().positive()})});import{z as QO1}from"zod";function yX8($,Z){if(Z?.voice_model!=null&&Z.voice_provider==null)throw Error("A voice model override requires a provider");let Q=Z?.voice_provider??$.voiceConversationProvider;return YO1.parse({provider:Q,model:Z?.voice_model??(Q==="openai"?$.openaiLiveModel:$.elevenlabsConversationModel)})}var YO1;var gX8=D(()=>{YO1=QO1.object({provider:QO1.enum(["elevenlabs","openai"]),model:QO1.string().trim().min(1).max(128)})});import{createHash as Fr6}from"crypto";import{z as cp}from"zod";function mp($){return`user.${Fr6("sha256").update(JSON.stringify([$.organizationId,$.userId])).digest("hex")}`}class JO1{deps;kvPromise;constructor($){this.deps=$}kv(){let $=this.deps.getConnection();if(!$||$.isClosed())throw new q1(503,{message:"Voice transport is unavailable"});return this.kvPromise??=new hX8.Kvm(L_0.jetstream($)).create("STUDIO_VOICE_SESSIONS",{storage:L_0.StorageType.Memory,ttl:uX8.nanos(kD),max_bytes:10485760}).catch((Z)=>{throw this.kvPromise=void 0,Z}),this.kvPromise}adapter(){if(!this.deps.adapter)throw new q1(503,{message:"Voice is not configured on this deployment"});return this.deps.adapter}async create($,Z=!1,Q="en",Y){let X;if(Z)try{X=yX8(this.deps.defaults,Y)}catch{throw new q1(503,{message:"Voice configuration is invalid"})}let J=X?this.deps.conversationAdapters[X.provider]:this.adapter();if(!J)throw new q1(503,{message:"Voice is not configured on this deployment"});let G={...$,sessionId:crypto.randomUUID(),expiresAt:Date.now()+kD},W=bX8(G,this.deps.secret),K=await this.kv(),H=mp(G),F=await K.get(H),U=F?.operation==="PUT"?O_0.parse(F.json()):null,N=XO1.encode(JSON.stringify({sessionId:G.sessionId,expiresAt:G.expiresAt,conversation:X,characters:0,requests:0}));try{if(F&&U&&U.expiresAt<=Date.now())await K.update(H,N,F.revision);else await K.create(H,N)}catch{throw new q1(409,{message:"Close your other voice session before starting a new one"})}try{if(X&&"createSession"in J){let O=await J.createSession({language:Q,model:X.model,safetyIdentifier:mp($)});return{token:W,...O,expiresAt:G.expiresAt}}let B=await this.adapter().createTranscriptionToken();return{token:W,transcriptionToken:B,expiresAt:G.expiresAt}}catch(B){throw await this.release(G),B}}authorize($,Z){let Q=xX8(Z,this.deps.secret);if(!Q||Q.organizationId!==$.organizationId||Q.userId!==$.userId||Q.threadId!==$.threadId)throw new q1(403,{message:"Invalid voice session"});return Q}async connect($,Z){let Q=this.authorize($,Z.token),Y=await this.kv(),X=mp(Q),J=await Y.get(X),G=J?.operation==="PUT"?O_0.parse(J.json()):null;if(!J||!G||G.sessionId!==Q.sessionId||G.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});let W=G.conversation?this.deps.conversationAdapters[G.conversation.provider]:null;if(!W?.negotiate||!G.conversation)throw new q1(409,{message:"Voice session does not support SDP negotiation"});if(G.connected)throw new q1(409,{message:"Voice session already connected"});try{await Y.update(X,XO1.encode(JSON.stringify({...G,connected:!0})),J.revision)}catch{throw new q1(409,{message:"Voice session is busy"})}return W.negotiate({sdp:Z.sdp,language:Z.language,model:G.conversation.model,safetyIdentifier:X})}async speak($,Z,Q,Y){let X=this.authorize($,Z),J=await this.kv(),G=mp(X);for(let W=0;;W++){let K=await J.get(G),H=K?.operation==="PUT"?O_0.parse(K.json()):null;if(!K||!H||H.sessionId!==X.sessionId||H.expiresAt<=Date.now())throw new q1(403,{message:"Voice session expired"});if(H.characters+Q.length>24000||H.requests>=120)throw new q1(429,{message:"Voice session speech limit reached"});try{await J.update(G,XO1.encode(JSON.stringify({...H,characters:H.characters+Q.length,requests:H.requests+1})),K.revision);break}catch{if(W>=2)throw new q1(409,{message:"Voice session is busy"})}}return this.adapter().synthesize(Q,Y)}async release($){let Z=await this.kv(),Q=await Z.get(mp($));if(Q?.operation==="PUT"&&O_0.parse(Q.json()).sessionId===$.sessionId)await Z.delete(mp($),{previousSeq:Q.revision})}async revoke($,Z){await this.release(this.authorize($,Z))}}var L_0,hX8,uX8,O_0,XO1;var lX8=D(()=>{EJ();yU();fX8();gX8();L_0=C(EK(),1),hX8=C(XA(),1),uX8=C(Rz(),1),O_0=cp.object({sessionId:cp.string().uuid(),expiresAt:cp.number(),connected:cp.boolean().optional(),conversation:YO1.optional(),characters:cp.number().int().nonnegative(),requests:cp.number().int().nonnegative()}),XO1=new TextEncoder});function Ur6($){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 Nr6=async($,Z)=>{if(!$.get("studioContext").auth.user?.id)return $.json({error:"Unauthorized"},401);return Z()},cX8=()=>{let $=new $1;return $.use("*",Nr6),$.get("/",async(Z)=>{let Q=j0(),Y=Q.decoSupabaseUrl,X=Q.decoSupabaseServiceKey;if(!Y||!X)return Z.json({apps:[]});try{let J=await JG(Y,X,"apps?select=name,title,description,logo,category,vendors(alias,url)");return Z.json({apps:Ur6(J)})}catch(J){return console.error("[deco-apps] GET error:",J),Z.json({error:"Failed to fetch apps"},502)}}),$};var mX8=D(()=>{J8();$$();ik0()});import{z as y1}from"zod";function zN($,Z="invalid_request_error",Q=null,Y=null){return{error:{message:$,type:Z,param:Q,code:Y}}}function Ar6($){if(!$)return null;let Z=$.indexOf(":");if(Z===-1)return{credentialId:null,modelId:$};let Q=$.substring(0,Z),Y=$.substring(Z+1);if(!Q||!Y)return null;return{credentialId:Q,modelId:Y}}function Tr6($,Z,Q){try{return JSON.parse($)}catch{throw new pX8(`Invalid JSON in tool call arguments for function '${Q}' (tool_call_id: ${Z}): ${$}`)}}function Rr6($){let Z={};for(let Q of $)if(Q.role==="assistant"&&Q.tool_calls)for(let Y of Q.tool_calls)Z[Y.id]=Y.function.name;return $.map((Q)=>{switch(Q.role){case"system":return{role:"system",content:Q.content};case"user":if(typeof Q.content==="string")return{role:"user",content:Q.content};return{role:"user",content:Q.content.map((X)=>{if(X.type==="text")return{type:"text",text:X.text};return{type:"image",image:X.image_url.url}})};case"assistant":if(Q.tool_calls&&Q.tool_calls.length>0)return{role:"assistant",content:Q.tool_calls.map((X)=>({type:"tool-call",toolCallId:X.id,toolName:X.function.name,input:Tr6(X.function.arguments,X.id,X.function.name)}))};return{role:"assistant",content:Q.content??""};case"tool":let Y=Z[Q.tool_call_id]??"unknown";return{role:"tool",content:[{type:"tool-result",toolCallId:Q.tool_call_id,toolName:Y,output:{type:"text",value:Q.content}}]}}})}function qr6($){let Z=$.map((Q)=>{let Y=Q.function.parameters?oF(Q.function.parameters):oF({type:"object",properties:{}});return[Q.function.name,n$({description:Q.function.description,inputSchema:Y})]});return Object.fromEntries(Z)}function Mr6($){if(!$)return;return{openai:{response_format:$}}}function Ir6(){return`chatcmpl-${crypto.randomUUID().replace(/-/g,"").substring(0,29)}`}function dX8($,Z,Q,Y,X,J){let G={model:$,instructions:Z.filter((W)=>W.role==="system"),messages:Z.filter((W)=>W.role!=="system"),tools:Q,temperature:Y.temperature,maxOutputTokens:Y.max_tokens,topP:Y.top_p,frequencyPenalty:Y.frequency_penalty,presencePenalty:Y.presence_penalty,stopSequences:Y.stop?Array.isArray(Y.stop)?Y.stop:[Y.stop]:void 0,abortSignal:J};return X?{...G,providerOptions:X}:G}function iX8($){if($==="tool-calls")return"tool_calls";if($==="length")return"length";return"stop"}var Br6=256,Dr6,Or6,Lr6,wr6,jr6,Er6,zr6,Pr6,pX8,nX8,tX8;var oX8=D(()=>{y4();J8();_p();xH();Dr6=y1.object({type:y1.literal("function"),function:y1.object({name:y1.string(),description:y1.string().optional(),parameters:y1.record(y1.string(),y1.unknown()).optional()})}),Or6=y1.object({id:y1.string(),type:y1.literal("function"),function:y1.object({name:y1.string(),arguments:y1.string()})}),Lr6=y1.discriminatedUnion("role",[y1.object({role:y1.literal("system"),content:y1.string(),name:y1.string().optional()}),y1.object({role:y1.literal("user"),content:y1.union([y1.string(),y1.array(y1.union([y1.object({type:y1.literal("text"),text:y1.string()}),y1.object({type:y1.literal("image_url"),image_url:y1.object({url:y1.string(),detail:y1.string().optional()})})]))]),name:y1.string().optional()}),y1.object({role:y1.literal("assistant"),content:y1.string().nullable().optional(),name:y1.string().optional(),tool_calls:y1.array(Or6).optional()}),y1.object({role:y1.literal("tool"),content:y1.string(),tool_call_id:y1.string()})]),wr6=y1.object({type:y1.literal("text")}),jr6=y1.object({type:y1.literal("json_object")}),Er6=y1.object({type:y1.literal("json_schema"),json_schema:y1.object({name:y1.string(),description:y1.string().optional(),schema:y1.record(y1.string(),y1.unknown()),strict:y1.boolean().optional()})}),zr6=y1.union([wr6,jr6,Er6]),Pr6=y1.object({model:y1.string().describe("Format: 'model_id' or 'credential_id:model_id'"),messages:y1.array(Lr6),stream:y1.boolean().optional().default(!1),temperature:y1.number().min(0).max(2).optional(),max_tokens:y1.number().positive().optional(),top_p:y1.number().min(0).max(1).optional(),frequency_penalty:y1.number().min(-2).max(2).optional(),presence_penalty:y1.number().min(-2).max(2).optional(),stop:y1.union([y1.string(),y1.array(y1.string())]).optional(),tools:y1.array(Dr6).optional(),tool_choice:y1.union([y1.literal("auto"),y1.literal("none"),y1.literal("required"),y1.object({type:y1.literal("function"),function:y1.object({name:y1.string()})})]).optional(),response_format:zr6.optional(),user:y1.string().optional()});pX8=class pX8 extends Error{constructor($){super($);this.name="MessageConversionError"}};nX8=new $1;nX8.post("/:org/v1/chat/completions",async($)=>{let Z=$.get("studioContext"),Q=$.req.param("org");try{if(!Z.auth.apiKey?.id)return $.json(zN("API key authentication required. Provide a valid API key via Authorization header.","authentication_error"),401);if(!Z.organization)return $.json(zN("Organization context is required. Ensure your API key has organization metadata.","invalid_request_error","organization"),400);if((Z.organization.slug??Z.organization.id)!==Q)return $.json(zN("Organization mismatch. The API key's organization does not match the requested organization.","invalid_request_error","organization"),403);let Y=await $.req.json(),X=Pr6.safeParse(Y);if(!X.success){let w=X.error.issues[0]??{message:"Invalid request",path:[]};return $.json(zN(`Invalid request: ${w.message}`,"invalid_request_error",w.path.length>0?w.path.join("."):null),400)}let J=X.data,G=Ar6(J.model);if(!G)return $.json(zN("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}=G,{modelId:K}=G;if(!W){let j=(await Z.storage.aiProviderKeys.list({organizationId:Z.organization.id})).find((E)=>EP(E.providerId));if(!j)return $.json(zN("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=j.id}let H;try{H=await Z.aiProviders.activate(W,Z.organization.id)}catch{return $.json(zN(`AI provider credential not found or inaccessible: ${W}`,"invalid_request_error","model"),404)}let F=H.aiSdk.languageModel(K),U=Rr6(J.messages),N=J.tools?qr6(J.tools):void 0,B=Mr6(J.response_format),O=Ir6(),L=Math.floor(Date.now()/1000);if(J.stream)return OO($,async(w)=>{let j=dX8(F,U,N,J,B,$.req.raw.signal);try{let E=Dd(j),z=!1,T=0,P="",A=async()=>{if(P.length===0)return;let q=P;P="",await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{content:q},finish_reason:null}]})})};for await(let q of E.stream){if(!z&&(q.type==="text-delta"||q.type==="tool-call"))await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{role:"assistant",content:""},finish_reason:null}]})}),z=!0;if(q.type==="text-delta"){if(P+=q.text,P.length>=Br6)await A()}else if(q.type==="tool-call"){await A();let f=T++;await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{tool_calls:[{index:f,id:q.toolCallId,type:"function",function:{name:q.toolName,arguments:JSON.stringify(q.input)}}]},finish_reason:null}]})})}else if(q.type==="finish")await A(),await w.writeSSE({data:JSON.stringify({id:O,object:"chat.completion.chunk",created:L,model:J.model,choices:[{index:0,delta:{},finish_reason:iX8(q.finishReason)}],usage:q.totalUsage?{prompt_tokens:q.totalUsage.inputTokens??0,completion_tokens:q.totalUsage.outputTokens??0,total_tokens:q.totalUsage.totalTokens??0}:void 0})})}await A(),await w.writeSSE({data:"[DONE]"})}catch(E){let z=E;console.error("[openai-compat:stream] Error:",z.message),await w.writeSSE({data:JSON.stringify({error:{message:z.message,type:"server_error"}})})}});else{let w=dX8(F,U,N,J,B,$.req.raw.signal),j=await hU(w),E={role:"assistant",content:j.text||null};if(j.toolCalls&&j.toolCalls.length>0)E.tool_calls=j.toolCalls.map((z)=>({id:z.toolCallId,type:"function",function:{name:z.toolName,arguments:JSON.stringify("input"in z?z.input:{})}})),E.content=null;return $.json({id:O,object:"chat.completion",created:L,model:J.model,choices:[{index:0,message:E,finish_reason:iX8(j.finishReason)}],usage:{prompt_tokens:j.usage?.inputTokens??0,completion_tokens:j.usage?.outputTokens??0,total_tokens:j.usage?.totalTokens??0}})}}catch(Y){let X=Y;if(X.name==="AbortError")return $.json(zN("Request aborted","invalid_request_error"),400);if(X.name==="MessageConversionError")return $.json(zN(X.message,"invalid_request_error","messages"),400);return console.error("[openai-compat] Error:",X.message,X.stack),$.json(zN(X.message,"server_error"),500)}});tX8=nX8});function Vr6($){if(typeof $!=="object"||$===null)return!1;let Q=$.repository?.url;return typeof Q==="string"&&Q.length>0}function rX8(){let $=new $1;return $.use("*",async(Z,Q)=>{await Q(),Z.header("Cache-Control","private, no-store"),Z.header("Vary","Cookie")}),$.get("/",async(Z)=>{let Q=Z.get("studioContext"),Y=c0(Q);if(!Y)return Z.json({error:"Authentication required"},401);let J=(Z.req.query("site")??"").trim().toLowerCase();if(!EZ(J))return Z.json({error:"Invalid site slug"},400);let G=await Q.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","=",Y).execute(),W=[];for(let H of G){if(!H.slug||C9(H))continue;let F=await Q.storage.virtualMcps.list(H.id);for(let U of F){if(LA(U)!==J)continue;if(!Vr6(U.metadata))continue;W.push({orgSlug:H.slug,orgName:H.name??H.slug,project:{id:U.id,title:U.title,icon:U.icon??null}})}}let K={matches:W};return Z.json(K)}),$}var sX8=D(()=>{J8();Z3()});var eX8;var aX8=D(()=>{eX8={name:"decocms",version:"4.452.0",description:"Deco CMS \u2014 Self-hostable MCP Gateway for managing AI connections and tools",author:"Deco team",repository:{type:"git",url:"git+https://github.com/decocms/studio.git",directory:"apps/api"},bugs:{url:"https://github.com/decocms/studio/issues"},type:"module",bin:{deco:"./dist/server/cli.js"},files:["dist/**/*"],scripts:{dev:"bun run migrate && bun run dev:server","dev:server":"bun run --cwd=../../packages/sandbox build && NODE_ENV=development bun --env-file=.env --hot run src/index.ts",build:"bun run build:server","build:server":"bun run scripts/bundle-server-script.ts --dist ./dist/server","generate:tool-contracts":"bun run scripts/generate-tool-contracts.ts","db:migrate":"bun run ./dist/server/migrate.js","db:migrate:dbos":"bun run ./dist/server/migrate-dbos.js",check:"tsc --noEmit",start:"bun run ./dist/server/server.js",migrate:"bun run src/database/migrate.ts","migrate:dbos":"bun run src/database/migrate-dbos.ts",test:"bun test src","better-auth:migrate":"bunx --bun @better-auth/cli migrate -y --config src/auth/index.ts",prepublishOnly:"bun run --cwd=../.. build:studio"},optionalDependencies:{"@duckdb/node-api":"^1.5.0-r.1"},dependencies:{"@ai-sdk/anthropic":"^4.0.58","@ai-sdk/google":"^4.0.76","@ai-sdk/openai":"^4.0.71","@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":"^3.1.0","@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":"^4.0.17","@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:"^7.0.107","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 Cr6(){let $=process.env.POSTHOG_KEY;if(!$)return null;return{key:$,host:process.env.POSTHOG_HOST??Sr6}}var $J8,Sr6="https://ph.studio.decocms.com",ZJ8;var QJ8=D(()=>{J8();Cs();cf();k9();$$();wN1();aX8();$J8=new $1;$J8.get("/",($)=>{let Z={version:eX8.version,theme:q5$(),...oK().logo&&{logo:oK().logo},...uD()&&{internalUrl:np1()},...j0().enableDecoImport&&{enableDecoImport:!0},brandExtractEnabled:!!j0().firecrawlApiKey,hostingEnabled:!!j0().controlplaneRestUrl&&!!j0().controlplaneServiceToken,hostingControlPlaneGa:j0().hostingControlPlaneGa,monitorEnabled:!!j0().clickhouseAnalyticsUrl&&!!j0().clickhouseAnalyticsPassword,monitorGa:j0().monitorGa,plansEnabled:j0().plansEnabled,auth:C68(),posthog:Cr6(),googleMapsApiKey:process.env.GOOGLE_MAPS_API_KEY?.trim()||null,runtime:{agentSandbox:IO()}};return $.header("Cache-Control","no-store"),$.json({success:!0,config:Z})});ZJ8=$J8});function Zg($){let Z=($??"").trim().toLowerCase();return Z=Z.replace(/^https?:\/\//,""),Z=Z.replace(/^www\./,""),Z=Z.split(/[/?#]/)[0]??"",Z.replace(/\/+$/,"")}function GO1($){return(Zg($).split(".")[0]||$).replace(/[-_]/g," ").split(" ").filter(Boolean).map((Q)=>Q.charAt(0).toUpperCase()+Q.slice(1)).join(" ")}function YJ8($,Z=64){return`https://www.google.com/s2/favicons?domain=${encodeURIComponent(Zg($))}&sz=${Z}`}function _r6($,Z){let Q=$.trim();if(Q.length<=Z)return Q;let Y=Q.slice(0,Z-1),X=Y.lastIndexOf(" ");return`${(X>Z*0.6?Y.slice(0,X):Y).trimEnd()}\u2026`}function XJ8($){let{brand:Z,domain:Q,score:Y}=$,X=typeof Y==="number"?`${Z} Deco Score \u2014 ${Math.round(Y)}/100 \xB7 decocms`:`${Z} Deco Score \xB7 decocms`,J=_r6(`How does ${Q} really perform? See the full ${Z} Deco Score \u2014 SEO, performance, conversion & AEO signals scored by decocms.`,200);return{title:X,description:J}}import{z as P$}from"zod";var vr6,JJ8;var GJ8=D(()=>{vr6=P$.object({check_id:P$.string(),title:P$.string(),description:P$.string().optional(),impact:P$.string().optional(),why:P$.string().optional(),category:P$.string(),severity:P$.string(),value_band:P$.string().optional(),value_driver:P$.string().optional(),controllability:P$.string().optional(),pages:P$.array(P$.string()),tasks:P$.array(P$.string()),evidence:P$.string(),sample_scope:P$.string().optional(),sources:P$.array(P$.string())}),JJ8=P$.object({domain:P$.string(),brand:P$.string(),favicon:P$.string().optional(),scanned_at:P$.string().nullable(),lang:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),totals:P$.object({measured:P$.number(),registry_total:P$.number(),passed:P$.number(),failed:P$.number(),blocked:P$.number()}),buckets:P$.array(P$.object({id:P$.enum(["critical","important","worth"]),label:P$.string(),items:P$.array(vr6)})),passing:P$.object({count:P$.number(),items:P$.array(P$.object({check_id:P$.string(),title:P$.string()}))}),not_measured:P$.object({count:P$.number(),groups:P$.array(P$.object({reason:P$.string(),label:P$.string(),count:P$.number(),checks:P$.array(P$.string())}))}),categories:P$.array(P$.object({key:P$.string(),label:P$.string(),score:P$.number().nullable(),band:P$.string().nullable(),pass:P$.number(),fail:P$.number()})),screenshots:P$.array(P$.object({url:P$.string(),page_type:P$.string().optional(),viewport:P$.enum(["desktop","mobile"]),image_url:P$.string()}))})});function WJ8($,Z,Q){let Y=Q?`?${new URLSearchParams({lang:Q}).toString()}`:"";return`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent($)}/onepager${Z}${Y}`}async function w_0($,Z={}){let Q=await fetch(WJ8($,"",Z.lang),{headers:{Accept:"application/json"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager read HTTP ${Q.status}`);return JJ8.parse(await Q.json())}async function KJ8($,Z={}){let Q=await fetch(WJ8($,".md",Z.lang),{headers:{Accept:"text/markdown"},signal:Z.signal});if(Q.status===404)return null;if(!Q.ok)throw Error(`onepager markdown HTTP ${Q.status}`);return Q.text()}var WO1=D(()=>{GJ8();tB()});import{join as HJ8}from"path";async function xr6($){try{let Z=await w_0($,{signal:AbortSignal.timeout(br6)});if(!Z?.scanned_at)return null;return{brand:Z.brand.trim()||GO1($),...Z.score!==null?{score:Z.score}:{}}}catch{return null}}function HG($){return $.replaceAll("&","&").replaceAll("<","<").replaceAll(">",">").replaceAll('"',""")}function fr6($,Z){let Q=Zg($),Y=Z?.brand?.trim()||GO1(Q),X=YJ8(Q,128),G=`${(j0().baseUrl??"https://studio.decocms.com").replace(/\/+$/,"")}/report/${encodeURIComponent(Q)}`,{title:W,description:K}=XJ8({brand:Y,domain:Q,score:Z?.score}),H=`${G}/og.png`,F=`${Y} Deco Score by decocms`;return[`<title>${HG(W)}</title>`,`<meta name="description" content="${HG(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="${HG(W)}" />`,`<meta property="og:description" content="${HG(K)}" />`,`<meta property="og:url" content="${HG(G)}" />`,`<meta property="og:image" content="${HG(H)}" />`,'<meta property="og:image:width" content="1200" />','<meta property="og:image:height" content="630" />',`<meta property="og:image:alt" content="${HG(F)}" />`,'<meta name="twitter:card" content="summary_large_image" />',`<meta name="twitter:title" content="${HG(W)}" />`,`<meta name="twitter:description" content="${HG(K)}" />`,`<meta name="twitter:image" content="${HG(H)}" />`,`<meta name="twitter:image:alt" content="${HG(F)}" />`,`<link rel="canonical" href="${HG(G)}" />`,`<link rel="alternate" type="text/markdown" href="${HG(G)}.md" />`,`<link rel="icon" href="${HG(X)}" sizes="any" />`].join(`
|
|
3723
3723
|
`)}function yr6($,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}
|
|
3724
3724
|
</head>`)}function FJ8($){let Z=new $1;return Z.get("/:domain/og.png",async(Q)=>{let Y=Zg(Q.req.param("domain")),X=async()=>{let J=$?Bun.file(HJ8($,"report-og-fallback.png")):null;if(!J||!await J.exists())return Q.notFound();return Q.body(new Uint8Array(await J.arrayBuffer()),200,{"Content-Type":"image/png","Cache-Control":"public, max-age=0, s-maxage=3600"})};try{let J=await fetch(`${qW({})}/api/v2/public/diagnostics/${encodeURIComponent(Y)}/og.png`,{signal:AbortSignal.timeout(gr6)}),G=J.headers.get("content-type")??"";if(!J.ok||!G.startsWith("image/")||!J.body)return X();return Q.body(J.body,200,{"Content-Type":G,"Cache-Control":"public, max-age=0, s-maxage=604800"})}catch{return X()}}),Z.get("/:file{.+\\.md}",async(Q)=>{let Y=Zg(Q.req.param("file").replace(/\.md$/,""));try{let X=await KJ8(Y,{lang:Q.req.query("lang")?.trim()||void 0,signal:AbortSignal.timeout(hr6)});if(X===null)return Q.text("Deco Score not found",404);return Q.body(X,200,{"Content-Type":"text/markdown; charset=utf-8","Cache-Control":"public, max-age=600, stale-while-revalidate=3600","Access-Control-Allow-Origin":"*"})}catch{return Q.text("Deco Score unavailable",502)}}),Z.get("/:domain",async(Q)=>{let Y=Q.req.param("domain"),X=$?HJ8($,"index.html"):null,J=X?Bun.file(X):null;if(!J||!await J.exists())return Q.notFound();let G=await J.text();try{let W=await xr6(Zg(Y)),K=fr6(Y,W);return Q.html(yr6(G,K),200,{"Cache-Control":"public, max-age=0, s-maxage=300"})}catch{return Q.html(G)}}),Z}var br6=2500,gr6=1e4,hr6=1e4;var UJ8=D(()=>{J8();tB();WO1();$$()});function j_0($,Z){return fetch(`${qW({})}${$}`,Z)}async function ur6($,Z){let Q=await w_0($,{lang:Z});if(!Q)return{status:"not_found",report:null};return Q.scanned_at?{status:"ready",report:Q}:{status:"empty",report:null}}function cr6($){let Z=typeof $==="object"&&$!==null?$:{},Q=typeof Z.domain==="string"?Z.domain.trim():"",Y=typeof Z.distinctId==="string"&&Z.distinctId.trim()&&Z.distinctId.length<=200?Z.distinctId.trim():void 0;return{domain:Q,distinctId:Y}}var lr6,wO,NJ8=async($,Z)=>{if(!$.get("reportUser"))return $.json({error:"Authentication required"},401);await Z();return},BJ8;var DJ8=D(()=>{J8();X3();tB();WO1();lr6=new Set(["complete","errored","terminated","unknown"]);wO=new $1;wO.use("*",async($,Z)=>{let Q=await x8.api.getSession({headers:$.req.raw.headers});$.set("reportUser",Q?.user?.id?{email:Q.user.email}:void 0),await Z(),$.header("Cache-Control","private, no-store"),$.header("Vary","Cookie");return});wO.use("/link-token/*",NJ8);wO.use("/suggest",NJ8);wO.get("/site/:domain",async($)=>{let Z=$.req.param("domain").trim();if(!Z)return $.json({error:"domain is required"},400);let Q=$.req.query("lang")?.trim()||void 0;try{return $.json(await ur6(Z,Q))}catch{return $.json({error:"report read failed"},502)}});wO.post("/run",async($)=>{let Z=$.get("reportUser"),Q;try{Q=await $.req.json()}catch{return $.json({error:"invalid JSON"},400)}let{domain:Y,distinctId:X}=cr6(Q);if(!Y)return $.json({error:"domain is required"},400);let J=Z?.email;try{let G=await j_0("/api/v2/diagnostics/run",{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${aw({})}`},body:JSON.stringify({url:Y,...J?{email:J}:{},distinct_id:X})});if(!G.ok)return $.json({error:`run HTTP ${G.status}`},502);let W=await G.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)}});wO.get("/status",async($)=>{let Z=$.req.query("id");if(!Z)return $.json({error:"id is required"},400);try{let Q=await j_0(`/api/v2/diagnostics/status?id=${encodeURIComponent(Z)}`,{headers:{Authorization:`Bearer ${aw({})}`}});if(!Q.ok)return $.json({error:`status HTTP ${Q.status}`},502);let X=(await Q.json()).status??"unknown",J={done:lr6.has(X),status:X};return $.json(J)}catch{return $.json({error:"status failed"},502)}});wO.get("/link-token/:id",async($)=>{let Z=$.req.param("id");try{let Q=await j_0(`/api/v2/public/link-tokens/${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(Q.status===404)return $.json(null);if(!Q.ok)return $.json({error:`link token HTTP ${Q.status}`},502);return $.json(await Q.json())}catch{return $.json({error:"link token resolve failed"},502)}});wO.get("/suggest",async($)=>{let Z=($.req.query("q")??"").trim().slice(0,64);if(Z.length<2)return $.json({suggestions:[]});try{let Q=await j_0(`/api/v2/public/suggest?q=${encodeURIComponent(Z)}`,{headers:{Accept:"application/json"}});if(!Q.ok)return $.json({suggestions:[]});let Y=await Q.json();return $.json({suggestions:Array.isArray(Y.suggestions)?Y.suggestions:[]})}catch{return $.json({suggestions:[]})}});BJ8=wO});var mr6=1048576,KO1;var OJ8=D(()=>{J8();JK();$$();QN1();KO1=new $1;KO1.post("/webhook",x5({maxSize:mr6,onError:($)=>$.json({error:"payload too large"},413)}),async($)=>{let Z=j0().stripeWebhookSecret;if(!Z)return $.json({error:"stripe billing not configured"},503);let Q=await $.req.text();if(!d48(Q,$.req.header("stripe-signature"),Z))return $.json({error:"invalid signature"},400);let X=i48(Q);if(!X)return $.json({error:"invalid payload"},400);let J=await p48(X);return console.log("stripe webhook",{eventId:X.id,type:X.type,livemode:X.livemode,...J}),$.json({received:!0})})});import{timingSafeEqual as dr6}from"crypto";function nr6($,Z,Q){if(!Z?.startsWith("sha256="))return!1;let Y=new Bun.CryptoHasher("sha256",Q).update($).digest("hex"),X=Z.slice(7);if(X.length!==Y.length)return!1;return dr6(Buffer.from(X),Buffer.from(Y))}function tr6($,Z){let Q=Z,Y=Q?.repository?.name,X=Q?.repository?.owner?.login;if(typeof Y!=="string"||typeof X!=="string")return[];let J=[];if($==="check_suite"){if(Q.action!=="completed")return[];let G=Q.check_suite?.pull_requests;for(let W of Array.isArray(G)?G:[]){let K=W?.number;if(typeof K==="number")J.push(K)}}else if($==="issue_comment"&&Q.issue?.pull_request){let G=Q.issue.number;if(typeof G==="number")J.push(G)}return[...new Set(J)].map((G)=>({repoOwner:X,repoName:Y,number:G}))}function LJ8($){let Z=new $1;return Z.post("/webhook",x5({maxSize:ir6,onError:(Q)=>Q.json({error:"payload too large"},413)}),async(Q)=>{let Y=process.env.GITHUB_WEBHOOK_SECRET;if(!Y)return Q.json({error:"github webhook not configured"},503);let X=await Q.req.text();if(!nr6(X,Q.req.header("x-hub-signature-256"),Y))return Q.json({error:"invalid signature"},400);let J=Q.req.header("x-github-event");if(J!=="push"&&!pr6.has(J??""))return Q.json({ok:!0,ignored:"event"});let G;try{G=JSON.parse(X)}catch{return Q.json({error:"invalid payload"},400)}if(J==="push"){let H=G.ref,F=G.repository?.full_name;if(!H||!F)return Q.json({ok:!0,ignored:"shape"});return y10().then((U)=>U?.markTenantPoolsDirty(`https://github.com/${F}`,H)).catch((U)=>console.warn(`[github-webhook] tenant pool refresh for ${F}@${H} failed: ${U instanceof Error?U.message:String(U)}`)),Q.json({ok:!0})}let W=tr6(J??"",G);if(W.length===0)return Q.json({ok:!0,ignored:"no-pr"});let K=await or6($,W);return Q.json({ok:!0,refreshed:K})}),Z}async function or6($,Z){let Q=0;for(let Y of Z){let X=$.taskBoard(),J;try{J=await X.findPrLinks(Y)}catch(G){console.error("[github-webhook] pr link lookup failed:",G);continue}for(let G of J)try{let W=await X.getById(G.taskBoardItemId,G.organizationId),K=W?await $.contextFactory()(G.organizationId,W.assignedBy??W.createdBy):null;if(!K)continue;if(await Ox$(K,G.organizationId,G.taskBoardItemId)!==null)Q++}catch(W){console.error(`[github-webhook] pr card refresh failed for ${G.taskBoardItemId}:`,W)}}return Q}var ir6=5242880,pr6;var wJ8=D(()=>{J8();JK();uW();x7();pr6=new Set(["check_suite","issue_comment"])});import{DBOS as FO1,SchedulerMode as rr6}from"@dbos-inc/dbos-sdk";async function ar6(){try{return await er6()}catch($){return console.warn(`[sandbox-credential-push] push failed: ${$ instanceof Error?$.message:String($)}`),null}}async function er6(){if(!f10())return null;let[{RemoteSandboxProvider:$},{SandboxProviderRouter:Z}]=await Promise.all([Promise.resolve().then(() => (l91(),u91)),Promise.resolve().then(() => (h91(),g91))]),Q=await y10(),Y=Q instanceof Z?Q.providers.kubernetes:Q;if(!(Y instanceof $))return null;let{db:X}=O8(),{sandboxes:J,pools:G}=await Y.list(),W=Date.now(),K=IT$({sandboxes:J,pools:G,records:await VT$(X,J,G),legacyPools:wT0(process.env.STUDIO_SANDBOX_TENANT_POOLS),now:W}),{batches:H,failed:F}=await kT$(K,gH0(X,new OX(j0().encryptionKey)),{now:W,orgFsLifetimeMs:zT0}),U=0,N=0,B=0;for(let O of H)try{let L=await Y.pushCredentials(O);U+=L.stored,N+=L.kept}catch(L){B++,console.warn(`[sandbox-credential-push] a push batch failed: ${L instanceof Error?L.message:String(L)}`)}return{sandboxes:J.length,pushed:U,kept:N,refused:K.refused,failed:F+B}}async function $s6($,Z){let Q=await FO1.runStep(ar6,{name:"pushSandboxCredentials"});if(Q&&(Q.refused>0||Q.failed>0))console.warn(`[sandbox-credential-push] ${Q.sandboxes} sandboxes: pushed ${Q.pushed}, kept ${Q.kept}, refused ${Q.refused}, failed ${Q.failed}`)}function jJ8(){if(HO1)return;if(!j0().agentSandboxEnabled||!f10())return;HO1=FO1.registerWorkflow($s6,{name:"sandboxCredentialPushWorkflow"}),FO1.registerScheduled(HO1,{name:"sandboxCredentialPushWorkflow",crontab:sr6,mode:rr6.ExactlyOncePerIntervalWhenActive})}var sr6="1-59/10 * * * *",HO1=null;var EJ8=D(()=>{vG();DL();k41();PT0();jT0();uW();$$()});function zJ8($){let Z=new XO($.db,new OX($.encryptionKey)),Q=new $1;return Q.get("/attachments/:token",async(Y)=>{let X=Tv$(Y.req.param("token"));if(!X)return Y.json({error:"Invalid or expired link"},404);let J=await Z.getByOrg(X.organizationId);if(!J)return Y.json({error:"Jira is not connected"},404);let W=await new dQ(J.siteUrl,J.email,J.apiToken).downloadAttachment(X.attachmentId);if(!W.ok||!W.body)return Y.json({error:"Jira refused the download"},502);let K=new Headers;for(let H of["content-type","content-length","content-disposition"]){let F=W.headers.get(H);if(F)K.set(H,F)}return K.set("cache-control","no-store"),new Response(W.body,{status:200,headers:K})}),Q}var PJ8=D(()=>{J8();DL();ZQ1();UE();Y60()});import{DBOS as Jz,SchedulerMode as Zs6}from"@dbos-inc/dbos-sdk";function AJ8($){NO1=$}function DO1(){if(!NO1)throw Error("[jira-trigger] runtime not initialized \u2014 setJiraTriggerSweepRuntime() must run before the workflow fires");return NO1}function OO1(){let $=DO1();return new XO($.db,new OX($.encryptionKey))}async function Gs6($){try{let Z=await OO1().getById($);if(!Z?.enabled||!Z.boardId)return{integrationId:$,started:0};let Q=await SH(DO1().db,Z.organizationId);if(!Q)return{integrationId:$,started:0};if((await Q.storage.jiraIntegrations.listAutomations(Z.organizationId)).length===0)return{integrationId:$,started:0};let X=new dQ(Z.siteUrl,Z.email,Z.apiToken),G=`(${await X.getBoardScopeJql(Z.boardId)}) AND status CHANGED AFTER "-${Ys6}m"`,W=0,K;for(let H=0;H<Xs6;H++){let F=await X.searchIssues({jql:G,nextPageToken:K});for(let U of F.issues)if(await UF1(Q,Z,{issueId:U.id,now:Date.now()})==="started")W++;if(K=F.nextPageToken??void 0,!K)break}return{integrationId:$,started:W}}catch(Z){return{integrationId:$,started:0,error:Z instanceof Error?Z.message:String(Z)}}}async function Ws6($,Z){let Q=await Jz.runStep(()=>OO1().listEnabledIds(),{name:"loadJiraIntegrations"});if(Q.length===0)return;let Y=await Promise.all(Q.map((X)=>Jz.runStep(()=>Gs6(X),{name:`sweepJira:${X}`})));for(let X of Y)if(X.error)console.warn(`[jira-trigger] integration ${X.integrationId} failed: ${X.error}`);else if(X.started>0)console.log(`[jira-trigger] integration ${X.integrationId} started ${X.started} run(s) the webhook missed`)}async function Ks6($,Z){try{let Q=await OO1().getById($);if(!Q?.enabled)return"disabled";let Y=await SH(DO1().db,Q.organizationId);if(!Y)return"disabled";let X=await UF1(Y,Q,{issueId:Z.issueId,changelogId:Z.changelogId});if(X==="started")console.log(`[jira-trigger] started a run for ${Z.issueKey} after it settled`);else if(X==="returned")console.log(`[jira-trigger] ${Z.issueKey} went back where it was before settling in "${Z.toStatus}"; no run`);return X}catch(Q){return console.error(`[jira-trigger] settling ${Z.issueKey} failed`,Q instanceof Error?Q.message:Q),"error"}}async function Hs6($,Z){await Jz.sleep(tk0()+Js6),await Jz.runStep(()=>Ks6($,Z),{name:"settleJiraMove"})}async function TJ8($,Z){if(!BO1)throw Error("[jira-trigger] settle workflow is not registered");await Jz.startWorkflow(BO1,{workflowID:`jira-settle:${$}:${Z.changelogId}`})($,Z)}function RJ8(){if(UO1)return;BO1=Jz.registerWorkflow(Hs6,{name:"jiraSettleWorkflow"}),UO1=Jz.registerWorkflow(Ws6,{name:"jiraTriggerSweepWorkflow"}),Jz.registerScheduled(UO1,{name:"jiraTriggerSweepWorkflow",crontab:Qs6,mode:Zs6.ExactlyOncePerIntervalWhenActive})}var Qs6="7-59/10 * * * *",Ys6=35,Xs6=5,Js6=5000,NO1=null,BO1=null,UO1=null;var LO1=D(()=>{DL();Y60();_d();UE();HF1();ok0()});function qJ8($){let Z=new XO($.db,new OX($.encryptionKey));async function Q(X,J){let G=N08(J);if(!G)return;let W=await Z.getByWebhookSecret(X);if(!W?.enabled)return;if((await Z.listAutomations(W.organizationId)).length===0)return;await TJ8(W.id,G)}let Y=new $1;return Y.post("/webhook/:secret",x5({maxSize:Fs6}),async(X)=>{let J=X.req.param("secret");if(!await Z.getByWebhookSecret(J))return X.json({error:"Unknown webhook"},404);let W;try{W=await X.req.json()}catch{return X.json({error:"Body must be JSON"},400)}return Q(J,W).catch((K)=>{console.error("[jira-webhook] trigger failed",K)}),X.body(null,202)}),Y}var Fs6=1048576;var MJ8=D(()=>{J8();JK();DL();LO1();ok0();Y60()});function IJ8($,Z){if(Z.startsWith("text/html")||Z.startsWith("image/svg"))$.set("Content-Security-Policy","sandbox allow-scripts allow-modals allow-same-origin")}var VJ8,Us6,Ns6,kJ8;var SJ8=D(()=>{J8();EJ();ud();ac();VJ8=new $1,Us6=["range","if-none-match","if-modified-since"],Ns6=["content-type","content-length","content-range","accept-ranges","etag","last-modified"];VJ8.get("/:org/files/*",async($)=>{let Z=$.get("studioContext"),Q=Z.organization?.id;if(!Z.auth?.user?.id){if(Hp($))return $.redirect(`/login?next=${encodeURIComponent($.req.path)}`,302);throw new q1(401,{message:"Authentication required"})}if(!Q)throw new q1(401,{message:"Organization context required"});let Y=$.req.path.replace(/^.*\/files\//,"");if(!Y)throw new q1(400,{message:"Missing file key"});let X=await N80(Y,Z);if(!X)throw new q1(503,{message:"Object storage not configured"});if(X.startsWith("data:")&&VW()){let K=X.match(/^data:([^;]+);base64,(.+)$/s);if(!K)throw new q1(500,{message:"Invalid data URL from storage"});let[,H,F]=K,U=Buffer.from(F,"base64"),N=new Headers({"Content-Type":H,"Cache-Control":"private, max-age=86400"});return IJ8(N,H),new Response(U,{status:200,headers:N})}let J=new Headers;for(let K of Us6){let H=$.req.header(K);if(H)J.set(K,H)}let G=await fetch(X,{headers:J});if(G.status===403||G.status===404)throw new q1(404,{message:"File not found"});if(!G.ok&&G.status!==304&&G.status!==416)throw console.error(`[files] upstream storage error ${G.status} for key:`,Y),new q1(502,{message:"Upstream storage error"});let W=new Headers;for(let K of Ns6){let H=G.headers.get(K);if(H)W.set(K,H)}return W.set("Cache-Control","private, max-age=86400"),IJ8(W,W.get("content-type")??""),new Response(G.body,{status:G.status,headers:W})});kJ8=VJ8});var Q50=b((Qg)=>{var Bs6=Qg&&Qg.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),Ds6=Qg&&Qg.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Bs6(Z,$,Q)};Object.defineProperty(Qg,"__esModule",{value:!0});Ds6(jG(),Qg)});var vJ8=b((CJ8)=>{Object.defineProperty(CJ8,"__esModule",{value:!0});CJ8.version=void 0;CJ8.version="3.4.0"});var fJ8=b((PN)=>{var Os6=PN&&PN.__importDefault||function($){return $&&$.__esModule?$:{default:$}};Object.defineProperty(PN,"__esModule",{value:!0});PN.NodeTransport=PN.VERSION=void 0;PN.nodeResolveHost=Ps6;var a5=Q50(),Ls6=M0("net"),wO1=M0("tls"),ws6=M0("path"),bJ8=M0("fs"),js6=Os6(M0("dns")),Es6=vJ8();PN.VERSION=Es6.version;var zs6="nats.js";class xJ8{socket;version;lang;yields=[];signal=(0,a5.deferred)();closedNotification=(0,a5.deferred)();options;connected=!1;tlsName="";done=!1;closeError;constructor(){this.lang=zs6,this.version=PN.VERSION}async connect($,Z){this.tlsName=$.tlsName,this.options=Z;let{tls:Q}=this.options,{handshakeFirst:Y}=Q||{};try{if(Y===!0)this.socket=await this.tlsFirst($);else this.socket=await this.dial($);if(this.done)this.socket?.destroy();let X=await this.peekInfo();(0,a5.checkOptions)(X,Z);let{tls_required:J,tls_available:G}=X,W=G===!0&&Z.tls!==null;if(!Y&&(J||W))this.socket=await this.startTLS();if(this.done)this.socket?.destroy();if(J&&this.socket.encrypted!==!0)throw a5.errors.InvalidArgumentError.format("tls","is not available on this server");return this.connected=!0,this.setupHandlers(),this.signal.resolve(),Promise.resolve()}catch(X){let J=X;if(!J)J=new a5.errors.ConnectionError("error connecting - node provided an undefined error");let{code:G}=J,W=G==="ECONNREFUSED"?new a5.errors.ConnectionError("connection refused",{cause:J}):J;throw this.socket?.destroy(),W}}dial($){let Z=(0,a5.deferred)(),Q,Y=(0,Ls6.createConnection)($.port,$.hostname,()=>{Z.resolve(Y),Y.removeAllListeners()});return Y.on("error",(X)=>{Q=X}),Y.on("close",()=>{Y.removeAllListeners(),Z.reject(Q)}),Y.setNoDelay(!0),Z}get isClosed(){return this.done}close($){return this._closed($,!1)}peekInfo(){let $=(0,a5.deferred)(),Z;return this.socket.on("data",(Q)=>{this.yields.push(Q);let Y=a5.DataBuffer.concat(...this.yields),X=(0,a5.extractProtocolMessage)(Y);if(X!=="")try{let J=a5.INFO.exec(X);if(!J)throw Error("unexpected response from server");let G=JSON.parse(J[1]);$.resolve(G)}catch(J){$.reject(J)}finally{this.socket.removeAllListeners()}}),this.socket.on("error",(Q)=>{Z=Q}),this.socket.on("close",()=>{this.socket.removeAllListeners(),$.reject(Z)}),$}loadFile($){if(!$)return Promise.resolve();let Z=(0,a5.deferred)();try{if($=(0,ws6.resolve)($),!(0,bJ8.existsSync)($))Z.reject(Error(`${$} doesn't exist`));(0,bJ8.readFile)($,(Q,Y)=>{if(Q)return Z.reject(Q);Z.resolve(Y)})}catch(Q){Z.reject(Q)}return Z}async loadClientCerts(){let $={},{certFile:Z,cert:Q,caFile:Y,ca:X,keyFile:J,key:G}=this.options.tls;try{if(Z){let W=await this.loadFile(Z);if(W)$.cert=W}else if(Q)$.cert=Q;if(J){let W=await this.loadFile(J);if(W)$.key=W}else if(G)$.key=G;if(Y){let W=await this.loadFile(Y);if(W)$.ca=[W]}else if(X)$.ca=X;return Promise.resolve($)}catch(W){return Promise.reject(W)}}async tlsFirst($){let Z,Q={servername:this.tlsName,rejectUnauthorized:!0};if(this.socket)Q.socket=this.socket;if(typeof this.options.tls==="object")try{let X=await this.loadClientCerts()||{};Q=(0,a5.extend)(Q,this.options.tls,X)}catch(X){return Promise.reject(new a5.errors.ConnectionError(X.message,{cause:X}))}let Y=(0,a5.deferred)();try{let X=(0,wO1.connect)($.port,$.hostname,Q,()=>{X.removeAllListeners(),Y.resolve(X)});X.on("error",(J)=>{Z=J}),X.on("secureConnect",()=>{if(Q.rejectUnauthorized===!1)return;if(!X.authorized)throw X.authorizationError}),X.on("close",()=>{Y.reject(Z),X.removeAllListeners()}),X.setNoDelay(!0)}catch(X){Y.reject(new a5.errors.ConnectionError(X.message,{cause:X}))}return Y}async startTLS(){let $,Z={socket:this.socket,servername:this.tlsName,rejectUnauthorized:!0};if(typeof this.options.tls==="object")try{let Y=await this.loadClientCerts()||{};Z=(0,a5.extend)(Z,this.options.tls,Y)}catch(Y){return Promise.reject(new a5.errors.ConnectionError(Y.message,{cause:Y}))}let Q=(0,a5.deferred)();try{let Y=(0,wO1.connect)(Z,()=>{Y.removeAllListeners(),Q.resolve(Y)});Y.on("error",(X)=>{$=X}),Y.on("secureConnect",()=>{if(Z.rejectUnauthorized===!1)return;if(!Y.authorized)throw Y.authorizationError}),Y.on("close",()=>{Q.reject($),Y.removeAllListeners()})}catch(Y){Q.reject(new a5.errors.ConnectionError(Y.message,{cause:Y}))}return Q}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,a5.render)($[Z])}`);yield $[Z]}if(this.done)break;else if(this.yields.length===0)$.length=0,this.yields=$,this.signal=(0,a5.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 wO1.TLSSocket}_send($){if(this.isClosed||this.socket===void 0)return Promise.resolve();if(this.options.debug)console.info(`< ${(0,a5.render)($)}`);let Z=(0,a5.deferred)();try{this.socket.write($,(Q)=>{if(Q){if(this.options.debug)console.error(`!!! ${(0,a5.render)($)}: ${Q}`);return Z.reject(Q)}return Z.resolve()})}catch(Q){if(this.options.debug)console.error(`!!! ${(0,a5.render)($)}: ${Q}`);Z.reject(Q)}return Z}send($){this._send($).catch((Q)=>{})}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(Q){if(this.options.debug)console.log("transport close terminated with an error",Q)}try{if(this.socket)this.socket.removeAllListeners(),this.socket?.destroy(),this.socket=void 0}catch(Q){console.log(Q)}this.done=!0,this.closedNotification.resolve(this.closeError)}closed(){return this.closedNotification}}PN.NodeTransport=xJ8;function Ps6($){let Z=(0,a5.deferred)();return js6.default.lookup($,{all:!0},(Q,Y)=>{if(Q){Z.reject(Q);return}let X=[];for(let J of Y)X.push(J.address);if(X.length===0)X.push($);Z.resolve(X)}),Z}});var lJ8=b((uJ8)=>{Object.defineProperty(uJ8,"__esModule",{value:!0});uJ8.connect=As6;var yJ8=fJ8(),gJ8=Q50(),hJ8=Q50();function As6($={}){if((0,hJ8.hasWsProtocol)($))return Promise.reject(hJ8.errors.InvalidArgumentError.format("servers","node client doesn't support websockets, use the 'wsconnect' function instead"));return(0,gJ8.setTransportFactory)({factory:()=>{return new yJ8.NodeTransport},dnsResolveFn:yJ8.nodeResolveHost}),gJ8.NatsConnectionImpl.connect($)}});var cJ8=b((jO)=>{var Rs6=jO&&jO.__createBinding||(Object.create?function($,Z,Q,Y){if(Y===void 0)Y=Q;var X=Object.getOwnPropertyDescriptor(Z,Q);if(!X||("get"in X?!Z.__esModule:X.writable||X.configurable))X={enumerable:!0,get:function(){return Z[Q]}};Object.defineProperty($,Y,X)}:function($,Z,Q,Y){if(Y===void 0)Y=Q;$[Y]=Z[Q]}),qs6=jO&&jO.__exportStar||function($,Z){for(var Q in $)if(Q!=="default"&&!Object.prototype.hasOwnProperty.call(Z,Q))Rs6(Z,$,Q)};Object.defineProperty(jO,"__esModule",{value:!0});jO.connect=void 0;var Ms6=lJ8();Object.defineProperty(jO,"connect",{enumerable:!0,get:function(){return Ms6.connect}});qs6(Q50(),jO)});function pJ8($){let Z=$?.connectFn??Ss6,Q=null,Y=null,X=!1,J=!1,G=!1,W=[];function K(){return Q!==null&&!Q.isClosed()&&!Q.isDraining()&&!G}function H(){console.log(`[NatsProvider] fireReady: ${W.length} callbacks`);for(let N of W)try{N()}catch{}}function F(N){(async()=>{for await(let B of N.status())if(B.type==="disconnect")console.log("[NatsProvider] Disconnected"),G=!0;else if(B.type==="reconnect")console.log("[NatsProvider] Reconnected, re-firing ready callbacks"),G=!1,Y=null,H()})().catch(()=>{})}async function U(N,B){let O=0;while(!J)try{Q=await Z({servers:N,timeout:ks6,reconnect:!0,maxReconnectAttempts:-1,...B?{authenticator:B}:{}}),console.log(`[NatsProvider] Connected to ${Q.getServer()} after ${O} attempt(s)`),Y=null,G=!1,F(Q),H();return}catch{O++;let L=D7(Vs6,Is6,O-1,2,0.5);await L$(L)}}return{init(N,B){if(X)return;X=!0,J=!1;let O=B?.creds?mJ8.credsAuthenticator(new TextEncoder().encode(B.creds)):void 0;U(N,O).catch(()=>{})},isConnected(){return K()},getConnection(){return K()?Q:null},getJetStream(){if(!K())return null;if(!Y)Y=iJ8.jetstream(Q);return Y},onReady(N){if(W.push(N),K())try{N()}catch{}},async drain(){if(J=!0,X=!1,Y=null,G=!1,Q){let N=Q;Q=null,await N.drain().catch(()=>{})}}}}function Ss6($){return dJ8.connect($)}var mJ8,dJ8,iJ8,Is6=100,Vs6=3000,ks6=3000;var nJ8=D(()=>{r$();mJ8=C(Rz(),1),dJ8=C(cJ8(),1),iJ8=C(EK(),1)});function E_0($){let Z=$?.ttlMs??60000,Q=$?.maxSize??1e4,Y=$?.updateRecencyOnGet??!1,X=new Map;function J(){if(X.size<=Q)return;let G=Date.now();for(let[W,K]of X)if(K.expiresAt<=G)X.delete(W);while(X.size>Q){let W=X.keys().next().value;if(W===void 0)break;X.delete(W)}}return{get(G){let W=X.get(G);if(!W)return;if(W.expiresAt<=Date.now()){X.delete(G);return}if(Y)X.delete(G),X.set(G,W);return W.value},set(G,W){X.delete(G),X.set(G,{value:W,expiresAt:Date.now()+Z}),J()},delete(G){X.delete(G)},clear(){X.clear()},size(){return X.size}}}function z_0($,Z){return`${$}.${Z}`}class jO1{cache;constructor($){this.cache=E_0({ttlMs:$?.ttlMs??Cs6,maxSize:$?.maxSize??_s6})}async get($,Z){return this.cache.get(z_0($,Z))??null}async set($,Z,Q){this.cache.set(z_0($,Z),Q)}async invalidate($,Z){this.cache.delete(z_0($,Z)),this.cache.delete(z_0($,`${Z}:decisions`))}teardown(){this.cache.clear()}}var Cs6=600000,_s6=5000;var tJ8=()=>{};function P_0($,Z){return`${$}:${Z}`}function EO1($){let Z=E_0({ttlMs:$?.ttlMs??vs6,maxSize:$?.maxSize??bs6}),Q=$?.getConnection,Y=crypto.randomUUID(),X=new TextEncoder,J=new TextDecoder,G=null;function W(K,H){let F=Q?.();if(!F)return;try{F.publish(oJ8,X.encode(JSON.stringify({organizationId:K,keyId:H,originId:Y})))}catch(U){console.warn("[ProviderKeyCache] Publish failed (non-critical):",U)}}return{get(K,H){return Z.get(P_0(K,H))},set(K,H,F){Z.set(P_0(K,H),F)},invalidate(K,H){Z.delete(P_0(K,H)),W(K,H)},start(){if(G)return;let K=Q?.();if(!K)return;G=K.subscribe(oJ8),(async()=>{for await(let H of G)try{let F=JSON.parse(J.decode(H.data));if(F.originId===Y)continue;Z.delete(P_0(F.organizationId,F.keyId))}catch{}})().catch(console.error)},teardown(){G?.unsubscribe(),G=null,Z.clear()}}}var oJ8="studio.ai-provider-keys.invalidate",vs6=30000,bs6=5000;var rJ8=()=>{};class zO1{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 Q=new TextDecoder,Y=Z.subscribe("studio.decopilot.cancel");this.subscription=Y,(async()=>{for await(let X of Y)try{let J=JSON.parse(Q.decode(X.data));if(J.originId===this.originId)continue;this.onCancel?.(J.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 Q=this.encoder.encode(JSON.stringify({taskId:$,originId:this.originId}));Z.publish("studio.decopilot.cancel",Q)}catch(Z){console.warn("[NatsCancelBroadcast] Publish failed (non-critical):",Z)}}async stop(){this.subscription?.unsubscribe(),this.subscription=null,this.onCancel=null}}var sJ8=($)=>{let Z;return()=>Z??=$()},PO1,AO1;var aJ8=D(()=>{S6();PO1=sJ8(()=>Z$.createHistogram("decopilot.stream.encode_ms",{description:"Per-chunk JSON.stringify+encode time for decopilot stream",unit:"ms"})),AO1=sJ8(()=>Z$.createCounter("decopilot.stream.published_chunks",{description:"Logical decopilot stream chunks published to JetStream",unit:"{chunks}"}))});function ls6($=ZG8){return{name:oU,subjects:[`${NX1}.>`],storage:oH.StorageType.File,max_age:ys6,max_bytes:hs6,max_msgs_per_subject:us6,discard:oH.DiscardPolicy.Old,retention:oH.RetentionPolicy.Limits,duplicate_window:gs6,num_replicas:$}}class QG8{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 eJ8($){let Z=$G8.headers();for(let[Q,Y]of Object.entries($))Z.set(Q,Y);return Z}function is6($,Z){let Q=0;return{publish(Y,X,J,G){Y.publish(X,J,G?{headers:G}:void 0).catch((W)=>{if(Q++,fs6().add(1,{"org.id":Z??"unknown"}),Q===1||Q%100===0)console.warn(`[Decopilot] JetStream publish failed for thread ${$} (${Q} total):`,W)})},get errorCount(){return Q}}}function ps6($,Z){return $.info?.cluster?Z:1}function ns6($){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 TO1{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(Y,X)=>{let J=ls6(X);try{await Y.streams.info(oU),await Y.streams.update(oU,J)}catch(G){if(G instanceof Error&&G.message.includes("stream not found"))await Y.streams.add(J),await Y.streams.update(oU,J);else if(G instanceof Error&&/can ?not change.*storage|storage type/i.test(G.message))await Y.streams.delete(oU),await Y.streams.add(J);else throw G}},Q=await E8(async()=>{let Y=this.options.getJetStreamManager?await this.options.getJetStreamManager():await oH.jetstreamManager($),X=ps6($,ZG8);try{await Z(Y,X)}catch(J){if(X<=1||!ns6(J))throw J;console.warn(`[Decopilot] StreamBuffer: NATS rejected num_replicas=${X} (${J.message}); falling back to an unreplicated stream`),await Z(Y,1)}return Y},{maxAttempts:5,minTimeout:250,maxTimeout:4000,jitter:0.5,isRetriable:td});this.js=this.options.getJetStream(),this.jsm=Q,console.log(`[Decopilot] StreamBuffer.init ${this.js?"ready":"degraded (js=null)"}`)}pump($,Z,Q,Y){let X=this.js;if(!X)return console.warn(`[Decopilot] pump: JetStream client unavailable for thread ${Z}; chunks NOT published to NATS`),Promise.resolve();let J=is6(Z,Y),G=!1,W=()=>{if(G)return;G=!0;let H=Zg$(Z);X.publish(H.subject,H.data).catch(()=>{})};Q.addEventListener("abort",W,{once:!0});let K=(H)=>{let F=performance.now(),U=DX1(H,{runId:Z}),N=performance.now()-F;PO1().record(N),AO1().add(1,{"org.id":Y??"unknown"}),ds6?.record(N,U.reduce((B,O)=>B+O.data.length,0));for(let B of U)J.publish(X,B.subject,B.data,B.headers?eJ8(B.headers):void 0)};return(async()=>{let H=$.getReader(),F=0,U=0,N;try{while(!0){let{done:B,value:O}=await H.read();if(B)break;if(K(O),U++,++F>=64)F=0,await new Promise((L)=>setImmediate(L))}}catch(B){N=B,console.warn(`[Decopilot] stream pump error for thread ${Z}:`,B?.message??B)}finally{if(H.releaseLock(),W(),ms6)console.warn(JSON.stringify({msg:"decopilot-stream-diag",event:"pump-done",taskId:Z,publishedChunks:U,publishErrors:J.errorCount}))}if(N!==void 0)throw N})()}async publishSerialized($,Z){try{return await E8(()=>$.publish(Z.subject,Z.data,{...Z.headers?{headers:eJ8(Z.headers)}:{},...Z.msgId?{msgID:Z.msgId}:{}}),{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:td}),!0}catch(Q){return console.error(`[Decopilot] publish failed after retries subject=${Z.subject}`,Q),!1}}async publishRawChunk($,Z,Q){let Y=this.js;if(!Y)return!1;let X=performance.now(),J=DX1(Z,{runId:$,dedup:Q});PO1().record(performance.now()-X),AO1().add(1);for(let G of J)if(!await this.publishSerialized(Y,G))return!1;return!0}async publishDone($,Z,Q){let Y=this.js;if(!Y)return!1;let X=$g$({runId:$,fenceToken:Z,finalSeq:Q});return await this.publishSerialized(Y,X)}async createTailStream($,Z,Q){let Y=this.js;if(!Y)return console.warn(`[Decopilot] createTailStream: JetStream client unavailable for thread ${$}; no live tail`),null;let X=Q?.deliverPolicy==="new"?oH.DeliverPolicy.New:oH.DeliverPolicy.All,J=Q?.closeOnDone??!1,G=EE($),W;try{W=await E8(async()=>{return(await Y.consumers.get(oU,{filter_subjects:G,deliver_policy:X})).consume()},{maxAttempts:6,minTimeout:250,maxTimeout:5000,jitter:0.5,isRetriable:td})}catch(L){return console.warn("[Decopilot] JetStream tail unavailable (non-critical):",L?.message??L),null}let F=jM0({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(DM0()).pipeThrough(OM0()).getReader(),U=!1,N=()=>{if(U)return;U=!0;try{F.releaseLock()}catch{}},B=!1,O=()=>{if(B)return;B=!0,W.stop(),F.cancel().catch(()=>{}),N()};return Z?.addEventListener("abort",O,{once:!0}),new ReadableStream({async pull(L){for(;;){let{done:w,value:j}=await F.read();if(w){O(),L.close();return}let E=j;if(E.kind==="done"){if(J){O(),L.close();return}continue}L.enqueue(E.chunk);return}},cancel(){O()}})}purge($){if(!this.jsm)return;this.jsm.streams.purge(oU,{filter:EE($)}).catch(()=>{})}teardown(){this.js=null,this.jsm=null}}var oH,$G8,xs6=($)=>{let Z;return()=>Z??=$()},fs6,ys6=86400000000000,gs6=120000000000,hs6=4294967296,ZG8,us6=500000,cs6,ms6,ds6;var YG8=D(()=>{r$();OX1();EM0();LM0();S6();aJ8();oH=C(EK(),1),$G8=C(Rz(),1),fs6=xs6(()=>Z$.createCounter("decopilot.stream.publish_errors",{description:"Number of JetStream publish failures for decopilot stream chunks",unit:"{errors}"})),ZG8=Math.max(1,Number(process.env.DECOPILOT_STREAM_REPLICAS??3)||3);cs6=process.env.STREAM_ENCODE_TRACE==="1",ms6=process.env.DECOPILOT_STREAM_TRACE==="1";ds6=cs6?new QG8:null});function A_0($,Z,Q,Y){if(!Y)return!1;return $.emit(Z,wF(Q,Y.status,{title:Y.title??void 0,virtualMcpId:Y.virtual_mcp_id??void 0,createdBy:Y.created_by??void 0,triggerId:Y.trigger_id??null,branch:Y.branch??null,harnessId:Y.harness_id??void 0,createdAt:Y.created_at,updatedAt:Y.updated_at})),!0}var XG8=D(()=>{p8()});class RO1{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}}function ts6($,Z,Q={}){let Y=$.startsWith("thread:")?MH($,Q):$;return[...new Set([Z,Y].filter((X)=>!!X))]}async function qO1($,Z){let Q=Z.organizationId;try{let Y=await $.storage.taskBoard.linkedThreadIds(Z.id,Q);for(let X of Y){let J=await fU($,X);if(!J?.owner||!J?.name)continue;let G=await $.storage.threads.get(X),W=await sm($,{threadId:X,runBranch:G?.branch}),K=await d00($,Q,q41(J)).catch(()=>null);if(!K){console.warn(`[task-board] no credential for ${J.owner}/${J.name} \u2014 `+`cannot look up ${Z.id}'s change request by branch`);continue}let H=ts6(W,await fT0($,X),{flat:Df(K.repo.provider)});for(let F of H){let U=await K.readForBranch(F).catch(()=>null);if(!U)continue;return await $.storage.taskBoard.linkPr({taskBoardItemId:Z.id,organizationId:Q,url:U.url,prNumber:U.number,repo:K.repo}),await $.storage.taskBoard.openReviewCycleIfInProgress(Z.id,Q),await E3(Q).catch(()=>{}),console.log(`[task-board] ${Z.id}: linked ${U.url} found on branch ${F}`),!0}}}catch(Y){console.error("[task-board] PR lookup by branch failed",Y)}return!1}var JG8=D(()=>{X7();O3();x7()});async function GG8($,Z,Q){let Y=Z.organizationId;if(!dX(Z))return!1;if(!yf(Q))return!1;if(await $.storage.taskBoard.hasHumanRejectedDone(Z.id,Y))return!1;let X=await $.storage.organizationSettings.get(Y),J=PU(X?.flags),G=await $.storage.taskBoard.update(Z.id,Y,{status:J},Z.updatedBy);return await Z5($,{taskBoardItemId:Z.id,action:"status_changed",actorId:null,data:{from:Z.status,to:J,reason:"pr_merged"}}),w8(Y,G),console.log(`[task-board-review-sweeper] ${Z.id}: linked PR already merged \u2014 moved to ${J}`),!0}var WG8=D(()=>{I4();pY();bd();CH();T9()});function Za6($){return $ instanceof vX}function KG8($,Z){return Z-$>=es6}class MO1{taskBoard;contextFactory;billing;options;timer=null;running=!1;cursor=null;constructor($,Z,Q,Y={}){this.taskBoard=$;this.contextFactory=Z;this.billing=Q;this.options=Y}start(){if(this.timer)return;let $=this.options.intervalMs??os6;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??ss6,Q=this.options.itemIntervalMs??rs6,Y=new Date(Date.now()-Q),X=await this.taskBoard.listItemsPendingReview(Z,this.cursor,Y),J=X.at(-1);this.cursor=X.length===Z&&J?{updatedAt:J.updatedAt,id:J.id}:null;for(let{id:G,organizationId:W}of X)try{if(await this.reconcileItem(G,W,Y))$++}catch(K){console.error(`[task-board-review-sweeper] ${G} failed`,K)}await this.reapNeverStartedThreads(Z),$+=await this.dispatchDueRetries(Z),await this.reactToUnhandledFailures(Z),$+=await this.settleFinishedRunsWithoutPr(Z,Y)}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()-o71),jY1);for(let Q of Z)console.warn(`[task-board-review-sweeper] failed never-started thread ${Q.threadId} on ${Q.itemId}`)}catch(Z){console.error("[task-board-review-sweeper] reaping failed",Z)}}async reactToUnhandledFailures($){let Z=await this.taskBoard.listItemsStuckAfterFailure($,new Date(Date.now()-$a6));for(let{id:Q,organizationId:Y,threadId:X}of Z)try{console.warn(`[task-board-review-sweeper] reacting to an unhandled failure on ${Q}`),await OY1(this.taskBoard,X,Y),await LY1(this.taskBoard,this.billing,X,Y)}catch(J){console.error(`[task-board-review-sweeper] unhandled-failure reaction for ${Q} failed`,J)}}async settleFinishedRunsWithoutPr($,Z){let Q=0,Y=await this.taskBoard.listItemsFinishedWithoutPr($,Z);for(let{id:X,organizationId:J,finishedAt:G}of Y)try{if(!await this.taskBoard.claimSweep(X,J,Z))continue;let W=await this.taskBoard.getById(X,J);if(!W||W.status!==e1.progress||dX(W)||W.assigneeId!==R8)continue;let K=await this.contextFactory(J,W.assignedBy??W.createdBy);if(!K)continue;if(await qO1(K,W)){if(await this.taskBoard.clearSweepBudget(X,J),await this.reconcileItem(X,J,Z))Q++;continue}if(!KG8(G.getTime(),Date.now()))continue;let H="the run finished without opening a pull request \u2014 there is "+"nothing for a reviewer to review",F=await this.taskBoard.advanceToReviewIfInProgress(X,J,W.updatedBy);if(!F)continue;await this.taskBoard.recordActivity({taskBoardItemId:X,action:"status_changed",actorId:null,data:{from:e1.progress,to:e1.review,reason:H}}).catch(()=>{}),w8(J,F),await _H(K,F,H)}catch(W){console.error(`[task-board-review-sweeper] settling finished run on ${X} failed`,W)}return Q}async dispatchDueRetries($){let Z=0,Q=await this.taskBoard.listItemsDueForRetry($,new Date);for(let{id:Y,organizationId:X,attempts:J}of Q)try{if(!await this.taskBoard.claimDueRetry(Y,X,new Date))continue;let G=await this.taskBoard.getById(Y,X);if(!G||G.status!==e1.progress||G.assigneeId!==R8)continue;let W=await this.contextFactory(X,G.assignedBy??G.createdBy);if(!W)continue;await vH(W,G,{runClass:"retry"}),Z++,console.warn(`[task-board-review-sweeper] re-dispatched ${Y} after a failure (attempt ${J})`)}catch(G){if(console.error(`[task-board-review-sweeper] retry dispatch for ${Y} failed`,G),Za6(G)){await this.returnToTodo(Y,X,G instanceof Error?G.message:String(G));continue}await this.taskBoard.scheduleRunRetry(Y,X,J,new Date(Date.now()+as6)).catch((W)=>console.error(`[task-board-review-sweeper] re-arming ${Y} failed`,W))}return Z}async returnToTodo($,Z,Q){try{let Y=await this.taskBoard.getById($,Z);if(!Y||Y.status!==e1.progress)return;let X=await this.taskBoard.returnToTodoAfterFailure($,Z,Y.updatedBy);if(!X)return;await this.taskBoard.recordActivity({taskBoardItemId:$,action:"status_changed",actorId:null,data:{from:"in_progress",to:"todo",reason:Q}}).catch(()=>{}),w8(Z,X)}catch(Y){console.error(`[task-board-review-sweeper] returning ${$} to todo failed`,Y)}}async handOffReviewWithoutPr($,Z){let Q=await this.taskBoard.listActivity(Z.id,Z.organizationId);if(!KG8(KD(Q,Z.reviewCycleStartedAt),Date.now()))return;await _H($,Z,"no pull request is linked to this task \u2014 there is nothing for a "+"reviewer to review")}async reconcileItem($,Z,Q){if(!await this.taskBoard.claimSweep($,Z,Q))return!1;let Y=await this.taskBoard.getById($,Z);if(!Y)return!1;if(!dX(Y))return!1;let X=Y.assigneeId===R8,J=await this.taskBoard.listPrs($,Z),G=await this.contextFactory(Z,Y.assignedBy??Y.createdBy);if(!G)return!1;if(J.length===0){if(await qO1(G,Y))J=await this.taskBoard.listPrs($,Z);if(J.length===0){if(X)await this.handOffReviewWithoutPr(G,Y);return!1}}let W=await Promise.all(J.map(async(K)=>({...K,...await yd(Z,K)})));if(W.every((K)=>K.state===null))console.warn(`[task-board-review-sweeper] ${$}: no live PR state from GitHub (${W.length} PR(s)) \u2014 proceeding on unknown`);if(await GG8(G,Y,W))return!0;if(await $h$(G,Y))return!0;if(await this.resolveConflictFromSweep(G,Y,W))return!0;if(!X)return!1;if(!UY1(W))return!1;return await xd(G,Y,{previewMatchesHead:NY1(W)}),!0}async resolveConflictFromSweep($,Z,Q){let Y=Q.find((X)=>X.state!=="closed"&&X.conflict===!0);if(!Y)return!1;return await OE($,Z.organizationId,Z,{pr:{number:Y.number,url:Y.url},conflict:!0}).catch((X)=>{return console.error("[task-board-review-sweeper] conflict resolve failed",X),!1})}dispose(){if(this.timer)clearInterval(this.timer),this.timer=null}}var os6=60000,rs6=300000,ss6=50,as6=60000,es6=900000,$a6=120000;var HG8=D(()=>{I4();Vq0();JG8();nU();T80();CH();WG8();T9();vW();EY1();x7();c$0();fd()});import{readdir as Qa6,rm as T_0}from"fs/promises";import{join as R_0}from"path";async function q_0($){let Z=new Date;Z.setUTCDate(Z.getUTCDate()-Ya6),Z.setUTCHours(0,0,0,0);let Q=0;try{let Y=await Yg($);for(let X of Y)if(/^\d{4}$/.test(X))Q+=await FG8($,X,Z);else if(!X.startsWith(".")){let J=R_0($,X),G=await Yg(J);for(let K of G){if(!/^\d{4}$/.test(K))continue;Q+=await FG8(J,K,Z)}if((await Yg(J)).length===0)await T_0(J,{recursive:!0,force:!0})}}catch(Y){console.warn("monitoring retention cleanup failed:",Y)}return Q}async function FG8($,Z,Q){let Y=0,X=R_0($,Z),J=await Yg(X);for(let W of J){if(!/^\d{2}$/.test(W))continue;let K=R_0(X,W),H=await Yg(K);for(let U of H){if(!/^\d{2}$/.test(U))continue;let N=new Date(`${Z}-${W}-${U}T00:00:00Z`);if(isNaN(N.getTime()))continue;if(N<Q){let B=R_0(K,U);await T_0(B,{recursive:!0,force:!0}),Y++}}if((await Yg(K)).length===0)await T_0(K,{recursive:!0,force:!0})}if((await Yg(X)).length===0)await T_0(X,{recursive:!0,force:!0});return Y}async function Yg($){try{return(await Qa6($)).filter((Q)=>!Q.startsWith("."))}catch{return[]}}var Ya6=30;var IO1=()=>{};import{DBOS as VO1,SchedulerMode as Xa6}from"@dbos-inc/dbos-sdk";async function Ga6(){let $=[UK(),Ng(),VN()],Z=0;for(let Q of $)try{Z+=await q_0(Q)}catch(Y){console.error("[monitoring-retention] cleanup failed:",Y)}return console.log(`[monitoring-retention] deleted ${Z} day-dir(s) across ${$.length} signal dir(s)`),{deleted:Z,dirs:$.length}}async function Wa6($,Z){await VO1.runStep(()=>Ga6(),{name:"monitoringRetention"})}function NG8(){if(UG8)return;UG8=!0;let $=VO1.registerWorkflow(Wa6,{name:"monitoringRetentionWorkflow"});VO1.registerScheduled($,{name:"monitoringRetentionWorkflow",crontab:Ja6,mode:Xa6.ExactlyOncePerIntervalWhenActive})}var Ja6="23 4 * * *",UG8=!1;var BG8=D(()=>{y3();IO1()});function DG8($){return async(Z,Q)=>{let Y=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","=",Q).where("member.organizationId","=",Z).executeTakeFirst();if(!Y)return console.warn(`[automationContextFactory] User ${Q} not found in org ${Z} \u2014 returning null`),null;let X=await iQ.create();X.auth.user={id:Q,role:Y.role},X.organization={id:Y.orgId,slug:Y.orgSlug,name:Y.orgName};let J=await BA($.db,Z,Y.role);return X.boundAuth=tU1({auth:X.authInstance,headers:new Headers,role:Y.role,permissions:J,userId:Q}),X.access=new eP(Q,void 0,X.boundAuth,Y.role,"self"),DE(X,{id:Y.orgId,slug:Y.orgSlug}),X}}var OG8=D(()=>{WW();EU()});function Ka6(){return[{name:"Postgres",status:"pending",port:0},{name:"NATS",status:"pending",port:0}]}function Ha6(){return{services:Ka6(),migrationsStatus:"pending",serverUrl:null,logs:[]}}function Ua6(){for(let $ of Fa6)$()}function LG8($){let Z=[...kO1.logs,$];kO1={...kO1,logs:Z.length>500?Z.slice(-500):Z},Ua6()}function SO1(){return Na6}var kO1,Fa6,Na6=!1;var CO1=D(()=>{kO1=Ha6(),Fa6=new Set});import{EventEmitter as Ba6}from"events";var _O1;var wG8=D(()=>{CO1();_O1=new Ba6;_O1.on("request",($)=>{LG8($)})});function jG8(){return async($,Z)=>{let Q=Date.now(),Y=$.req.method,X=$.req.path;if(X==="/api/auth/get-session"||X.includes("favicon")){await Z();return}let J="",G=!1;if(X.startsWith("/mcp")&&Y==="POST"){G=!0;try{if($.req.header("Content-Type")?.includes("application/json")){let N=await $.req.raw.clone().json();if(N.method==="tools/call"&&N.params?.name){let B=dp(N.params.name),O=N.params.arguments||{},L=Object.keys(O).map((j)=>dp(j)),w=L.length>0?L.slice(0,3).join(",")+(L.length>3?"\u2026":""):"";J=`${K9.tool}${B}${K9.dim}(${w})${K9.reset}`}else if(N.method)J=`${K9.dim}${dp(N.method)}${K9.reset}`}}catch{}}let W=dp(X);if(X.startsWith("/mcp/conn_")){let F=X.split("/")[2]??"";W=`/mcp/${K9.mcp}${dp(F.slice(0,12))}\u2026${K9.reset}`}else if(X==="/mcp")W=`${K9.mcp}/mcp${K9.reset}`;else if(X==="/mcp/registry")W=`${K9.mcp}/mcp/registry${K9.reset}`;let K=Oa6(Y),H=G?"\u25C0":"\u2190";if(!SO1())console.log(`${K9.dim}${H}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""}`);try{await Z()}finally{let F=Date.now()-Q,U=$.res.status,N=Da6(U),B=F<1000?`${F}ms`:`${(F/1000).toFixed(1)}s`,O=G?"\u25B6":"\u2192";if(!SO1())console.log(`${K9.dim}${O}${K9.reset} ${K}${Y}${K9.reset} ${W}${J?` ${J}`:""} ${N}${U}${K9.reset} ${K9.duration}${B}${K9.reset}`);_O1.emit("request",{method:Y,path:dp(X),status:U,duration:F,timestamp:new Date})}}}var K9,Da6=($)=>{if($>=500)return K9.serverError;if($>=400)return K9.clientError;if($>=300)return K9.redirect;return K9.ok},Oa6=($)=>{return K9[$]||K9.reset},dp=($)=>{return $.replace(/\r/g,"").replace(/\n/g,"").replace(/\x1b\[[0-9;]*m/g,"").replace(/[\x00-\x1f\x7f-\x9f]/g,"")};var EG8=D(()=>{CO1();wG8();K9={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 TG8}from"crypto";import{mkdir as La6,readdir as wa6,rm as zG8,stat as RG8}from"fs/promises";import{join as bO1,relative as ja6}from"path";import{z as Q8}from"zod";function MG8($){let Z=$.replace(/[^a-zA-Z0-9_-]/g,"_");return bO1(Ea6,Z)}function IG8($){return $.replace(/^\/+/,"").replace(/\.\./g,"")}function vO1($,Z){let Q=MG8($),Y=IG8(Z);return bO1(Q,Y)}function za6($,Z,Q,Y){let X=j0().encryptionKey||"dev-secret",J=`${$}:${Z}:${Q}:${Y}`;return TG8("sha256",X).update(J).digest("hex")}function AG8($,Z,Q,Y,X){let J=Math.floor(Date.now()/1000)+Y,G=za6(Z,Q,J,X),W=new URL(`/api/dev-assets/${Z}/${IG8(Q)}`,$);return W.searchParams.set("expires",J.toString()),W.searchParams.set("signature",G),W.searchParams.set("method",X),W.toString()}function VG8($,Z,Q){let Y=`${$}:${Z.getTime()}:${Q}`;return`"${TG8("md5","etag").update(Y).digest("hex")}"`}async function kG8($,Z,Q,Y,X){try{let J=await wa6($,{withFileTypes:!0});for(let G of J){let W=bO1($,G.name),H=ja6(Z,W).replace(/\\/g,"/");if(Q&&!H.startsWith(Q))continue;if(G.isDirectory())if(Y){let F=H+"/";if(!Q||F.startsWith(Q)){if(!(Q?H.slice(Q.length):H).includes("/"))X.commonPrefixes.add(F)}}else await kG8(W,Z,Q,Y,X);else if(G.isFile()){if(Y&&Q){let F=H.slice(Q.length);if(F.includes(Y)){let U=F.indexOf(Y),N=Q+F.slice(0,U+1);X.commonPrefixes.add(N);continue}}try{let F=await RG8(W);X.objects.push({key:H,size:F.size,lastModified:F.mtime.toISOString(),etag:VG8(W,F.mtime,F.size)})}catch{}}}}catch{}}function SG8($,Z){let Y=J0($).id;return[{name:"LIST_OBJECTS",description:"List objects in the local assets directory with pagination support",inputSchema:Q8.object({prefix:Q8.string().optional(),maxKeys:Q8.number().optional().default(1000),continuationToken:Q8.string().optional(),delimiter:Q8.string().optional()}),outputSchema:Q8.object({objects:Q8.array(Q8.object({key:Q8.string(),size:Q8.number(),lastModified:Q8.string(),etag:Q8.string()})),nextContinuationToken:Q8.string().optional(),isTruncated:Q8.boolean(),commonPrefixes:Q8.array(Q8.string()).optional()}),handler:async(X)=>{let J=X,G=J.prefix||"",W=J.maxKeys??1000,K=J.delimiter,H=J.continuationToken,F=MG8(Y);await La6(F,{recursive:!0});let U={objects:[],commonPrefixes:new Set};await kG8(F,F,G,K,U),U.objects.sort((w,j)=>w.key.localeCompare(j.key));let N=0;if(H){if(N=U.objects.findIndex((w)=>w.key>H),N===-1)N=U.objects.length}let B=U.objects.slice(N,N+W),O=N+W<U.objects.length,L=O?B[B.length-1]?.key:void 0;return{objects:B,isTruncated:O,nextContinuationToken:L,commonPrefixes:Array.from(U.commonPrefixes).sort()}}},{name:"GET_OBJECT_METADATA",description:"Get metadata for a file in the local assets directory",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({contentType:Q8.string().optional(),contentLength:Q8.number(),lastModified:Q8.string(),etag:Q8.string(),metadata:Q8.record(Q8.string(),Q8.string()).optional()}),handler:async(X)=>{let J=X,G=vO1(Y,J.key),W=await RG8(G);return{contentType:tN1(J.key),contentLength:W.size,lastModified:W.mtime.toISOString(),etag:VG8(G,W.mtime,W.size)}}},{name:"GET_PRESIGNED_URL",description:"Generate a presigned URL for downloading a file from local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=eD(J.expiresIn,PG8);return{url:AG8(Z,Y,J.key,G,"GET"),expiresIn:G}}},{name:"PUT_PRESIGNED_URL",description:"Generate a presigned URL for uploading a file to local storage",inputSchema:Q8.object({key:Q8.string(),expiresIn:Q8.number().optional(),contentType:Q8.string().optional()}),outputSchema:Q8.object({url:Q8.string(),expiresIn:Q8.number()}),handler:async(X)=>{let J=X,G=eD(J.expiresIn,PG8);return{url:AG8(Z,Y,J.key,G,"PUT"),expiresIn:G}}},{name:"DELETE_OBJECT",description:"Delete a single file from local storage",inputSchema:Q8.object({key:Q8.string()}),outputSchema:Q8.object({success:Q8.boolean(),key:Q8.string()}),handler:async(X)=>{let J=X,G=vO1(Y,J.key);try{return await zG8(G),{success:!0,key:J.key}}catch{return{success:!1,key:J.key}}}},{name:"DELETE_OBJECTS",description:"Delete multiple files from local storage",inputSchema:Q8.object({keys:Q8.array(Q8.string()).max(1000)}),outputSchema:Q8.object({deleted:Q8.array(Q8.string()),errors:Q8.array(Q8.object({key:Q8.string(),message:Q8.string()}))}),handler:async(X)=>{let J=X,G=[],W=[];return await Promise.all(J.keys.map(async(K)=>{let H=vO1(Y,K);try{await zG8(H),G.push(K)}catch(F){W.push({key:K,message:F instanceof Error?F.message:"Unknown error"})}})),{deleted:G,errors:W}}}]}async function xO1($,Z,Q){let Y=SG8(Z,Q),X=new Hw({name:"dev-assets-mcp",version:"1.0.0"},{capabilities:{tools:{}},jsonSchemaValidator:xZ});for(let G of Y){let W="shape"in G.inputSchema?G.inputSchema.shape:Q8.object({}).shape,K=G.outputSchema&&"shape"in G.outputSchema?G.outputSchema.shape:Q8.object({}).shape;X.registerTool(G.name,{description:G.description??"",inputSchema:W,outputSchema:K,annotations:G.annotations,_meta:G._meta},async(H)=>{try{let F=await G.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 J=new R3({enableJsonResponse:$.headers.get("Accept")?.includes("application/json")??!1});return await X.connect(J),rW(X,J,$,"mcp:dev-assets")}async function CG8($,Z,Q,Y){let J=SG8(Q,Y).find((G)=>G.name===$);if(!J)return{content:[{type:"text",text:`Tool not found: ${$}`}],isError:!0};try{let G=await J.handler(Z);return{content:[{type:"text",text:JSON.stringify(G)}]}}catch(G){return{content:[{type:"text",text:G instanceof Error?G.message:String(G)}],isError:!0}}}var Ea6="./data/assets",PG8=3600,qG8,_G8;var vG8=D(()=>{$$();Qi();J8();mJ0();Zi();LJ();$O();FC0();qG8=new $1;qG8.all("/",async($)=>{let Z=$.get("studioContext"),Q=new URL($.req.url),Y=`${Q.protocol}//${Q.host}`;return xO1($.req.raw,Z,Y)});_G8=qG8});var bG8={};Q6(bG8,{mountDevRoutes:()=>Pa6});function Pa6($,Z){$.all("/mcp/:connectionId{.*_dev-assets$}",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`;return xO1(Y.req.raw,X,G)}),$.all("/mcp/:connectionId{.*_dev-assets$}/call-tool/:toolName",Z,async(Y)=>{let X=Y.get("studioContext"),J=new URL(Y.req.url),G=`${J.protocol}//${J.host}`,W=Y.req.param("toolName");if(!W)return Y.json({error:"Missing tool name"},400);let K=await Y.req.json(),H=await CG8(W,K,X,G);if(H.isError)return Y.json(H.content,500);return Y.json(H.content)}),$.use("/mcp/dev-assets",Z),$.route("/mcp/dev-assets",_G8);let Q=new $1;Q.use("*",nH({mountPath:"/api/dev-assets"})),Q.route("/",HC0({orgFromPath:!1})),$.route("/api/dev-assets",Q)}var xG8=D(()=>{J8();lN1();FC0();vG8()});var iG8={};Q6(iG8,{watchHandler:()=>dG8,resolveCorsOrigin:()=>cG8,isSsoExemptPath:()=>uG8,isAllowedOAuthRedirectUri:()=>mG8,createApp:()=>Ca6});import{readFileSync as Aa6}from"fs";import{PrometheusSerializer as Ta6}from"@opentelemetry/exporter-prometheus";import{DBOS as EO}from"@dbos-inc/dbos-sdk";import{oAuthDiscoveryMetadata as Ma6,oAuthProtectedResourceMetadata as Ia6}from"better-auth/plugins";async function Ra6($){let Z=$.connect(),Q;try{Q=await Promise.race([Z,yG8(fG8)])}catch{return Z.then((Y)=>Y.release(!0)).catch(()=>{}),!1}try{return await Promise.race([Q.query("SELECT 1"),yG8(fG8)]),Q.release(),!0}catch{return Q.release(!0),!1}}function yG8($){return new Promise((Z,Q)=>setTimeout(()=>Q(Error("pg health-check timeout")),$))}function uG8($){return $.startsWith("/api/org-sso/")||/^\/api\/[^/]+\/sso\//.test($)||$.startsWith("/api/auth/")||$.startsWith("/api/tools/management")||$.startsWith("/oauth-proxy/")||/^\/api\/[^/]+\/oauth-proxy\//.test($)||$.startsWith(`${oS0}/`)||$.startsWith(`${mS0}/`)}function lG8($){return $==="local.studio.decocms.com"}function cG8($,{baseUrl:Z,requestOrigin:Q}){let Y;try{Y=new URL($).hostname}catch{return null}if(Y==="localhost"||Y==="127.0.0.1")return $;if(lG8(Y))return $;let X=Z??Q;try{if(new URL(X).origin===$)return $}catch{}return null}function mG8($,Z){return $.origin===new URL(Z).origin||$.hostname==="localhost"||lG8($.hostname)}async function Ca6($={}){let Z=$.database??O8(),Q=!1;$5.stop().catch((K0)=>{console.error("[SSEHub] Error stopping previous broadcast (HMR cleanup):",K0)});let Y,X,J,G,W=new jO1,K,H,F,U=null;if($.disableNats)K=EO1(),Y={get:async()=>null,set:async()=>{},invalidate:async()=>{},teardown:()=>{}},X=null,J=null,G=new _80,H={start:async()=>{},broadcast:()=>{},stop:async()=>{}},F={init:async()=>{},pump:(K0)=>{return(async()=>{let H0=K0.getReader();try{while(!0){let{done:T0}=await H0.read();if(T0)break}}catch{}finally{H0.releaseLock()}})()},publishRawChunk:async()=>!1,publishDone:async()=>!1,createTailStream:async()=>null,purge:()=>{},teardown:()=>{}};else{U=pJ8();let K0=j0().natsCredsPath,H0;if(K0)try{H0=Aa6(K0,"utf8")}catch(K8){console.error(`[app] failed to read NATS_CREDS at ${K0}; connecting anonymously`,K8)}U.init(j0().natsUrls,H0?{creds:H0}:void 0);let T0=D$1()?new s11({getJetStream:()=>U.getJetStream()}):null;T0?.init().catch(()=>{}),Y=T0;let A0=new FZ1({getJetStream:()=>U.getJetStream()});A0.init().catch(()=>{}),X=A0;let D1=new hf(JY1,{getJetStream:()=>U.getJetStream()}),g$=new hf(m$0,{getJetStream:()=>U.getJetStream()});D1.init().catch(()=>{}),g$.init().catch(()=>{}),J={reads:D1,cards:g$};let m$=new pJ1({getJetStream:()=>U.getJetStream()});m$.init().catch(()=>{}),G=m$,K=EO1({getConnection:()=>U.getConnection()}),H=new zO1({getConnection:()=>U.getConnection()}),F=new TO1({getConnection:()=>U.getConnection(),getJetStream:()=>U.getJetStream()}),N68(U),U.onReady(()=>{T0?.init().catch((K8)=>{console.error("[McpListCache] Deferred init failed:",K8)}),A0.init().catch((K8)=>{console.error("[SkillCatalogCache] Deferred init failed:",K8)}),D1.init().catch((K8)=>{console.error("[PrReadCache] Deferred init failed:",K8)}),g$.init().catch((K8)=>{console.error("[PrCardCache] Deferred init failed:",K8)}),m$.init().catch((K8)=>{console.error("[ConnectionCircuitStore] Deferred init failed:",K8)}),K.start(),QB$(()=>U.getConnection()),F.init().catch((K8)=>{console.warn("[Decopilot] StreamBuffer init failed (late-join disabled):",K8)})})}if(Gz)await Gz();a11(Y),NZ1(X),GY1(J),nJ1(G);let B={storage:new ah(Z.db),sseHub:$5,onThreadFinished:async(K0,H0)=>hd(new j3(Z.db),K0,H0,new _G(Z.db))},O=new PX1(B),L=new $60(Z.db),w=new RO1(L);w.start(),ag$(H),H.start((K0)=>{YM0(K0),O.execute({type:"CANCEL",taskId:K0}).catch((H0)=>{console.error("[Decopilot] CancelBroadcast execute failed:",H0)})}).catch((K0)=>{console.error("[Decopilot] CancelBroadcast start failed:",K0)}),U?.onReady(()=>{H.start().catch((K0)=>{console.error("[CancelBroadcast] Deferred start failed:",K0)})});let j=()=>U?.getConnection()??null;fN1(j),U?.onReady(()=>fN1(j)),IG1(j),U?.onReady(()=>IG1(j)),F.init().catch((K0)=>{console.warn("[Decopilot] StreamBuffer init failed, attach/late-join disabled:",K0)}),Gz=async()=>{await O.stopAll(),O.dispose(),w.dispose(),H.stop().catch(()=>{}),b58(),F.teardown(),Y?.teardown(),X?.teardown(),J?.reads.teardown(),J?.cards.teardown(),W.teardown(),K.teardown(),YB$(),G.teardown(),a11(null),NZ1(null),GY1(null),nJ1(null)};let E=new $1;if(E.use("*",mJ1({enabled:(K0)=>Kp(K0,"debug")==="1"})),E.use("*",n_0),E.use("/*",W68({origin:(K0,H0)=>cG8(K0,{baseUrl:j0().baseUrl,requestOrigin:new URL(H0.req.url).origin}),credentials:!0,allowMethods:["GET","POST","PUT","DELETE","OPTIONS"],allowHeaders:["Content-Type","Authorization","mcp-protocol-version"],exposeHeaders:["WWW-Authenticate"]})),E.use("*",async(K0,H0)=>{if(await H0(),K0.req.path.includes("/files/"))return;if(K0.req.path.includes("/fs/")&&K0.req.path.endsWith("/read"))return;K0.header("X-Frame-Options","DENY"),K0.header("Content-Security-Policy","frame-ancestors 'none'")}),!j0().noTui)E.use("*",jG8());E.use("*",async(K0,H0)=>{if(await H0(),$n(K0.req.path))return;if(K0.res.status>=500){let A0=await K0.res.clone().text();console.error(`[5xx Response] ${K0.req.method} ${K0.req.path} - ${K0.res.status}:`,A0)}}),E.get(QX.HEALTH,(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);return K0.json({status:"ok"})}),E.get(QX.HEALTH_LIVE,(K0)=>{return K0.json({status:"ok"})}),E.get(QX.HEALTH_READY,async(K0)=>{if(Q)return K0.json({status:"shutting_down"},503);let H0={};if(H0.postgres={status:await Ra6(Z.pool)?"up":"down"},U)H0.nats=U.isConnected()?{status:"up"}:{status:"down"};else H0.nats={status:"down"};let T0=H0.postgres.status==="up",A0=T0?200:503;return K0.json({status:T0?"ready":"not_ready",services:H0},A0)}),E.get(QX.METRICS,async(K0)=>{try{let H0=await s_0.collect(),T0=qa6.serialize(H0.resourceMetrics);return K0.text(T0,200,{"Content-Type":"text/plain; version=0.0.4; charset=utf-8"})}catch(H0){return console.error("Failed to collect metrics:",H0),K0.text("# Error collecting metrics",500)}});let z=1800000;E.get(`${QX.DBOS_QUEUE_DEPTH_PREFIX}:queueName`,async(K0)=>{let H0=K0.req.param("queueName");if(!Va6.has(H0))return K0.json({error:`Unknown queue: ${H0}`},404);let[T0,A0]=await Promise.all([EO.listQueuedWorkflows({queueName:H0,status:"ENQUEUED",loadInput:!1,loadOutput:!1}),EO.listQueuedWorkflows({queueName:H0,status:"PENDING",loadInput:!1,loadOutput:!1,dequeuedAfter:new Date(Date.now()-z).toISOString()})]);return K0.json({queue_length:T0.length,in_flight:A0.length})}),E.route("/api/config",ZJ8),E.route("/api/_reports",BJ8),E.route("/api/_stripe",KO1),E.route("/api/_github",LJ8({taskBoard:()=>i,contextFactory:()=>g})),E.route("/api/_git",Lp);let T={db:Z.db,encryptionKey:j0().encryptionKey};E.route("/api/_jira",qJ8(T)),E.route("/api/_jira",zJ8(T)),E.route("/report",FJ8($.clientDir)),E.route("/api/auth/custom",_68),E.route("/api/auth/desktop",f68),E.all("/api/auth/admin/*",P58),E.all("/api/auth/*",async(K0)=>{return await x8.handler(K0.req.raw)});let P=x88();P.use("/.well-known/oauth-protected-resource/mcp/:connectionId",D60),P.use("/mcp/:connectionId/.well-known/oauth-protected-resource",D60),E.route("/",P),E.get("/.well-known/oauth-protected-resource/api/:org/mcp/:connectionId",a40),E.route("/",u88()),E.use("/oauth-proxy/:connectionId/*",D60),E.all("/oauth-proxy/:connectionId/*",gG8);let A=async(K0)=>{let T0=await ka6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.use("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",D60),E.get("/mcp/:gateway?/:connectionId/.well-known/oauth-protected-resource/*",A);let q=async(K0)=>{let T0=await Sa6()(K0.req.raw),A0=await T0.json();return Response.json(A0,T0)};E.get("/.well-known/oauth-authorization-server/*/:gateway?/:connectionId?",q);let f=H68({ttlMs:120000}),_=await b48({db:Z.db,auth:x8,encryption:{key:j0().encryptionKey},observability:{tracer:VO,meter:Z$},modelListCache:W,providerKeyCache:K,memberRoleCache:f});iQ.set(_),fp1({db:Z.db,baseUrl:d5()}),x48({db:Z.db}),h48({db:Z.db}),n48({db:Z.db}),AJ8({db:Z.db,encryptionKey:j0().encryptionKey}),qb$({db:Z.db}),e48({db:Z.db}),Zx$({db:Z.db});let V=CX0(Z.db),y=new br(Z.db),g=DG8({db:Z.db});hJ1({storage:V,studioContextFactory:g}),CX1({systemDatabaseUrl:Es0(j0().databaseUrl,j0().databasePgSsl),studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}}),RX1({dispatchRunFn:ny$,studioContextFactory:g,deps:{runRegistry:O,cancelBroadcast:H,streamBuffer:F,sseHub:$5}});let l=new ah(Z.db),i=new j3(Z.db),p=new _G(Z.db),U0=new MO1(i,g,p);if(j0().taskBoardReviewSweeperEnabled){U0.start();let K0=Gz;Gz=async()=>{await K0?.(),U0.dispose()}}Dg$({getJetStream:()=>U?.getJetStream()??null,getJetStreamManager:async()=>{let K0=U?.getConnection();return K0?await hG8.jetstreamManager(K0):null},messageParts:l.messageParts(),resolveRun:async(K0)=>{let H0=await Z.db.selectFrom("threads").select(["organization_id","created_by","message_storage_version","status","run_fence_token","title"]).where("id","=",K0).executeTakeFirst();return H0?{orgId:H0.organization_id,createdBy:H0.created_by,version:H0.message_storage_version??1,status:H0.status,runFenceToken:H0.run_fence_token,title:H0.title??null}:null},completeRunIfNotCompleted:async(K0,H0)=>{let T0=await l.completeRunIfNotCompleted(K0,H0);if(A_0($5,H0,K0,T0),T0)await hd(i,K0,H0,p);return T0},markRunRequiresAction:async(K0,H0)=>{let T0=await l.requiresActionIfInProgress(K0,H0);return A_0($5,H0,K0,T0),T0},markRunFailed:async(K0,H0,T0,A0)=>{let D1=await l.markRunFailed(K0,H0,T0,A0);if(A_0($5,H0,K0,D1),D1)await hd(i,K0,H0,p);return D1},clearSynthesizedError:async(K0,H0)=>{await l.messageParts().replaceMessageParts(K0,jE(K0,H0),[])},persistTitle:(K0,H0,T0)=>l.update(K0,H0,{title:T0}),onTitleUpdated:async({runId:K0,orgId:H0,title:T0})=>{let A0=await l.get(K0,H0).catch(()=>null);$5.emit(H0,wF(K0,A0?.status??"in_progress",{title:T0,virtualMcpId:A0?.virtual_mcp_id??void 0,createdBy:A0?.created_by,triggerId:A0?.trigger_id,branch:A0?.branch??null,harnessId:A0?.harness_id??void 0,createdAt:A0?.created_at,updatedAt:A0?.updated_at}))},bumpProgress:async({runId:K0,orgId:H0})=>{await l.bumpProgress(K0,H0)},recordCompleted:async({runId:K0,orgId:H0,distinctId:T0,usage:A0})=>{f1.capture({distinctId:T0,event:"chat_message_completed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",input_tokens:A0.inputTokens,output_tokens:A0.outputTokens,total_tokens:A0.totalTokens}})},recordFailed:async({runId:K0,orgId:H0,distinctId:T0,reason:A0,kind:D1})=>{f1.capture({distinctId:T0,event:"chat_message_failed",groups:{organization:H0},properties:{organization_id:H0,thread_id:K0,transport:"projector",error_category:D1,error_message:A0}})},purgeRun:async(K0)=>{F.purge(K0)}}),Ey$({studioContextFactory:g,systemDatabaseUrl:Es0(j0().databaseUrl,j0().databasePgSsl),streamBuffer:F}),NG8(),yp1(),y48(),l48(),o48(),RJ8(),Sb$(),Z68(),Qx$(),jJ8();let _0=async(K0,H0,T0)=>{let A0=await V.findById(K0,H0);if(!A0)throw Error("Automation not found");return cJ1({automationId:A0.id,organizationId:A0.organization_id,triggerId:null})},G0=new Dp(V,({automation:K0,trigger:H0,contextMessages:T0,idempotencyKey:A0})=>C80({automationId:K0.id,organizationId:K0.organization_id,triggerId:H0.id,contextMessages:T0},{idempotencyKey:A0})),N0=[UK(),Ng(),VN()];for(let K0 of N0)q_0(K0).then(()=>{}).catch((H0)=>console.error("[monitoring] Retention cleanup failed:",H0));let o=()=>x8.api.deleteAllExpiredApiKeys().catch((K0)=>console.error("[auth] Expired API key cleanup failed:",K0));o(),setInterval(o,86400000).unref(),E.use("*",async(K0,H0)=>{if(i_0(K0.req.path))return H0();let T0={measure:async(D1,g$)=>{oW(K0,D1);try{return await g$()}finally{q3(K0,D1)}}},A0=await iQ.create(K0.req.raw,{timings:T0});A0.automationRunner=_0,K0.set("studioContext",A0);try{await H0()}finally{let D1=A0.pendingRevalidations;if(D1.length>0)Promise.race([Promise.allSettled(D1),L$(30000)]).catch((m$)=>console.error("[studio] revalidation cleanup error:",m$))}}),E.use("/api/:org/decopilot/*",Fp),E.use("/api/:org/v1/*",Fp),E.use("/api/:org/files/*",Fp),E.use("*",async(K0,H0)=>{if(uG8(K0.req.path))return H0();let T0=K0.get("studioContext");if(!T0?.organization?.id||!T0?.auth?.user?.id)return H0();if(!(await T0.storage.orgSsoConfig.getByOrgId(T0.organization.id))?.enforced)return H0();if(!await T0.storage.orgSsoSessions.isValid(T0.auth.user.id,T0.organization.id))return K0.json({error:"SSO authentication required for this organization"},403);return H0()});let Z0=new $1;Z0.use("*",nH({mountPath:"/api/org-sso"})),Z0.route("/",aS0()),E.route("/api/org-sso",Z0),E.get("/api/tools/management",(K0)=>{return K0.json({tools:$t0,grouped:aP()})}),E.use("/mcp/*",async(K0,H0)=>{oW(K0,"mcp");try{return await H0()}finally{q3(K0,"mcp")}});let Q0=async(K0,H0)=>{let T0=K0.var.studioContext;if(!T0.auth.user?.id&&!T0.auth.apiKey?.id){let A0=new URL(K0.req.url),D1=K0.req.header("x-forwarded-proto")?.split(",")[0]?.trim(),g$=D1?`${D1}://${A0.host}`:A0.origin;return K0.res=new Response(null,{status:401,headers:{"WWW-Authenticate":`Bearer realm="mcp",resource_metadata="${g$}${A0.pathname}/.well-known/oauth-protected-resource"`}})}return await H0()};if(E.use("/mcp/:connectionId?",Q0),E.use("/mcp/gateway/:virtualMcpId?",Q0),E.use("/mcp/virtual-mcp/:virtualMcpId?",Q0),E.use("/mcp/self",Q0),VW()){let{mountDevRoutes:K0}=(xG8(),v_0(bG8));K0(E,Q0)}let s=new $1;s.use("*",nH({mountPath:"/mcp"})),s.route("/",sM0()),E.route("/mcp",s);let Y0=new $1;Y0.use("*",nH({mountPath:"/mcp/self"})),Y0.route("/",lC0()),E.route("/mcp/self",Y0);let i0=new $1;i0.use("*",nH({mountPath:"/mcp"})),i0.route("/",$I0()),E.route("/mcp",i0),E.use("/api/:org/models/*",async(K0,H0)=>{oW(K0,"llm_models");try{return await H0()}finally{q3(K0,"llm_models")}});let C0=f58({cancelBroadcast:H,streamBuffer:F,runRegistry:O});E.route("/api",C0),E.route("/api",kJ8);let G1=new $1;G1.use("*",nH({mountPath:"/api"})),G1.route("/",iC0()),E.route("/api",G1),E.route("/api",tX8);let l0=new $1;l0.use("*",nH({mountPath:"/api"})),l0.route("/",pC0({tokenStorage:y,automationEventDispatcher:G0})),E.route("/api",l0);let L0=new fr(Z.db),E0=new $1;E0.use("*",nH({mountPath:"/api"})),E0.route("/",YC0()),E.route("/api",E0),E.route("/api/deco-sites",s58()),E.route("/api/deco-apps",cX8());let u0=new $1;u0.use("*",nH({mountPath:"/api/deco-sites"})),u0.route("/",JC0()),E.route("/api/deco-sites",u0),E.route(oS0,A58()),E.route(_Q8,xQ8()),E.route("/api/_editor-resolve",rX8()),E.route(u68,l68()),E.route(mS0,Q58());let B1=j0(),Z1=B1.elevenlabsApiKey?new D_0({apiKey:B1.elevenlabsApiKey,model:B1.elevenlabsVoiceModel,conversationModel:B1.elevenlabsConversationModel,voiceId:B1.elevenlabsVoiceId}):null,v0={openai:B1.openaiLiveApiKey?new $O1({apiKey:B1.openaiLiveApiKey,voice:B1.openaiLiveVoice}):null,elevenlabs:Z1?new eD1(Z1,()=>U?.getConnection()??null):null},m0=new JO1({adapter:Z1,conversationAdapters:v0,defaults:B1,secret:B1.studioJwtSecret??B1.betterAuthSecret,getConnection:()=>U?.getConnection()??null}),p0=zX8({voiceSessions:m0,kvStorage:L0,runRegistry:O,streamBuffer:F,sseHub:$5,cancelBroadcast:H,tokenStorage:y,automationEventDispatcher:G0,mountDevAssets:VW(),mcpAuth:Q0,oauthProxyHandler:gG8,watchHandler:dG8,betterAuthProtectedResourceHandler:A,getNatsConnection:()=>U?.getConnection()??null});return E.route("/api/:org",p0),E.notFound((K0)=>{return K0.json({error:"Not Found",path:K0.req.path},404)}),E.onError(g58),Object.assign(E,{markShuttingDown:()=>{Q=!0},shutdown:async()=>{if(console.log("[shutdown] Stopping workers..."),await Promise.allSettled([$5.stop(),Gz?Promise.resolve(Gz()).finally(()=>{Gz=null}):Promise.resolve()]),U)await U.drain().catch((K0)=>console.error("[shutdown] NATS drain error:",K0));console.log("[shutdown] Flushing telemetry..."),await eX().catch((K0)=>console.error("[shutdown] Telemetry flush error:",K0)),console.log("[shutdown] Closing database..."),await lZ$(Z).catch((K0)=>console.error("[shutdown] Database close error:",K0)),console.log("[shutdown] Cleanup complete.")},initDbos:async()=>{await EO.registerQueue(f3,{partitionQueue:!0,concurrency:fJ1,minPollingIntervalMs:yJ1}),await EO.registerQueue(x3,{partitionQueue:!0,concurrency:kX1,priorityEnabled:!0}),await EO.registerQueue(MN,{workerConcurrency:j0().decopilotMaxConcurrentHostedRuns,priorityEnabled:!0}),await EO.registerQueue(IN,{workerConcurrency:j0().sandboxMaxConcurrentHostedRuns,priorityEnabled:!0}),await EO.registerQueue(MO,{partitionQueue:!0,concurrency:jy$}),await EO.registerQueue(Uz,$x$),await cN1(V),await Promise.allSettled(["automations-gate","automations-global","jira-push"].map((K0)=>EO.deleteQueue(K0))),await gJ1(Z.pool),KX$().catch((K0)=>{console.error("[studio-pack-backfill] failed:",K0)}),gp1().catch((K0)=>{console.error("[org-fs] public-sets boot sync kick failed:",K0)})}})}var hG8,fG8=5000,Gz=null,gG8=async($)=>{let Z=$.req.param("connectionId");if(!Z)return $.json({error:"Missing connectionId"},400);let Q=$.req.path.split("/").filter(Boolean),Y=Q[Q.length-1],X=$.get("studioContext");if(!X)X=await iQ.create($.req.raw),$.set("studioContext",X);let J=$.req.param("org")?X.organization?.id:void 0,G=await X.storage.connections.findById(Z,J);if(!G?.connection_url)return $.json({error:"Connection not found"},404);if(Y==="register"&&G.oauth_config?.clientId){let y=await $.req.json().catch(()=>({}));return $.json({...typeof y==="object"&&y!==null?y:{},client_id:G.oauth_config.clientId,...G.oauth_config.clientSecret?{client_secret:G.oauth_config.clientSecret}:{},client_secret_expires_at:0})}let W=await Xp(G.connection_url),K,H=new URL(G.connection_url),U=(typeof G.metadata?.oauthResource==="string"&&G.metadata.oauthResource.length>0?G.metadata.oauthResource:void 0)??G.connection_url;if(W.ok)K=(await W.json()).authorization_servers?.[0];if(!K)K=H.origin;let N=await e40(K);if(!N.ok)return $.json({error:"Failed to get auth server metadata"},502);let B=await N.json(),O;if(Y==="authorize")O=B.authorization_endpoint;else if(Y==="token")O=B.token_endpoint;else if(Y==="register")O=B.registration_endpoint;if(!O)return $.json({error:`Unknown OAuth endpoint: ${Y}`},404);let L=h88(O);if(L)return L;let w=new URL(O),j=new URL($.req.url);if(w.search=j.search,Y==="authorize"){let y=w.searchParams.get("redirect_uri");if(y){let g=j0().baseUrl??j.origin;try{if(!mG8(new URL(y),g))return $.json({error:"invalid_request",error_description:"redirect_uri is not allowed"},400)}catch{return $.json({error:"invalid_request",error_description:"redirect_uri is malformed"},400)}w.searchParams.set("redirect_uri",y)}if(w.searchParams.has("resource"))w.searchParams.set("resource",U);if(Y68(G.connection_url))w.searchParams.set("auto_personal","true"),w.searchParams.set("force_new","true");return $.redirect(w.toString(),302)}let E={Accept:$.req.header("Accept")||"application/json"},z=$.req.header("Content-Type");if(z)E["Content-Type"]=z;let T=$.req.header("Authorization");if(T)E.Authorization=T;let P,A=null,q=null;if($.req.method!=="GET"&&$.req.method!=="HEAD")if(Y==="token"&&z?.includes("application/x-www-form-urlencoded")){if(T?.toLowerCase().startsWith("basic "))try{let p=atob(T.slice(6).trim()),U0=p.indexOf(":");if(U0!==-1){let _0=decodeURIComponent(p.slice(0,U0)),G0=decodeURIComponent(p.slice(U0+1));A=_0||null,q=G0||null}}catch{}let y=await $.req.formData();if(y.has("resource"))y.set("resource",U);let g=y.get("client_id"),l=y.get("client_secret");if(typeof g==="string"&&g)A=g;if(typeof l==="string"&&l)q=l;let i=new URLSearchParams;for(let[p,U0]of y.entries())i.append(p,U0.toString());P=i.toString()}else if(Y==="register"&&z?.toLowerCase().includes("application/json")){let y=await X.db.selectFrom("organization").select(["id","slug","name"]).where("id","=",G.organization_id).executeTakeFirst(),g=await $.req.text(),l={};try{l=g?JSON.parse(g):{}}catch{P=g}let i=typeof l==="object"&&l!==null&&!Array.isArray(l);if(P===void 0&&!i)P=g;if(P===void 0){let p=l,U0=p.metadata&&typeof p.metadata==="object"?p.metadata:{};p.metadata={...U0,organization_id:G.organization_id,...y?.slug?{organization_slug:y.slug}:{},...y?.name?{organization_name:y.name}:{}},P=JSON.stringify(p),E["Content-Type"]="application/json"}}else P=$.req.raw.body??void 0;let f=await fetch(w.toString(),{method:$.req.method,headers:E,body:P,duplex:"half",redirect:"manual"}),_=new Headers,V=["connection","keep-alive","transfer-encoding","content-encoding","content-length"];for(let[y,g]of f.headers.entries())if(!V.includes(y.toLowerCase()))_.set(y,g);if(Y==="token"&&f.ok){let y=await f.text();try{let g=JSON.parse(y);if(typeof g.access_token==="string"&&g.access_token){let l=typeof g.expires_in==="number"?new Date(Date.now()+g.expires_in*1000):null,i=null;try{i=await Jp(G.connection_url)??O}catch{i=O}let p={connectionId:Z,accessToken:g.access_token,refreshToken:typeof g.refresh_token==="string"?g.refresh_token:null,scope:typeof g.scope==="string"?g.scope:null,expiresAt:l,clientId:A,clientSecret:q,tokenEndpoint:i};await new j9(X.db,X.vault).upsert(p)}}catch(g){console.error("[oauth-proxy] failed to persist downstream token:",g)}return new Response(y,{status:f.status,statusText:f.statusText,headers:_})}return new Response(f.body,{status:f.status,statusText:f.statusText,headers:_})},dG8=async($)=>{let Z=$.var.studioContext,Q=Z.auth.user?.id??Z.auth.apiKey?.userId;if(!Q)return $.json({error:"Unauthorized"},401);let Y=Z.organization?.id;if(!Y)return $.json({error:"organization id missing"},400);let X=$.req.query("types"),J=X?X.split(",").map((H)=>H.trim()).filter(Boolean):null,G=$.req.query("scope")==="all";if(G&&(!iU(Y)||!await pU(Z)))return $.json({error:"forbidden"},403);let W=G?Bq0:Y;if(G)yD({action:"watch_all_orgs",actorUserId:Q,actorOrgId:Y,targetOrgId:"all"});let K=crypto.randomUUID();return OO($,async(H)=>{if(await H.writeSSE({event:"connected",data:JSON.stringify({listenerId:K,organizationId:Y,typePatterns:J,connectedAt:new Date().toISOString()})}),!$5.add({id:K,organizationId:W,typePatterns:J?.length?J:null,push:(N,B)=>{H.writeSSE({id:N.id,event:N.type,data:JSON.stringify(G?{...N,organizationId:B}:N)}).catch(()=>{$5.remove(W,K)})}})){await H.writeSSE({event:"error",data:JSON.stringify({error:"Too many connections",message:"SSE connection limit reached. Try again later."})});return}let U=setInterval(()=>{H.writeSSE({event:"keepalive",data:""}).catch(()=>{clearInterval(U),$5.remove(W,K)})},30000);await new Promise((N)=>{H.onAbort(()=>{clearInterval(U),$5.remove(W,K),N()})})})},qa6,Va6,ka6=()=>Ia6(x8),Sa6=()=>Ma6(x8);var pG8=D(()=>{r$();$$();hp1();g48();c48();r48();h80();cQ1();Q68();c$0();k9();ac();p8();J8();hS0();K68();dJ1();X3();EU();FN1();vG();S6();$6();wN1();y68();c68();Y58();TN1();T58();_N1();hN1();uN1();DH();PS0();lN1();h58();lS0();PX8();MX8();IX8();CX8();lX8();iN1();mX8();aM0();v80();oX8();ZI0();zD1();sX8();jD1();QJ8();UJ8();DJ8();OJ8();wJ8();EJ8();PJ8();MJ8();LO1();rN1();SJ8();ED1();OD1();j50();nJ8();bJ();sT0();KY1();Y00();J00();oJ1();tJ8();rJ8();yN1();YG8();AX1();XG8();Lo();hr();fD();T9();SU1();HG8();BG8();O30();IO1();y3();mN1();xD();EX1();O30();BM0();un0();ln0();OG8();Zl();EG8();_p();FN1();Cd();pd();XM0();hG8=C(EK(),1);qa6=new Ta6,Va6=new Set([f3,x3,MN,IN,MO,Uz])});var rG8={};Q6(rG8,{resolveClientDir:()=>ga6,resolveAssetPathWithTraversalCheck:()=>oG8,isPathWithinDirectory:()=>tG8,createAssetHandler:()=>ha6});import{resolve as Y50,dirname as _a6,join as va6,extname as ba6,basename as xa6,sep as nG8}from"path";function fa6($,Z){if($===Z||xa6($)==="index.html")return{"Cache-Control":"no-cache"};if($.includes(`${nG8}assets${nG8}`))return{"Cache-Control":"public, max-age=31536000, immutable"};return{}}function tG8($,Z){let Q=Y50(Z),Y=Y50($);return Y===Q||Y.startsWith(Q+"/")}function oG8({requestPath:$,clientDir:Z}){let Q=$.startsWith("/")?$.slice(1):$,Y=Y50(Z,Q);if(!tG8(Y,Z))return null;return Y}function ga6($,Z="../client"){let Q=new URL($),Y=_a6(Q.pathname);return Y50(Y,Z)}function ha6($={}){let{env:Z="production",clientDir:Q=ya6,isServerPath:Y=()=>!1}=$;if(Z==="development")return async function(J){return null};return async function(J){if(J.method!=="GET")return null;let G=new URL(J.url),W;try{W=decodeURIComponent(G.pathname)}catch{return null}if(Y(W))return null;let K=oG8({requestPath:W,clientDir:Q});if(!K)return null;let H=va6(K,"index.html"),F=Y50(Q,"index.html"),U=J.headers.get("accept"),B=U?.includes("text/html")||U?.includes("*/*")&&["",".html"].includes(ba6(K))?[H,F]:[];for(let O of[K,...B])try{let L=Bun.file(O);if(await L.exists())return new Response(L,{headers:fa6(O,F)})}catch{}if(W.includes("/assets/"))return new Response("Not Found",{status:404,headers:{"Cache-Control":"no-store"}});return null}}var ya6="./dist/client";var sG8=()=>{};var aG8={};Q6(aG8,{tryUpgradePreviewWs:()=>pa6,tryHandlePreviewHttp:()=>ia6,previewWebSocketHandler:()=>na6,parsePreviewBaseDomain:()=>da6,isPreviewWsData:()=>M_0,extractHandleFromHost:()=>fO1});function ca6($){if($.method!=="GET")return!1;return($.headers.get("accept")??"").includes("text/html")}function ma6(){return new Response(la6,{status:503,headers:{"content-type":"text/html; charset=utf-8","cache-control":"no-store","retry-after":"1","access-control-allow-origin":"*"}})}function da6($){if(!$||$.trim()==="")return null;let Z=$.includes("{handle}")?$.replace("{handle}","__handle__"):$,Q;try{Q=new URL(Z)}catch{return null}let Y=Q.hostname;if($.includes("{handle}")){let X=Y.indexOf(".");if(X<=0||X===Y.length-1)return null;return Y.slice(X+1)}return Y}function fO1($,Z){if(!$||!Z)return null;let Q=$.indexOf(":"),Y=(Q>=0?$.slice(0,Q):$).toLowerCase(),J=`.${Z.toLowerCase().replace(/^\.+|\.+$/g,"")}`;if(!Y.endsWith(J))return null;let G=Y.slice(0,Y.length-J.length);if(!G||G.includes("."))return null;return G}async function ia6($,Z){let Q=fO1($.headers.get("host"),Z.baseDomain);if(!Q)return null;let Y=await Z.getRunner();if(!Y)return J50(503,"preview proxy not configured");let X=await Y.proxyPreviewRequest(Q,$);if(X.headers.get(mm)&&ca6($))return ma6();return X.headers.delete(mm),X}function J50($,Z){return new Response(JSON.stringify({error:Z}),{status:$,headers:{"content-type":"application/json","access-control-allow-origin":"*"}})}function M_0($){return typeof $==="object"&&$!==null&&$.kind==="preview"}async function pa6($,Z,Q){if(($.headers.get("upgrade")??"").toLowerCase()!=="websocket")return null;let Y=fO1($.headers.get("host"),Q.baseDomain);if(!Y)return null;let X=await Q.getRunner();if(!X)return J50(503,"preview proxy not configured");let J=await X.resolvePreviewUpstreamUrl(Y);if(!J)return J50(404,"sandbox not found");let G=new URL($.url);if(G.pathname.startsWith("/_sandbox"))return J50(404,"not found");let W=`${J.replace(/^http/,"ws")}${G.pathname}${G.search}`,K=$.headers.get("sec-websocket-protocol"),H=K?K.split(",").map((N)=>N.trim()).filter(Boolean):[],F={kind:"preview",upstreamUrl:W,upstreamProtocols:H,pending:[],upstream:null,closed:!1};if(!Z.upgrade($,{data:F}))return J50(426,"upgrade failed");return}function X50($,Z,Q,Y){if(Z.closed)return;Z.closed=!0;try{$.close(Q,Y)}catch{}try{Z.upstream?.close()}catch{}}var ua6=256,la6='<!DOCTYPE html><html><head><meta charset="utf-8"><title>Connecting\u2026</title><style>body{font-family:system-ui,sans-serif;display:flex;align-items:center;justify-content:center;min-height:100vh;margin:0;background:#fafafa;color:#555}div{text-align:center;max-width:420px;padding:24px}h3{margin:0 0 8px}p{margin:0;font-size:14px;color:#999;line-height:1.5}</style></head><body><div><h3>Connecting to sandbox\u2026</h3><p>Waiting for the sandbox to come online. This page refreshes automatically.</p></div><script>setTimeout(function(){window.location.reload()},1500)</script></body></html>',na6;var eG8=D(()=>{V10();na6={open($){let Z=$.data;if(!M_0(Z))return;let Q;try{Q=Z.upstreamProtocols.length>0?new WebSocket(Z.upstreamUrl,Z.upstreamProtocols):new WebSocket(Z.upstreamUrl)}catch(Y){console.warn(`[preview-ws] failed to dial upstream ${Z.upstreamUrl}: ${Y instanceof Error?Y.message:String(Y)}`),X50($,Z,1011,"upstream connect failed");return}Q.binaryType="arraybuffer",Z.upstream=Q,Q.addEventListener("open",()=>{while(Z.pending.length>0){let Y=Z.pending.shift();if(Y!==void 0)Q.send(Y)}}),Q.addEventListener("message",(Y)=>{if(Z.closed)return;$.send(Y.data)}),Q.addEventListener("close",(Y)=>{X50($,Z,Y.code||1000,Y.reason||"")}),Q.addEventListener("error",()=>{X50($,Z,1011,"upstream error")})},message($,Z){let Q=$.data;if(!M_0(Q))return;let Y=Q.upstream;if(Y&&Y.readyState===WebSocket.OPEN){Y.send(Z);return}if(Q.pending.length>=ua6){X50($,Q,1011,"preview ws backlog overflow");return}Q.pending.push(Z)},close($){let Z=$.data;if(!M_0(Z))return;X50($,Z,1000,"")}}});var Y38={};Q6(Y38,{printBanner:()=>oa6,bannerLines:()=>Q38,BANNER_LINES:()=>$38,BANNER_GRADIENT:()=>Z38});function ta6($){let Z=Number.parseInt($.slice(1),16);return[Z>>16&255,Z>>8&255,Z&255]}function Q38($){let Z=$38.map((Q,Y)=>{let[X,J,G]=ta6(Z38[Y]);return`\x1B[38;2;${X};${J};${G}m${Q}\x1B[39m`});if($!==void 0)Z.push(`\x1B[2m v${$}\x1B[22m`);return Z}function oa6($){console.log("");for(let Z of Q38($))console.log(Z);console.log("")}var $38,Z38;var X38=D(()=>{$38=[" \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588 ","\u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2588\u2588\u2588 "," \u2591\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2588 \u2591 \u2588\u2588\u2588 \u2591\u2591\u2591 \u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588\u2591\u2591\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591\u2588\u2588\u2588"," \u2591\u2588\u2588\u2588 \u2588\u2588\u2588 \u2591\u2588\u2588\u2588 \u2591 \u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588\u2591\u2591\u2588\u2588\u2588 \u2588\u2588\u2588 "," \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588 \u2591\u2591\u2591\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591 ","\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591 \u2591\u2591\u2591\u2591\u2591\u2591\u2591 "],Z38=["#00ff64","#00ee5e","#00dc56","#00c84e","#00b444","#00a03c","#008832","#006e28"]});r$();var oO1="13";function rO1($){return{name:"decocms",systemDatabaseUrl:$.systemDatabaseUrl,systemDatabaseSchemaName:"dbos",systemDatabasePoolSize:$.poolSize,runAdminServer:!1,executorID:$.executorID,applicationVersion:oO1,...$.listenQueues!==void 0?{listenQueues:$.listenQueues}:{}}}r$();import A38 from"pg";var sO1=8314027461559302n,T38=600000,R38=500;async function aO1($,Z){let{databaseUrl:Q,lockTimeoutMs:Y=T38}=$,X=$.log??((K)=>console.log(K)),J=new A38.Client({connectionString:Q});await J.connect();let G=Date.now(),W=!1;try{while(!W){if(W=(await J.query("SELECT pg_try_advisory_lock($1) AS locked",[sO1.toString()])).rows[0]?.locked===!0,W)break;if(Date.now()-G>=Y)throw Error(`Timed out after ${Y}ms waiting for the DBOS migration lock. Another process is still migrating the dbos schema; this pod will restart and retry.`);await L$(R38)}let K=Date.now()-G;if(K>1000)X(`[dbos] waited ${K}ms for the migration lock; another process migrated first`);return await Z()}finally{if(W)try{await J.query("SELECT pg_advisory_unlock($1)",[sO1.toString()])}catch{}await J.end().catch(()=>{})}}$$();y_0();S6();function AW8(){let $=(process.env.BUN_OPTIONS??"").split(/\s+/).filter(Boolean);return[...process.argv.slice(1),...$]}function $v0($,Z){for(let Q=0;Q<$.length;Q++){let Y=$[Q];if(Y===void 0)continue;if(Y===Z)return $[Q+1];if(Y.startsWith(`${Z}=`))return Y.slice(Z.length+1)}return}function xL1(){let $=AW8();if($.includes("--cpu-prof")){console.log(JSON.stringify({msg:"cpu-profiling-active",dir:$v0($,"--cpu-prof-dir")??process.cwd(),name:$v0($,"--cpu-prof-name"),markdown:$.includes("--cpu-prof-md"),intervalUs:Number($v0($,"--cpu-prof-interval")??1000),note:"profile is written on process exit"}));return}if(process.env.CPU_PROFILE)console.warn(JSON.stringify({msg:"cpu-profiling-requested-but-inactive",hint:'CPU profiling is a Bun launch flag. Set BUN_OPTIONS="--cpu-prof --cpu-prof-md --cpu-prof-dir=/tmp" before starting the process.'}))}Yv0();var P50;function dL1(){if(process.env.HEAP_WATCH!=="1")return()=>{};let $=Number(process.env.HEAP_WATCH_INTERVAL_MS??60000),Z=async()=>{let Q=Dz();if(!Q)return;let Y={};try{let{heapStats:X}=await import("bun:jsc"),J=X(),G=Object.entries(J.objectTypeCounts).sort((W,K)=>K[1]-W[1]).slice(0,20);Y={objectCount:J.objectCount,heapSize:J.heapSize,top:Object.fromEntries(G)}}catch{}console.log(JSON.stringify({msg:"heap-watch",ts:new Date().toISOString(),uptimeS:Math.round(process.uptime()),rss:Q.rss,heapUsed:Q.heapUsed,heapTotal:Q.heapTotal,external:Q.external,arrayBuffers:Q.arrayBuffers,...Y}))};return Z().catch(()=>{}),P50=setInterval(()=>void Z().catch(()=>{}),$),P50.unref?.(),process.on("SIGUSR2",()=>{try{let Q=Bun.generateHeapSnapshot("v8"),Y=typeof Q==="string"?Q:JSON.stringify(Q),X=`/tmp/heap-${process.pid}-${Date.now()}.heapsnapshot`;Bun.write(X,Y),console.log(JSON.stringify({msg:"heap-snapshot-written",path:X}))}catch(Q){console.error("[heap-watch] snapshot failed:",Q)}}),()=>{if(P50)clearInterval(P50)}}import*as qW8 from"bun:jsc";var{startSamplingProfiler:MW8,samplingProfilerStackTraces:IW8}=qW8;function iL1(){if(process.env.STALL_WATCHDOG!=="1")return()=>{};let $=Number(process.env.STALL_WATCHDOG_MS??100),Z=Number(process.env.STALL_WATCHDOG_TICK_MS??50);try{MW8()}catch(J){return console.error("[stall-watchdog] failed to start sampling profiler:",J),()=>{}}let Q,Y=performance.now()+Z,X=()=>{let J=performance.now(),G=J-Y;Y=J+Z;let W=[];try{W=IW8()?.traces??[]}catch{}if(G>$&&W.length>0){let K=new Map;for(let F of W){let U=F.frames.find((O)=>O.sourceURL&&!/Unknown Executable/.test(O.category??""))??F.frames[0];if(!U)continue;let N=(U.sourceURL??"?").replace(/^.*\/node_modules\//,"node_modules/"),B=`${U.name??"?"} @ ${N}:${U.line??"?"}`;K.set(B,(K.get(B)??0)+1)}let H=[...K.entries()].sort((F,U)=>U[1]-F[1]).slice(0,8).map(([F,U])=>({frame:F,count:U}));console.warn(JSON.stringify({msg:"stall-stack",ts:new Date().toISOString(),lagMs:Math.round(G),samplesInWindow:W.length,top:H}))}Q=setTimeout(X,Z),Q.unref?.()};return Q=setTimeout(X,Z),Q.unref?.(),()=>{if(Q)clearTimeout(Q)}}function pL1(){xL1();let $=[dL1(),mL1(),iL1()];return()=>{for(let Z of $)Z()}}import{existsSync as Ye6}from"fs";var FG=j0();_L1();var{DBOS:G50,DBOSClient:ra6}=await import("@dbos-inc/dbos-sdk");function cO1($,Z){if(!Z)return $;let Q=new URL($);if(!Q.searchParams.has("sslmode"))Q.searchParams.set("sslmode","verify-full");return Q.toString()}var sa6=[f3,x3,MN,IN,MO,Uz],aa6=FG.dispatchRole==="worker"?sa6:FG.dispatchRole==="api"?[]:void 0;G50.setConfig(rO1({systemDatabaseUrl:cO1(FG.databaseUrl,FG.databasePgSsl),poolSize:FG.dbosPoolSize,executorID:FG.podName,listenQueues:aa6}));var{createApp:ea6}=await Promise.resolve().then(() => (pG8(),iG8)),{isServerPath:$e6}=await Promise.resolve().then(() => (j50(),OL1)),{createAssetHandler:Ze6,resolveClientDir:H38}=await Promise.resolve().then(() => (sG8(),rG8)),Qe6=FG.port,J38=H38(import.meta.url,"../client"),F38=Ye6(J38)?J38:H38(import.meta.url,"../dist/client"),Xe6=Ze6({clientDir:F38,isServerPath:$e6}),Je6={"X-Frame-Options":"DENY","Content-Security-Policy":"frame-ancestors 'none'"};function Ge6($){let Z=new Headers($.headers);for(let[Q,Y]of Object.entries(Je6))Z.set(Q,Y);return new Response($.body,{status:$.status,statusText:$.statusText,headers:Z})}var{parsePreviewBaseDomain:We6,tryHandlePreviewHttp:Ke6,tryUpgradePreviewWs:He6,previewWebSocketHandler:yO1,isPreviewWsData:gO1}=await Promise.resolve().then(() => (eG8(),aG8)),{getOrInitSharedRunner:U38}=await Promise.resolve().then(() => (uW(),cR$)),N38=We6(process.env.STUDIO_SANDBOX_PREVIEW_URL_PATTERN),G38={baseDomain:N38??"",getRunner:U38};if(process.env.STUDIO_SANDBOX_TENANT_POOLS?.trim())U38().catch(($)=>{console.warn("[lifecycle] eager sandbox provider init for tenant pools failed:",$ instanceof Error?$.message:String($))});var I_0=await ea6({clientDir:F38}),hO1=process.env.DBOS_CONDUCTOR_KEY?.trim(),W38=process.env.DBOS_CONDUCTOR_URL?.trim();await aO1({databaseUrl:cO1(FG.databaseUrl,FG.databasePgSsl)},()=>G50.launch({...hO1?{conductorKey:hO1}:{},...hO1&&W38?{conductorURL:W38}:{}}));console.log(`[dbos] application version: ${G50.applicationVersion}`);var uO1=5,lO1=0;await E8(async()=>{lO1++;try{return await I_0.initDbos()}catch($){let Z=lO1>=uO1?"giving up":"retrying";throw console.warn(`[dbos] initDbos attempt ${lO1}/${uO1} failed, ${Z}`,$),$}},{maxAttempts:uO1,minTimeout:1000,maxTimeout:1e4,jitter:0.5});if(!FG.isCli){let{bannerLines:$}=await Promise.resolve().then(() => (X38(),Y38));console.log("");for(let Z of $())console.log(Z)}var Fe6=Bun.serve({idleTimeout:0,port:Qe6,hostname:"0.0.0.0",fetch:async($,Z)=>{if(N38){let Y=await He6($,Z,G38);if(Y===void 0)return;if(Y)return Y;let X=await Ke6($,G38);if(X)return X}let Q=await Xe6($);if(Q)return Ge6(Q);return I_0.fetch($,{server:Z})},websocket:{open($){if(gO1($.data))yO1.open($)},message($,Z){if(gO1($.data))yO1.message($,Z)},close($){if(gO1($.data))yO1.close($)}},development:!1}),Ue6=pL1();if(FG.localMode)Promise.resolve().then(() => (cf(),iq0)).then(async({seedLocalMode:$,markSeedComplete:Z,healLocalJwks:Q})=>{try{let Y=await Q();if(Y>0)console.log(`[local-mode] cleared ${Y} undecryptable JWKS key(s); Better Auth will generate a fresh one`);let X=await $()}catch(Y){console.error("Failed to seed local mode:",Y)}finally{Z()}}).catch(async($)=>{console.error("Failed to load local-mode module:",$);try{let{markSeedComplete:Z}=await Promise.resolve().then(() => (cf(),iq0));Z()}catch{}});var K38=!1;async function Ne6($){let Z;try{Z=await ra6.create({systemDatabaseUrl:cO1(FG.databaseUrl,FG.databasePgSsl),systemDatabaseSchemaName:"dbos"});let Q=await Z.listWorkflows({status:"PENDING",queueName:x3,executorId:$,loadInput:!1,loadOutput:!1});if(Q.length===0){console.log(`[shutdown] no in-flight thread-gate gates to hand off (executor ${$})`);return}let Y=Q.map((X)=>X.workflowID);await Z.resumeWorkflows(Y,{queueName:x3}),console.log(`[shutdown] re-enqueued ${Y.length} in-flight thread-gate gate(s) for re-adoption by a live executor (from ${$}):`,Y)}catch(Q){console.error("[shutdown] thread-gate handoff failed:",Q)}finally{await Z?.destroy().catch(()=>{})}}async function V_0($){if(K38)return;K38=!0,console.log(`
|
|
3725
3725
|
[shutdown] Received ${$}, shutting down gracefully...`);let Z=Number(process.env.SHUTDOWN_GRACE_SECONDS??60)*1000,Q=Math.max(Z-5000,1e4),Y=setTimeout(()=>{console.error(`[shutdown] Timed out after ${Q}ms, forcing exit.`),process.exit(1)},Q);Y.unref?.();let X=0;try{Ue6(),I_0.markShuttingDown();let J=$L1(FG.dispatchRole,Q,process.env.SHUTDOWN_DRAIN_MS);await L$(J),await Fe6.stop(!0);let G=G50.executorID;await G50.shutdown(),await Ne6(G),await I_0.shutdown()}catch(J){console.error("[shutdown] Error during shutdown:",J),X=1}clearTimeout(Y),process.exit(X)}process.on("SIGTERM",()=>V_0("SIGTERM"));process.on("SIGINT",()=>V_0("SIGINT"));process.on("SIGHUP",()=>V_0("SIGHUP"));process.on("unhandledRejection",($)=>{console.error("[process] Unhandled rejection:",$)});process.on("uncaughtException",($)=>{console.error("[process] Uncaught exception:",$),V_0("uncaughtException")});
|
package/package.json
CHANGED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as s,M as u}from"./index-BiuSAlzd.js";import{C as f}from"./index-BxwNVsQv.js";import{a as x}from"./thread-route-SwwHxRrN.js";import{u as g}from"./use-task-metadata-8O-Ga8Wr.js";import{AppViewContent as h}from"./project-app-view-B13_tHdE.js";import"./use-mobile-D06E6E9A.js";import"./thread-button-BS5hFLVf.js";import"./agent-icon-DEoEcQYL.js";import"./AlertCircle-DDHQi3fm.js";import"./Tool01-BchdJG2X.js";import"./ArrowUp-CtvQk6Vg.js";import"./ArrowLeft-CIsJnvjF.js";import"./LinkBroken01-ChSpe7Cq.js";import"./ShoppingBag01-DktiI11o.js";import"./ZoomOut-BlDSjKri.js";import"./Building02-BVSXudo-.js";import"./CheckCircle-BemNEpVg.js";import"./Check-Cf-cMW3t.js";import"./ChevronUp-B79uJeZN.js";import"./UserSquare-DZJwwd71.js";import"./Copy01-DluK-JtU.js";import"./CreditCard01-BzBUMTax.js";import"./DotsVertical-COzw8ydu.js";import"./Image01-DnRAAkhy.js";import"./Palette-CaKXG6S_.js";import"./XClose-BqRoe3QG.js";import"./Key01-DXvy1NNO.js";import"./Link01-iwXPIeVc.js";import"./LinkExternal01-BVDnNs6j.js";import"./Monitor01-BLZH5esy.js";import"./Sun-BWosC3Su.js";import"./Plus-DjsQQqpw.js";import"./SearchMd-oXON6Mge.js";import"./Trash01-BfnCKCGB.js";import"./Upload01-CNtxqXvb.js";import"./User01-DXNh3TnB.js";import"./Users01-DAfCqIN7.js";import"./X-C52mq3mn.js";import"./use-chat-layout-state-CcLE4xPO.js";import"./use-file-configs-BCUJhrSS.js";import"./use-organization-settings-0Ql08vCb.js";import"./schema-CepQKFSq.js";import"./task-board-Cg5OuTdd.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-DvFfVppm.js";import"./use-project-scope-DJC0Rmd2.js";import"./repository-binding-CQsr_3Zk.js";import"./use-mcp-client-5sJCC1_2.js";import"./auth-DDdLUET9.js";import"./thread-intent-ags1XWir.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CuQcjl8J.js";import"./tooltip-rVl8jzih.js";import"./index-BGzd8qMa.js";import"./toolbar-icon-button-MH5hFCTi.js";import"./shell-layout-DgCL-aOA.js";import"./avatar-BeFEVdWT.js";import"./download-app-dialog-D3HwAGf1.js";import"./dialog-C9YQM7Rb.js";import"./use-clock-tick-WbPH8S5J.js";import"./command-B-LkMxT6.js";import"./index-cj3FPIlo.js";import"./integration-icon-BcFb9WXn.js";import"./project-icon-C1TVO88N.js";import"./new-project-dialog-Dj5TFcCk.js";import"./input-B5d33h6X.js";import"./label-BmSaj4OS.js";import"./repository-import-picker-D6vKdpbU.js";import"./use-navigate-to-agent-2D1RSJEE.js";import"./repository-picker-DnfKLU2E.js";import"./useInfiniteQuery-BAMBgsXo.js";import"./infiniteQueryObserver-B7-m24Hr.js";import"./collection-search-CKxipBbw.js";import"./use-debounced-value-PqnB6cMC.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-5x9XYN7k.js";import"./autosend-CeDtnxlk.js";import"./use-org-sso-C8LeExfy.js";import"./resizable-00FuDjCF.js";import"./icon-button-Cag62vyF.js";import"./gateway-client-DE4QITdV.js";import"./tool-namespace-DmnQIdtF.js";import"./use-mcp-tools-cj_8qKci.js";import"./sandbox-lifecycle-context-_l6ILxBR.js";import"./use-session-runtime-Cosw4CCW.js";import"./chat-context-DHGUafJ4.js";import"./use-decopilot-events-B_Wj2FDs.js";import"./use-ai-providers-BBj3hH0A.js";import"./location-DPIrGNp7.js";import"./sandbox-url-D3mC8qhT.js";import"./sandbox-start-errors-BK_aDCyt.js";import"./content-blocks-o63cs2vh.js";import"./mcp-app-renderer-4bTrB0jF.js";import"./types-B77htmoi.js";import"./task-route-CcdO9T8s.js";import"./site-url-en5df9c-.js";import"./use-connect-companion-ooa0I2Ht.js";import"./companions-core-DzyeM-yJ.js";import"./metadata-D72DunRR.js";import"./github-repo-scope-ByTYKy_L.js";import"./form-CYA-1Wz9.js";import"./provision-repo-scoped-github-connection-lckxpDHD.js";import"./useQueries-Cdt1TSyJ.js";import"./authenticate-and-persist-oauth-Bb2l090x.js";import"./mcp-oauth-C-EEuNZg.js";import"./track-D9Kj7slb.js";import"./extract-connection-data-0OXYM8zm.js";import"./connection-Da57b2wi.js";const $=u("/shell/$org/org-shell/agent-shell/projects/$agentId/apps/$connectionId/$toolName");function j(){const t=c.c(9),{connectionId:o,toolName:r}=$.useParams(),l=x(),i=g(l);let p;t[0]!==o||t[1]!==i?.expanded_tools||t[2]!==r?(p=i?.expanded_tools?.find(a=>a.appId===o&&a.toolName===r),t[0]=o,t[1]=i?.expanded_tools,t[2]=r,t[3]=p):p=t[3];const d=p,e=`${o}:${r}`,n=d?.args;let m;return t[4]!==o||t[5]!==e||t[6]!==n||t[7]!==r?(m=s.jsx(h,{connectionId:o,toolName:r,args:n},e),t[4]=o,t[5]=e,t[6]=n,t[7]=r,t[8]=m):m=t[8],m}function Co(){const t=c.c(1);let o;return t[0]===Symbol.for("react.memo_cache_sentinel")?(o=s.jsx(f.Content,{children:s.jsx(j,{})}),t[0]=o):o=t[0],o}export{Co as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c,j as e,aS as b,u as g}from"./index-BiuSAlzd.js";import{C as j}from"./index-BxwNVsQv.js";import{F as v,H as S}from"./file-share-button-d423tG-P.js";import{u as k,b as y,e as _}from"./use-org-fs-BI2aRf-g.js";import{S as w}from"./settings-tab-pWdRgoZd.js";import{b as M}from"./thread-route-SwwHxRrN.js";import"./use-mobile-D06E6E9A.js";import"./thread-button-BS5hFLVf.js";import"./agent-icon-DEoEcQYL.js";import"./AlertCircle-DDHQi3fm.js";import"./Tool01-BchdJG2X.js";import"./ArrowUp-CtvQk6Vg.js";import"./ArrowLeft-CIsJnvjF.js";import"./LinkBroken01-ChSpe7Cq.js";import"./ShoppingBag01-DktiI11o.js";import"./ZoomOut-BlDSjKri.js";import"./Building02-BVSXudo-.js";import"./CheckCircle-BemNEpVg.js";import"./Check-Cf-cMW3t.js";import"./ChevronUp-B79uJeZN.js";import"./UserSquare-DZJwwd71.js";import"./Copy01-DluK-JtU.js";import"./CreditCard01-BzBUMTax.js";import"./DotsVertical-COzw8ydu.js";import"./Image01-DnRAAkhy.js";import"./Palette-CaKXG6S_.js";import"./XClose-BqRoe3QG.js";import"./Key01-DXvy1NNO.js";import"./Link01-iwXPIeVc.js";import"./LinkExternal01-BVDnNs6j.js";import"./Monitor01-BLZH5esy.js";import"./Sun-BWosC3Su.js";import"./Plus-DjsQQqpw.js";import"./SearchMd-oXON6Mge.js";import"./Trash01-BfnCKCGB.js";import"./Upload01-CNtxqXvb.js";import"./User01-DXNh3TnB.js";import"./Users01-DAfCqIN7.js";import"./X-C52mq3mn.js";import"./use-chat-layout-state-CcLE4xPO.js";import"./use-file-configs-BCUJhrSS.js";import"./use-organization-settings-0Ql08vCb.js";import"./schema-CepQKFSq.js";import"./task-board-Cg5OuTdd.js";import"./site-slug-DebpOoQq.js";import"./use-panel-navigate-DvFfVppm.js";import"./use-project-scope-DJC0Rmd2.js";import"./repository-binding-CQsr_3Zk.js";import"./use-mcp-client-5sJCC1_2.js";import"./auth-DDdLUET9.js";import"./thread-intent-ags1XWir.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CuQcjl8J.js";import"./tooltip-rVl8jzih.js";import"./index-BGzd8qMa.js";import"./toolbar-icon-button-MH5hFCTi.js";import"./shell-layout-DgCL-aOA.js";import"./avatar-BeFEVdWT.js";import"./download-app-dialog-D3HwAGf1.js";import"./dialog-C9YQM7Rb.js";import"./use-clock-tick-WbPH8S5J.js";import"./command-B-LkMxT6.js";import"./index-cj3FPIlo.js";import"./integration-icon-BcFb9WXn.js";import"./project-icon-C1TVO88N.js";import"./new-project-dialog-Dj5TFcCk.js";import"./input-B5d33h6X.js";import"./label-BmSaj4OS.js";import"./repository-import-picker-D6vKdpbU.js";import"./use-navigate-to-agent-2D1RSJEE.js";import"./repository-picker-DnfKLU2E.js";import"./useInfiniteQuery-BAMBgsXo.js";import"./infiniteQueryObserver-B7-m24Hr.js";import"./collection-search-CKxipBbw.js";import"./use-debounced-value-PqnB6cMC.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-5x9XYN7k.js";import"./autosend-CeDtnxlk.js";import"./use-org-sso-C8LeExfy.js";import"./resizable-00FuDjCF.js";import"./icon-button-Cag62vyF.js";import"./popover-DwQhmYZx.js";import"./extract-connection-data-0OXYM8zm.js";import"./metadata-D72DunRR.js";import"./connection-Da57b2wi.js";import"./chat-context-DHGUafJ4.js";import"./use-decopilot-events-B_Wj2FDs.js";import"./use-ai-providers-BBj3hH0A.js";import"./location-DPIrGNp7.js";import"./build-improve-prompt-doc-DG46Mbz-.js";import"./empty-state-Jq3vDmCi.js";import"./use-date-fns-locale-D1z6vY0T.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BJVimXqv.js";import"./mcp-oauth-C-EEuNZg.js";import"./alert-dialog-D9wz_Poi.js";import"./textarea-IAy-ownU.js";import"./use-debounced-autosave-DM7h6lLt.js";import"./add-connection-dialog-Bll7Vib1.js";import"./connection-card-UvAhqwBj.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BbtvDSmI.js";import"./form-CYA-1Wz9.js";import"./select-QknS4jya.js";import"./connection-form-helpers-DyaTkO-i.js";import"./authenticate-and-persist-oauth-Bb2l090x.js";import"./collection-tabs-z-VIWVMA.js";import"./badge-Dw0XHZAq.js";import"./use-infinite-scroll-DOZLICG8.js";import"./useSuspenseInfiniteQuery-B_8hQc1u.js";import"./file-type-icon-Zo3jfkM-.js";import"./checkbox-D-g_vU3W.js";import"./search-input-DroJjkYC.js";import"./use-mcp-auth-status-D_jLHFPt.js";import"./types-B77htmoi.js";import"./use-mcp-tools-cj_8qKci.js";import"./use-mcp-prompts-5OccjpiV.js";import"./utils-CVEq3hMx.js";import"./switch-WI6sluFx.js";import"./scroll-area-BNMPUKzn.js";import"./optimistic-project-sidebar-views-Bl6nsH4A.js";import"./virtual-mcp-DUyYKScq.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CIV9Pyxx.js";import"./use-secrets-DGDpC9hp.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";const x="home";function P(i){const t=c.c(5),{label:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p=e.jsx(b,{className:"aspect-video w-2/3 max-w-xl"}),t[0]=p):p=t[0];let o;t[1]!==r?(o=r&&e.jsx("p",{className:"text-xs text-muted-foreground",children:r}),t[1]=r,t[2]=o):o=t[2];let m;return t[3]!==o?(m=e.jsxs("div",{className:"flex h-full w-full flex-col items-center justify-center gap-3 bg-background",children:[p,o]}),t[3]=o,t[4]=m):m=t[4],m}function D(i){const t=c.c(15),{path:r}=i;let p;t[0]===Symbol.for("react.memo_cache_sentinel")?(p={refetchIntervalWhenAbsent:2e3},t[0]=p):p=t[0];const o=k(x,r,p),m=y(x)(r);if(o.isPending||!o.data){const h=!o.isPending&&!o.data?"Waiting for the deck to sync…":void 0;let l;return t[1]!==h?(l=e.jsx(P,{label:h}),t[1]=h,t[2]=l):l=t[2],l}let s;t[3]!==o.data?(s=_(o.data),t[3]=o.data,t[4]=s):s=t[4];const f=o.data.shareMode??"private",u=o.data.effectivePublic??!1,d=window.location.origin+m;let a;t[5]!==r||t[6]!==f||t[7]!==u||t[8]!==d?(a=e.jsx(v,{volume:x,path:r,shareMode:f,effectivePublic:u,url:d}),t[5]=r,t[6]=f,t[7]=u,t[8]=d,t[9]=a):a=t[9];let n;return t[10]!==r||t[11]!==m||t[12]!==s||t[13]!==a?(n=e.jsx(S,{readUrl:m,marker:s,title:r,savePath:r,trailing:a}),t[10]=r,t[11]=m,t[12]=s,t[13]=a,t[14]=n):n=t[14],n}function C(){const i=c.c(4);let t;i[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},i[0]=t):t=i[0];const r=g(t),p=M(),o="path"in r&&typeof r.path=="string"?r.path:void 0;let m;return i[1]!==o||i[2]!==p?(m=o?e.jsx(D,{path:o},o):e.jsx(w,{virtualMcpId:p}),i[1]=o,i[2]=p,i[3]=m):m=i[3],m}function Xo(){const i=c.c(1);let t;return i[0]===Symbol.for("react.memo_cache_sentinel")?(t=e.jsx(j.Content,{children:e.jsx(C,{})}),i[0]=t):t=i[0],t}export{Xo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as s,j as e}from"./index-BiuSAlzd.js";import{C as a}from"./index-BxwNVsQv.js";import{p as n,L as c}from"./library-tab-rskkU2DA.js";import{u as l}from"./use-project-scope-DJC0Rmd2.js";import"./use-mobile-D06E6E9A.js";import"./thread-button-BS5hFLVf.js";import"./agent-icon-DEoEcQYL.js";import"./AlertCircle-DDHQi3fm.js";import"./Tool01-BchdJG2X.js";import"./ArrowUp-CtvQk6Vg.js";import"./ArrowLeft-CIsJnvjF.js";import"./LinkBroken01-ChSpe7Cq.js";import"./ShoppingBag01-DktiI11o.js";import"./ZoomOut-BlDSjKri.js";import"./Building02-BVSXudo-.js";import"./CheckCircle-BemNEpVg.js";import"./Check-Cf-cMW3t.js";import"./ChevronUp-B79uJeZN.js";import"./UserSquare-DZJwwd71.js";import"./Copy01-DluK-JtU.js";import"./CreditCard01-BzBUMTax.js";import"./DotsVertical-COzw8ydu.js";import"./Image01-DnRAAkhy.js";import"./Palette-CaKXG6S_.js";import"./XClose-BqRoe3QG.js";import"./Key01-DXvy1NNO.js";import"./Link01-iwXPIeVc.js";import"./LinkExternal01-BVDnNs6j.js";import"./Monitor01-BLZH5esy.js";import"./Sun-BWosC3Su.js";import"./Plus-DjsQQqpw.js";import"./SearchMd-oXON6Mge.js";import"./Trash01-BfnCKCGB.js";import"./Upload01-CNtxqXvb.js";import"./User01-DXNh3TnB.js";import"./Users01-DAfCqIN7.js";import"./X-C52mq3mn.js";import"./use-chat-layout-state-CcLE4xPO.js";import"./use-file-configs-BCUJhrSS.js";import"./use-organization-settings-0Ql08vCb.js";import"./schema-CepQKFSq.js";import"./task-board-Cg5OuTdd.js";import"./site-slug-DebpOoQq.js";import"./thread-route-SwwHxRrN.js";import"./use-panel-navigate-DvFfVppm.js";import"./thread-intent-ags1XWir.js";import"./use-mcp-client-5sJCC1_2.js";import"./auth-DDdLUET9.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./sheet-CuQcjl8J.js";import"./tooltip-rVl8jzih.js";import"./index-BGzd8qMa.js";import"./toolbar-icon-button-MH5hFCTi.js";import"./shell-layout-DgCL-aOA.js";import"./avatar-BeFEVdWT.js";import"./download-app-dialog-D3HwAGf1.js";import"./dialog-C9YQM7Rb.js";import"./use-clock-tick-WbPH8S5J.js";import"./command-B-LkMxT6.js";import"./index-cj3FPIlo.js";import"./integration-icon-BcFb9WXn.js";import"./project-icon-C1TVO88N.js";import"./new-project-dialog-Dj5TFcCk.js";import"./input-B5d33h6X.js";import"./label-BmSaj4OS.js";import"./repository-import-picker-D6vKdpbU.js";import"./use-navigate-to-agent-2D1RSJEE.js";import"./repository-binding-CQsr_3Zk.js";import"./repository-picker-DnfKLU2E.js";import"./useInfiniteQuery-BAMBgsXo.js";import"./infiniteQueryObserver-B7-m24Hr.js";import"./collection-search-CKxipBbw.js";import"./use-debounced-value-PqnB6cMC.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-5x9XYN7k.js";import"./autosend-CeDtnxlk.js";import"./use-org-sso-C8LeExfy.js";import"./resizable-00FuDjCF.js";import"./icon-button-Cag62vyF.js";import"./search-toggle-Vpxqce5X.js";import"./alert-dialog-D9wz_Poi.js";import"./location-DPIrGNp7.js";import"./use-org-fs-BI2aRf-g.js";import"./use-org-repo-syncs-DhxRO-sX.js";import"./textarea-IAy-ownU.js";import"./markdown-D5RcIxaz.js";import"./org-file-open-context-CTyFwctz.js";import"./file-share-button-d423tG-P.js";import"./popover-DwQhmYZx.js";import"./preview-dialog-B6-Ghng-.js";import"./preview-content-YklxPrDD.js";import"./file-preview-DG7_swxk.js";import"./utils-BiBoFq--.js";import"./editor-DiFPb_7W.js";import"./file-type-icon-Zo3jfkM-.js";import"./folder-icon-DrGtPSK9.js";import"./skill-md-ChfVs4uF.js";import"./format-time-CjIPQhCN.js";import"./differenceInSeconds-C3x8sHUj.js";import"./table-DahiKrUr.js";function mo(){const t=s.c(6),{project:o}=l(),p=o?.id??"pending";let r;t[0]!==o?(r=o?n(o):void 0,t[0]=o,t[1]=r):r=t[1];const m=o?.title??void 0;let i;return t[2]!==p||t[3]!==r||t[4]!==m?(i=e.jsx(a.Content,{children:e.jsx(c,{root:r,rootLabel:m},p)}),t[2]=p,t[3]=r,t[4]=m,t[5]=i):i=t[5],i}export{mo as default};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
import{c as a,j as s,u as n}from"./index-BiuSAlzd.js";import{C as l}from"./index-BxwNVsQv.js";import{L as c}from"./preview-content-YklxPrDD.js";import{a as f}from"./use-panel-navigate-DvFfVppm.js";import{S as u}from"./settings-tab-pWdRgoZd.js";import{b as h}from"./thread-route-SwwHxRrN.js";import"./use-mobile-D06E6E9A.js";import"./thread-button-BS5hFLVf.js";import"./agent-icon-DEoEcQYL.js";import"./AlertCircle-DDHQi3fm.js";import"./Tool01-BchdJG2X.js";import"./ArrowUp-CtvQk6Vg.js";import"./ArrowLeft-CIsJnvjF.js";import"./LinkBroken01-ChSpe7Cq.js";import"./ShoppingBag01-DktiI11o.js";import"./ZoomOut-BlDSjKri.js";import"./Building02-BVSXudo-.js";import"./CheckCircle-BemNEpVg.js";import"./Check-Cf-cMW3t.js";import"./ChevronUp-B79uJeZN.js";import"./UserSquare-DZJwwd71.js";import"./Copy01-DluK-JtU.js";import"./CreditCard01-BzBUMTax.js";import"./DotsVertical-COzw8ydu.js";import"./Image01-DnRAAkhy.js";import"./Palette-CaKXG6S_.js";import"./XClose-BqRoe3QG.js";import"./Key01-DXvy1NNO.js";import"./Link01-iwXPIeVc.js";import"./LinkExternal01-BVDnNs6j.js";import"./Monitor01-BLZH5esy.js";import"./Sun-BWosC3Su.js";import"./Plus-DjsQQqpw.js";import"./SearchMd-oXON6Mge.js";import"./Trash01-BfnCKCGB.js";import"./Upload01-CNtxqXvb.js";import"./User01-DXNh3TnB.js";import"./Users01-DAfCqIN7.js";import"./X-C52mq3mn.js";import"./use-chat-layout-state-CcLE4xPO.js";import"./use-file-configs-BCUJhrSS.js";import"./use-organization-settings-0Ql08vCb.js";import"./schema-CepQKFSq.js";import"./task-board-Cg5OuTdd.js";import"./site-slug-DebpOoQq.js";import"./thread-intent-ags1XWir.js";import"./use-mcp-client-5sJCC1_2.js";import"./auth-DDdLUET9.js";import"./backoff-8mStPHYB.js";import"./slugify-CEUa2lfQ.js";import"./use-project-scope-DJC0Rmd2.js";import"./repository-binding-CQsr_3Zk.js";import"./sheet-CuQcjl8J.js";import"./tooltip-rVl8jzih.js";import"./index-BGzd8qMa.js";import"./toolbar-icon-button-MH5hFCTi.js";import"./shell-layout-DgCL-aOA.js";import"./avatar-BeFEVdWT.js";import"./download-app-dialog-D3HwAGf1.js";import"./dialog-C9YQM7Rb.js";import"./use-clock-tick-WbPH8S5J.js";import"./command-B-LkMxT6.js";import"./index-cj3FPIlo.js";import"./integration-icon-BcFb9WXn.js";import"./project-icon-C1TVO88N.js";import"./new-project-dialog-Dj5TFcCk.js";import"./input-B5d33h6X.js";import"./label-BmSaj4OS.js";import"./repository-import-picker-D6vKdpbU.js";import"./use-navigate-to-agent-2D1RSJEE.js";import"./repository-picker-DnfKLU2E.js";import"./useInfiniteQuery-BAMBgsXo.js";import"./infiniteQueryObserver-B7-m24Hr.js";import"./collection-search-CKxipBbw.js";import"./use-debounced-value-PqnB6cMC.js";import"./use-is-desktop-app-BNujXJc_.js";import"./required-auth-layout-5x9XYN7k.js";import"./autosend-CeDtnxlk.js";import"./use-org-sso-C8LeExfy.js";import"./resizable-00FuDjCF.js";import"./icon-button-Cag62vyF.js";import"./file-preview-DG7_swxk.js";import"./use-org-fs-BI2aRf-g.js";import"./utils-BiBoFq--.js";import"./editor-DiFPb_7W.js";import"./file-type-icon-Zo3jfkM-.js";import"./markdown-D5RcIxaz.js";import"./location-DPIrGNp7.js";import"./org-file-open-context-CTyFwctz.js";import"./file-share-button-d423tG-P.js";import"./popover-DwQhmYZx.js";import"./extract-connection-data-0OXYM8zm.js";import"./metadata-D72DunRR.js";import"./connection-Da57b2wi.js";import"./chat-context-DHGUafJ4.js";import"./use-decopilot-events-B_Wj2FDs.js";import"./use-ai-providers-BBj3hH0A.js";import"./build-improve-prompt-doc-DG46Mbz-.js";import"./empty-state-Jq3vDmCi.js";import"./use-date-fns-locale-D1z6vY0T.js";import"./differenceInSeconds-C3x8sHUj.js";import"./use-connection-BJVimXqv.js";import"./mcp-oauth-C-EEuNZg.js";import"./alert-dialog-D9wz_Poi.js";import"./textarea-IAy-ownU.js";import"./use-debounced-autosave-DM7h6lLt.js";import"./add-connection-dialog-Bll7Vib1.js";import"./connection-card-UvAhqwBj.js";import"./connection-slug-CITJ0kGN.js";import"./drawer-BbtvDSmI.js";import"./form-CYA-1Wz9.js";import"./select-QknS4jya.js";import"./connection-form-helpers-DyaTkO-i.js";import"./authenticate-and-persist-oauth-Bb2l090x.js";import"./collection-tabs-z-VIWVMA.js";import"./badge-Dw0XHZAq.js";import"./use-infinite-scroll-DOZLICG8.js";import"./useSuspenseInfiniteQuery-B_8hQc1u.js";import"./checkbox-D-g_vU3W.js";import"./search-input-DroJjkYC.js";import"./use-mcp-auth-status-D_jLHFPt.js";import"./types-B77htmoi.js";import"./use-mcp-tools-cj_8qKci.js";import"./use-mcp-prompts-5OccjpiV.js";import"./utils-CVEq3hMx.js";import"./switch-WI6sluFx.js";import"./scroll-area-BNMPUKzn.js";import"./optimistic-project-sidebar-views-Bl6nsH4A.js";import"./virtual-mcp-DUyYKScq.js";import"./sandbox-url-D3mC8qhT.js";import"./secret-picker-CIV9Pyxx.js";import"./use-secrets-DGDpC9hp.js";import"./omit-sandbox-map-jj4lCB2U.js";import"./serial-task-queue-CGOeQgpr.js";function b(r){const t=a.c(4),{previewPath:m,onClose:p,showSeeInLibrary:o}=r,i=o===void 0?!1:o;let e;return t[0]!==p||t[1]!==m||t[2]!==i?(e=s.jsx("div",{className:"flex h-full w-full flex-col bg-background",children:s.jsx(c,{previewPath:m,onClose:p,showSeeInLibrary:i,variant:"panel"})}),t[0]=p,t[1]=m,t[2]=i,t[3]=e):e=t[3],e}function x(r){const t=a.c(5),{path:m}=r,{closePanel:p}=f();let o;t[0]!==p?(o=()=>p(),t[0]=p,t[1]=o):o=t[1];const i=o;let e;return t[2]!==i||t[3]!==m?(e=s.jsx(b,{previewPath:m,onClose:i,showSeeInLibrary:!0}),t[2]=i,t[3]=m,t[4]=e):e=t[4],e}function y(){const r=a.c(4);let t;r[0]===Symbol.for("react.memo_cache_sentinel")?(t={strict:!1},r[0]=t):t=r[0];const m=n(t),p=h(),o="path"in m&&typeof m.path=="string"?m.path:void 0;let i;return r[1]!==o||r[2]!==p?(i=o?s.jsx(x,{path:o},o):s.jsx(u,{virtualMcpId:p}),r[1]=o,r[2]=p,r[3]=i):i=r[3],i}function Hr(){const r=a.c(1);let t;return r[0]===Symbol.for("react.memo_cache_sentinel")?(t=s.jsx(l.Content,{children:s.jsx(y,{})}),r[0]=t):t=r[0],t}export{Hr as default};
|